コード例 #1
0
async def test_dynalite_error_message(mock_gateway):
    """Test when a message arrives with the wrong checksum."""
    [device] = mock_gateway.configure_dyn_dev(
        {
            dyn_const.CONF_ACTIVE: False,
            dyn_const.CONF_AREA: {
                "1": {
                    dyn_const.CONF_CHANNEL: {
                        "1": {}
                    }
                }
            },
            dyn_const.CONF_PRESET: {},
        }, )
    assert await mock_gateway.async_setup_dyn_dev()
    await mock_gateway.check_single_update(None)
    assert not device.is_on
    packet = DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5)
    message = packet.msg
    message[7] += 1
    await mock_gateway.receive_message(message)
    assert not device.is_on
    packet = DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5)
    await mock_gateway.receive(packet)
    await mock_gateway.check_single_update(device)
    await mock_gateway.check_notifications(
        [packet_notification(packet.raw_msg)])
    assert device.is_on
コード例 #2
0
async def test_channel_switch(mock_gateway):
    """Test a Dynalite channel that is a switch."""
    name = "NAME"
    [device] = mock_gateway.configure_dyn_dev({
        dyn_const.CONF_ACTIVE: False,
        dyn_const.CONF_AREA: {
            "1": {
                dyn_const.CONF_NAME: name,
                dyn_const.CONF_NO_DEFAULT: True,
                dyn_const.CONF_CHANNEL: {
                    "1": {
                        dyn_const.CONF_FADE: 0.5,
                        dyn_const.CONF_CHANNEL_TYPE: "switch",
                    }
                },
            }
        },
    })
    assert await mock_gateway.async_setup_dyn_dev()
    assert device.category == "switch"
    assert device.name == f"{name} Channel 1"
    assert device.unique_id == "dynalite_area_1_channel_1"
    assert device.available
    assert device.area_name == name
    assert device.get_master_area == name
    await device.async_turn_on()
    await mock_gateway.check_single_write(
        DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5))
    assert device.is_on
    await device.async_turn_off()
    await mock_gateway.check_single_write(
        DynetPacket.set_channel_level_packet(1, 1, 0.0, 0.5))
    assert not device.is_on
コード例 #3
0
async def test_dynalite_two_messages(mock_gateway):
    """Test when two messages arrive together."""
    devices = mock_gateway.configure_dyn_dev(
        {
            dyn_const.CONF_ACTIVE: False,
            dyn_const.CONF_AREA: {
                "1": {
                    dyn_const.CONF_CHANNEL: {
                        "1": {},
                        "2": {}
                    }
                }
            },
            dyn_const.CONF_PRESET: {},
        },
        2,
    )
    assert await mock_gateway.async_setup_dyn_dev()
    await mock_gateway.check_single_update(None)
    for device in devices:
        assert not device.is_on
    packet1 = DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5)
    packet2 = DynetPacket.set_channel_level_packet(1, 2, 1.0, 0.5)
    await mock_gateway.receive_message(packet1.msg + packet2.msg)
    await mock_gateway.check_updates(devices)
    await mock_gateway.check_notifications([
        packet_notification(packet1.raw_msg),
        packet_notification(packet2.raw_msg)
    ])
    for device in devices:
        assert device.is_on
コード例 #4
0
def test_channel_fade_limit():
    """Test that set_channel_level has a limit at 0xFF (5.1 seconds)."""
    packet1 = DynetPacket.set_channel_level_packet(1, 1, 1, 100)
    packet2 = DynetPacket.set_channel_level_packet(1, 1, 1, 5.101)
    packet3 = DynetPacket.set_channel_level_packet(1, 1, 1, 5.05)
    assert packet1.msg == packet2.msg
    assert packet1.msg != packet3.msg
