示例#1
0
async def test_discover_sensor_noautoadd(hass, rfxtrx):
    """Test with discover of sensor when auto add is False."""
    await async_setup_component(
        hass,
        "sensor",
        {
            "sensor": {
                "platform": "rfxtrx",
                "automatic_add": False,
                "devices": {}
            }
        },
    )
    await hass.async_block_till_done()

    event = rfxtrx_core.get_rfx_object("0a520801070100b81b0279")
    event.data = bytearray(b"\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y")

    assert 0 == len(rfxtrx_core.RFX_DEVICES)
    await _signal_event(hass, event)
    assert 0 == len(rfxtrx_core.RFX_DEVICES)

    await _signal_event(hass, event)
    assert 0 == len(rfxtrx_core.RFX_DEVICES)

    event = rfxtrx_core.get_rfx_object("0a52080405020095240279")
    event.data = bytearray(b"\nR\x08\x04\x05\x02\x00\x95$\x02y")
    await _signal_event(hass, event)
    assert 0 == len(rfxtrx_core.RFX_DEVICES)

    event = rfxtrx_core.get_rfx_object("0a52085e070100b31b0279")
    event.data = bytearray(b"\nR\x08^\x07\x01\x00\xb3\x1b\x02y")
    await _signal_event(hass, event)
    assert 0 == len(rfxtrx_core.RFX_DEVICES)
    def test_discover_sensor_noautoadd(self):
        """Test with discover of sensor when auto add is False."""
        self.assertTrue(setup_component(self.hass, 'sensor', {
            'sensor': {'platform': 'rfxtrx',
                       'automatic_add': False,
                       'devices': {}}}))

        event = rfxtrx_core.get_rfx_object('0a520801070100b81b0279')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')

        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0a52080405020095240279')
        event.data = bytearray(b'\nR\x08\x04\x05\x02\x00\x95$\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
示例#3
0
    def test_discover_sensor_noautoadd(self):
        """Test with discover of sensor when auto add is False."""
        assert setup_component(
            self.hass,
            "sensor",
            {
                "sensor": {
                    "platform": "rfxtrx",
                    "automatic_add": False,
                    "devices": {}
                }
            },
        )

        event = rfxtrx_core.get_rfx_object("0a520801070100b81b0279")
        event.data = bytearray(b"\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y")

        assert 0 == len(rfxtrx_core.RFX_DEVICES)
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)

        event = rfxtrx_core.get_rfx_object("0a52080405020095240279")
        event.data = bytearray(b"\nR\x08\x04\x05\x02\x00\x95$\x02y")
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)

        event = rfxtrx_core.get_rfx_object("0a52085e070100b31b0279")
        event.data = bytearray(b"\nR\x08^\x07\x01\x00\xb3\x1b\x02y")
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)
示例#4
0
    def test_discover_sensor_noautoadd(self):
        """Test with discover of sensor when auto add is False."""
        self.assertTrue(
            _setup_component(
                self.hass, 'sensor', {
                    'sensor': {
                        'platform': 'rfxtrx',
                        'automatic_add': False,
                        'devices': {}
                    }
                }))

        event = rfxtrx_core.get_rfx_object('0a520801070100b81b0279')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')

        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0a52080405020095240279')
        event.data = bytearray(b'\nR\x08\x04\x05\x02\x00\x95$\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
示例#5
0
    def test_discover_sensor_noautoadd(self):
        """Test with discover of sensor when auto add is False."""
        config = {'automatic_add': False, 'devices': {}}
        devices = []

        def add_dev_callback(devs):
            """Add a callback to add devices."""
            for dev in devs:
                devices.append(dev)

        rfxtrx.setup_platform(self.hass, config, add_dev_callback)
        event = rfxtrx_core.get_rfx_object('0a520801070100b81b0279')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')

        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        event = rfxtrx_core.get_rfx_object('0a52080405020095240279')
        event.data = bytearray(b'\nR\x08\x04\x05\x02\x00\x95$\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))
示例#6
0
    def test_discover_sensor_noautoadd(self):
        """Test with discover of sensor when auto add is False."""
        config = {'automatic_add': False, 'devices': {}}
        devices = []

        def add_dev_callback(devs):
            """Add a callback to add devices."""
            for dev in devs:
                devices.append(dev)

        rfxtrx.setup_platform(self.hass, config, add_dev_callback)
        event = rfxtrx_core.get_rfx_object('0a520801070100b81b0279')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')

        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        event = rfxtrx_core.get_rfx_object('0a52080405020095240279')
        event.data = bytearray(b'\nR\x08\x04\x05\x02\x00\x95$\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))
    def test_discover_switch(self):
        """Test with discovery of switches."""
        self.assertTrue(
            _setup_component(
                self.hass, 'switch', {
                    'switch': {
                        'platform': 'rfxtrx',
                        'automatic_add': True,
                        'devices': {}
                    }
                }))

        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x10, 0x01, 0x18, 0xcd, 0xea, 0x01, 0x01, 0x0f,
            0x70
        ])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['118cdea2']
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual('<Entity 0b1100100118cdea01010f70: on>',
                         entity.__str__())

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0b1100100118cdeb02010f70')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x12, 0x01, 0x18, 0xcd, 0xea, 0x02, 0x00, 0x00,
            0x70
        ])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['118cdeb2']
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual('<Entity 0b1100120118cdea02000070: on>',
                         entity.__str__())

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a light
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([
            0x0b, 0x11, 0x11, 0x10, 0x01, 0x18, 0xcd, 0xea, 0x01, 0x02, 0x0f,
            0x70
        ])
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a rollershutter
        event = rfxtrx_core.get_rfx_object('0a1400adf394ab020e0060')
        event.data = bytearray(
            [0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94, 0xAB, 0x02, 0x0E, 0x00, 0x60])
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
示例#8
0
    def test_discover_light_noautoadd(self):
        """Test with discover of light when auto add is False."""
        config = {'automatic_add': False, 'devices': {}}
        devices = []

        def add_dev_callback(devs):
            """Add a callback to add devices."""
            for dev in devs:
                devices.append(dev)

        rfxtrx.setup_platform(self.hass, config, add_dev_callback)

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02020070')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x12, 0x01, 0x18,
                                0xcd, 0xea, 0x02, 0x02, 0x00, 0x70])
        with patch('homeassistant.components.light.' +
                   'rfxtrx.RfxtrxLight.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02010070')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x12, 0x01, 0x18,
                                0xcd, 0xea, 0x02, 0x01, 0x00, 0x70])
        with patch('homeassistant.components.light.' +
                   'rfxtrx.RfxtrxLight.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02020070')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x12, 0x01, 0x18,
                                0xcd, 0xea, 0x02, 0x02, 0x00, 0x70])
        with patch('homeassistant.components.light.' +
                   'rfxtrx.RfxtrxLight.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        # Trying to add a switch
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x10, 0x01, 0x18,
                                0xcd, 0xea, 0x01, 0x01, 0x0f, 0x70])
        with patch('homeassistant.components.light.' +
                   'rfxtrx.RfxtrxLight.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))
示例#9
0
async def test_discover_switch(hass, rfxtrx):
    """Test with discovery of switches."""
    await async_setup_component(
        hass,
        "switch",
        {
            "switch": {
                "platform": "rfxtrx",
                "automatic_add": True,
                "devices": {}
            }
        },
    )
    await hass.async_block_till_done()

    event = rfxtrx_core.get_rfx_object("0b1100100118cdea02010f70")
    event.data = bytearray([
        0x0B, 0x11, 0x00, 0x10, 0x01, 0x18, 0xCD, 0xEA, 0x01, 0x01, 0x0F, 0x70
    ])

    await _signal_event(hass, event)
    entity = rfxtrx_core.RFX_DEVICES["118cdea_2"]
    assert 1 == len(rfxtrx_core.RFX_DEVICES)
    assert "<Entity 0b1100100118cdea01010f70: on>" == entity.__str__()

    await _signal_event(hass, event)
    assert 1 == len(rfxtrx_core.RFX_DEVICES)

    event = rfxtrx_core.get_rfx_object("0b1100100118cdeb02010f70")
    event.data = bytearray([
        0x0B, 0x11, 0x00, 0x12, 0x01, 0x18, 0xCD, 0xEA, 0x02, 0x00, 0x00, 0x70
    ])

    await _signal_event(hass, event)
    entity = rfxtrx_core.RFX_DEVICES["118cdeb_2"]
    assert 2 == len(rfxtrx_core.RFX_DEVICES)
    assert "<Entity 0b1100120118cdea02000070: on>" == entity.__str__()

    # Trying to add a sensor
    event = rfxtrx_core.get_rfx_object("0a52085e070100b31b0279")
    event.data = bytearray(b"\nR\x08^\x07\x01\x00\xb3\x1b\x02y")
    await _signal_event(hass, event)
    assert 2 == len(rfxtrx_core.RFX_DEVICES)

    # Trying to add a light
    event = rfxtrx_core.get_rfx_object("0b1100100118cdea02010f70")
    event.data = bytearray([
        0x0B, 0x11, 0x11, 0x10, 0x01, 0x18, 0xCD, 0xEA, 0x01, 0x02, 0x0F, 0x70
    ])
    await _signal_event(hass, event)
    assert 2 == len(rfxtrx_core.RFX_DEVICES)

    # Trying to add a rollershutter
    event = rfxtrx_core.get_rfx_object("0a1400adf394ab020e0060")
    event.data = bytearray(
        [0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94, 0xAB, 0x02, 0x0E, 0x00, 0x60])
    await _signal_event(hass, event)
    assert 2 == len(rfxtrx_core.RFX_DEVICES)
示例#10
0
    def test_discover_sensor(self):
        """Test with discovery of sensor."""
        self.assertTrue(setup_component(self.hass, 'sensor', {
            'sensor': {'platform': 'rfxtrx',
                       'automatic_add': True,
                       'devices': {}}}))

        event = rfxtrx_core.get_rfx_object('0a520801070100b81b0279')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)

        entity = rfxtrx_core.RFX_DEVICES['sensor_0701']['Temperature']
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual({'Humidity status': 'normal',
                          'Temperature': 18.4,
                          'Rssi numeric': 7, 'Humidity': 27,
                          'Battery numeric': 9,
                          'Humidity status numeric': 2},
                         entity.device_state_attributes)
        self.assertEqual('0a520801070100b81b0279',
                         entity.__str__())

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0a52080405020095240279')
        event.data = bytearray(b'\nR\x08\x04\x05\x02\x00\x95$\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['sensor_0502']['Temperature']
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual({'Humidity status': 'normal',
                          'Temperature': 14.9,
                          'Rssi numeric': 7, 'Humidity': 36,
                          'Battery numeric': 9,
                          'Humidity status numeric': 2},
                         entity.device_state_attributes)
        self.assertEqual('0a52080405020095240279',
                         entity.__str__())

        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['sensor_0701']['Temperature']
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual({'Humidity status': 'normal',
                          'Temperature': 17.9,
                          'Rssi numeric': 7, 'Humidity': 27,
                          'Battery numeric': 9,
                          'Humidity status numeric': 2},
                         entity.device_state_attributes)
        self.assertEqual('0a520801070100b81b0279',
                         entity.__str__())

        # trying to add a switch
        event = rfxtrx_core.get_rfx_object('0b1100cd0213c7f210010f70')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
    def test_discover_sensor(self):
        """Test with discovery of sensor."""
        self.assertTrue(_setup_component(self.hass, 'sensor', {
            'sensor': {'platform': 'rfxtrx',
                       'automatic_add': True,
                       'devices': {}}}))

        event = rfxtrx_core.get_rfx_object('0a520801070100b81b0279')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)

        entity = rfxtrx_core.RFX_DEVICES['sensor_0701']
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual({'Humidity status': 'normal',
                          'Temperature': 18.4,
                          'Rssi numeric': 7, 'Humidity': 27,
                          'Battery numeric': 9,
                          'Humidity status numeric': 2},
                         entity.device_state_attributes)
        self.assertEqual('sensor_0701 : 0a520801070100b81b0279',
                         entity.__str__())

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0a52080405020095240279')
        event.data = bytearray(b'\nR\x08\x04\x05\x02\x00\x95$\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['sensor_0502']
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual({'Humidity status': 'normal',
                          'Temperature': 14.9,
                          'Rssi numeric': 7, 'Humidity': 36,
                          'Battery numeric': 9,
                          'Humidity status numeric': 2},
                         entity.device_state_attributes)
        self.assertEqual('sensor_0502 : 0a52080405020095240279',
                         entity.__str__())

        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['sensor_0701']
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual({'Humidity status': 'normal',
                          'Temperature': 17.9,
                          'Rssi numeric': 7, 'Humidity': 27,
                          'Battery numeric': 9,
                          'Humidity status numeric': 2},
                         entity.device_state_attributes)
        self.assertEqual('sensor_0701 : 0a520801070100b81b0279',
                         entity.__str__())

        # trying to add a switch
        event = rfxtrx_core.get_rfx_object('0b1100cd0213c7f210010f70')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
示例#12
0
    def test_discover_switch_noautoadd(self):
        """Test with discovery of switch when auto add is False."""
        config = {'automatic_add': False, 'devices': {}}
        devices = []

        def add_dev_callback(devs):
            """Add a callback to add devices."""
            for dev in devs:
                devices.append(dev)

        rfxtrx.setup_platform(self.hass, config, add_dev_callback)

        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x10, 0x01, 0x18,
                                0xcd, 0xea, 0x01, 0x01, 0x0f, 0x70])
        with patch('homeassistant.components.switch.' +
                   'rfxtrx.RfxtrxSwitch.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        with patch('homeassistant.components.switch.' +
                   'rfxtrx.RfxtrxSwitch.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        event = rfxtrx_core.get_rfx_object('0b1100100118cdeb02010f70')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x12, 0x01, 0x18,
                                0xcd, 0xea, 0x02, 0x00, 0x00, 0x70])
        with patch('homeassistant.components.switch.' +
                   'rfxtrx.RfxtrxSwitch.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))

        # Trying to add a light
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([0x0b, 0x11, 0x11, 0x10, 0x01,
                                0x18, 0xcd, 0xea, 0x01, 0x02, 0x0f, 0x70])
        with patch('homeassistant.components.switch.' +
                   'rfxtrx.RfxtrxSwitch.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(0, len(devices))
示例#13
0
    def test_discover_light(self):
        """Test with discovery of lights."""
        self.assertTrue(
            _setup_component(
                self.hass, 'light', {
                    'light': {
                        'platform': 'rfxtrx',
                        'automatic_add': True,
                        'devices': {}
                    }
                }))

        event = rfxtrx_core.get_rfx_object('0b11009e00e6116202020070')
        event.data = bytearray(b'\x0b\x11\x00\x9e\x00\xe6\x11b\x02\x02\x00p')

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['0e611622']
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual('<Entity 0b11009e00e6116202020070: on>',
                         entity.__str__())

        event = rfxtrx_core.get_rfx_object('0b11009e00e6116201010070')
        event.data = bytearray(b'\x0b\x11\x00\x9e\x00\xe6\x11b\x01\x01\x00p')

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02020070')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x12, 0x01, 0x18, 0xcd, 0xea, 0x02, 0x02, 0x00,
            0x70
        ])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['118cdea2']
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual('<Entity 0b1100120118cdea02020070: on>',
                         entity.__str__())

        # trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        # trying to add a swicth
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x10, 0x01, 0x18, 0xcd, 0xea, 0x01, 0x01, 0x0f,
            0x70
        ])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
