コード例 #1
0
def _onOffSenorTest(onOffClass, loop):
    """Test on/off sensor."""
    plm = MockPLM(loop=loop)
    address = '1a2b3c'
    target = bytearray([0x00, 0x00, 0x01])

    cat = 0x10
    subcat = 0x00
    product_key = 0x00
    description = 'Generic Security, Heath and Safety Device'
    model = ''

    callbacks = MockCallbacks()

    device = onOffClass(plm, address, cat, subcat, product_key,
                        description, model)
    plm.devices[address] = device
    device.states[0x01].register_updates(callbacks.callbackmethod1)
    msg = StandardReceive(
        address, target, COMMAND_LIGHT_ON_0X11_NONE, cmd2=0x01,
        flags=MessageFlags.create(MESSAGE_TYPE_ALL_LINK_BROADCAST, 0, 3, 3))
    plm.message_received(msg)
    yield from asyncio.sleep(.1, loop=loop)
    assert callbacks.callbackvalue1 == 1

    device = onOffClass(plm, address, cat, subcat, product_key,
                        description, model)
    device.states[0x01].register_updates(callbacks.callbackmethod1)
    msg = StandardReceive(
        address, target, COMMAND_LIGHT_OFF_0X13_0X00,
        flags=MessageFlags.create(MESSAGE_TYPE_ALL_LINK_BROADCAST, 0, 3, 3))
    plm.message_received(msg)
    yield from asyncio.sleep(.1, loop=loop)
    assert callbacks.callbackvalue1 == 0
コード例 #2
0
    def run_test(loop):
        """Asyncio test run."""
        plm = MockPLM(loop)
        address = '1a2b3c'
        target = '4d5e6f'

        cat = 0x07
        subcat = 0x00
        product_key = 0x00
        description = 'I/O Linc'
        model = '2450'

        callbacks = MockCallbacks()

        device = SensorsActuators_2450(plm, address, cat, subcat,
                                       product_key, description, model)
        plm.devices[address] = device
        assert device.states[0x01].name == 'openClosedRelay'
        assert device.states[0x02].name == 'openClosedSensor'

        device.states[0x01].register_updates(callbacks.callbackmethod1)
        device.states[0x02].register_updates(callbacks.callbackmethod2)

        device.async_refresh_state()
        yield from asyncio.sleep(.1, loop=loop)

        # First state
        sentmsg = StandardSend(address, COMMAND_LIGHT_STATUS_REQUEST_0X19_0X00)
        assert plm.sentmessage == sentmsg.hex

        receivedmsg = StandardSend(address,
                                   COMMAND_LIGHT_STATUS_REQUEST_0X19_0X00,
                                   acknak=MESSAGE_ACK)
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        receivedmsg = StandardReceive(
            address, target, COMMAND_LIGHT_ON_0X11_NONE, cmd2=0x55,
            flags=MessageFlags.create(MESSAGE_TYPE_DIRECT_MESSAGE_ACK, 0))
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.3, loop=loop)
        assert callbacks.callbackvalue1 == 0xff

        # Second state
        receivedmsg = StandardSend(address,
                                   COMMAND_LIGHT_STATUS_REQUEST_0X19_0X01,
                                   acknak=MESSAGE_ACK)
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        receivedmsg = StandardReceive(
            address, target, COMMAND_LIGHT_ON_0X11_NONE, cmd2=0x33,
            flags=MessageFlags.create(MESSAGE_TYPE_BROADCAST_MESSAGE, 0))
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)

        sentmsg = StandardSend(address, COMMAND_LIGHT_STATUS_REQUEST_0X19_0X01)
        assert plm.sentmessage == sentmsg.hex
        assert callbacks.callbackvalue1 == 0xff
        assert callbacks.callbackvalue2 == 1
