示例#1
0
def setup(hass, config):
    """ Setup the RFXtrx component. """

    # Declare the Handle event
    def handle_receive(event):
        """ Callback all subscribers for RFXtrx gateway. """

        # Log RFXCOM event
        entity_id = slugify(event.device.id_string.lower())
        packet_id = "".join("{0:02x}".format(x) for x in event.data)
        entity_name = "%s : %s" % (entity_id, packet_id)
        _LOGGER.info("Receive RFXCOM event from %s => %s", event.device,
                     entity_name)

        # Callback to HA registered components
        for subscriber in RECEIVED_EVT_SUBSCRIBERS:
            subscriber(event)

    # Try to load the RFXtrx module
    try:
        import RFXtrx as rfxtrxmod
    except ImportError:
        _LOGGER.exception("Failed to import rfxtrx")
        return False

    # Init the rfxtrx module
    global RFXOBJECT

    if CONF_DEVICE not in config[DOMAIN]:
        _LOGGER.exception(
            "can found device parameter in %s YAML configuration section",
            DOMAIN)
        return False

    device = config[DOMAIN][CONF_DEVICE]
    debug = config[DOMAIN].get(CONF_DEBUG, False)

    RFXOBJECT = rfxtrxmod.Core(device, handle_receive, debug=debug)

    return True
示例#2
0
    def test_one_rollershutter(self):
        """Test with 1 roller shutter."""
        self.assertTrue(_setup_component(self.hass, 'rollershutter', {
            'rollershutter': {'platform': 'rfxtrx',
                              'devices':
                                  {'0b1400cd0213c7f210010f51': {
                                      'name': 'Test'
                                   }}}}))

        import RFXtrx as rfxtrxmod
        rfxtrx_core.RFXOBJECT =\
            rfxtrxmod.Core("", transport_protocol=rfxtrxmod.DummyTransport)

        self.assertEqual(1,  len(rfxtrx_core.RFX_DEVICES))
        for id in rfxtrx_core.RFX_DEVICES:
            entity = rfxtrx_core.RFX_DEVICES[id]
            self.assertEqual(entity.signal_repetitions, 1)
            self.assertFalse(entity.should_fire_event)
            self.assertFalse(entity.should_poll)
            entity.move_up()
            entity.move_down()
            entity.stop()
示例#3
0
    def test_one_sensor(self):
        """Test with 1 switch."""
        config = {'devices':
                  {'123efab1': {
                      'name': 'Test',
                      'packetid': '0b1100cd0213c7f210010f51'}}}
        import RFXtrx as rfxtrxmod
        rfxtrx_core.RFXOBJECT =\
            rfxtrxmod.Core("", transport_protocol=rfxtrxmod.DummyTransport)

        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(1, len(devices))
        entity = devices[0]
        self.assertEqual('Test', entity.name)
        self.assertEqual('off', entity.state)
        self.assertTrue(entity.assumed_state)
        self.assertEqual(entity.signal_repetitions, 1)
        self.assertFalse(entity.should_fire_event)
        self.assertFalse(entity.should_poll)

        self.assertFalse(entity.is_on)
        with patch('homeassistant.components.switch.' +
                   'rfxtrx.RfxtrxSwitch.update_ha_state',
                   return_value=None):
            entity.turn_on()
        self.assertTrue(entity.is_on)
        with patch('homeassistant.components.switch.' +
                   'rfxtrx.RfxtrxSwitch.update_ha_state',
                   return_value=None):
            entity.turn_off()
        self.assertFalse(entity.is_on)
示例#4
0
    def test_old_config(self):
        """Test with 1 switch."""
        assert setup_component(
            self.hass,
            "switch",
            {
                "switch": {
                    "platform": "rfxtrx",
                    "devices": {
                        "123efab1": {
                            "name": "Test",
                            "packetid": "0b1100cd0213c7f210010f51",
                        }
                    },
                }
            },
        )

        import RFXtrx as rfxtrxmod

        rfxtrx_core.RFXOBJECT = rfxtrxmod.Core(
            "", transport_protocol=rfxtrxmod.DummyTransport
        )

        assert 1 == len(rfxtrx_core.RFX_DEVICES)
        entity = rfxtrx_core.RFX_DEVICES["213c7f216"]
        assert "Test" == entity.name
        assert "off" == entity.state
        assert entity.assumed_state
        assert entity.signal_repetitions == 1
        assert not entity.should_fire_event
        assert not entity.should_poll

        assert not entity.is_on
        entity.turn_on()
        assert entity.is_on
        entity.turn_off()
        assert not entity.is_on
