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())
Beispiel #5
0
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())
Beispiel #7
0
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())
Beispiel #9
0
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
Beispiel #10
0
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())
Beispiel #12
0
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())
Beispiel #13
0
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())
Beispiel #14
0
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': {}
    }
Beispiel #17
0
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())
Beispiel #20
0
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': {},
        }
    }
Beispiel #22
0
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,
        }
    }
Beispiel #29
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)