コード例 #5
0
async def test_light(mock_gateway):
    """Test a Dynalite channel that is a light."""
    name = "NAME"
    channel_name = "CHANNEL"
    [device] = mock_gateway.configure_dyn_dev({
        dyn_const.CONF_ACTIVE: False,
        dyn_const.CONF_AREA: {
            "1": {
                dyn_const.CONF_NAME: name,
                dyn_const.CONF_NO_DEFAULT: True,
                dyn_const.CONF_CHANNEL: {
                    "1": {
                        dyn_const.CONF_NAME: channel_name,
                        dyn_const.CONF_FADE: 0.5,
                    }
                },
            }
        },
    })
    assert await mock_gateway.async_setup_dyn_dev()
    assert device.category == "light"
    assert device.name == f"{name} {channel_name}"
    assert device.unique_id == "dynalite_area_1_channel_1"
    assert device.available
    assert device.area_name == name
    assert device.get_master_area == name
    await device.async_turn_on()
    await mock_gateway.check_single_write(
        DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5))
    assert device.brightness == 255
    await device.async_turn_on(brightness=51)
    await mock_gateway.check_single_write(
        DynetPacket.set_channel_level_packet(1, 1, 0.2, 0.5))
    assert device.brightness == 51
    await device.async_turn_off()
    await mock_gateway.check_single_write(
        DynetPacket.set_channel_level_packet(1, 1, 0, 0.5))
    assert device.brightness == 0
    # Now send commands
    await mock_gateway.receive(
        DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5))
    assert device.brightness == 255
    assert device.is_on
    await mock_gateway.receive(
        DynetPacket.set_channel_level_packet(1, 1, 0.2, 0.5))
    assert device.brightness == 51
    assert device.is_on
    await mock_gateway.receive(
        DynetPacket.report_channel_level_packet(1, 1, 0, 0))
    assert device.brightness == 0
    assert not device.is_on
コード例 #6
0
async def test_dynalite_split_message(mock_gateway):
    """Test when a received message is split into two packets."""
    [device] = mock_gateway.configure_dyn_dev(
        {
            dyn_const.CONF_ACTIVE: False,
            dyn_const.CONF_AREA: {
                "1": {
                    dyn_const.CONF_CHANNEL: {
                        "1": {}
                    }
                }
            },
            dyn_const.CONF_PRESET: {},
        }, )
    assert await mock_gateway.async_setup_dyn_dev()
    await mock_gateway.check_single_update(None)
    assert not device.is_on
    packet = DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5)
    msg1 = packet.msg[0:5]
    msg2 = packet.msg[5:8]
    await mock_gateway.receive_message(msg1)
    await mock_gateway.receive_message(msg2)
    await mock_gateway.check_single_update(device)
    await mock_gateway.check_notifications(
        [packet_notification(packet.raw_msg)])
    assert device.is_on
コード例 #7
0
async def test_dynalite_devices_default_fade(mock_gateway):
    """Test that default fade works correctly."""
    [channel_device, preset_device] = mock_gateway.configure_dyn_dev(
        {
            dyn_const.CONF_ACTIVE: False,
            dyn_const.CONF_DEFAULT: {
                dyn_const.CONF_FADE: 0.5
            },
            dyn_const.CONF_AREA: {
                "1": {
                    dyn_const.CONF_CHANNEL: {
                        "1": {}
                    }
                }
            },
            dyn_const.CONF_PRESET: {
                "1": {}
            },
        },
        2,
    )
    assert await mock_gateway.async_setup_dyn_dev()
    await mock_gateway.check_writes([])
    await channel_device.async_turn_on()
    await mock_gateway.check_single_write(
        DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5))
    await preset_device.async_turn_on()
    await mock_gateway.check_single_write(
        DynetPacket.select_area_preset_packet(1, 1, 0.5))
コード例 #8
0
async def test_dynalite_unknown_message(mock_gateway):
    """Test when a message arrives that we don't know."""
    [device] = mock_gateway.configure_dyn_dev(
        {
            dyn_const.CONF_ACTIVE: False,
            dyn_const.CONF_AREA: {
                "1": {
                    dyn_const.CONF_CHANNEL: {
                        "1": {}
                    }
                }
            },
            dyn_const.CONF_PRESET: {},
        }, )
    assert await mock_gateway.async_setup_dyn_dev()
    await mock_gateway.check_single_update(None)
    assert not device.is_on
    packet = DynetPacket(area=1, command=200, data=[0, 0, 0])
    await mock_gateway.receive(packet)
    await mock_gateway.check_notifications(
        [packet_notification(packet.raw_msg)])
    assert not device.is_on
    packet = DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5)
    await mock_gateway.receive(packet)
    await mock_gateway.check_single_update(device)
    await mock_gateway.check_notifications(
        [packet_notification(packet.raw_msg)])
    assert device.is_on