示例#5
0
    def test_one_switch(self):
        """Test with 1 switch."""
        self.assertTrue(_setup_component(self.hass, 'switch', {
            'switch': {'platform': 'rfxtrx',
                       'devices':
                           {'0b1100cd0213c7f210010f51': {
                               'name': 'Test'}}}}))

        import RFXtrx as rfxtrxmod
        rfxtrx_core.RFXOBJECT =\
            rfxtrxmod.Core("", transport_protocol=rfxtrxmod.DummyTransport)

        self.assertEqual(1,  len(rfxtrx_core.RFX_DEVICES))
        entity = rfxtrx_core.RFX_DEVICES['213c7f216']
        self.assertEqual('Test', entity.name)
        self.assertEqual('off', entity.state)
        self.assertTrue(entity.assumed_state)
        self.assertEqual(entity.signal_repetitions, 1)
        self.assertFalse(entity.should_fire_event)
        self.assertFalse(entity.should_poll)

        self.assertFalse(entity.is_on)
        entity.turn_on()
        self.assertTrue(entity.is_on)
        entity.turn_off()
        self.assertFalse(entity.is_on)

        entity_id = rfxtrx_core.RFX_DEVICES['213c7f216'].entity_id
        entity_hass = self.hass.states.get(entity_id)
        self.assertEqual('Test', entity_hass.name)
        self.assertEqual('off', entity_hass.state)
        entity.turn_on()
        entity_hass = self.hass.states.get(entity_id)
        self.assertEqual('on', entity_hass.state)
        entity.turn_off()
        entity_hass = self.hass.states.get(entity_id)
        self.assertEqual('off', entity_hass.state)
示例#6
0
def setup_platform(hass, config, add_devices, discovery_info=None):
    """ Setup the RFXtrx platform. """
    logger = logging.getLogger(__name__)

    sensors = {}  # keep track of sensors added to HA

    def sensor_update(event):
        """ Callback for sensor updates from the RFXtrx gateway. """
        if event.device.id_string in sensors:
            sensors[event.device.id_string].event = event
        else:
            logger.info("adding new sensor: %s", event.device.type_string)
            new_sensor = RfxtrxSensor(event)
            sensors[event.device.id_string] = new_sensor
            add_devices([new_sensor])

    try:
        import RFXtrx as rfxtrx
    except ImportError:
        logger.exception("Failed to import rfxtrx")
        return False

    device = config.get("device", "")
    rfxtrx.Core(device, sensor_update)
示例#7
0
    def test_one_light(self):
        """Test with 1 light."""
        assert setup_component(
            self.hass,
            "light",
            {
                "light": {
                    "platform": "rfxtrx",
                    "devices": {
                        "0b1100cd0213c7f210010f51": {
                            "name": "Test"
                        }
                    },
                }
            },
        )

        import RFXtrx as rfxtrxmod

        rfxtrx_core.RFXOBJECT = rfxtrxmod.Core(
            "", transport_protocol=rfxtrxmod.DummyTransport)

        assert 1 == len(rfxtrx_core.RFX_DEVICES)
        entity = rfxtrx_core.RFX_DEVICES["213c7f216"]
        assert "Test" == entity.name
        assert "off" == entity.state
        assert entity.assumed_state
        assert entity.signal_repetitions == 1
        assert not entity.should_fire_event
        assert not entity.should_poll

        assert not entity.is_on

        entity.turn_on()
        assert entity.is_on
        assert entity.brightness == 255

        entity.turn_off()
        assert not entity.is_on
        assert entity.brightness == 0

        entity.turn_on(brightness=100)
        assert entity.is_on
        assert entity.brightness == 100

        entity.turn_on(brightness=10)
        assert entity.is_on
        assert entity.brightness == 10

        entity.turn_on(brightness=255)
        assert entity.is_on
        assert entity.brightness == 255

        entity.turn_off()
        entity_id = rfxtrx_core.RFX_DEVICES["213c7f216"].entity_id
        entity_hass = self.hass.states.get(entity_id)
        assert "Test" == entity_hass.name
        assert "off" == entity_hass.state

        entity.turn_on()
        entity_hass = self.hass.states.get(entity_id)
        assert "on" == entity_hass.state

        entity.turn_off()
        entity_hass = self.hass.states.get(entity_id)
        assert "off" == entity_hass.state

        entity.turn_on(brightness=100)
        entity_hass = self.hass.states.get(entity_id)
        assert "on" == entity_hass.state

        entity.turn_on(brightness=10)
        entity_hass = self.hass.states.get(entity_id)
        assert "on" == entity_hass.state

        entity.turn_on(brightness=255)
        entity_hass = self.hass.states.get(entity_id)
        assert "on" == entity_hass.state
