Exemple #1
0
    async def test_status_with_fast_direct_ack(self):
        """Test STATUS REQUEST with fast direct ack response."""
        response_called = False

        def handle_status_response(db_version, status):
            """Handle the ON command response."""
            nonlocal response_called
            response_called = True

        set_log_levels(logger_topics=True)

        address = random_address()
        target = random_address()
        status_type = randint(0, 10)
        cmd = StatusRequestCommand(address, status_type)
        cmd.subscribe(handle_status_response)
        ack_topic = build_topic(STATUS_REQUEST, "ack", address, None,
                                MessageFlagType.DIRECT)
        direct_ack_topic = build_topic(ON, None, address, None,
                                       MessageFlagType.DIRECT_ACK)
        ack_topic_item = TopicItem(
            topic=ack_topic,
            kwargs={
                "cmd1": 0x19,
                "cmd2": status_type,
                "user_data": None
            },
            delay=0.1,
        )
        direct_ack_topic_item = TopicItem(
            topic=direct_ack_topic,
            kwargs={
                "cmd1": 0x11,
                "cmd2": 0x02,
                "target": target,
                "user_data": None,
                "hops_left": 0,
            },
            delay=0,
        )
        send_topics([ack_topic_item, direct_ack_topic_item])
        await asyncio.sleep(0.2)
        assert response_called
Exemple #2
0
    async def test_on_with_fast_direct_ack(self):
        """Test ON with fast direct ack response."""
        response_called = False

        def handle_on_response(on_level):
            """Handle the ON command response."""
            nonlocal response_called
            response_called = True

        set_log_levels(logger_topics=True)

        address = random_address()
        target = random_address()
        group = randint(0, 10)
        cmd = OnLevelCommand(address, group)
        cmd.subscribe(handle_on_response)
        ack_topic = build_topic(ON, "ack", address, group,
                                MessageFlagType.DIRECT)
        direct_ack_topic = build_topic(ON, None, address, None,
                                       MessageFlagType.DIRECT_ACK)
        ack_topic_item = TopicItem(
            topic=ack_topic,
            kwargs={
                "cmd1": 0x11,
                "cmd2": 0xFF,
                "user_data": None
            },
            delay=0.1,
        )
        direct_ack_topic_item = TopicItem(
            topic=direct_ack_topic,
            kwargs={
                "cmd1": 0x11,
                "cmd2": 0xFF,
                "target": target,
                "user_data": None,
                "hops_left": 0,
            },
            delay=0,
        )
        send_topics([ack_topic_item, direct_ack_topic_item])
        await asyncio.sleep(0.2)
        assert response_called
Exemple #3
0
 def setUp(self):
     """Set up the test."""
     set_log_levels(
         logger="info",
         logger_pyinsteon="info",
         logger_messages="info",
         logger_topics=False,
     )
     self._address = random_address()
     self._group = 4
     self._hb_mgr = pyinsteon.managers.heartbeat_manager.HeartbeatManager(
         self._address, self._group)
     self._heartbeat = None
     self._heartbeat_on = None
     self._heartbeat_off = None
     self._hb_mgr.subscribe(self.heartbeat)
     self._hb_mgr.subscribe_on(self.heartbeat_on)
     self._hb_mgr.subscribe_off(self.heartbeat_off)
     self._on_topic = build_topic(ON, None, self._address, self._group,
                                  MessageFlagType.ALL_LINK_BROADCAST)
     self._off_topic = build_topic(OFF, None, self._address, self._group,
                                   MessageFlagType.ALL_LINK_BROADCAST)
Exemple #4
0
    async def test_data_update(self):
        """Test data updates."""

        self._properties["prop3"] = self._epm.create("prop3", 1, 3, None, None)
        self._properties["prop4"] = self._epm.create("prop4", 1, 4, None, None)
        self._properties["prop5"] = self._epm.create("prop5", 1, 5, None, None)
        self._properties["prop6"] = self._epm.create("prop6", 1, 6, None, None)
        self._properties["prop7"] = self._epm.create("prop7", 1, 7, None, None)
        self._properties["prop8"] = self._epm.create("prop8", 1, 8, None, None)
        self._properties["prop9"] = self._epm.create("prop9", 1, 9, None, None)
        self._properties["prop100"] = self._epm.create("prop100", 1, 10, 0,
                                                       None)
        self._properties["prop101"] = self._epm.create("prop101", 1, 10, 1,
                                                       None)
        self._properties["prop102"] = self._epm.create("prop102", 1, 10, 2,
                                                       None)
        self._properties["prop103"] = self._epm.create("prop103", 1, 10, 3,
                                                       None)

        user_data = UserData({
            "d1": 0x01,
            "d2": 0x01,
            "d3": 0x03,
            "d4": 0x04,
            "d5": 0x05,
            "d6": 0x06,
            "d7": 0x07,
            "d8": 0x08,
            "d9": 0x09,
            "d10": 0x0A,
            "d11": 0x0B,
            "d12": 0x0C,
            "d13": 0x0D,
            "d14": 0x0E,
        })
        ack = build_topic(
            prefix="ack",
            topic=EXTENDED_GET_SET,
            address=self._address,
            message_type="direct",
        )
        dir_ack = build_topic(topic=EXTENDED_GET_SET,
                              address=self._address,
                              message_type="direct_ack")
        resp = build_topic(topic=EXTENDED_GET_RESPONSE,
                           address=self._address,
                           message_type="direct")

        topic_ack = TopicItem(
            ack, cmd_kwargs(0x2E, 0x00, UserData({
                "d1": 0,
                "d2": 1
            })), 1)
        topic_dir_ack = TopicItem(
            dir_ack, cmd_kwargs(0x2E, 0x00, None, target="030405"), 0.1)
        topic_resp = TopicItem(
            resp, cmd_kwargs(0x2E, 0x00, user_data, target="030405"), 0.2)
        send_topics([topic_ack, topic_dir_ack, topic_resp])
        result = await self._epm.async_read(group=1)
        assert int(result) == 1
        await asyncio.sleep(1)
        assert self._properties["prop3"].value == 0x03
        assert self._properties["prop9"].value == 0x09
        assert self._properties["prop101"].value
        assert not self._properties["prop102"].value