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
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
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)
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