コード例 #3
0
    def run_test(loop):
        """Asyncio test method."""
        plm = MockPLM(loop)
        callbacks = MockCallbacks()

        address = '1a2b3c'
        cat = 0x02
        subcat = 0x0d
        product_key = None
        description = 'ToggleLinc Relay'
        model = '2466S'

        device = SwitchedLightingControl_2663_222(
            plm, address, cat, subcat, product_key, description, model)
        plm.devices[address] = device
        assert device.address.hex == address
        assert device.cat == cat
        assert device.subcat == subcat
        assert device.product_key == 0x00  # Product key should not be None
        assert device.description == description
        assert device.model == model
        assert device.id == address

        device.states[0x01].register_updates(callbacks.callbackmethod1)
        device.states[0x02].register_updates(callbacks.callbackmethod2)

        receivedmsg = StandardReceive(
            address, '000001', COMMAND_LIGHT_ON_0X11_NONE, cmd2=0x66,
            flags=MessageFlags.create(MESSAGE_TYPE_ALL_LINK_BROADCAST,
                                      0, 2, 3))
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue1 == 0xff

        receivedmsg = StandardReceive(
            address, '000001', COMMAND_LIGHT_OFF_0X13_0X00,
            flags=MessageFlags.create(MESSAGE_TYPE_ALL_LINK_BROADCAST,
                                      0, 2, 3))
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue1 == 0x00

        receivedmsg = StandardReceive(
            address, '000002', COMMAND_LIGHT_ON_0X11_NONE, cmd2=0x66,
            flags=MessageFlags.create(MESSAGE_TYPE_ALL_LINK_BROADCAST,
                                      0, 2, 3))
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue2 == 0xff

        receivedmsg = StandardReceive(
            address, '000002', COMMAND_LIGHT_OFF_0X13_0X00,
            flags=MessageFlags.create(MESSAGE_TYPE_ALL_LINK_BROADCAST,
                                      0, 2, 3))
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue2 == 0x00
コード例 #4
0
    def run_test(loop):
        """Asyncio test method."""
        plm = MockPLM(loop)
        address = '1a2b3c'
        target = '4d5e6f'
        cat = 0x02
        subcat = 0x0d
        product_key = None
        description = 'ToggleLinc Relay'
        model = '2466S'

        device = SwitchedLightingControl(plm, address, cat, subcat,
                                         product_key, description, model)
        plm.devices[address] = device
        assert device.address.hex == address
        assert device.cat == cat
        assert device.subcat == subcat
        assert device.product_key == 0x00  # Product key should not be None
        assert device.description == description
        assert device.model == model
        assert device.id == address

        callbacks = MockCallbacks()
        device.states[0x01].register_updates(callbacks.callbackmethod1)

        device.states[0x01].on()
        yield from asyncio.sleep(.1, loop=loop)
        receivedmsg = StandardSend(address, COMMAND_LIGHT_ON_0X11_NONE,
                                   cmd2=0xff, acknak=MESSAGE_ACK)
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        receivedmsg = StandardReceive(
            address, target, COMMAND_LIGHT_ON_0X11_NONE, cmd2=0xff,
            flags=MessageFlags.create(MESSAGE_TYPE_DIRECT_MESSAGE_ACK,
                                      0, 2, 3))
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        sentmsg = StandardSend(address, COMMAND_LIGHT_ON_0X11_NONE, cmd2=0xff)
        assert plm.sentmessage == sentmsg.hex
        assert callbacks.callbackvalue1 == 0xff

        device.states[0x01].off()
        yield from asyncio.sleep(.1, loop=loop)
        receivedmsg = StandardSend(address, COMMAND_LIGHT_OFF_0X13_0X00,
                                   acknak=MESSAGE_ACK)
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        receivedmsg = StandardReceive(
            address, target, COMMAND_LIGHT_OFF_0X13_0X00,
            flags=MessageFlags.create(MESSAGE_TYPE_DIRECT_MESSAGE_ACK,
                                      0, 2, 3))
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        sentmsg = StandardSend(address, COMMAND_LIGHT_OFF_0X13_0X00)
        assert plm.sentmessage == sentmsg.hex
        assert callbacks.callbackvalue1 == 0x00
