def test_frame_from_raw(self): """Test parse FrameGetLimitationStatusConfirmation from raw.""" frame = frame_from_raw(b'\x00\x06\x03\x13\x00\x01\x01\x16') self.assertTrue(isinstance(frame, FrameGetLimitationStatusConfirmation)) self.assertEqual(frame.session_id, 1) self.assertEqual(frame.data, 1) frame = frame_from_raw(b'\x00\x06\x03\x13\x00\x02\x00\x14') self.assertTrue(isinstance(frame, FrameGetLimitationStatusConfirmation)) self.assertEqual(frame.session_id, 2) self.assertEqual(frame.data, 0)
def test_frame_from_raw(self): """Test parse FrameGetVersionConfirmation from raw.""" frame = frame_from_raw(self.EXAMPLE_FRAME) self.assertTrue(isinstance(frame, FrameGetVersionConfirmation)) self.assertEqual(frame.software_version, "1.2.3.4.5.6") self.assertEqual(frame.hardware_version, 23) self.assertEqual(frame.product, "KLF 200")
def test_frame_from_raw(self): """Test parse FrameGetNodeInformationNotification from raw.""" frame = frame_from_raw(self.EXAMPLE_FRAME) self.assertTrue(isinstance(frame, FrameGetNodeInformationNotification)) self.assertEqual(frame.node_id, 23) self.assertEqual(frame.order, 1234) self.assertEqual(frame.placement, 2) self.assertEqual(frame.name, "Fnord23") self.assertEqual(frame.velocity, Velocity.SILENT) self.assertEqual(frame.node_type, NodeTypeWithSubtype.INTERIOR_VENETIAN_BLIND) self.assertEqual(frame.product_group, 23) self.assertEqual(frame.product_type, 13) self.assertEqual(frame.node_variation, NodeVariation.TOPHUNG) self.assertEqual(frame.power_mode, 1) self.assertEqual(frame.build_number, 7) self.assertEqual(frame.serial_number, "01:02:03:04:05:06:06:08") self.assertEqual(frame.state, 1) self.assertEqual(Position(frame.current_position).position, 12) self.assertEqual(Position(frame.target).position, 123) self.assertEqual(Position(frame.current_position_fp1).position, 1234) self.assertEqual(Position(frame.current_position_fp2).position, 2345) self.assertEqual(Position(frame.current_position_fp3).position, 3456) self.assertEqual(Position(frame.current_position_fp4).position, 4567) self.assertEqual(frame.remaining_time, 1) self.assertEqual(frame.timestamp, 50528771) self.assertEqual( str(frame.alias_array), "3031=3233, 3435=3637, 3839=3031, 3233=3435, 3637=3839", )
def test_frame2_from_raw(self): """Test parse EXAMPLE_FRAME2 from raw.""" slip = bytearray.fromhex(self.EXAMPLE_FRAME2.replace(":", "")) raw, _ = get_next_slip(slip) frame = frame_from_raw(bytes(raw)) self.assertTrue(isinstance(frame, FrameGetNodeInformationNotification)) self.assertEqual(frame.node_id, 4) self.assertEqual(frame.order, 4) self.assertEqual(frame.placement, 4) self.assertEqual(frame.name, "Fenster Büro") self.assertEqual(frame.velocity, Velocity.DEFAULT) self.assertEqual(frame.node_type, NodeTypeWithSubtype.WINDOW_OPENER_WITH_RAIN_SENSOR) self.assertEqual(frame.product_group, 213) self.assertEqual(frame.product_type, 7) self.assertEqual(frame.node_variation, NodeVariation.NOT_SET) self.assertEqual(frame.power_mode, 1) self.assertEqual(frame.build_number, 30) self.assertEqual(frame.serial_number, "53:36:27:26:10:2f:00:81") self.assertEqual(frame.state, 5) self.assertEqual(str(Position(frame.current_position)), "100 %") self.assertEqual(str(Position(frame.target)), "100 %") self.assertEqual(str(Position(frame.current_position_fp1)), "0 %") self.assertEqual(str(Position(frame.current_position_fp2)), "UNKNOWN") self.assertEqual(str(Position(frame.current_position_fp3)), "UNKNOWN") self.assertEqual(str(Position(frame.current_position_fp4)), "UNKNOWN") self.assertEqual(frame.remaining_time, 0) self.assertEqual(frame.timestamp, 1326315944) test_ts = datetime.fromtimestamp(1326315944).strftime( "%Y-%m-%d %H:%M:%S") self.assertEqual(frame.timestamp_formatted, test_ts) self.assertEqual(str(frame.alias_array), "d802=6400, d803=ba00") # Crosscheck, Serializing: self.assertEqual(bytes(frame), raw)
def test_str(self): """Test string representation of FrameNodeInformationChangedNotification.""" frame = frame_from_raw(self.EXAMPLE_FRAME) self.assertEqual( str(frame), '<FrameNodeInformationChangedNotification node_id="23" name="Fnord23" ' 'order="1234" placement="2" node_variation="NodeVariation.TOPHUNG"/>', )
def test_frame_from_raw(self): """Test parse FrameGetStateConfirmation from raw.""" frame = frame_from_raw(self.EXAMPLE_FRAME) self.assertTrue(isinstance(frame, FrameGetStateConfirmation)) self.assertEqual(frame.gateway_state, GatewayState.BEACON_MODE_NOT_CONFIGURED) self.assertEqual(frame.gateway_sub_state, GatewaySubState.PERFORMING_TASK_COMMAND)
def test_frame_from_raw(self): """Test parsing FramePasswordEnterRequest from raw bytes.""" frame = frame_from_raw( b"\x00#0\x00fnord\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00b") self.assertTrue(isinstance(frame, FramePasswordEnterRequest)) self.assertEqual(frame.password, "fnord")
def test_frame_from_raw(self): """Test parsing FramePasswordChangeNotification from raw bytes.""" frame = frame_from_raw( b"\x00#0\x04fnord\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00f", ) self.assertTrue(isinstance(frame, FramePasswordChangeNotification)) self.assertEqual(frame.newpassword, "fnord")
def test_frame_from_raw(self): """Test parse FrameActivateSceneConfirmation from raw.""" frame = frame_from_raw(b"\x00\x06\x04\x13\x02\x03\xe8\xf8") self.assertTrue(isinstance(frame, FrameActivateSceneConfirmation)) self.assertEqual( frame.status, ActivateSceneConfirmationStatus.ERROR_REQUEST_REJECTED) self.assertEqual(frame.session_id, 1000)
def test_frame_from_raw(self): """Test parse FrameCommandSendRequest from raw.""" frame = frame_from_raw(self.EXAMPLE_FRAME) self.assertTrue(isinstance(frame, FrameCommandSendRequest)) self.assertEqual(frame.node_ids, [1, 2, 3]) self.assertEqual(Position(frame.parameter).position_percent, 75) self.assertEqual(frame.session_id, 1000) self.assertEqual(frame.originator, Originator.RAIN)
def test_frame_from_raw(self): """Test parse FrameGetNetworkSetupConfirmation from raw.""" frame = frame_from_raw(self.TESTFRAME) self.assertTrue(isinstance(frame, FrameGetNetworkSetupConfirmation)) self.assertEqual(frame.ipaddress, '192.168.13.227') self.assertEqual(frame.netmask, '255.255.255.0') self.assertEqual(frame.gateway, '192.168.13.1') self.assertEqual(frame.dhcp, DHCPParameter.DISABLE)
def test_frame_from_raw(self): """Test parse FrameCommandRunStatusNotification from raw.""" frame = frame_from_raw(self.EXAMPLE_FRAME) self.assertTrue(isinstance(frame, FrameCommandRunStatusNotification)) self.assertEqual(frame.session_id, 1000) self.assertEqual(frame.status_id, 7) self.assertEqual(frame.index_id, 23) self.assertEqual(frame.node_parameter, 42) self.assertEqual(frame.parameter_value, 1337)
def test_frame_from_raw(self): """Test parse FrameActivateSceneRequest from raw.""" frame = frame_from_raw(self.EXAMPLE_FRAME) self.assertTrue(isinstance(frame, FrameActivateSceneRequest)) self.assertEqual(frame.scene_id, 4) self.assertEqual(frame.session_id, 1000) self.assertEqual(frame.originator, Originator.RAIN) self.assertEqual(frame.priority, Priority.USER_LEVEL_2) self.assertEqual(frame.velocity, Velocity.SILENT)
def test_frame_from_raw(self): """Test parse FrameCommandRemainingTimeNotification from raw.""" frame = frame_from_raw(b"\x00\t\x03\x03\x03\xe8\x17*\x059\xe3") self.assertTrue( isinstance(frame, FrameCommandRemainingTimeNotification)) self.assertEqual(frame.session_id, 1000) self.assertEqual(frame.index_id, 23) self.assertEqual(frame.node_parameter, 42) self.assertEqual(frame.seconds, 1337)
def test_frame_from_raw(self): """Test parse FrameGetSceneListNotification from raw.""" frame = frame_from_raw(self.EXAMPLE_FRAME1) self.assertTrue(isinstance(frame, FrameGetSceneListNotification)) self.assertEqual( frame.scenes, [(0, "All Windows Closed"), (1, "Sleeping Wide Open"), (2, "Bath Open")], ) self.assertEqual(frame.remaining_scenes, 3)
def test_frame_from_raw(self): """Test parse FrameNodeInformationChangedNotification from raw.""" frame = frame_from_raw(self.EXAMPLE_FRAME) self.assertTrue( isinstance(frame, FrameNodeInformationChangedNotification)) self.assertEqual(frame.node_id, 23) self.assertEqual(frame.order, 1234) self.assertEqual(frame.placement, 2) self.assertEqual(frame.node_variation, NodeVariation.TOPHUNG) self.assertEqual(frame.name, "Fnord23")
def test_frame_from_raw(self): """Test parsing FramePasswordChangeRequest from raw bytes.""" frame = frame_from_raw( b"\x00C0\x02fnord\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00bfeld\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00i") self.assertTrue(isinstance(frame, FramePasswordChangeRequest)) self.assertEqual(frame.newpassword, "bfeld") self.assertEqual(frame.currentpassword, "fnord")
def test_frame_from_raw(self): """Test parse FrameGetLimitationStatusNotification from raw.""" frame = frame_from_raw( b'\x00\r\x03\x14\x00\x01\x01\x00\xba4\xf7\xff\x01\x00\x9d') self.assertTrue(isinstance(frame, FrameGetLimitationStatusNotification)) self.assertEqual(frame.limit_originator, Originator.USER) self.assertEqual(frame.node_id, 1) self.assertEqual(frame.parameter_id, 0) self.assertEqual(frame.session_id, 1) self.assertEqual(frame.max_value, b'\xf7') self.assertEqual(frame.min_value, b'\xba') self.assertEqual(frame.limit_time, 0)
def test_str(self): """Test string representation of FrameNodeStatePositionChangedNotification.""" frame = frame_from_raw(self.EXAMPLE_FRAME) test_ts = datetime.fromtimestamp(1288634368).strftime( "%Y-%m-%d %H:%M:%S") self.assertEqual( str(frame), '<FrameNodeStatePositionChangedNotification node_id="5" state="5" ' 'current_position="0xC800" target="0xC800" current_position_fp1="0xF7FF" ' 'current_position_fp2="0xF7FF" current_position_fp3="0xF7FF" ' 'current_position_fp4="0xF7FF" remaining_time="0" time="{}"/>'. format(test_ts), )
def test_frame_from_raw(self): """Test parse FrameNodeStatePositionChangedNotification from raw.""" frame = frame_from_raw(self.EXAMPLE_FRAME) self.assertTrue( isinstance(frame, FrameNodeStatePositionChangedNotification)) self.assertEqual(frame.node_id, 5) self.assertEqual(frame.state, 5) self.assertEqual(Position(frame.current_position).position, 51200) self.assertEqual(Position(frame.target).position, 51200) self.assertEqual(Position(frame.current_position_fp1).position, 63487) self.assertEqual(Position(frame.current_position_fp2).position, 63487) self.assertEqual(Position(frame.current_position_fp3).position, 63487) self.assertEqual(Position(frame.current_position_fp4).position, 63487) self.assertEqual(frame.remaining_time, 0) self.assertEqual(frame.timestamp, 1288634368)
def test_str(self): """Test string representation of FrameGetNodeInformationNotification.""" frame = frame_from_raw(self.EXAMPLE_FRAME) test_ts = datetime.fromtimestamp(50528771).strftime( "%Y-%m-%d %H:%M:%S") self.assertEqual( str(frame), '<FrameGetNodeInformationNotification node_id="23" order="1234" placement="2" ' 'name="Fnord23" velocity="Velocity.SILENT" node_type="NodeTypeWithSubtype.INTERIOR_VENETIAN_BLIND" ' 'product_group="23" product_type="13" node_variation="NodeVariation.TOPHUNG" ' 'power_mode="1" build_number="7" serial_number="01:02:03:04:05:06:06:08" state="1" ' 'current_position="0x000C" target="0x007B" current_position_fp1="0x04D2" ' 'current_position_fp2="0x0929" current_position_fp3="0x0D80" current_position_fp4="0x11D7" ' 'remaining_time="1" time="{}" ' 'alias_array="3031=3233, 3435=3637, 3839=3031, 3233=3435, 3637=3839"/>' .format(test_ts), )
def test_frame_from_raw(self): """Test parse FrameDiscoverNodesNotification from raw.""" frame = frame_from_raw( b"\x00\x86\x01\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x82") self.assertTrue(isinstance(frame, FrameDiscoverNodesNotification))
def test_frame_from_raw(self): """Test parse FrameGetStateRequest from raw.""" frame = frame_from_raw(self.EXAMPLE_FRAME) self.assertTrue(isinstance(frame, FrameGetStateRequest))
def test_frame_from_raw(self): """Test parse FrameGatewayRebootConfirmation from raw.""" frame = frame_from_raw(self.EXAMPLE_FRAME) self.assertTrue(isinstance(frame, FrameGatewayRebootConfirmation))
def test_frame_from_raw_one_scene(self): """Test parse FrameGetSceneListNotification from raw with one scene.""" frame = frame_from_raw(self.EXAMPLE_FRAME2) self.assertTrue(isinstance(frame, FrameGetSceneListNotification)) self.assertEqual(frame.scenes, [(0, "One Scene")]) self.assertEqual(frame.remaining_scenes, 0)
def test_frame_from_raw(self): """Test parse FrameGetAllNodesInformationFinishedNotification from raw.""" frame = frame_from_raw(b"\x00\x03\x02\x05\x04") self.assertTrue( isinstance(frame, FrameGetAllNodesInformationFinishedNotification))
def test_frame_from_raw(self): """Test parse FrameGetSceneListConfirmation from raw.""" frame = frame_from_raw(b"\x00\x04\x04\r\x0c\x01") self.assertTrue(isinstance(frame, FrameGetSceneListConfirmation)) self.assertEqual(frame.count_scenes, 12)
def test_frame_from_raw(self): """Test parse FrameGetNodeInformationConfirmation from raw.""" frame = frame_from_raw(b"\x00\x05\x02\x01\x00\x17\x11") self.assertTrue(isinstance(frame, FrameGetNodeInformationConfirmation)) self.assertEqual(frame.node_id, 23)
def test_frame_from_raw(self): """Test parse FrameDiscoverNodesRequest from raw.""" frame = frame_from_raw(b"\x00\x04\x01\x03\x06\x00") self.assertTrue(isinstance(frame, FrameDiscoverNodesRequest)) self.assertEqual(frame.node_type, NodeType.LIGHT)
def test_frame_from_raw(self): """Test parse FrameActivationHeader from raw.""" frame = frame_from_raw(self.EXAMPLE_FRAME) self.assertTrue( isinstance(frame, FrameGetActivationLogHeaderConfirmation))