コード例 #9
0
async def test_dynalite_devices_auto_discover_template(mock_gateway):
    """Test auto discover ON when running into a template that shouldn't show the device."""
    config = {
        dyn_const.CONF_ACTIVE: False,
        dyn_const.CONF_AUTO_DISCOVER: True,
        dyn_const.CONF_AREA: {
            1: {
                dyn_const.CONF_TEMPLATE: dyn_const.CONF_ROOM
            },
            2: {
                dyn_const.CONF_TEMPLATE: dyn_const.CONF_TIME_COVER
            },
        },
    }
    mock_gateway.configure_dyn_dev(config, 2)
    assert await mock_gateway.async_setup_dyn_dev()
    await mock_gateway.check_single_update(None)
    func = mock_gateway.new_dev_func
    func.reset_mock()
    packet_to_send = DynetPacket.report_area_preset_packet(1, 2)
    await mock_gateway.receive(packet_to_send)
    await mock_gateway.check_notifications([
        packet_notification(packet_to_send.raw_msg),
        preset_notification(1, 2)
    ])
    func.assert_not_called()
    packet_to_send = DynetPacket.set_channel_level_packet(2, 3, 0, 0)
    await mock_gateway.receive(packet_to_send)
    await mock_gateway.check_notifications(
        [packet_notification(packet_to_send.raw_msg)])
    func.assert_not_called()
コード例 #10
0
async def test_dynalite_devices_auto_discover_on(mock_gateway):
    """Test autodiscover ON."""
    config = {
        dyn_const.CONF_ACTIVE: False,
        dyn_const.CONF_AUTO_DISCOVER: True,
        dyn_const.CONF_AREA: {},
    }
    mock_gateway.configure_dyn_dev(config, 0)
    assert await mock_gateway.async_setup_dyn_dev()
    await mock_gateway.check_single_update(None)
    func = mock_gateway.new_dev_func
    func.reset_mock()
    packet_to_send = DynetPacket.report_area_preset_packet(1, 1)
    await mock_gateway.receive(packet_to_send)
    await mock_gateway.check_notifications([
        packet_notification(packet_to_send.raw_msg),
        preset_notification(1, 1)
    ])
    func.assert_called_once()
    devices = func.mock_calls[0][1][0]
    assert len(devices) == 1
    assert devices[0].unique_id == "dynalite_area_1_preset_1"
    await mock_gateway.check_single_update(devices[0])
    func.reset_mock()
    packet_to_send = DynetPacket.set_channel_level_packet(2, 3, 0, 0)
    await mock_gateway.receive(packet_to_send)
    await mock_gateway.check_notifications(
        [packet_notification(packet_to_send.raw_msg)])
    func.assert_called_once()
    devices = func.mock_calls[0][1][0]
    assert len(devices) == 1
    assert devices[0].unique_id == "dynalite_area_2_channel_3"
    await mock_gateway.check_single_update(devices[0])
コード例 #11
0
async def test_dynalite_device_message(mock_gateway):
    """Test when a DEVICE message arrives."""
    [device] = mock_gateway.configure_dyn_dev(
        {
            dyn_const.CONF_ACTIVE: False,
            dyn_const.CONF_AREA: {
                "1": {
                    dyn_const.CONF_CHANNEL: {
                        "1": {}
                    }
                }
            },
            dyn_const.CONF_PRESET: {},
        }, )
    assert await mock_gateway.async_setup_dyn_dev()
    await mock_gateway.check_single_update(None)
    assert not device.is_on
    # putting a device message + a device-on message half-way.
    # will verify that it will first read the device message and then ignore other
    packet = DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5)
    int_message = [SyncType.DEVICE.value, 65, 66] + packet.raw_msg
    message = bytearray(int_message)
    await mock_gateway.receive_message(message)
    await mock_gateway.check_notifications(
        [packet_notification(int_message[:8])])
    assert not device.is_on
    await mock_gateway.receive(packet)
    await mock_gateway.check_single_update(device)
    await mock_gateway.check_notifications(
        [packet_notification(packet.raw_msg)])
    assert device.is_on
コード例 #12
0
async def test_dynalite_shift_message(mock_gateway):
    """Test when a received message arrives out of the normal 8bit pattern."""
    [device] = mock_gateway.configure_dyn_dev(
        {
            dyn_const.CONF_ACTIVE: False,
            dyn_const.CONF_AREA: {"1": {dyn_const.CONF_CHANNEL: {"1": {}}}},
            dyn_const.CONF_PRESET: {},
        },
    )
    assert await mock_gateway.async_setup_dyn_dev()
    assert not device.is_on
    packet = DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5)
    message = bytearray([3, 7, 12]) + packet.msg
    await mock_gateway.receive_message(message)
    assert device.is_on