示例#14
0
    def test_discover_light_noautoadd(self):
        """Test with discover of light when auto add is False."""
        self.assertTrue(
            _setup_component(
                self.hass, 'light', {
                    'light': {
                        'platform': 'rfxtrx',
                        'automatic_add': False,
                        'devices': {}
                    }
                }))

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02020070')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x12, 0x01, 0x18, 0xcd, 0xea, 0x02, 0x02, 0x00,
            0x70
        ])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02010070')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x12, 0x01, 0x18, 0xcd, 0xea, 0x02, 0x01, 0x00,
            0x70
        ])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02020070')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x12, 0x01, 0x18, 0xcd, 0xea, 0x02, 0x02, 0x00,
            0x70
        ])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a switch
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x10, 0x01, 0x18, 0xcd, 0xea, 0x01, 0x01, 0x0f,
            0x70
        ])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
示例#15
0
    def test_discover_switch_noautoadd(self):
        """Test with discovery of switch when auto add is False."""
        assert setup_component(
            self.hass, 'switch', {
                'switch': {
                    'platform': 'rfxtrx',
                    'automatic_add': False,
                    'devices': {}
                }
            })

        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x10, 0x01, 0x18, 0xcd, 0xea, 0x01, 0x01, 0x0f,
            0x70
        ])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)

        event = rfxtrx_core.get_rfx_object('0b1100100118cdeb02010f70')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x12, 0x01, 0x18, 0xcd, 0xea, 0x02, 0x00, 0x00,
            0x70
        ])
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)

        # Trying to add a light
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([
            0x0b, 0x11, 0x11, 0x10, 0x01, 0x18, 0xcd, 0xea, 0x01, 0x02, 0x0f,
            0x70
        ])
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)

        # Trying to add a rollershutter
        event = rfxtrx_core.get_rfx_object('0a1400adf394ab020e0060')
        event.data = bytearray(
            [0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94, 0xAB, 0x02, 0x0E, 0x00, 0x60])
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)
示例#16
0
    def test_discover_switch(self):
        """Test with discovery of switches."""
        assert setup_component(
            self.hass,
            "switch",
            {"switch": {"platform": "rfxtrx", "automatic_add": True, "devices": {}}},
        )

        event = rfxtrx_core.get_rfx_object("0b1100100118cdea02010f70")
        event.data = bytearray(
            [0x0B, 0x11, 0x00, 0x10, 0x01, 0x18, 0xCD, 0xEA, 0x01, 0x01, 0x0F, 0x70]
        )

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES["118cdea2"]
        assert 1 == len(rfxtrx_core.RFX_DEVICES)
        assert "<Entity 0b1100100118cdea01010f70: on>" == entity.__str__()

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 1 == len(rfxtrx_core.RFX_DEVICES)

        event = rfxtrx_core.get_rfx_object("0b1100100118cdeb02010f70")
        event.data = bytearray(
            [0x0B, 0x11, 0x00, 0x12, 0x01, 0x18, 0xCD, 0xEA, 0x02, 0x00, 0x00, 0x70]
        )

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES["118cdeb2"]
        assert 2 == len(rfxtrx_core.RFX_DEVICES)
        assert "<Entity 0b1100120118cdea02000070: on>" == entity.__str__()

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object("0a52085e070100b31b0279")
        event.data = bytearray(b"\nR\x08^\x07\x01\x00\xb3\x1b\x02y")
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 2 == len(rfxtrx_core.RFX_DEVICES)

        # Trying to add a light
        event = rfxtrx_core.get_rfx_object("0b1100100118cdea02010f70")
        event.data = bytearray(
            [0x0B, 0x11, 0x11, 0x10, 0x01, 0x18, 0xCD, 0xEA, 0x01, 0x02, 0x0F, 0x70]
        )
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 2 == len(rfxtrx_core.RFX_DEVICES)

        # Trying to add a rollershutter
        event = rfxtrx_core.get_rfx_object("0a1400adf394ab020e0060")
        event.data = bytearray(
            [0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94, 0xAB, 0x02, 0x0E, 0x00, 0x60]
        )
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 2 == len(rfxtrx_core.RFX_DEVICES)
示例#17
0
    def test_discover_switch(self):
        """Test with discovery of switches."""
        self.assertTrue(_setup_component(self.hass, 'switch', {
            'switch': {'platform': 'rfxtrx',
                       'automatic_add': True,
                       'devices': {}}}))

        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x10, 0x01, 0x18,
                                0xcd, 0xea, 0x01, 0x01, 0x0f, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['118cdea2']
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual('<Entity 0b1100100118cdea01010f70: on>',
                         entity.__str__())

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0b1100100118cdeb02010f70')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x12, 0x01, 0x18,
                                0xcd, 0xea, 0x02, 0x00, 0x00, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['118cdeb2']
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual('<Entity 0b1100120118cdea02000070: on>',
                         entity.__str__())

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a light
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([0x0b, 0x11, 0x11, 0x10, 0x01, 0x18,
                                0xcd, 0xea, 0x01, 0x02, 0x0f, 0x70])
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a rollershutter
        event = rfxtrx_core.get_rfx_object('0a1400adf394ab020e0060')
        event.data = bytearray([0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94,
                                0xAB, 0x02, 0x0E, 0x00, 0x60])
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
示例#18
0
    def test_fire_event_sensor(self):
        """Test fire event."""
        self.assertTrue(setup_component(self.hass, 'rfxtrx', {
            'rfxtrx': {
                'device': '/dev/serial/by-id/usb' +
                          '-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0',
                'dummy': True}
        }))
        self.assertTrue(setup_component(self.hass, 'sensor', {
            'sensor': {'platform': 'rfxtrx',
                       'automatic_add': True,
                       'devices':
                           {'0a520802060100ff0e0269': {
                               'name': 'Test',
                               rfxtrx.ATTR_FIREEVENT: True}
                            }}}))

        calls = []

        @callback
        def record_event(event):
            """Add recorded event to set."""
            calls.append(event)

        self.hass.bus.listen("signal_received", record_event)
        self.hass.block_till_done()
        event = rfxtrx.get_rfx_object('0a520802060101ff0f0269')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS[0](event)

        self.hass.block_till_done()
        self.assertEqual(1, len(calls))
        self.assertEqual(calls[0].data,
                         {'entity_id': 'sensor.test'})
示例#19
0
    def test_fire_event_sensor(self, mock_sleep):
        """Test fire event."""
        self.assertTrue(_setup_component(self.hass, 'rfxtrx', {
            'rfxtrx': {
                'device': '/dev/serial/by-id/usb' +
                          '-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0',
                'dummy': True}
        }))
        self.assertTrue(_setup_component(self.hass, 'sensor', {
            'sensor': {'platform': 'rfxtrx',
                       'automatic_add': True,
                       'devices':
                           {'0a520802060100ff0e0269': {
                               'name': 'Test',
                               rfxtrx.ATTR_FIREEVENT: True}
                            }}}))

        calls = []

        def record_event(event):
            """Add recorded event to set."""
            calls.append(event)

        self.hass.bus.listen("signal_received", record_event)
        self.hass.block_till_done()
        event = rfxtrx.get_rfx_object('0a520802060101ff0f0269')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS[0](event)

        self.hass.block_till_done()
        self.assertEqual(1, len(calls))
        self.assertEqual(calls[0].data,
                         {'entity_id': 'sensor.test'})
示例#20
0
async def test_fire_event(hass):
    """Test fire event."""
    assert await async_setup_component(
        hass,
        "rfxtrx",
        {
            "rfxtrx": {
                "device": "/dev/serial/by-id/usb" +
                "-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0",
                "dummy": True,
            }
        },
    )

    assert await async_setup_component(
        hass,
        "switch",
        {
            "switch": {
                "platform": "rfxtrx",
                "automatic_add": True,
                "devices": {
                    "0b1100cd0213c7f210010f51": {
                        "name": "Test",
                        rfxtrx.ATTR_FIRE_EVENT: True,
                    }
                },
            }
        },
    )
    await hass.async_block_till_done()

    calls = []

    @callback
    def record_event(event):
        """Add recorded event to set."""
        calls.append(event)

    hass.bus.async_listen(rfxtrx.EVENT_BUTTON_PRESSED, record_event)
    await hass.async_block_till_done()
    entity = rfxtrx.RFX_DEVICES["213c7f2_16"]
    entity.update_state(False, 0)
    assert "Test" == entity.name
    assert "off" == entity.state
    assert entity.should_fire_event

    event = rfxtrx.get_rfx_object("0b1100cd0213c7f210010f51")
    event.data = bytearray([
        0x0B, 0x11, 0x00, 0x10, 0x01, 0x18, 0xCD, 0xEA, 0x01, 0x01, 0x0F, 0x70
    ])
    await _signal_event(hass, event)
    await hass.async_block_till_done()

    assert event.values["Command"] == "On"
    assert "on" == entity.state
    assert hass.states.get("switch.test").state == "on"
    assert 1 == len(calls)
    assert calls[0].data == {"entity_id": "switch.test", "state": "on"}