示例#8
0
async def test_one_light(hass, rfxtrx):
    """Test with 1 light."""
    await async_setup_component(
        hass,
        "light",
        {
            "light": {
                "platform": "rfxtrx",
                "devices": {
                    "0b1100cd0213c7f210010f51": {
                        "name": "Test"
                    }
                },
            }
        },
    )
    await hass.async_block_till_done()

    import RFXtrx as rfxtrxmod

    hass.data[rfxtrx_core.DATA_RFXOBJECT] = rfxtrxmod.Core(
        "", transport_protocol=rfxtrxmod.DummyTransport)

    assert 1 == len(rfxtrx_core.RFX_DEVICES)
    entity = rfxtrx_core.RFX_DEVICES["213c7f2_16"]
    entity.hass = hass
    assert "Test" == entity.name
    assert "off" == entity.state
    assert entity.assumed_state
    assert entity.signal_repetitions == 1
    assert not entity.should_fire_event
    assert not entity.should_poll

    assert not entity.is_on

    entity.turn_on()
    assert entity.is_on
    assert entity.brightness == 255

    entity.turn_off()
    assert not entity.is_on
    assert entity.brightness == 0

    entity.turn_on(brightness=100)
    assert entity.is_on
    assert entity.brightness == 100

    entity.turn_on(brightness=10)
    assert entity.is_on
    assert entity.brightness == 10

    entity.turn_on(brightness=255)
    assert entity.is_on
    assert entity.brightness == 255

    entity.turn_off()
    assert "Test" == entity.name
    assert "off" == entity.state

    entity.turn_on()
    assert "on" == entity.state

    entity.turn_off()
    assert "off" == entity.state

    entity.turn_on(brightness=100)
    assert "on" == entity.state

    entity.turn_on(brightness=10)
    assert "on" == entity.state

    entity.turn_on(brightness=255)
    assert "on" == entity.state
示例#9
0
    def test_one_light(self):
        """Test with 1 light."""
        assert setup_component(
            self.hass, 'light', {
                'light': {
                    'platform': 'rfxtrx',
                    'devices': {
                        '0b1100cd0213c7f210010f51': {
                            'name': 'Test'
                        }
                    }
                }
            })

        import RFXtrx as rfxtrxmod
        rfxtrx_core.RFXOBJECT =\
            rfxtrxmod.Core("", transport_protocol=rfxtrxmod.DummyTransport)

        assert 1 == len(rfxtrx_core.RFX_DEVICES)
        entity = rfxtrx_core.RFX_DEVICES['213c7f216']
        assert 'Test' == entity.name
        assert 'off' == entity.state
        assert entity.assumed_state
        assert entity.signal_repetitions == 1
        assert not entity.should_fire_event
        assert not entity.should_poll

        assert not entity.is_on

        entity.turn_on()
        assert entity.is_on
        assert entity.brightness == 255

        entity.turn_off()
        assert not entity.is_on
        assert entity.brightness == 0

        entity.turn_on(brightness=100)
        assert entity.is_on
        assert entity.brightness == 100

        entity.turn_on(brightness=10)
        assert entity.is_on
        assert entity.brightness == 10

        entity.turn_on(brightness=255)
        assert entity.is_on
        assert entity.brightness == 255

        entity.turn_off()
        entity_id = rfxtrx_core.RFX_DEVICES['213c7f216'].entity_id
        entity_hass = self.hass.states.get(entity_id)
        assert 'Test' == entity_hass.name
        assert 'off' == entity_hass.state

        entity.turn_on()
        entity_hass = self.hass.states.get(entity_id)
        assert 'on' == entity_hass.state

        entity.turn_off()
        entity_hass = self.hass.states.get(entity_id)
        assert 'off' == entity_hass.state

        entity.turn_on(brightness=100)
        entity_hass = self.hass.states.get(entity_id)
        assert 'on' == entity_hass.state

        entity.turn_on(brightness=10)
        entity_hass = self.hass.states.get(entity_id)
        assert 'on' == entity_hass.state

        entity.turn_on(brightness=255)
        entity_hass = self.hass.states.get(entity_id)
        assert 'on' == entity_hass.state