コード例 #13
0
async def test_dynalite_unhandled_message(mock_gateway):
    """Test when a message arrives that we know but don't handle."""
    [device] = mock_gateway.configure_dyn_dev(
        {
            dyn_const.CONF_ACTIVE: False,
            dyn_const.CONF_AREA: {"1": {dyn_const.CONF_CHANNEL: {"1": {}}}},
            dyn_const.CONF_PRESET: {},
        },
    )
    assert await mock_gateway.async_setup_dyn_dev()
    assert not device.is_on
    packet = DynetPacket(area=1, command=45, data=[0, 0, 0])
    await mock_gateway.receive(packet)
    assert not device.is_on
    await mock_gateway.receive(DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5))
    assert device.is_on
コード例 #14
0
async def test_dynalite_devices_auto_discover_off(mock_gateway):
    """Test autodiscover OFF."""
    config = {
        dyn_const.CONF_ACTIVE: False,
        dyn_const.CONF_AUTO_DISCOVER: False,
        dyn_const.CONF_AREA: {},
    }
    mock_gateway.configure_dyn_dev(config, 0)
    assert await mock_gateway.async_setup_dyn_dev()
    func = mock_gateway.new_dev_func
    func.reset_mock()
    await mock_gateway.receive(DynetPacket.report_area_preset_packet(1, 1))
    func.assert_not_called()
    await mock_gateway.receive(DynetPacket.set_channel_level_packet(
        2, 3, 0, 0))
    func.assert_not_called()
コード例 #15
0
async def test_dynalite_device_message(mock_gateway):
    """Test when a DEVICE message arrives."""
    [device] = mock_gateway.configure_dyn_dev(
        {
            dyn_const.CONF_ACTIVE: False,
            dyn_const.CONF_AREA: {"1": {dyn_const.CONF_CHANNEL: {"1": {}}}},
            dyn_const.CONF_PRESET: {},
        },
    )
    assert await mock_gateway.async_setup_dyn_dev()
    assert not device.is_on
    # putting a device message + a device-on message half-way.
    # will verify that it will first read the device message and then ignore other
    packet = DynetPacket.set_channel_level_packet(1, 1, 1.0, 0.5)
    message = bytearray([SyncType.DEVICE.value, 7, 12]) + packet.msg
    await mock_gateway.receive_message(message)
    assert not device.is_on
    await mock_gateway.receive(packet)
    assert device.is_on
コード例 #16
0
async def test_dynalite_devices_auto_discover_on(mock_gateway):
    """Test autodiscover ON."""
    config = {
        dyn_const.CONF_ACTIVE: False,
        dyn_const.CONF_AUTO_DISCOVER: True,
        dyn_const.CONF_AREA: {},
    }
    mock_gateway.configure_dyn_dev(config, 0)
    assert await mock_gateway.async_setup_dyn_dev()
    func = mock_gateway.new_dev_func
    func.reset_mock()
    await mock_gateway.receive(DynetPacket.report_area_preset_packet(1, 1))
    func.assert_called_once()
    devices = func.mock_calls[0][1][0]
    assert len(devices) == 1
    assert devices[0].unique_id == "dynalite_area_1_preset_1"
    func.reset_mock()
    await mock_gateway.receive(DynetPacket.set_channel_level_packet(
        2, 3, 0, 0))
    func.assert_called_once()
    devices = func.mock_calls[0][1][0]
    assert len(devices) == 1
    assert devices[0].unique_id == "dynalite_area_2_channel_3"
コード例 #17
0
async def test_dynalite_devices_auto_discover_off(mock_gateway):
    """Test autodiscover OFF."""
    config = {
        dyn_const.CONF_ACTIVE: False,
        dyn_const.CONF_AUTO_DISCOVER: False,
        dyn_const.CONF_AREA: {},
    }
    mock_gateway.configure_dyn_dev(config, 0)
    assert await mock_gateway.async_setup_dyn_dev()
    await mock_gateway.check_single_update(None)
    func = mock_gateway.new_dev_func
    func.reset_mock()
    packet_to_send = DynetPacket.report_area_preset_packet(1, 1)
    await mock_gateway.receive(packet_to_send)
    await mock_gateway.check_notifications([
        packet_notification(packet_to_send.raw_msg),
        preset_notification(1, 1)
    ])
    func.assert_not_called()
    packet_to_send = DynetPacket.set_channel_level_packet(2, 3, 0, 0)
    await mock_gateway.receive(packet_to_send)
    await mock_gateway.check_notifications(
        [packet_notification(packet_to_send.raw_msg)])
    func.assert_not_called()
コード例 #18
0
def set_channel_func(area, channel):
    """Create channel set level packet."""
    return DynetPacket.set_channel_level_packet(area, channel, 1, 0)