コード例 #5
0
    def run_test(loop):
        """Asyncio coroutine to actually run the test."""
        class sensorState(object):
            """Callback class to caputure sensor value changes."""

            sensor = None

            def sensor_status_callback(self, device_id, state, value):
                """Callback method to update sensor value."""
                self.sensor = value

        plm = MockPLM(loop)
        address = '1a2b3c'
        target = bytearray([0x00, 0x00, 0x01])
        cmd2 = 0x01

        cat = 0x10
        subcat = 0x00
        product_key = 0x00
        description = 'Generic Security, Heath and Safety Device'
        model = ''

        callbacks = MockCallbacks()

        device = SecurityHealthSafety(plm, address, cat, subcat, product_key,
                                      description, model)
        plm.devices[address] = device
        device.states[0x01].register_updates(callbacks.callbackmethod1)
        msg = StandardReceive(address,
                              target,
                              COMMAND_LIGHT_ON_0X11_NONE,
                              cmd2=cmd2,
                              flags=MessageFlags.create(
                                  MESSAGE_TYPE_ALL_LINK_BROADCAST, 0, 3, 3))
        plm.message_received(msg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue1 == cmd2

        device = SecurityHealthSafety(plm, address, cat, subcat, product_key,
                                      description, model)
        device.states[0x01].register_updates(callbacks.callbackmethod1)
        msg = StandardReceive(address,
                              target,
                              COMMAND_LIGHT_OFF_0X13_0X00,
                              flags=MessageFlags.create(
                                  MESSAGE_TYPE_ALL_LINK_BROADCAST, 0, 3, 3))
        plm.message_received(msg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue1 == 0x00
コード例 #6
0
    def run_test(loop):
        plm = MockPLM(loop)
        address = '1a2b3c'
        target = '4d5e6f'
        cmd2 = 0x04

        cat = 0x10
        subcat = 0x00
        product_key = 0x00
        description = 'Generic Security, Heath and Safety Device'
        model = ''

        callbacks = MockCallbacks()

        device = SecurityHealthSafety_2982_222(plm, address, cat, subcat,
                                               product_key, description, model)
        plm.devices[address] = device
        device.states[0x01].register_updates(callbacks.callbackmethod1)
        msg = StandardReceive(address,
                              target,
                              COMMAND_LIGHT_ON_0X11_NONE,
                              cmd2=cmd2,
                              flags=MessageFlags.create(
                                  MESSAGE_FLAG_BROADCAST_0X80, 0, 0, 0))
        plm.message_received(msg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue1 == 0x6f
コード例 #7
0
    async def run_test(loop):
        """Asyncio test method."""
        class lightStatus():
            """Callback class to capture state changes."""

            lightOnLevel1 = None
            lightOnLevel2 = None

            # pylint: disable=unused-argument
            def device_status_callback1(self, device_id, state, value):
                """Callback method to capture upper outlet changes."""
                self.lightOnLevel1 = value

            # pylint: disable=unused-argument
            def device_status_callback2(self, device_id, state, value):
                """Callback method to capture lower outlet changes."""
                self.lightOnLevel2 = value

        mockPLM = MockPLM(loop)
        address = '1a2b3c'
        target = '4d5e6f'

        cat = 0x02
        subcat = 0x0d
        product_key = None
        description = 'ToggleLinc Relay'
        model = '2466S'

        callbacks = lightStatus()

        device = SwitchedLightingControl_2663_222(mockPLM, address, cat,
                                                  subcat, product_key,
                                                  description, model)
        mockPLM.devices[address] = device
        assert device.states[0x01].name == 'outletTopOnOff'
        assert device.states[0x02].name == 'outletBottomOnOff'

        device.states[0x01].register_updates(callbacks.device_status_callback1)
        device.states[0x02].register_updates(callbacks.device_status_callback2)

        device.states[0x02].async_refresh_state()
        await asyncio.sleep(.1, loop)
        ackmsg = StandardSend(address,
                              COMMAND_LIGHT_STATUS_REQUEST_0X19_0X01,
                              acknak=MESSAGE_ACK)
        statusmsg = StandardReceive(address,
                                    target, {
                                        'cmd1': 0x03,
                                        'cmd2': 0x01
                                    },
                                    flags=MessageFlags.create(
                                        MESSAGE_TYPE_DIRECT_MESSAGE_ACK, 0, 2,
                                        3))
        mockPLM.message_received(ackmsg)
        await asyncio.sleep(.1, loop)
        mockPLM.message_received(statusmsg)
        await asyncio.sleep(.1, loop)
        assert callbacks.lightOnLevel2 == 0x00
コード例 #8
0
    def run_test(loop):
        """Asyncio test method."""
        plm = MockPLM(loop)
        address = '1a2b3c'
        cat = 0x01
        subcat = 0x04
        product_key = None
        description = 'SwitchLinc Dimmer (1000W)'
        model = '2476DH'
        device = DimmableLightingControl(plm, address, cat, subcat,
                                         product_key, description, model)

        assert device.address.hex == address
        assert device.cat == cat
        assert device.subcat == subcat
        assert device.product_key == 0x00  # Product key should not be None
        assert device.description == description
        assert device.model == model
        assert device.id == address

        plm.devices[device.address.hex] = device

        callbacks = MockCallbacks()
        device.states[0x01].register_updates(callbacks.callbackmethod1)

        receivedmsg = StandardReceive(address,
                                      '000001',
                                      COMMAND_LIGHT_ON_0X11_NONE,
                                      cmd2=0x66,
                                      flags=MessageFlags.create(
                                          MESSAGE_TYPE_ALL_LINK_BROADCAST, 0,
                                          2, 3))
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue1 == 0x66

        receivedmsg = StandardReceive(address,
                                      '000001',
                                      COMMAND_LIGHT_OFF_0X13_0X00,
                                      flags=MessageFlags.create(
                                          MESSAGE_TYPE_ALL_LINK_BROADCAST, 0,
                                          2, 3))
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue1 == 0x00
コード例 #9
0
    def run_test(loop):
        """Asyncio test to run."""
        plm = MockPLM(loop)
        address = '1a2b3c'
        target = '4d5e6f'
        cat = 0x01
        subcat = 0x04
        product_key = None
        description = 'SwitchLinc Dimmer (1000W)'
        model = '2476DH'

        device = DimmableLightingControl(plm, address, cat, subcat,
                                         product_key, description, model)

        assert device.address.hex == address
        assert device.cat == cat
        assert device.subcat == subcat
        assert device.product_key == 0x00  # Product key should not be None
        assert device.description == description
        assert device.model == model
        assert device.id == address
        plm.devices[device.address.hex] = device

        callbacks = MockCallbacks()
        device.states[0x01].register_updates(callbacks.callbackmethod1)

        device.async_refresh_state()
        yield from asyncio.sleep(.1, loop=loop)
        receivedmsg = StandardSend(address,
                                   COMMAND_LIGHT_STATUS_REQUEST_0X19_0X00,
                                   acknak=MESSAGE_ACK)
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        receivedmsg = StandardReceive(address,
                                      target, {
                                          'cmd1': 0x08,
                                          'cmd2': 0x27
                                      },
                                      flags=MessageFlags.create(
                                          MESSAGE_TYPE_DIRECT_MESSAGE_ACK, 0,
                                          2, 3))
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        sentmsg = StandardSend(address, COMMAND_LIGHT_STATUS_REQUEST_0X19_0X00)
        assert plm.sentmessage == sentmsg.hex
        assert callbacks.callbackvalue1 == 0x27
コード例 #10
0
    def run_test(loop):
        """Asyncio test."""
        plm = MockPLM(loop)
        address = '1a2b3c'
        target = '4d5e6f'

        cat = 0x01
        subcat = 0x2e
        product_key = 0x00
        description = 'FanLinc Dual Band'
        model = '2475F'

        device = DimmableLightingControl_2475F(plm, address, cat, subcat,
                                               product_key, description, model)

        plm.devices[device.address.hex] = device
        callbacks = MockCallbacks()
        device.states[0x02].register_updates(callbacks.callbackmethod1)

        device.states[0x02].async_refresh_state()
        yield from asyncio.sleep(.1, loop=loop)
        receivedmsg = StandardSend(address,
                                   COMMAND_LIGHT_STATUS_REQUEST_0X19_NONE,
                                   cmd2=0x03,
                                   acknak=MESSAGE_ACK)
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        receivedmsg = StandardReceive(address,
                                      target, {
                                          'cmd1': 0x08,
                                          'cmd2': 0x27
                                      },
                                      flags=MessageFlags.create(
                                          MESSAGE_TYPE_DIRECT_MESSAGE_ACK, 0,
                                          2, 3))
        plm.message_received(receivedmsg)
        yield from asyncio.sleep(.1, loop=loop)
        sentmsg = StandardSend(address,
                               COMMAND_LIGHT_STATUS_REQUEST_0X19_NONE,
                               cmd2=0x03)
        assert plm.sentmessage == sentmsg.hex
        assert callbacks.callbackvalue1 == 0x27
コード例 #11
0
    async def run_test(loop):
        """Asyncio test to run."""
        plm = MockPLM(loop)
        address = '1a2b3c'
        target = '4d5e6f'
        cat = 0x01
        subcat = 0x04
        product_key = None
        description = 'SwitchLinc Dimmer (1000W)'
        model = '2476DH'
        device = DimmableLightingControl(plm, address, cat, subcat,
                                         product_key, description, model)

        assert device.address.hex == address
        assert device.cat == cat
        assert device.subcat == subcat
        assert device.product_key == 0x00  # Product key should not be None
        assert device.description == description
        assert device.model == model
        assert device.id == address

        plm.devices[device.address.hex] = device

        callbacks = MockCallbacks()
        device.states[0x01].register_updates(callbacks.callbackmethod1)

        device.states[0x01].on()
        await asyncio.sleep(.1, loop=loop)
        plm.message_received(StandardSend(
            address, COMMAND_LIGHT_ON_0X11_NONE, cmd2=0xff,
            acknak=MESSAGE_ACK))
        await asyncio.sleep(.1, loop=loop)
        plm.message_received(StandardReceive(
            address, target, COMMAND_LIGHT_ON_0X11_NONE, cmd2=0xff,
            flags=MessageFlags.create(
                MESSAGE_TYPE_DIRECT_MESSAGE_ACK, 0, 2, 3)))
        await asyncio.sleep(.1, loop=loop)
        sentmsg = StandardSend(address, COMMAND_LIGHT_ON_0X11_NONE, cmd2=0xff)
        assert plm.sentmessage == sentmsg.hex
        assert callbacks.callbackvalue1 == 0xff

        device.states[0x01].off()
        await asyncio.sleep(.1, loop=loop)
        recievedmsg = StandardSend(address, COMMAND_LIGHT_OFF_0X13_0X00,
                                   acknak=MESSAGE_ACK)
        plm.message_received(recievedmsg)
        await asyncio.sleep(.1, loop=loop)
        recievedmsg = StandardReceive(
            address, target, COMMAND_LIGHT_OFF_0X13_0X00,
            flags=MessageFlags.create(MESSAGE_TYPE_DIRECT_MESSAGE_ACK,
                                      0, 2, 3))
        plm.message_received(recievedmsg)
        await asyncio.sleep(.1, loop=loop)
        sentmsg = StandardSend(address, COMMAND_LIGHT_OFF_0X13_0X00)
        assert plm.sentmessage == sentmsg.hex
        assert callbacks.callbackvalue1 == 0x00

        device.states[0x01].set_level(0x55)
        await asyncio.sleep(.1, loop=loop)
        recievedmsg = StandardSend(address, COMMAND_LIGHT_ON_0X11_NONE,
                                   cmd2=0x55, acknak=MESSAGE_ACK)
        plm.message_received(recievedmsg)
        await asyncio.sleep(.1, loop=loop)
        recievedmsg = StandardReceive(
            address, target, COMMAND_LIGHT_ON_0X11_NONE, cmd2=0x55,
            flags=MessageFlags.create(MESSAGE_TYPE_DIRECT_MESSAGE_ACK,
                                      0, 2, 3))
        plm.message_received(recievedmsg)
        await asyncio.sleep(.1, loop=loop)
        sentmsg = StandardSend(address, COMMAND_LIGHT_ON_0X11_NONE,
                               cmd2=0x55)
        assert plm.sentmessage == sentmsg.hex
        assert callbacks.callbackvalue1 == 0x55
コード例 #12
0
    async def run_test(loop):
        """Asyncio test."""
        class fanLincStatus():
            """Callback class to capture sensor changes."""

            lightOnLevel = None
            fanOnLevel = None

            # pylint: disable=unused-argument
            def device_status_callback1(self, device_id, state, value):
                """Callback method to capture light changes."""
                self.lightOnLevel = value

            # pylint: disable=unused-argument
            def device_status_callback2(self, device_id, state, value):
                """Callback method to capture fan changes."""
                self.fanOnLevel = value

        mockPLM = MockPLM(loop)
        address = '1a2b3c'
        target = '4d5e6f'

        cat = 0x01
        subcat = 0x2e
        product_key = 0x00
        description = 'FanLinc Dual Band'
        model = '2475F'

        callbacks = fanLincStatus()

        device = DimmableLightingControl_2475F(mockPLM, address, cat, subcat,
                                               product_key, description, model)

        mockPLM.devices[device.address.hex] = device

        assert device.states[0x01].name == 'lightOnLevel'
        assert device.states[0x02].name == 'fanOnLevel'

        device.states[0x01].register_updates(callbacks.device_status_callback1)
        device.states[0x02].register_updates(callbacks.device_status_callback2)

        device.states[0x01].async_refresh_state()
        await asyncio.sleep(.1, loop=loop)
        ackmsg = StandardSend(address, COMMAND_LIGHT_STATUS_REQUEST_0X19_0X00,
                              acknak=MESSAGE_ACK)
        statusmsg = StandardReceive(
            address, target, {'cmd1': 0xdf, 'cmd2': 0x55},
            flags=MessageFlags.create(MESSAGE_TYPE_DIRECT_MESSAGE_ACK,
                                      0, 2, 3))
        mockPLM.message_received(ackmsg)
        await asyncio.sleep(.1, loop=loop)
        mockPLM.message_received(statusmsg)
        await asyncio.sleep(.1, loop=loop)

        assert callbacks.lightOnLevel == 0x55

        device.states[0x02].async_refresh_state()
        await asyncio.sleep(.1, loop=loop)
        ackmsg = StandardSend(address, {'cmd1': 0x19, 'cmd2': 0x03},
                              flags=0x00, acknak=MESSAGE_ACK)
        statusmsg = StandardReceive(
            address, target, {'cmd1': 0xab, 'cmd2': 0x77},
            flags=MessageFlags.create(MESSAGE_TYPE_DIRECT_MESSAGE_ACK,
                                      0, 2, 3))
        mockPLM.message_received(ackmsg)
        await asyncio.sleep(.1, loop=loop)
        mockPLM.message_received(statusmsg)
        await asyncio.sleep(.1, loop=loop)

        assert callbacks.lightOnLevel == 0x55
        assert callbacks.fanOnLevel == 0x77
コード例 #13
0
    def _run_test(loop):
        """Test on/off sensor."""
        plm = MockPLM(loop)

        address = '1a2b3c'
        cat = 0x10
        subcat = 0x00
        product_key = 0x00
        description = 'Generic Security, Heath and Safety Device'
        model = ''

        callbacks = MockCallbacks()

        device = SecurityHealthSafety_2852_222(plm, address, cat, subcat,
                                               product_key, description, model)
        plm.devices[address] = device
        device.states[0x01].register_updates(callbacks.callbackmethod1)
        device.states[0x02].register_updates(callbacks.callbackmethod2)
        device.states[0x04].register_updates(callbacks.callbackmethod4)

        # Test Dry message received
        msg = StandardReceive(
            address=address,
            target=bytearray([0x00, 0x00, 0x01]),
            commandtuple=COMMAND_LIGHT_ON_0X11_NONE, cmd2=0x01,
            flags=MessageFlags.create(MESSAGE_TYPE_ALL_LINK_BROADCAST,
                                      0, 3, 3))
        plm.message_received(msg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue1 == 1
        assert callbacks.callbackvalue2 == 0
        assert callbacks.callbackvalue4 == 0x11

        # Test wet message received
        msg = StandardReceive(
            address=address,
            target=bytearray([0x00, 0x00, 0x02]),
            commandtuple=COMMAND_LIGHT_ON_0X11_NONE, cmd2=0x02,
            flags=MessageFlags.create(MESSAGE_TYPE_ALL_LINK_BROADCAST,
                                      0, 3, 3))
        plm.message_received(msg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue1 == 0
        assert callbacks.callbackvalue2 == 1
        assert callbacks.callbackvalue4 == 0x13

        # Test dry heartbeat received
        msg = StandardReceive(
            address=address,
            target=bytearray([0x00, 0x00, 0x04]),
            commandtuple=COMMAND_LIGHT_ON_0X11_NONE, cmd2=0x04,
            flags=MessageFlags.create(MESSAGE_TYPE_ALL_LINK_BROADCAST,
                                      0, 3, 3))
        plm.message_received(msg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue1 == 1
        assert callbacks.callbackvalue2 == 0

        # Test wet heartbeat received
        msg = StandardReceive(
            address=address,
            target=bytearray([0x00, 0x00, 0x04]),
            commandtuple={'cmd1': 0x13, 'cmd2': 0x04},
            flags=MessageFlags.create(MESSAGE_TYPE_ALL_LINK_BROADCAST,
                                      0, 3, 3))
        plm.message_received(msg)
        yield from asyncio.sleep(.1, loop=loop)
        assert callbacks.callbackvalue1 == 0
        assert callbacks.callbackvalue2 == 1
        assert callbacks.callbackvalue4 == 0x13