示例#21
0
    def test_discover_covers(self):
        """Test with discovery of covers."""
        assert setup_component(
            self.hass,
            "cover",
            {
                "cover": {
                    "platform": "rfxtrx",
                    "automatic_add": True,
                    "devices": {}
                }
            },
        )

        event = rfxtrx_core.get_rfx_object("0a140002f38cae010f0070")
        event.data = bytearray(
            [0x0A, 0x14, 0x00, 0x02, 0xF3, 0x8C, 0xAE, 0x01, 0x0F, 0x00, 0x70])

        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        assert 1 == len(rfxtrx_core.RFX_DEVICES)

        event = rfxtrx_core.get_rfx_object("0a1400adf394ab020e0060")
        event.data = bytearray(
            [0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94, 0xAB, 0x02, 0x0E, 0x00, 0x60])

        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        assert 2 == len(rfxtrx_core.RFX_DEVICES)

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object("0a52085e070100b31b0279")
        event.data = bytearray(b"\nR\x08^\x07\x01\x00\xb3\x1b\x02y")
        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        assert 2 == len(rfxtrx_core.RFX_DEVICES)

        # Trying to add a light
        event = rfxtrx_core.get_rfx_object("0b1100100118cdea02010f70")
        event.data = bytearray([
            0x0B, 0x11, 0x11, 0x10, 0x01, 0x18, 0xCD, 0xEA, 0x01, 0x02, 0x0F,
            0x70
        ])
        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        assert 2 == len(rfxtrx_core.RFX_DEVICES)
示例#22
0
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
    """ Setup the RFXtrx platform. """

    # Add switch from config file
    switchs = []
    devices = config.get('devices')
    if devices:
        for entity_id, entity_info in devices.items():
            if entity_id not in rfxtrx.RFX_DEVICES:
                _LOGGER.info("Add %s rfxtrx.switch", entity_info['name'])
                rfxobject = rfxtrx.get_rfx_object(entity_info['packetid'])
                newswitch = RfxtrxSwitch(entity_info['name'], rfxobject, False)
                rfxtrx.RFX_DEVICES[entity_id] = newswitch
                switchs.append(newswitch)

    add_devices_callback(switchs)

    def switch_update(event):
        """ Callback for sensor updates from the RFXtrx gateway. """
        if isinstance(event.device, LightingDevice):
            return

        # Add entity if not exist and the automatic_add is True
        entity_id = slugify(event.device.id_string.lower())
        if entity_id not in rfxtrx.RFX_DEVICES:
            automatic_add = config.get('automatic_add', False)
            if not automatic_add:
                return

            _LOGGER.info(
                "Automatic add %s rfxtrx.switch (Class: %s Sub: %s)",
                entity_id,
                event.device.__class__.__name__,
                event.device.subtype
            )
            pkt_id = "".join("{0:02x}".format(x) for x in event.data)
            entity_name = "%s : %s" % (entity_id, pkt_id)
            new_switch = RfxtrxSwitch(entity_name, event, False)
            rfxtrx.RFX_DEVICES[entity_id] = new_switch
            add_devices_callback([new_switch])

        # Check if entity exists or previously added automatically
        if entity_id in rfxtrx.RFX_DEVICES:
            _LOGGER.debug(
                "EntityID: %s switch_update. Command: %s",
                entity_id,
                event.values['Command']
            )
            if event.values['Command'] == 'On'\
                    or event.values['Command'] == 'Off':
                if event.values['Command'] == 'On':
                    rfxtrx.RFX_DEVICES[entity_id].turn_on()
                else:
                    rfxtrx.RFX_DEVICES[entity_id].turn_off()

    # Subscribe to main rfxtrx events
    if switch_update not in rfxtrx.RECEIVED_EVT_SUBSCRIBERS:
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS.append(switch_update)
示例#23
0
    def test_discover_light(self):
        """Test with discovery of lights."""
        self.assertTrue(_setup_component(self.hass, 'light', {
            'light': {'platform': 'rfxtrx',
                      'automatic_add': True,
                      'devices': {}}}))

        event = rfxtrx_core.get_rfx_object('0b11009e00e6116202020070')
        event.data = bytearray(b'\x0b\x11\x00\x9e\x00\xe6\x11b\x02\x02\x00p')

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['0e611622']
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual('<Entity 0e611622 : 0b11009e00e6116202020070: on>',
                         entity.__str__())

        event = rfxtrx_core.get_rfx_object('0b11009e00e6116201010070')
        event.data = bytearray(b'\x0b\x11\x00\x9e\x00\xe6\x11b\x01\x01\x00p')

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02020070')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x12, 0x01, 0x18,
                                0xcd, 0xea, 0x02, 0x02, 0x00, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['118cdea2']
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual('<Entity 118cdea2 : 0b1100120118cdea02020070: on>',
                         entity.__str__())

        # trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        # trying to add a swicth
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x10, 0x01, 0x18,
                                0xcd, 0xea, 0x01, 0x01, 0x0f, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
示例#24
0
    def test_fire_event(self):
        """Test fire event."""

        self.assertTrue(
            _setup_component(
                self.hass, 'rfxtrx', {
                    'rfxtrx': {
                        'device': '/dev/serial/by-id/usb' +
                        '-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0',
                        'dummy': True
                    }
                }))
        self.assertTrue(
            _setup_component(
                self.hass, 'switch', {
                    'switch': {
                        'platform': 'rfxtrx',
                        'automatic_add': True,
                        'devices': {
                            '0b1100cd0213c7f210010f51': {
                                'name': 'Test',
                                rfxtrx.ATTR_FIREEVENT: True
                            }
                        }
                    }
                }))

        calls = []

        def record_event(event):
            """Add recorded event to set."""
            calls.append(event)

        self.hass.bus.listen(rfxtrx.EVENT_BUTTON_PRESSED, record_event)

        entity = rfxtrx.RFX_DEVICES['213c7f216']
        self.assertEqual('Test', entity.name)
        self.assertEqual('off', entity.state)
        self.assertTrue(entity.should_fire_event)

        event = rfxtrx.get_rfx_object('0b1100cd0213c7f210010f51')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x10, 0x01, 0x18, 0xcd, 0xea, 0x01, 0x01, 0x0f,
            0x70
        ])
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.hass.pool.block_till_done()

        self.assertEqual(event.values['Command'], "On")
        self.assertEqual('on', entity.state)
        self.assertEqual(self.hass.states.get('switch.test').state, 'on')
        self.assertEqual(1, len(rfxtrx.RFX_DEVICES))
        self.assertEqual(1, len(calls))
        self.assertEqual(calls[0].data, {
            'entity_id': 'switch.test',
            'state': 'on'
        })
示例#25
0
    def test_discover_covers(self):
        """Test with discovery of covers."""
        self.assertTrue(
            _setup_component(
                self.hass, 'cover', {
                    'cover': {
                        'platform': 'rfxtrx',
                        'automatic_add': True,
                        'devices': {}
                    }
                }))

        event = rfxtrx_core.get_rfx_object('0a140002f38cae010f0070')
        event.data = bytearray(
            [0x0A, 0x14, 0x00, 0x02, 0xF3, 0x8C, 0xAE, 0x01, 0x0F, 0x00, 0x70])

        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0a1400adf394ab020e0060')
        event.data = bytearray(
            [0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94, 0xAB, 0x02, 0x0E, 0x00, 0x60])

        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a light
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([
            0x0b, 0x11, 0x11, 0x10, 0x01, 0x18, 0xcd, 0xea, 0x01, 0x02, 0x0f,
            0x70
        ])
        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
示例#26
0
        async def _signal_event(packet_id):
            event = rfxtrx.get_rfx_object(packet_id)
            await hass.async_add_executor_job(
                rfx.event_callback,
                event,
            )

            await hass.async_block_till_done()
            await hass.async_block_till_done()
            return event
示例#27
0
async def test_discover_covers(hass, rfxtrx):
    """Test with discovery of covers."""
    assert await async_setup_component(
        hass,
        "cover",
        {
            "cover": {
                "platform": "rfxtrx",
                "automatic_add": True,
                "devices": {}
            }
        },
    )
    await hass.async_block_till_done()

    event = rfxtrx_core.get_rfx_object("0a140002f38cae010f0070")
    event.data = bytearray(
        [0x0A, 0x14, 0x00, 0x02, 0xF3, 0x8C, 0xAE, 0x01, 0x0F, 0x00, 0x70])

    await _signal_event(hass, event)
    assert 1 == len(rfxtrx_core.RFX_DEVICES)

    event = rfxtrx_core.get_rfx_object("0a1400adf394ab020e0060")
    event.data = bytearray(
        [0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94, 0xAB, 0x02, 0x0E, 0x00, 0x60])

    await _signal_event(hass, event)
    assert 2 == len(rfxtrx_core.RFX_DEVICES)

    # Trying to add a sensor
    event = rfxtrx_core.get_rfx_object("0a52085e070100b31b0279")
    event.data = bytearray(b"\nR\x08^\x07\x01\x00\xb3\x1b\x02y")
    await _signal_event(hass, event)
    assert 2 == len(rfxtrx_core.RFX_DEVICES)

    # Trying to add a light
    event = rfxtrx_core.get_rfx_object("0b1100100118cdea02010f70")
    event.data = bytearray([
        0x0B, 0x11, 0x11, 0x10, 0x01, 0x18, 0xCD, 0xEA, 0x01, 0x02, 0x0F, 0x70
    ])
    await _signal_event(hass, event)
    assert 2 == len(rfxtrx_core.RFX_DEVICES)
示例#28
0
async def _signal_event(hass, packet_id):
    event = rfxtrx.get_rfx_object(packet_id)

    await hass.async_add_executor_job(
        hass.data[rfxtrx.DATA_RFXOBJECT].event_callback,
        event,
    )

    await hass.async_block_till_done()
    await hass.async_block_till_done()
    return event
示例#29
0
    def test_discover_light_noautoadd(self):
        """Test with discover of light when auto add is False."""
        self.assertTrue(_setup_component(self.hass, 'light', {
            'light': {'platform': 'rfxtrx',
                      'automatic_add': False,
                      'devices': {}}}))

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02020070')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x12, 0x01, 0x18,
                                0xcd, 0xea, 0x02, 0x02, 0x00, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02010070')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x12, 0x01, 0x18,
                                0xcd, 0xea, 0x02, 0x01, 0x00, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02020070')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x12, 0x01, 0x18,
                                0xcd, 0xea, 0x02, 0x02, 0x00, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a switch
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x10, 0x01, 0x18,
                                0xcd, 0xea, 0x01, 0x01, 0x0f, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
示例#30
0
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
    """ Setup the RFXtrx platform. """

    # Add switch from config file
    switchs = []
    devices = config.get('devices')
    if devices:
        for entity_id, entity_info in devices.items():
            if entity_id not in rfxtrx.RFX_DEVICES:
                _LOGGER.info("Add %s rfxtrx.switch", entity_info['name'])
                rfxobject = rfxtrx.get_rfx_object(entity_info['packetid'])
                newswitch = RfxtrxSwitch(entity_info['name'], rfxobject, False)
                rfxtrx.RFX_DEVICES[entity_id] = newswitch
                switchs.append(newswitch)

    add_devices_callback(switchs)

    def switch_update(event):
        """ Callback for sensor updates from the RFXtrx gateway. """
        if isinstance(event.device, LightingDevice):
            return

        # Add entity if not exist and the automatic_add is True
        entity_id = slugify(event.device.id_string.lower())
        if entity_id not in rfxtrx.RFX_DEVICES:
            automatic_add = config.get('automatic_add', False)
            if not automatic_add:
                return

            _LOGGER.info("Automatic add %s rfxtrx.switch (Class: %s Sub: %s)",
                         entity_id, event.device.__class__.__name__,
                         event.device.subtype)
            pkt_id = "".join("{0:02x}".format(x) for x in event.data)
            entity_name = "%s : %s" % (entity_id, pkt_id)
            new_switch = RfxtrxSwitch(entity_name, event, False)
            rfxtrx.RFX_DEVICES[entity_id] = new_switch
            add_devices_callback([new_switch])

        # Check if entity exists or previously added automatically
        if entity_id in rfxtrx.RFX_DEVICES:
            _LOGGER.debug("EntityID: %s switch_update. Command: %s", entity_id,
                          event.values['Command'])
            if event.values['Command'] == 'On'\
                    or event.values['Command'] == 'Off':
                if event.values['Command'] == 'On':
                    rfxtrx.RFX_DEVICES[entity_id].turn_on()
                else:
                    rfxtrx.RFX_DEVICES[entity_id].turn_off()

    # Subscribe to main rfxtrx events
    if switch_update not in rfxtrx.RECEIVED_EVT_SUBSCRIBERS:
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS.append(switch_update)
示例#31
0
async def test_discover_light_noautoadd(hass, rfxtrx):
    """Test with discover of light when auto add is False."""
    await async_setup_component(
        hass,
        "light",
        {
            "light": {
                "platform": "rfxtrx",
                "automatic_add": False,
                "devices": {}
            }
        },
    )
    await hass.async_block_till_done()

    event = rfxtrx_core.get_rfx_object("0b1100120118cdea02020070")
    event.data = bytearray([
        0x0B, 0x11, 0x00, 0x12, 0x01, 0x18, 0xCD, 0xEA, 0x02, 0x02, 0x00, 0x70
    ])

    await _signal_event(hass, event)
    assert 0 == len(rfxtrx_core.RFX_DEVICES)

    event = rfxtrx_core.get_rfx_object("0b1100120118cdea02010070")
    event.data = bytearray([
        0x0B, 0x11, 0x00, 0x12, 0x01, 0x18, 0xCD, 0xEA, 0x02, 0x01, 0x00, 0x70
    ])

    await _signal_event(hass, event)
    assert 0 == len(rfxtrx_core.RFX_DEVICES)

    event = rfxtrx_core.get_rfx_object("0b1100120118cdea02020070")
    event.data = bytearray([
        0x0B, 0x11, 0x00, 0x12, 0x01, 0x18, 0xCD, 0xEA, 0x02, 0x02, 0x00, 0x70
    ])

    await _signal_event(hass, event)
    assert 0 == len(rfxtrx_core.RFX_DEVICES)

    # Trying to add a sensor
    event = rfxtrx_core.get_rfx_object("0a52085e070100b31b0279")
    event.data = bytearray(b"\nR\x08^\x07\x01\x00\xb3\x1b\x02y")
    await _signal_event(hass, event)
    assert 0 == len(rfxtrx_core.RFX_DEVICES)

    # Trying to add a switch
    event = rfxtrx_core.get_rfx_object("0b1100100118cdea02010f70")
    event.data = bytearray([
        0x0B, 0x11, 0x00, 0x10, 0x01, 0x18, 0xCD, 0xEA, 0x01, 0x01, 0x0F, 0x70
    ])
    await _signal_event(hass, event)
    assert 0 == len(rfxtrx_core.RFX_DEVICES)

    # Trying to add a rollershutter
    event = rfxtrx_core.get_rfx_object("0a1400adf394ab020e0060")
    event.data = bytearray(
        [0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94, 0xAB, 0x02, 0x0E, 0x00, 0x60])
    await _signal_event(hass, event)
    assert 0 == len(rfxtrx_core.RFX_DEVICES)
