def test_decode_v1(): b = b'\x0f\xfb\x2b\x08\xec\x0c\x01\x00\x00\x00\x00\x00\xca\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == BlindStatusV1( channel=2, default_timeout=BlindTimeout.t30sec, led_status=BlindStatusV1.LedStatus.Off, ) assert json.loads(json.dumps(a.message.to_json_able())) == { 'type': 'BlindStatusV1', 'properties': { 'channel': 2, 'blind_status': { 'name': 'Off', 'value': 0 }, 'default_timeout': { 'name': 't30sec', 'value': 1 }, 'led_status': { 'name': 'Off', 'value': 0 }, 'delay_time': 0, } }
def test_decode_too_long(): b = b'\x0f\xf8\x00\x02\x0a\x00\xed\x04' # BusActive, but too long a = VelbusFrame.from_bytes(b) assert a.message == UnknownMessage(priority=0, data=b'\x0a\x00') assert a.to_bytes() == b assert json.dumps(a.to_json_able())
def test_data_8pbu(): b = b'\x0f\xfb\x00\x07\xed\x01\x02\x04\x08\x10\xaa\x39\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == ModuleStatus8PBU( channel_pressed=[ False, False, False, False, False, False, False, True ], channel_enabled=[ False, False, False, False, False, False, True, False ], channel_not_inverted=[ False, False, False, False, False, True, False, False ], channel_locked=[False, False, False, False, True, False, False, False], channel_program_disabled=[ False, False, False, True, False, False, False, False ], prog_sunset_enabled=True, prog_sunrise_enabled=False, alarm2=ModuleStatus8PBU.LocalGlobal.Global, alarm2_enabled=False, alarm1=ModuleStatus8PBU.LocalGlobal.Global, alarm1_enabled=False, program=ModuleStatus8PBU.Program.Winter, ) assert json.dumps(a.to_json_able())
def test_decode_VMBGPOD(): b = b'\x0f\xfb\x00\x07\xff\x28\x00\x00\x00\x00\x00\xc8\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == ModuleType(module_info=VMBGPOD()) assert json.dumps(a.to_json_able())
def test_decode(): b = b'\x0f\xfb\x00\x02\xfa\x00\xfa\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == ModuleStatusRequest() assert json.dumps(a.to_json_able())
def test_decode_too_short(): b = b'\x0f\xf8\x00\x07\xea\x00\x00\x00\x00\x00\x00\x08\x04' # SensorTemperature, but too short a = VelbusFrame.from_bytes(b) assert a.message == UnknownMessage(priority=0, data=b'\xea\x00\x00\x00\x00\x00\x00') assert a.to_bytes() == b assert json.dumps(a.to_json_able())
def test_decode(): b = b'\x0f\xfb\x00\x08\xea\x00\x00\x00\x00\x00\x00\x00\x04\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == TemperatureSensorStatus() assert json.dumps(a.to_json_able())
def test_decode_8pbu(): b = b'\x0f\xfb\x00\x07\xed\x00\x00\x00\x00\x00\x00\x02\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == ModuleStatus8PBU() assert json.dumps(a.to_json_able())
def test_pressed(): b = b'\x0f\xf8\x00\x04\x00\x01\x0a\x00\xea\x04' a = VelbusFrame.from_bytes(b) assert a.message == PushButtonStatus( just_pressed=[False, False, False, False, False, False, False, True], just_released=[False, False, False, False, True, False, True, False], ) assert a.to_bytes() == b
def test_decode(): b = b'\x0f\xf8\x00\x04\x00\x00\x00\x00\xf5\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == PushButtonStatus() assert json.dumps(a.to_json_able())
def test_decode_unknown(): b = b'\x0f\xfb\x73\x07\xff\xff\x8b\xa4\x01\x16\x12\x26\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == ModuleType(module_info=UnknownModuleInfo( data=b'\xff\x8b\xa4\x01\x16\x12')) assert json.dumps(a.to_json_able())
def test_attributes(): b = b'\x0f\xfb\x00\x08\xea\x01\x00\x00\x00\x00\x00\x00\x03\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b s = TemperatureSensorStatus(mode_push_button_locked=True, ) assert a.message == s b = b'\x0f\xfb\x00\x08\xea\x00\x00\x00\x2b\x00\x00\x00\xd9\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b s = TemperatureSensorStatus(temperature=21.5, ) assert a.message == s b = b'\x0f\xfb\x00\x08\xea\x00\x00\x00\x00\x00\x01\x23\xe0\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b s = TemperatureSensorStatus(sleep_timer=0x123, ) assert a.message == s assert json.dumps(s.to_json_able())
def test_decode_v1(): b = b'\x0f\xf8\x2b\x05\x05\x03\x00\x00\x00\xc1\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == SwitchBlindV1( command=SwitchBlindV1.Command.SwitchBlindUp, channel=1, ) assert json.dumps(a.message.to_json_able())
def test_decode(): b = b'\x0f\xf8\x00\x01\x0e\xea\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == InterfaceStatusRequest() assert json.loads(json.dumps(a.message.to_json_able())) == { 'type': 'InterfaceStatusRequest', 'properties': {} }
def test_decode3(): b = b'\x0f\xfb\x00\x06\xf2\x01ABCD\xf3\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == SensorName3( command=SensorName3.Command.SensorName_part3, sensor_name=b'ABCD', ) assert json.dumps(a.message.to_json_able())
def test_decode(): b = b'\x0f\xf8\x00\x01\x0a\xee\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == BusActive() assert json.loads(json.dumps(a.message.to_json_able())) == { 'type': 'BusActive', 'properties': {} }
def test_decode(): b = b'\x0f\xf8\x00\x01\x0b\xed\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == RxBufFull() assert json.loads(json.dumps(a.message.to_json_able())) == { 'type': 'RxBufFull', 'properties': {} }
def test_decode(): b = b'\x0f\xfb\x01\x40\xb5\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a == VelbusFrame(address=1, message=ModuleTypeRequest()) assert json.loads(json.dumps(a.message.to_json_able())) == { 'type': 'ModuleTypeRequest', 'properties': {} }
def test_decode_short(): b = b'\x0f\xfb\x00\x04\xe6\x01\xfe\x02\x0b\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == SensorTemperatureShort( current_temperature=0.5, minimum_temperature=-1.0, maximum_temperature=1.0, ) assert json.dumps(a.to_json_able())
def test_decode(): b = b'\x0f\xfb\x00\x02\xe5\x00\x0f\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == SensorTemperatureRequest() assert json.loads(json.dumps(a.message.to_json_able())) == { 'type': 'SensorTemperatureRequest', 'properties': { 'auto_send_interval': 'no_change', } }
def test_decode_unknown(): b = b'\x0f\xf8\x00\x01\x01\xf7\x04' a = VelbusFrame.from_bytes(b) assert a.message == UnknownMessage(priority=0, data=b'\x01') assert a.to_bytes() == b assert json.loads(json.dumps(a.to_json_able())) == { 'address': 0, 'message': { 'type': 'UnknownMessage', 'properties': {}, } }
def test_message(binary: bytes, frame: VelbusFrame, json: dict): b = binary a = VelbusFrame.from_bytes(b) # test roundtrip assert a.to_bytes() == b # test decode assert a == frame # test JSON if json is not None: assert json.loads(json.dumps(a.message.to_json_able())) == json
def test_decode_rtr(): b = b'\x0f\xfb\x00\x40\xb6\x04' a = VelbusFrame.from_bytes(b) assert a.message == ModuleTypeRequest() assert a.to_bytes() == b assert json.loads(json.dumps(a.to_json_able())) == { 'address': 0, 'message': { 'type': 'ModuleTypeRequest', 'properties': {}, } }
def test_decode_VMB2BL(): b = b'\x0f\xfb\x2b\x05\xff\x09\x05\x08\x15\x9c\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == ModuleType(module_info=VMB2BL( timeout_blind1=BlindTimeout.t30sec, timeout_blind2=BlindTimeout.t30sec, build_year=8, build_week=21, )) assert json.dumps(a.to_json_able())
def test_decode_6in(): b = b'\x0f\xfb\x29\x05\xed\x00\x00\x00\x00\xdb\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == ModuleStatus6IN( input_status=[False, False, False, False, False, False, False, False], leds_slow_blink=[ False, False, False, False, False, False, False, False ], leds_fast_blink=[ False, False, False, False, False, False, False, False ], ) assert json.dumps(a.to_json_able())
def test_decode(): b = b'\x0f\xfb\x00\x08\xf0\x01ABCDEF\x68\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == SensorName12( command=SensorName12.Command.SensorName_part1, sensor_name=b'ABCDEF', ) assert json.loads(json.dumps(a.message.to_json_able())) == { 'type': 'SensorName12', 'properties': { 'sensor_number': 1, 'sensor_name': 'ABCDEF', } }
def test_decode_v2(): b = b'\x0f\xfb\x2a\x08\xec\x01\x1e\x00\x08\x00\x00\x00\xb1\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == BlindStatusV2(default_timeout=30, led_status=BlindStatusV2.LedStatus.UpOn) assert json.loads(json.dumps(a.message.to_json_able())) == { 'type': 'BlindStatusV2', 'properties': { 'alarm1_locality': { 'name': 'Local', 'value': 0 }, 'alarm1_on': 0, 'alarm2_locality': { 'name': 'Local', 'value': 0 }, 'alarm2_on': 0, 'auto_mode': { 'name': 'Disabled', 'value': 0 }, 'blind_position': 0, 'blind_status': { 'name': 'Off', 'value': 0 }, 'channel': 1, 'default_timeout': 30, 'led_status': { 'name': 'UpOn', 'value': 8 }, 'locked_inhibited_forced': { 'name': 'Normal', 'value': 0 }, 'sunrise_enabled': 0, 'sunset_enabled': 0, } }
def test_decode(): b = b'\x0f\xfb\x00\x07\xe6\x00\x20\xfe\x00\x02\x00\xe9\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert a.message == SensorTemperature( current_temperature=0.0625, minimum_temperature=-1.0, maximum_temperature=1.0, ) assert json.loads(json.dumps(a.message.to_json_able())) == { 'type': 'SensorTemperature', 'properties': { 'current_temperature': 0.0625, 'minimum_temperature': -1.0, 'maximum_temperature': 1.0, } }
def test_autosend(): b = b'\x0f\xfb\x00\x02\xe5\x01\x0e\x04' a = VelbusFrame.from_bytes(b) assert a.message == SensorTemperatureRequest(auto_send_interval=1) assert a.message.to_json_able() == { 'type': 'SensorTemperatureRequest', 'properties': { 'auto_send_interval': "disabled", } } assert SensorTemperatureRequest(auto_send_interval=6).to_json_able() == { 'type': 'SensorTemperatureRequest', 'properties': { 'auto_send_interval': "on_temp_change", } } assert SensorTemperatureRequest(auto_send_interval=10).to_json_able() == { 'type': 'SensorTemperatureRequest', 'properties': { 'auto_send_interval': 10, } }
def test_decode3_full_length(): b = b'\x0f\xfb\x00\x08\xf2\x01ABCDEF\x66\x04' a = VelbusFrame.from_bytes(b) assert a.to_bytes() == b assert isinstance(a.message, UnknownMessage)