示例#32
0
    def test_discover_light(self):
        """Test with discovery of lights."""
        assert setup_component(self.hass, 'light', {
            'light': {
                'platform': 'rfxtrx',
                'automatic_add': True,
                'devices': {}
            }
        })

        event = rfxtrx_core.get_rfx_object('0b11009e00e6116202020070')
        event.data = bytearray(b'\x0b\x11\x00\x9e\x00\xe6\x11b\x02\x02\x00p')

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['0e611622']
        assert 1 == len(rfxtrx_core.RFX_DEVICES)
        assert '<Entity 0b11009e00e6116202020070: on>' == \
            entity.__str__()

        event = rfxtrx_core.get_rfx_object('0b11009e00e6116201010070')
        event.data = bytearray(b'\x0b\x11\x00\x9e\x00\xe6\x11b\x01\x01\x00p')

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 1 == len(rfxtrx_core.RFX_DEVICES)

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02020070')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x12, 0x01, 0x18, 0xcd, 0xea, 0x02, 0x02, 0x00,
            0x70
        ])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['118cdea2']
        assert 2 == len(rfxtrx_core.RFX_DEVICES)
        assert '<Entity 0b1100120118cdea02020070: on>' == \
            entity.__str__()

        # trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 2 == len(rfxtrx_core.RFX_DEVICES)

        # trying to add a switch
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x10, 0x01, 0x18, 0xcd, 0xea, 0x01, 0x01, 0x0f,
            0x70
        ])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 2 == len(rfxtrx_core.RFX_DEVICES)

        # Trying to add a rollershutter
        event = rfxtrx_core.get_rfx_object('0a1400adf394ab020e0060')
        event.data = bytearray(
            [0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94, 0xAB, 0x02, 0x0E, 0x00, 0x60])
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 2 == len(rfxtrx_core.RFX_DEVICES)
示例#33
0
    def test_discover_rollershutter(self):
        """Test with discovery of roller shutters."""
        self.assertTrue(_setup_component(self.hass, 'rollershutter', {
            'rollershutter': {'platform': 'rfxtrx',
                              'automatic_add': True,
                              'devices': {}}}))

        event = rfxtrx_core.get_rfx_object('0a140002f38cae010f0070')
        event.data = bytearray([0x0A, 0x14, 0x00, 0x02, 0xF3, 0x8C,
                                0xAE, 0x01, 0x0F, 0x00, 0x70])

        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object('0a1400adf394ab020e0060')
        event.data = bytearray([0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94,
                                0xAB, 0x02, 0x0E, 0x00, 0x60])

        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a light
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([0x0b, 0x11, 0x11, 0x10, 0x01, 0x18,
                                0xcd, 0xea, 0x01, 0x02, 0x0f, 0x70])
        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
示例#34
0
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
    """Setup the RFXtrx platform."""
    from RFXtrx import SensorEvent

    sensors = []
    for device_id, entity_info in config['devices'].items():
        if device_id in rfxtrx.RFX_DEVICES:
            continue
        _LOGGER.info("Add %s rfxtrx.sensor", entity_info[ATTR_NAME])
        event = rfxtrx.get_rfx_object(entity_info[ATTR_PACKETID])
        new_sensor = RfxtrxSensor(event, entity_info[ATTR_NAME],
                                  entity_info[ATTR_DATA_TYPE])
        rfxtrx.RFX_DEVICES[slugify(device_id)] = new_sensor
        sensors.append(new_sensor)

    add_devices_callback(sensors)

    def sensor_update(event):
        """Callback for sensor updates from the RFXtrx gateway."""
        if not isinstance(event, SensorEvent):
            return

        device_id = "sensor_" + slugify(event.device.id_string.lower())

        if device_id in rfxtrx.RFX_DEVICES:
            rfxtrx.RFX_DEVICES[device_id].event = event
            k = 2
            _device_id = device_id + "_" + str(k)
            while _device_id in rfxtrx.RFX_DEVICES:
                rfxtrx.RFX_DEVICES[_device_id].event = event
                k = k + 1
                _device_id = device_id + "_" + str(k)
            return

        # Add entity if not exist and the automatic_add is True
        if config[ATTR_AUTOMATIC_ADD]:
            pkt_id = "".join("{0:02x}".format(x) for x in event.data)
            entity_name = "%s : %s" % (device_id, pkt_id)
            _LOGGER.info(
                "Automatic add rfxtrx.sensor: (%s : %s)",
                device_id,
                pkt_id)

            new_sensor = RfxtrxSensor(event, entity_name)
            rfxtrx.RFX_DEVICES[device_id] = new_sensor
            add_devices_callback([new_sensor])

    if sensor_update not in rfxtrx.RECEIVED_EVT_SUBSCRIBERS:
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS.append(sensor_update)
示例#35
0
    def test_discover_cover_noautoadd(self):
        """Test with discovery of cover when auto add is False."""
        assert setup_component(self.hass, 'cover', {
            'cover': {'platform': 'rfxtrx',
                      'automatic_add': False,
                      'devices': {}}})

        event = rfxtrx_core.get_rfx_object('0a1400adf394ab010d0060')
        event.data = bytearray([0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94,
                                0xAB, 0x01, 0x0D, 0x00, 0x60])

        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)

        event = rfxtrx_core.get_rfx_object('0a1400adf394ab020e0060')
        event.data = bytearray([0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94,
                                0xAB, 0x02, 0x0E, 0x00, 0x60])
        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)

        # Trying to add a light
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([0x0b, 0x11, 0x11, 0x10, 0x01,
                                0x18, 0xcd, 0xea, 0x01, 0x02, 0x0f, 0x70])
        for evt_sub in rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS:
            evt_sub(event)
        assert 0 == len(rfxtrx_core.RFX_DEVICES)
示例#36
0
async def test_fire_event_sensor(hass):
    """Test fire event."""
    await async_setup_component(
        hass,
        "rfxtrx",
        {
            "rfxtrx": {
                "device": "/dev/serial/by-id/usb" +
                "-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0",
                "dummy": True,
            }
        },
    )

    await async_setup_component(
        hass,
        "sensor",
        {
            "sensor": {
                "platform": "rfxtrx",
                "automatic_add": True,
                "devices": {
                    "0a520802060100ff0e0269": {
                        "name": "Test",
                        rfxtrx.ATTR_FIRE_EVENT: True,
                    }
                },
            }
        },
    )
    await hass.async_block_till_done()

    calls = []

    @callback
    def record_event(event):
        """Add recorded event to set."""
        calls.append(event)

    hass.bus.async_listen("signal_received", record_event)
    await hass.async_block_till_done()
    event = rfxtrx.get_rfx_object("0a520802060101ff0f0269")
    event.data = bytearray(b"\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y")
    await _signal_event(hass, event)

    await hass.async_block_till_done()
    assert 1 == len(calls)
    assert calls[0].data == {"entity_id": "sensor.test_temperature"}
示例#37
0
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
    """Setup the RFXtrx platform."""
    from RFXtrx import SensorEvent

    sensors = []
    for device_id, entity_info in config['devices'].items():
        if device_id in rfxtrx.RFX_DEVICES:
            continue
        _LOGGER.info("Add %s rfxtrx.sensor", entity_info[ATTR_NAME])
        event = rfxtrx.get_rfx_object(entity_info[ATTR_PACKETID])
        new_sensor = RfxtrxSensor(event, entity_info[ATTR_NAME],
                                  entity_info[ATTR_DATA_TYPE])
        rfxtrx.RFX_DEVICES[slugify(device_id)] = new_sensor
        sensors.append(new_sensor)

    add_devices_callback(sensors)

    def sensor_update(event):
        """Callback for sensor updates from the RFXtrx gateway."""
        if not isinstance(event, SensorEvent):
            return

        device_id = "sensor_" + slugify(event.device.id_string.lower())

        if device_id in rfxtrx.RFX_DEVICES:
            rfxtrx.RFX_DEVICES[device_id].event = event
            k = 2
            _device_id = device_id + "_" + str(k)
            while _device_id in rfxtrx.RFX_DEVICES:
                rfxtrx.RFX_DEVICES[_device_id].event = event
                k = k + 1
                _device_id = device_id + "_" + str(k)
            return

        # Add entity if not exist and the automatic_add is True
        if config[ATTR_AUTOMATIC_ADD]:
            pkt_id = "".join("{0:02x}".format(x) for x in event.data)
            entity_name = "%s : %s" % (device_id, pkt_id)
            _LOGGER.info("Automatic add rfxtrx.sensor: (%s : %s)", device_id,
                         pkt_id)

            new_sensor = RfxtrxSensor(event, entity_name)
            rfxtrx.RFX_DEVICES[device_id] = new_sensor
            add_devices_callback([new_sensor])

    if sensor_update not in rfxtrx.RECEIVED_EVT_SUBSCRIBERS:
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS.append(sensor_update)
示例#38
0
    def test_discover_light(self):
        """Test with discovery of lights."""
        assert setup_component(self.hass, 'light', {
            'light': {'platform': 'rfxtrx',
                      'automatic_add': True,
                      'devices': {}}})

        event = rfxtrx_core.get_rfx_object('0b11009e00e6116202020070')
        event.data = bytearray(b'\x0b\x11\x00\x9e\x00\xe6\x11b\x02\x02\x00p')

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['0e611622']
        assert 1 == len(rfxtrx_core.RFX_DEVICES)
        assert '<Entity 0b11009e00e6116202020070: on>' == \
            entity.__str__()

        event = rfxtrx_core.get_rfx_object('0b11009e00e6116201010070')
        event.data = bytearray(b'\x0b\x11\x00\x9e\x00\xe6\x11b\x01\x01\x00p')

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 1 == len(rfxtrx_core.RFX_DEVICES)

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02020070')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x12, 0x01, 0x18,
                                0xcd, 0xea, 0x02, 0x02, 0x00, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES['118cdea2']
        assert 2 == len(rfxtrx_core.RFX_DEVICES)
        assert '<Entity 0b1100120118cdea02020070: on>' == \
            entity.__str__()

        # trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 2 == len(rfxtrx_core.RFX_DEVICES)

        # trying to add a switch
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x10, 0x01, 0x18,
                                0xcd, 0xea, 0x01, 0x01, 0x0f, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 2 == len(rfxtrx_core.RFX_DEVICES)

        # Trying to add a rollershutter
        event = rfxtrx_core.get_rfx_object('0a1400adf394ab020e0060')
        event.data = bytearray([0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94,
                                0xAB, 0x02, 0x0E, 0x00, 0x60])
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        assert 2 == len(rfxtrx_core.RFX_DEVICES)
示例#39
0
    def test_fire_event(self):
        """Test fire event."""
        self.assertTrue(setup_component(self.hass, 'rfxtrx', {
            'rfxtrx': {
                'device': '/dev/serial/by-id/usb' +
                          '-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0',
                'dummy': True}
        }))
        self.assertTrue(setup_component(self.hass, 'switch', {
            'switch': {'platform': 'rfxtrx',
                       'automatic_add': True,
                       'devices':
                           {'0b1100cd0213c7f210010f51': {
                               'name': 'Test',
                               rfxtrx.ATTR_FIREEVENT: True}
                            }}}))

        calls = []

        @callback
        def record_event(event):
            """Add recorded event to set."""
            calls.append(event)

        self.hass.bus.listen(rfxtrx.EVENT_BUTTON_PRESSED, record_event)
        self.hass.block_till_done()

        entity = rfxtrx.RFX_DEVICES['213c7f216']
        self.assertEqual('Test', entity.name)
        self.assertEqual('off', entity.state)
        self.assertTrue(entity.should_fire_event)

        event = rfxtrx.get_rfx_object('0b1100cd0213c7f210010f51')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x10, 0x01, 0x18,
                                0xcd, 0xea, 0x01, 0x01, 0x0f, 0x70])
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.hass.block_till_done()

        self.assertEqual(event.values['Command'], "On")
        self.assertEqual('on', entity.state)
        self.assertEqual(self.hass.states.get('switch.test').state, 'on')
        self.assertEqual(1, len(calls))
        self.assertEqual(calls[0].data,
                         {'entity_id': 'switch.test', 'state': 'on'})
示例#40
0
    def test_discover_light(self):
        """Test with discovery of lights."""
        self.assertTrue(
            _setup_component(
                self.hass, "light", {"light": {"platform": "rfxtrx", "automatic_add": True, "devices": {}}}
            )
        )

        event = rfxtrx_core.get_rfx_object("0b11009e00e6116202020070")
        event.data = bytearray(b"\x0b\x11\x00\x9e\x00\xe6\x11b\x02\x02\x00p")

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES["0e611622"]
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual("<Entity 0b11009e00e6116202020070: on>", entity.__str__())

        event = rfxtrx_core.get_rfx_object("0b11009e00e6116201010070")
        event.data = bytearray(b"\x0b\x11\x00\x9e\x00\xe6\x11b\x01\x01\x00p")

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object("0b1100120118cdea02020070")
        event.data = bytearray([0x0B, 0x11, 0x00, 0x12, 0x01, 0x18, 0xCD, 0xEA, 0x02, 0x02, 0x00, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = rfxtrx_core.RFX_DEVICES["118cdea2"]
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual("<Entity 0b1100120118cdea02020070: on>", entity.__str__())

        # trying to add a sensor
        event = rfxtrx_core.get_rfx_object("0a52085e070100b31b0279")
        event.data = bytearray(b"\nR\x08^\x07\x01\x00\xb3\x1b\x02y")
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        # trying to add a swicth
        event = rfxtrx_core.get_rfx_object("0b1100100118cdea02010f70")
        event.data = bytearray([0x0B, 0x11, 0x00, 0x10, 0x01, 0x18, 0xCD, 0xEA, 0x01, 0x01, 0x0F, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a rollershutter
        event = rfxtrx_core.get_rfx_object("0a1400adf394ab020e0060")
        event.data = bytearray([0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94, 0xAB, 0x02, 0x0E, 0x00, 0x60])
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
示例#41
0
    def test_discover_light_noautoadd(self):
        """Test with discover of light when auto add is False."""
        self.assertTrue(
            _setup_component(
                self.hass, "light", {"light": {"platform": "rfxtrx", "automatic_add": False, "devices": {}}}
            )
        )

        event = rfxtrx_core.get_rfx_object("0b1100120118cdea02020070")
        event.data = bytearray([0x0B, 0x11, 0x00, 0x12, 0x01, 0x18, 0xCD, 0xEA, 0x02, 0x02, 0x00, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object("0b1100120118cdea02010070")
        event.data = bytearray([0x0B, 0x11, 0x00, 0x12, 0x01, 0x18, 0xCD, 0xEA, 0x02, 0x01, 0x00, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        event = rfxtrx_core.get_rfx_object("0b1100120118cdea02020070")
        event.data = bytearray([0x0B, 0x11, 0x00, 0x12, 0x01, 0x18, 0xCD, 0xEA, 0x02, 0x02, 0x00, 0x70])

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object("0a52085e070100b31b0279")
        event.data = bytearray(b"\nR\x08^\x07\x01\x00\xb3\x1b\x02y")
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a switch
        event = rfxtrx_core.get_rfx_object("0b1100100118cdea02010f70")
        event.data = bytearray([0x0B, 0x11, 0x00, 0x10, 0x01, 0x18, 0xCD, 0xEA, 0x01, 0x01, 0x0F, 0x70])
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))

        # Trying to add a rollershutter
        event = rfxtrx_core.get_rfx_object("0a1400adf394ab020e0060")
        event.data = bytearray([0x0A, 0x14, 0x00, 0xAD, 0xF3, 0x94, 0xAB, 0x02, 0x0E, 0x00, 0x60])
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(0, len(rfxtrx_core.RFX_DEVICES))
示例#42
0
def setup_platform(hass, config, add_devices, discovery_info=None):
    """Set up the Binary Sensor platform to RFXtrx."""
    import RFXtrx as rfxtrxmod
    sensors = []

    for packet_id, entity in config['devices'].items():
        event = rfxtrx.get_rfx_object(packet_id)
        device_id = slugify(event.device.id_string.lower())

        if device_id in rfxtrx.RFX_DEVICES:
            continue

        if entity[CONF_DATA_BITS] is not None:
            _LOGGER.debug(
                "Masked device id: %s", rfxtrx.get_pt2262_deviceid(
                    device_id, entity[CONF_DATA_BITS]))

        _LOGGER.debug("Add %s rfxtrx.binary_sensor (class %s)",
                      entity[ATTR_NAME], entity[CONF_DEVICE_CLASS])

        device = RfxtrxBinarySensor(
            event, entity[ATTR_NAME], entity[CONF_DEVICE_CLASS],
            entity[CONF_FIRE_EVENT], entity[CONF_OFF_DELAY],
            entity[CONF_DATA_BITS], entity[CONF_COMMAND_ON],
            entity[CONF_COMMAND_OFF])
        device.hass = hass
        sensors.append(device)
        rfxtrx.RFX_DEVICES[device_id] = device

    add_devices(sensors)

    def binary_sensor_update(event):
        """Call for control updates from the RFXtrx gateway."""
        if not isinstance(event, rfxtrxmod.ControlEvent):
            return

        device_id = slugify(event.device.id_string.lower())

        if device_id in rfxtrx.RFX_DEVICES:
            sensor = rfxtrx.RFX_DEVICES[device_id]
        else:
            sensor = rfxtrx.get_pt2262_device(device_id)

        if sensor is None:
            # Add the entity if not exists and automatic_add is True
            if not config[CONF_AUTOMATIC_ADD]:
                return

            if event.device.packettype == 0x13:
                poss_dev = rfxtrx.find_possible_pt2262_device(device_id)
                if poss_dev is not None:
                    poss_id = slugify(poss_dev.event.device.id_string.lower())
                    _LOGGER.debug(
                        "Found possible matching device ID: %s", poss_id)

            pkt_id = "".join("{0:02x}".format(x) for x in event.data)
            sensor = RfxtrxBinarySensor(event, pkt_id)
            sensor.hass = hass
            rfxtrx.RFX_DEVICES[device_id] = sensor
            add_devices([sensor])
            _LOGGER.info(
                "Added binary sensor %s (Device ID: %s Class: %s Sub: %s)",
                pkt_id, slugify(event.device.id_string.lower()),
                event.device.__class__.__name__, event.device.subtype)

        elif not isinstance(sensor, RfxtrxBinarySensor):
            return
        else:
            _LOGGER.debug(
                "Binary sensor update (Device ID: %s Class: %s Sub: %s)",
                slugify(event.device.id_string.lower()),
                event.device.__class__.__name__, event.device.subtype)

        if sensor.is_lighting4:
            if sensor.data_bits is not None:
                cmd = rfxtrx.get_pt2262_cmd(device_id, sensor.data_bits)
                sensor.apply_cmd(int(cmd, 16))
            else:
                sensor.update_state(True)
        else:
            rfxtrx.apply_received_command(event)

        if (sensor.is_on and sensor.off_delay is not None and
                sensor.delay_listener is None):

            def off_delay_listener(now):
                """Switch device off after a delay."""
                sensor.delay_listener = None
                sensor.update_state(False)

            sensor.delay_listener = evt.track_point_in_time(
                hass, off_delay_listener, dt_util.utcnow() + sensor.off_delay)

    # Subscribe to main RFXtrx events
    if binary_sensor_update not in rfxtrx.RECEIVED_EVT_SUBSCRIBERS:
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS.append(binary_sensor_update)
示例#43
0
    def test_update_of_sensors(self):
        """Test with 3 sensors."""
        self.assertTrue(setup_component(self.hass, 'sensor', {
                'sensor': {'platform': 'rfxtrx',
                           'devices':
                               {'0a52080705020095220269': {
                                   'name': 'Test',
                                   'data_type': 'Temperature'},
                                   '0a520802060100ff0e0269': {
                                   'name': 'Bath',
                                   'data_type': ['Temperature', 'Humidity']
                                   }}}}))

        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        device_num = 0
        for id in rfxtrx_core.RFX_DEVICES:
            if id == 'sensor_0601':
                device_num = device_num + 1
                self.assertEqual(len(rfxtrx_core.RFX_DEVICES[id]), 2)
                _entity_temp = rfxtrx_core.RFX_DEVICES[id]['Temperature']
                _entity_hum = rfxtrx_core.RFX_DEVICES[id]['Humidity']
                self.assertEqual('%', _entity_hum.unit_of_measurement)
                self.assertEqual('Bath', _entity_hum.__str__())
                self.assertEqual(None, _entity_temp.state)
                self.assertEqual(TEMP_CELSIUS,
                                 _entity_temp.unit_of_measurement)
                self.assertEqual('Bath', _entity_temp.__str__())
            elif id == 'sensor_0502':
                device_num = device_num + 1
                entity = rfxtrx_core.RFX_DEVICES[id]['Temperature']
                self.assertEqual(None, entity.state)
                self.assertEqual(TEMP_CELSIUS, entity.unit_of_measurement)
                self.assertEqual('Test', entity.__str__())

        self.assertEqual(2, device_num)

        event = rfxtrx_core.get_rfx_object('0a520802060101ff0f0269')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        event = rfxtrx_core.get_rfx_object('0a52080705020085220269')
        event.data = bytearray(b'\nR\x08\x04\x05\x02\x00\x95$\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)

        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        device_num = 0
        for id in rfxtrx_core.RFX_DEVICES:
            if id == 'sensor_0601':
                device_num = device_num + 1
                self.assertEqual(len(rfxtrx_core.RFX_DEVICES[id]), 2)
                _entity_temp = rfxtrx_core.RFX_DEVICES[id]['Temperature']
                _entity_hum = rfxtrx_core.RFX_DEVICES[id]['Humidity']
                self.assertEqual('%', _entity_hum.unit_of_measurement)
                self.assertEqual(15, _entity_hum.state)
                self.assertEqual({'Battery numeric': 9, 'Temperature': 51.1,
                                  'Humidity': 15, 'Humidity status': 'normal',
                                  'Humidity status numeric': 2,
                                  'Rssi numeric': 6},
                                 _entity_hum.device_state_attributes)
                self.assertEqual('Bath', _entity_hum.__str__())

                self.assertEqual(TEMP_CELSIUS,
                                 _entity_temp.unit_of_measurement)
                self.assertEqual(51.1, _entity_temp.state)
                self.assertEqual({'Battery numeric': 9, 'Temperature': 51.1,
                                  'Humidity': 15, 'Humidity status': 'normal',
                                  'Humidity status numeric': 2,
                                  'Rssi numeric': 6},
                                 _entity_temp.device_state_attributes)
                self.assertEqual('Bath', _entity_temp.__str__())
            elif id == 'sensor_0502':
                device_num = device_num + 1
                entity = rfxtrx_core.RFX_DEVICES[id]['Temperature']
                self.assertEqual(TEMP_CELSIUS, entity.unit_of_measurement)
                self.assertEqual(13.3, entity.state)
                self.assertEqual({'Humidity status': 'normal',
                                  'Temperature': 13.3,
                                  'Rssi numeric': 6, 'Humidity': 34,
                                  'Battery numeric': 9,
                                  'Humidity status numeric': 2},
                                 entity.device_state_attributes)
                self.assertEqual('Test', entity.__str__())

        self.assertEqual(2, device_num)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
示例#44
0
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
    """ Setup the RFXtrx platform. """
    import RFXtrx as rfxtrxmod

    # Add switch from config file
    switchs = []
    signal_repetitions = config.get('signal_repetitions', SIGNAL_REPETITIONS)
    for device_id, entity_info in config.get('devices', {}).items():
        if device_id in rfxtrx.RFX_DEVICES:
            continue
        _LOGGER.info("Add %s rfxtrx.switch", entity_info[ATTR_NAME])

        # Check if i must fire event
        fire_event = entity_info.get(ATTR_FIREEVENT, False)
        datas = {ATTR_STATE: False, ATTR_FIREEVENT: fire_event}

        rfxobject = rfxtrx.get_rfx_object(entity_info[ATTR_PACKETID])
        newswitch = RfxtrxSwitch(
            entity_info[ATTR_NAME], rfxobject, datas,
            signal_repetitions)
        rfxtrx.RFX_DEVICES[device_id] = newswitch
        switchs.append(newswitch)

    add_devices_callback(switchs)

    def switch_update(event):
        """ Callback for sensor updates from the RFXtrx gateway. """
        if not isinstance(event.device, rfxtrxmod.LightingDevice) or \
                event.device.known_to_be_dimmable:
            return

        # Add entity if not exist and the automatic_add is True
        device_id = slugify(event.device.id_string.lower())
        if device_id not in rfxtrx.RFX_DEVICES:
            automatic_add = config.get('automatic_add', False)
            if not automatic_add:
                return

            _LOGGER.info(
                "Automatic add %s rfxtrx.switch (Class: %s Sub: %s)",
                device_id,
                event.device.__class__.__name__,
                event.device.subtype
            )
            pkt_id = "".join("{0:02x}".format(x) for x in event.data)
            entity_name = "%s : %s" % (device_id, pkt_id)
            datas = {ATTR_STATE: False, ATTR_FIREEVENT: False}
            signal_repetitions = config.get('signal_repetitions',
                                            SIGNAL_REPETITIONS)
            new_switch = RfxtrxSwitch(entity_name, event, datas,
                                      signal_repetitions)
            rfxtrx.RFX_DEVICES[device_id] = new_switch
            add_devices_callback([new_switch])

        # Check if entity exists or previously added automatically
        if device_id in rfxtrx.RFX_DEVICES:
            _LOGGER.debug(
                "EntityID: %s switch_update. Command: %s",
                device_id,
                event.values['Command']
            )
            if event.values['Command'] == 'On'\
                    or event.values['Command'] == 'Off':

                # Update the rfxtrx device state
                is_on = event.values['Command'] == 'On'
                # pylint: disable=protected-access
                rfxtrx.RFX_DEVICES[device_id]._state = is_on
                rfxtrx.RFX_DEVICES[device_id].update_ha_state()

                # Fire event
                if rfxtrx.RFX_DEVICES[device_id].should_fire_event:
                    rfxtrx.RFX_DEVICES[device_id].hass.bus.fire(
                        EVENT_BUTTON_PRESSED, {
                            ATTR_ENTITY_ID:
                                rfxtrx.RFX_DEVICES[device_id].device_id,
                            ATTR_STATE: event.values['Command'].lower()
                        }
                    )

    # Subscribe to main rfxtrx events
    if switch_update not in rfxtrx.RECEIVED_EVT_SUBSCRIBERS:
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS.append(switch_update)
示例#45
0
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
    """ Setup the RFXtrx platform. """
    import RFXtrx as rfxtrxmod

    # Add switch from config file
    switchs = []
    signal_repetitions = config.get('signal_repetitions', SIGNAL_REPETITIONS)
    for device_id, entity_info in config.get('devices', {}).items():
        if device_id in rfxtrx.RFX_DEVICES:
            continue
        _LOGGER.info("Add %s rfxtrx.switch", entity_info[ATTR_NAME])

        # Check if i must fire event
        fire_event = entity_info.get(ATTR_FIREEVENT, False)
        datas = {ATTR_STATE: False, ATTR_FIREEVENT: fire_event}

        rfxobject = rfxtrx.get_rfx_object(entity_info[ATTR_PACKETID])
        newswitch = RfxtrxSwitch(entity_info[ATTR_NAME], rfxobject, datas,
                                 signal_repetitions)
        rfxtrx.RFX_DEVICES[device_id] = newswitch
        switchs.append(newswitch)

    add_devices_callback(switchs)

    def switch_update(event):
        """ Callback for sensor updates from the RFXtrx gateway. """
        if not isinstance(event.device, rfxtrxmod.LightingDevice) or \
                event.device.known_to_be_dimmable:
            return

        # Add entity if not exist and the automatic_add is True
        device_id = slugify(event.device.id_string.lower())
        if device_id not in rfxtrx.RFX_DEVICES:
            automatic_add = config.get('automatic_add', False)
            if not automatic_add:
                return

            _LOGGER.info("Automatic add %s rfxtrx.switch (Class: %s Sub: %s)",
                         device_id, event.device.__class__.__name__,
                         event.device.subtype)
            pkt_id = "".join("{0:02x}".format(x) for x in event.data)
            entity_name = "%s : %s" % (device_id, pkt_id)
            datas = {ATTR_STATE: False, ATTR_FIREEVENT: False}
            signal_repetitions = config.get('signal_repetitions',
                                            SIGNAL_REPETITIONS)
            new_switch = RfxtrxSwitch(entity_name, event, datas,
                                      signal_repetitions)
            rfxtrx.RFX_DEVICES[device_id] = new_switch
            add_devices_callback([new_switch])

        # Check if entity exists or previously added automatically
        if device_id in rfxtrx.RFX_DEVICES:
            _LOGGER.debug("EntityID: %s switch_update. Command: %s", device_id,
                          event.values['Command'])
            if event.values['Command'] == 'On'\
                    or event.values['Command'] == 'Off':

                # Update the rfxtrx device state
                is_on = event.values['Command'] == 'On'
                # pylint: disable=protected-access
                rfxtrx.RFX_DEVICES[device_id]._state = is_on
                rfxtrx.RFX_DEVICES[device_id].update_ha_state()

                # Fire event
                if rfxtrx.RFX_DEVICES[device_id].should_fire_event:
                    rfxtrx.RFX_DEVICES[device_id].hass.bus.fire(
                        EVENT_BUTTON_PRESSED, {
                            ATTR_ENTITY_ID:
                            rfxtrx.RFX_DEVICES[device_id].device_id,
                            ATTR_STATE: event.values['Command'].lower()
                        })

    # Subscribe to main rfxtrx events
    if switch_update not in rfxtrx.RECEIVED_EVT_SUBSCRIBERS:
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS.append(switch_update)
示例#46
0
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
    """ Setup the RFXtrx platform. """
    import RFXtrx as rfxtrxmod

    lights = []
    devices = config.get('devices', None)

    if devices:
        for entity_id, entity_info in devices.items():
            if entity_id not in rfxtrx.RFX_DEVICES:
                _LOGGER.info("Add %s rfxtrx.light", entity_info[ATTR_NAME])

                # Check if i must fire event
                fire_event = entity_info.get(ATTR_FIREEVENT, False)
                datas = {ATTR_STATE: False, ATTR_FIREEVENT: fire_event}

                rfxobject = rfxtrx.get_rfx_object(entity_info[ATTR_PACKETID])
                new_light = RfxtrxLight(
                    entity_info[ATTR_NAME], rfxobject, datas
                )
                rfxtrx.RFX_DEVICES[entity_id] = new_light
                lights.append(new_light)

    add_devices_callback(lights)

    def light_update(event):
        """ Callback for light updates from the RFXtrx gateway. """
        if not isinstance(event.device, rfxtrxmod.LightingDevice) or \
                not event.device.known_to_be_dimmable:
            return

        # Add entity if not exist and the automatic_add is True
        entity_id = slugify(event.device.id_string.lower())
        if entity_id not in rfxtrx.RFX_DEVICES:
            automatic_add = config.get('automatic_add', False)
            if not automatic_add:
                return

            _LOGGER.info(
                "Automatic add %s rfxtrx.light (Class: %s Sub: %s)",
                entity_id,
                event.device.__class__.__name__,
                event.device.subtype
            )
            pkt_id = "".join("{0:02x}".format(x) for x in event.data)
            entity_name = "%s : %s" % (entity_id, pkt_id)
            datas = {ATTR_STATE: False, ATTR_FIREEVENT: False}
            new_light = RfxtrxLight(entity_name, event, datas)
            rfxtrx.RFX_DEVICES[entity_id] = new_light
            add_devices_callback([new_light])

        # Check if entity exists or previously added automatically
        if entity_id in rfxtrx.RFX_DEVICES:
            _LOGGER.debug(
                "EntityID: %s light_update. Command: %s",
                entity_id,
                event.values['Command']
            )

            if event.values['Command'] == 'On'\
                    or event.values['Command'] == 'Off':

                # Update the rfxtrx device state
                is_on = event.values['Command'] == 'On'
                # pylint: disable=protected-access
                rfxtrx.RFX_DEVICES[entity_id]._state = is_on
                rfxtrx.RFX_DEVICES[entity_id].update_ha_state()

            elif event.values['Command'] == 'Set level':
                # pylint: disable=protected-access
                rfxtrx.RFX_DEVICES[entity_id]._brightness = \
                    (event.values['Dim level'] * 255 // 100)

                # Update the rfxtrx device state
                is_on = rfxtrx.RFX_DEVICES[entity_id]._brightness > 0
                rfxtrx.RFX_DEVICES[entity_id]._state = is_on
                rfxtrx.RFX_DEVICES[entity_id].update_ha_state()
            else:
                return

            # Fire event
            if rfxtrx.RFX_DEVICES[entity_id].should_fire_event:
                rfxtrx.RFX_DEVICES[entity_id].hass.bus.fire(
                    EVENT_BUTTON_PRESSED, {
                        ATTR_ENTITY_ID:
                            rfxtrx.RFX_DEVICES[entity_id].entity_id,
                        ATTR_STATE: event.values['Command'].lower()
                    }
                )

    # Subscribe to main rfxtrx events
    if light_update not in rfxtrx.RECEIVED_EVT_SUBSCRIBERS:
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS.append(light_update)
示例#47
0
def setup_platform(hass, config, add_devices, discovery_info=None):
    """Set up the RFXtrx platform."""
    from RFXtrx import SensorEvent
    sensors = []
    for packet_id, entity_info in config[CONF_DEVICES].items():
        event = rfxtrx.get_rfx_object(packet_id)
        device_id = "sensor_{}".format(slugify(event.device.id_string.lower()))
        if device_id in rfxtrx.RFX_DEVICES:
            continue
        _LOGGER.info("Add %s rfxtrx.sensor", entity_info[ATTR_NAME])

        sub_sensors = {}
        data_types = entity_info[ATTR_DATA_TYPE]
        if not data_types:
            data_types = ['']
            for data_type in DATA_TYPES:
                if data_type in event.values:
                    data_types = [data_type]
                    break
        for _data_type in data_types:
            new_sensor = RfxtrxSensor(None, entity_info[ATTR_NAME],
                                      _data_type, entity_info[ATTR_FIRE_EVENT])
            sensors.append(new_sensor)
            sub_sensors[_data_type] = new_sensor
        rfxtrx.RFX_DEVICES[device_id] = sub_sensors
    add_devices(sensors)

    def sensor_update(event):
        """Handle sensor updates from the RFXtrx gateway."""
        if not isinstance(event, SensorEvent):
            return

        device_id = "sensor_" + slugify(event.device.id_string.lower())

        if device_id in rfxtrx.RFX_DEVICES:
            sensors = rfxtrx.RFX_DEVICES[device_id]
            for key in sensors:
                sensor = sensors[key]
                sensor.event = event
                # Fire event
                if sensors[key].should_fire_event:
                    sensor.hass.bus.fire(
                        "signal_received", {
                            ATTR_ENTITY_ID: sensors[key].entity_id,
                        }
                    )
            return

        # Add entity if not exist and the automatic_add is True
        if not config[CONF_AUTOMATIC_ADD]:
            return

        pkt_id = "".join("{0:02x}".format(x) for x in event.data)
        _LOGGER.info("Automatic add rfxtrx.sensor: %s", pkt_id)

        data_type = ''
        for _data_type in DATA_TYPES:
            if _data_type in event.values:
                data_type = _data_type
                break
        new_sensor = RfxtrxSensor(event, pkt_id, data_type)
        sub_sensors = {}
        sub_sensors[new_sensor.data_type] = new_sensor
        rfxtrx.RFX_DEVICES[device_id] = sub_sensors
        add_devices([new_sensor])

    if sensor_update not in rfxtrx.RECEIVED_EVT_SUBSCRIBERS:
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS.append(sensor_update)
示例#48
0
def setup_platform(hass, config, add_devices_callback, discovery_info=None):
    """Setup the RFXtrx platform."""
    # pylint: disable=too-many-locals
    from RFXtrx import SensorEvent
    sensors = []
    for packet_id, entity_info in config['devices'].items():
        event = rfxtrx.get_rfx_object(packet_id)
        device_id = "sensor_" + slugify(event.device.id_string.lower())
        if device_id in rfxtrx.RFX_DEVICES:
            continue
        _LOGGER.info("Add %s rfxtrx.sensor", entity_info[ATTR_NAME])

        sub_sensors = {}
        data_types = entity_info[ATTR_DATA_TYPE]
        if len(data_types) == 0:
            data_type = "Unknown"
            for data_type in DATA_TYPES:
                if data_type in event.values:
                    data_types = [data_type]
                    break
        for _data_type in data_types:
            new_sensor = RfxtrxSensor(None, entity_info[ATTR_NAME],
                                      _data_type, entity_info[ATTR_FIREEVENT])
            sensors.append(new_sensor)
            sub_sensors[_data_type] = new_sensor
        rfxtrx.RFX_DEVICES[device_id] = sub_sensors

    add_devices_callback(sensors)

    def sensor_update(event):
        """Callback for sensor updates from the RFXtrx gateway."""
        if not isinstance(event, SensorEvent):
            return

        device_id = "sensor_" + slugify(event.device.id_string.lower())

        if device_id in rfxtrx.RFX_DEVICES:
            sensors = rfxtrx.RFX_DEVICES[device_id]
            for key in sensors:
                sensor = sensors[key]
                sensor.event = event
                # Fire event
                if sensors[key].should_fire_event:
                    sensor.hass.bus.fire(
                        "signal_received", {
                            ATTR_ENTITY_ID:
                                sensors[key].entity_id,
                        }
                    )

            return

        # Add entity if not exist and the automatic_add is True
        if not config[ATTR_AUTOMATIC_ADD]:
            return

        pkt_id = "".join("{0:02x}".format(x) for x in event.data)
        _LOGGER.info("Automatic add rfxtrx.sensor: %s",
                     device_id)

        data_type = "Unknown"
        for _data_type in DATA_TYPES:
            if _data_type in event.values:
                data_type = _data_type
                break
        new_sensor = RfxtrxSensor(event, pkt_id, data_type)
        sub_sensors = {}
        sub_sensors[new_sensor.data_type] = new_sensor
        rfxtrx.RFX_DEVICES[device_id] = sub_sensors
        add_devices_callback([new_sensor])

    if sensor_update not in rfxtrx.RECEIVED_EVT_SUBSCRIBERS:
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS.append(sensor_update)
示例#49
0
    def test_update_of_sensors(self):
        """Test with 3 sensors."""
        config = {'devices':
                  {'sensor_0502': {
                      'name': 'Test',
                      'packetid': '0a52080705020095220269',
                      'data_type': 'Temperature'},
                   'sensor_0601': {
                       'name': 'Bath_Humidity',
                       'packetid': '0a520802060100ff0e0269',
                       'data_type': 'Humidity'},
                   'sensor_0601 2': {
                       'name': 'Bath',
                       'packetid': '0a520802060100ff0e0269'}}}
        devices = []

        def add_dev_callback(devs):
            """Add a callback to add devices."""
            for dev in devs:
                devices.append(dev)

        rfxtrx.setup_platform(self.hass, config, add_dev_callback)

        self.assertEqual(3, len(devices))
        self.assertEqual(3, len(rfxtrx_core.RFX_DEVICES))

        device_num = 0
        for entity in devices:
            if entity.name == 'Bath_Humidity':
                device_num = device_num + 1
                self.assertEqual('%', entity.unit_of_measurement)
                self.assertEqual(14, entity.state)
                self.assertEqual({'Battery numeric': 9, 'Temperature': 25.5,
                                  'Humidity': 14, 'Humidity status': 'normal',
                                  'Humidity status numeric': 2,
                                  'Rssi numeric': 6},
                                 entity.device_state_attributes)
                self.assertEqual('Bath_Humidity', entity.__str__())
            elif entity.name == 'Bath':
                device_num = device_num + 1
                self.assertEqual(TEMP_CELCIUS, entity.unit_of_measurement)
                self.assertEqual(25.5, entity.state)
                self.assertEqual({'Battery numeric': 9, 'Temperature': 25.5,
                                  'Humidity': 14, 'Humidity status': 'normal',
                                  'Humidity status numeric': 2,
                                  'Rssi numeric': 6},
                                 entity.device_state_attributes)
                self.assertEqual('Bath', entity.__str__())
            elif entity.name == 'Test':
                device_num = device_num + 1
                self.assertEqual(TEMP_CELCIUS, entity.unit_of_measurement)
                self.assertEqual(14.9, entity.state)
                self.assertEqual({'Humidity status': 'normal',
                                  'Temperature': 14.9,
                                  'Rssi numeric': 6, 'Humidity': 34,
                                  'Battery numeric': 9,
                                  'Humidity status numeric': 2},
                                 entity.device_state_attributes)
                self.assertEqual('Test', entity.__str__())

        self.assertEqual(3, device_num)

        event = rfxtrx_core.get_rfx_object('0a520802060101ff0f0269')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = devices[0]

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        event = rfxtrx_core.get_rfx_object('0a52080705020085220269')
        event.data = bytearray(b'\nR\x08\x04\x05\x02\x00\x95$\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)

        self.assertEqual(3, len(devices))
        self.assertEqual(3, len(rfxtrx_core.RFX_DEVICES))

        device_num = 0
        for entity in devices:
            if entity.name == 'Bath_Humidity':
                device_num = device_num + 1
                self.assertEqual('%', entity.unit_of_measurement)
                self.assertEqual(15, entity.state)
                self.assertEqual({'Battery numeric': 9, 'Temperature': 51.1,
                                  'Humidity': 15, 'Humidity status': 'normal',
                                  'Humidity status numeric': 2,
                                  'Rssi numeric': 6},
                                 entity.device_state_attributes)
                self.assertEqual('Bath_Humidity', entity.__str__())
            elif entity.name == 'Bath':
                device_num = device_num + 1
                self.assertEqual(TEMP_CELCIUS, entity.unit_of_measurement)
                self.assertEqual(51.1, entity.state)
                self.assertEqual({'Battery numeric': 9, 'Temperature': 51.1,
                                  'Humidity': 15, 'Humidity status': 'normal',
                                  'Humidity status numeric': 2,
                                  'Rssi numeric': 6},
                                 entity.device_state_attributes)
                self.assertEqual('Bath', entity.__str__())
            elif entity.name == 'Test':
                device_num = device_num + 1
                self.assertEqual(TEMP_CELCIUS, entity.unit_of_measurement)
                self.assertEqual(13.3, entity.state)
                self.assertEqual({'Humidity status': 'normal',
                                  'Temperature': 13.3,
                                  'Rssi numeric': 6, 'Humidity': 34,
                                  'Battery numeric': 9,
                                  'Humidity status numeric': 2},
                                 entity.device_state_attributes)
                self.assertEqual('Test', entity.__str__())

        self.assertEqual(3, device_num)

        self.assertEqual(3, len(devices))
        self.assertEqual(3, len(rfxtrx_core.RFX_DEVICES))
示例#50
0
    def test_update_of_sensors(self):
        """Test with 3 sensors."""
        assert setup_component(self.hass, 'sensor', {
                'sensor': {'platform': 'rfxtrx',
                           'devices':
                               {'0a52080705020095220269': {
                                   'name': 'Test',
                                   'data_type': 'Temperature'},
                                   '0a520802060100ff0e0269': {
                                   'name': 'Bath',
                                   'data_type': ['Temperature', 'Humidity']
                                   }}}})

        assert 2 == len(rfxtrx_core.RFX_DEVICES)
        device_num = 0
        for id in rfxtrx_core.RFX_DEVICES:
            if id == 'sensor_0601':
                device_num = device_num + 1
                assert len(rfxtrx_core.RFX_DEVICES[id]) == 2
                _entity_temp = rfxtrx_core.RFX_DEVICES[id]['Temperature']
                _entity_hum = rfxtrx_core.RFX_DEVICES[id]['Humidity']
                assert '%' == _entity_hum.unit_of_measurement
                assert 'Bath' == _entity_hum.__str__()
                assert _entity_temp.state is None
                assert TEMP_CELSIUS == \
                    _entity_temp.unit_of_measurement
                assert 'Bath' == _entity_temp.__str__()
            elif id == 'sensor_0502':
                device_num = device_num + 1
                entity = rfxtrx_core.RFX_DEVICES[id]['Temperature']
                assert entity.state is None
                assert TEMP_CELSIUS == entity.unit_of_measurement
                assert 'Test' == entity.__str__()

        assert 2 == device_num

        event = rfxtrx_core.get_rfx_object('0a520802060101ff0f0269')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        event = rfxtrx_core.get_rfx_object('0a52080705020085220269')
        event.data = bytearray(b'\nR\x08\x04\x05\x02\x00\x95$\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)

        assert 2 == len(rfxtrx_core.RFX_DEVICES)

        device_num = 0
        for id in rfxtrx_core.RFX_DEVICES:
            if id == 'sensor_0601':
                device_num = device_num + 1
                assert len(rfxtrx_core.RFX_DEVICES[id]) == 2
                _entity_temp = rfxtrx_core.RFX_DEVICES[id]['Temperature']
                _entity_hum = rfxtrx_core.RFX_DEVICES[id]['Humidity']
                assert '%' == _entity_hum.unit_of_measurement
                assert 15 == _entity_hum.state
                assert {'Battery numeric': 9, 'Temperature': 51.1,
                        'Humidity': 15, 'Humidity status': 'normal',
                        'Humidity status numeric': 2,
                        'Rssi numeric': 6} == \
                    _entity_hum.device_state_attributes
                assert 'Bath' == _entity_hum.__str__()

                assert TEMP_CELSIUS == \
                    _entity_temp.unit_of_measurement
                assert 51.1 == _entity_temp.state
                assert {'Battery numeric': 9, 'Temperature': 51.1,
                        'Humidity': 15, 'Humidity status': 'normal',
                        'Humidity status numeric': 2,
                        'Rssi numeric': 6} == \
                    _entity_temp.device_state_attributes
                assert 'Bath' == _entity_temp.__str__()
            elif id == 'sensor_0502':
                device_num = device_num + 1
                entity = rfxtrx_core.RFX_DEVICES[id]['Temperature']
                assert TEMP_CELSIUS == entity.unit_of_measurement
                assert 13.3 == entity.state
                assert {'Humidity status': 'normal',
                        'Temperature': 13.3,
                        'Rssi numeric': 6, 'Humidity': 34,
                        'Battery numeric': 9,
                        'Humidity status numeric': 2} == \
                    entity.device_state_attributes
                assert 'Test' == entity.__str__()

        assert 2 == device_num
        assert 2 == len(rfxtrx_core.RFX_DEVICES)
示例#51
0
    def test_discover_sensor(self):
        """Test with discovery of sensor."""
        config = {'devices': {}}
        devices = []

        def add_dev_callback(devs):
            """Add a callback to add devices."""
            for dev in devs:
                devices.append(dev)

        rfxtrx.setup_platform(self.hass, config, add_dev_callback)

        event = rfxtrx_core.get_rfx_object('0a520801070100b81b0279')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)

        entity = devices[0]
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(1, len(devices))
        self.assertEqual({'Humidity status': 'normal',
                          'Temperature': 18.4,
                          'Rssi numeric': 7, 'Humidity': 27,
                          'Battery numeric': 9,
                          'Humidity status numeric': 2},
                         entity.device_state_attributes)
        self.assertEqual('sensor_0701 : 0a520801070100b81b0279',
                         entity.__str__())

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(1, len(devices))

        event = rfxtrx_core.get_rfx_object('0a52080405020095240279')
        event.data = bytearray(b'\nR\x08\x04\x05\x02\x00\x95$\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = devices[1]
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(2, len(devices))
        self.assertEqual({'Humidity status': 'normal',
                          'Temperature': 14.9,
                          'Rssi numeric': 7, 'Humidity': 36,
                          'Battery numeric': 9,
                          'Humidity status numeric': 2},
                         entity.device_state_attributes)
        self.assertEqual('sensor_0502 : 0a52080405020095240279',
                         entity.__str__())

        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = devices[0]
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(2, len(devices))
        self.assertEqual({'Humidity status': 'normal',
                          'Temperature': 17.9,
                          'Rssi numeric': 7, 'Humidity': 27,
                          'Battery numeric': 9,
                          'Humidity status numeric': 2},
                         entity.device_state_attributes)
        self.assertEqual('sensor_0701 : 0a520801070100b81b0279',
                         entity.__str__())

        # trying to add a switch
        event = rfxtrx_core.get_rfx_object('0b1100cd0213c7f210010f70')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(2, len(devices))
示例#52
0
    def test_update_of_sensors(self):
        """Test with 3 sensors."""
        self.assertTrue(
            _setup_component(
                self.hass, 'sensor', {
                    'sensor': {
                        'platform': 'rfxtrx',
                        'devices': {
                            '0a52080705020095220269': {
                                'name': 'Test',
                                'data_type': 'Temperature'
                            },
                            '0a520802060100ff0e0269': {
                                'name': 'Bath',
                                'data_type': ['Temperature', 'Humidity']
                            }
                        }
                    }
                }))

        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        device_num = 0
        for id in rfxtrx_core.RFX_DEVICES:
            if id == 'sensor_0601':
                device_num = device_num + 1
                self.assertEqual(len(rfxtrx_core.RFX_DEVICES[id]), 2)
                _entity_temp = rfxtrx_core.RFX_DEVICES[id]['Temperature']
                _entity_hum = rfxtrx_core.RFX_DEVICES[id]['Humidity']
                self.assertEqual('%', _entity_hum.unit_of_measurement)
                self.assertEqual('Bath', _entity_hum.__str__())
                self.assertEqual(None, _entity_temp.state)
                self.assertEqual(TEMP_CELSIUS,
                                 _entity_temp.unit_of_measurement)
                self.assertEqual('Bath', _entity_temp.__str__())
            elif id == 'sensor_0502':
                device_num = device_num + 1
                entity = rfxtrx_core.RFX_DEVICES[id]['Temperature']
                self.assertEqual(None, entity.state)
                self.assertEqual(TEMP_CELSIUS, entity.unit_of_measurement)
                self.assertEqual('Test', entity.__str__())

        self.assertEqual(2, device_num)

        event = rfxtrx_core.get_rfx_object('0a520802060101ff0f0269')
        event.data = bytearray(b'\nR\x08\x01\x07\x01\x00\xb8\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)

        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        event = rfxtrx_core.get_rfx_object('0a52080705020085220269')
        event.data = bytearray(b'\nR\x08\x04\x05\x02\x00\x95$\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)

        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))

        device_num = 0
        for id in rfxtrx_core.RFX_DEVICES:
            if id == 'sensor_0601':
                device_num = device_num + 1
                self.assertEqual(len(rfxtrx_core.RFX_DEVICES[id]), 2)
                _entity_temp = rfxtrx_core.RFX_DEVICES[id]['Temperature']
                _entity_hum = rfxtrx_core.RFX_DEVICES[id]['Humidity']
                self.assertEqual('%', _entity_hum.unit_of_measurement)
                self.assertEqual(15, _entity_hum.state)
                self.assertEqual(
                    {
                        'Battery numeric': 9,
                        'Temperature': 51.1,
                        'Humidity': 15,
                        'Humidity status': 'normal',
                        'Humidity status numeric': 2,
                        'Rssi numeric': 6
                    }, _entity_hum.device_state_attributes)
                self.assertEqual('Bath', _entity_hum.__str__())

                self.assertEqual(TEMP_CELSIUS,
                                 _entity_temp.unit_of_measurement)
                self.assertEqual(51.1, _entity_temp.state)
                self.assertEqual(
                    {
                        'Battery numeric': 9,
                        'Temperature': 51.1,
                        'Humidity': 15,
                        'Humidity status': 'normal',
                        'Humidity status numeric': 2,
                        'Rssi numeric': 6
                    }, _entity_temp.device_state_attributes)
                self.assertEqual('Bath', _entity_temp.__str__())
            elif id == 'sensor_0502':
                device_num = device_num + 1
                entity = rfxtrx_core.RFX_DEVICES[id]['Temperature']
                self.assertEqual(TEMP_CELSIUS, entity.unit_of_measurement)
                self.assertEqual(13.3, entity.state)
                self.assertEqual(
                    {
                        'Humidity status': 'normal',
                        'Temperature': 13.3,
                        'Rssi numeric': 6,
                        'Humidity': 34,
                        'Battery numeric': 9,
                        'Humidity status numeric': 2
                    }, entity.device_state_attributes)
                self.assertEqual('Test', entity.__str__())

        self.assertEqual(2, device_num)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
示例#53
0
    def test_discover_light(self):
        """Test with discovery of lights."""
        config = {'automatic_add': True, 'devices': {}}
        devices = []

        def add_dev_callback(devs):
            """Add a callback to add devices."""
            for dev in devs:
                devices.append(dev)

        rfxtrx.setup_platform(self.hass, config, add_dev_callback)

        event = rfxtrx_core.get_rfx_object('0b11009e00e6116202020070')
        event.data = bytearray(b'\x0b\x11\x00\x9e\x00\xe6\x11b\x02\x02\x00p')
        with patch('homeassistant.components.light.' +
                   'rfxtrx.RfxtrxLight.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = devices[0]
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(1, len(devices))
        self.assertEqual('<Entity 0e611622 : 0b11009e00e6116202020070: on>',
                         entity.__str__())

        event = rfxtrx_core.get_rfx_object('0b11009e00e6116201010070')
        event.data = bytearray(b'\x0b\x11\x00\x9e\x00\xe6\x11b\x01\x01\x00p')
        with patch('homeassistant.components.light.' +
                   'rfxtrx.RfxtrxLight.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(1, len(devices))

        event = rfxtrx_core.get_rfx_object('0b1100120118cdea02020070')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x12, 0x01, 0x18, 0xcd, 0xea, 0x02, 0x02, 0x00,
            0x70
        ])
        with patch('homeassistant.components.light.' +
                   'rfxtrx.RfxtrxLight.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = devices[1]
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(2, len(devices))
        self.assertEqual('<Entity 118cdea2 : 0b1100120118cdea02020070: on>',
                         entity.__str__())

        # trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(2, len(devices))

        # trying to add a swicth
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([
            0x0b, 0x11, 0x00, 0x10, 0x01, 0x18, 0xcd, 0xea, 0x01, 0x01, 0x0f,
            0x70
        ])
        with patch('homeassistant.components.light.' +
                   'rfxtrx.RfxtrxLight.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(2, len(devices))
示例#54
0
def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the RFXtrx platform."""
    from RFXtrx import SensorEvent
    sensors = []
    for packet_id, entity_info in config[CONF_DEVICES].items():
        event = rfxtrx.get_rfx_object(packet_id)
        device_id = "sensor_{}".format(slugify(event.device.id_string.lower()))
        if device_id in rfxtrx.RFX_DEVICES:
            continue
        _LOGGER.info("Add %s rfxtrx.sensor", entity_info[ATTR_NAME])

        sub_sensors = {}
        data_types = entity_info[ATTR_DATA_TYPE]
        if not data_types:
            data_types = ['']
            for data_type in DATA_TYPES:
                if data_type in event.values:
                    data_types = [data_type]
                    break
        for _data_type in data_types:
            new_sensor = RfxtrxSensor(None, entity_info[ATTR_NAME],
                                      _data_type, entity_info[ATTR_FIRE_EVENT])
            sensors.append(new_sensor)
            sub_sensors[_data_type] = new_sensor
        rfxtrx.RFX_DEVICES[device_id] = sub_sensors
    add_entities(sensors)

    def sensor_update(event):
        """Handle sensor updates from the RFXtrx gateway."""
        if not isinstance(event, SensorEvent):
            return

        device_id = "sensor_" + slugify(event.device.id_string.lower())

        if device_id in rfxtrx.RFX_DEVICES:
            sensors = rfxtrx.RFX_DEVICES[device_id]
            for data_type in sensors:
                # Some multi-sensor devices send individual messages for each
                # of their sensors. Update only if event contains the
                # right data_type for the sensor.
                if data_type not in event.values:
                    continue
                sensor = sensors[data_type]
                sensor.event = event
                # Fire event
                if sensor.should_fire_event:
                    sensor.hass.bus.fire(
                        "signal_received", {
                            ATTR_ENTITY_ID: sensor.entity_id,
                        }
                    )
            return

        # Add entity if not exist and the automatic_add is True
        if not config[CONF_AUTOMATIC_ADD]:
            return

        pkt_id = "".join("{0:02x}".format(x) for x in event.data)
        _LOGGER.info("Automatic add rfxtrx.sensor: %s", pkt_id)

        data_type = ''
        for _data_type in DATA_TYPES:
            if _data_type in event.values:
                data_type = _data_type
                break
        new_sensor = RfxtrxSensor(event, pkt_id, data_type)
        sub_sensors = {}
        sub_sensors[new_sensor.data_type] = new_sensor
        rfxtrx.RFX_DEVICES[device_id] = sub_sensors
        add_entities([new_sensor])

    if sensor_update not in rfxtrx.RECEIVED_EVT_SUBSCRIBERS:
        rfxtrx.RECEIVED_EVT_SUBSCRIBERS.append(sensor_update)
示例#55
0
    def test_discover_switch(self):
        """Test with discovery of switches."""
        config = {'automatic_add': True, 'devices': {}}
        devices = []

        def add_dev_callback(devs):
            """Add a callback to add devices."""
            for dev in devs:
                devices.append(dev)

        rfxtrx.setup_platform(self.hass, config, add_dev_callback)

        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x10, 0x01, 0x18,
                                0xcd, 0xea, 0x01, 0x01, 0x0f, 0x70])
        with patch('homeassistant.components.switch.' +
                   'rfxtrx.RfxtrxSwitch.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = devices[0]
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(1, len(devices))
        self.assertEqual('<Entity 118cdea2 : 0b1100100118cdea01010f70: on>',
                         entity.__str__())

        with patch('homeassistant.components.switch.' +
                   'rfxtrx.RfxtrxSwitch.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(1, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(1, len(devices))

        event = rfxtrx_core.get_rfx_object('0b1100100118cdeb02010f70')
        event.data = bytearray([0x0b, 0x11, 0x00, 0x12, 0x01, 0x18,
                                0xcd, 0xea, 0x02, 0x00, 0x00, 0x70])
        with patch('homeassistant.components.switch.' +
                   'rfxtrx.RfxtrxSwitch.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        entity = devices[1]
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(2, len(devices))
        self.assertEqual('<Entity 118cdeb2 : 0b1100120118cdea02000070: on>',
                         entity.__str__())

        # Trying to add a sensor
        event = rfxtrx_core.get_rfx_object('0a52085e070100b31b0279')
        event.data = bytearray(b'\nR\x08^\x07\x01\x00\xb3\x1b\x02y')
        rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(2, len(devices))

        # Trying to add a light
        event = rfxtrx_core.get_rfx_object('0b1100100118cdea02010f70')
        event.data = bytearray([0x0b, 0x11, 0x11, 0x10, 0x01, 0x18,
                                0xcd, 0xea, 0x01, 0x02, 0x0f, 0x70])
        with patch('homeassistant.components.switch.' +
                   'rfxtrx.RfxtrxSwitch.update_ha_state',
                   return_value=None):
            rfxtrx_core.RECEIVED_EVT_SUBSCRIBERS[0](event)
        self.assertEqual(2, len(rfxtrx_core.RFX_DEVICES))
        self.assertEqual(2, len(devices))