Exemplo n.º 1
0
    def setup_gateway(device, persistence_file, baud_rate, tcp_port, in_prefix,
                      out_prefix):
        """Return gateway after setup of the gateway."""
        if device == MQTT_COMPONENT:
            if not setup_component(hass, MQTT_COMPONENT, config):
                return
            mqtt = get_component(MQTT_COMPONENT)
            retain = config[DOMAIN].get(CONF_RETAIN)

            def pub_callback(topic, payload, qos, retain):
                """Call MQTT publish function."""
                mqtt.publish(hass, topic, payload, qos, retain)

            def sub_callback(topic, callback, qos):
                """Call MQTT subscribe function."""
                mqtt.subscribe(hass, topic, callback, qos)
            gateway = mysensors.MQTTGateway(
                pub_callback, sub_callback,
                event_callback=None, persistence=persistence,
                persistence_file=persistence_file,
                protocol_version=version, in_prefix=in_prefix,
                out_prefix=out_prefix, retain=retain)
        else:
            try:
                is_serial_port(device)
                gateway = mysensors.SerialGateway(
                    device, event_callback=None, persistence=persistence,
                    persistence_file=persistence_file,
                    protocol_version=version, baud=baud_rate)
            except vol.Invalid:
                try:
                    socket.getaddrinfo(device, None)
                    # valid ip address
                    gateway = mysensors.TCPGateway(
                        device, event_callback=None, persistence=persistence,
                        persistence_file=persistence_file,
                        protocol_version=version, port=tcp_port)
                except OSError:
                    # invalid ip address
                    return
        gateway.metric = hass.config.units.is_metric
        gateway.optimistic = config[DOMAIN].get(CONF_OPTIMISTIC)
        gateway.device = device
        gateway.event_callback = gw_callback_factory(hass)

        def gw_start(event):
            """Trigger to start of the gateway and any persistence."""
            if persistence:
                discover_persistent_devices(hass, gateway)
            gateway.start()
            hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
                                 lambda event: gateway.stop())

        hass.bus.listen_once(EVENT_HOMEASSISTANT_START, gw_start)

        return gateway
Exemplo n.º 2
0
    def setup_gateway(device, persistence_file, baud_rate, tcp_port, in_prefix,
                      out_prefix):
        """Return gateway after setup of the gateway."""
        # pylint: disable=too-many-arguments
        if device == MQTT_COMPONENT:
            if not setup_component(hass, MQTT_COMPONENT, config):
                return
            mqtt = get_component(MQTT_COMPONENT)
            retain = config[DOMAIN].get(CONF_RETAIN)

            def pub_callback(topic, payload, qos, retain):
                """Call mqtt publish function."""
                mqtt.publish(hass, topic, payload, qos, retain)

            def sub_callback(topic, callback, qos):
                """Call mqtt subscribe function."""
                mqtt.subscribe(hass, topic, callback, qos)
            gateway = mysensors.MQTTGateway(
                pub_callback, sub_callback,
                event_callback=None, persistence=persistence,
                persistence_file=persistence_file,
                protocol_version=version, in_prefix=in_prefix,
                out_prefix=out_prefix, retain=retain)
        else:
            try:
                socket.inet_aton(device)
                # valid ip address
                gateway = mysensors.TCPGateway(
                    device, event_callback=None, persistence=persistence,
                    persistence_file=persistence_file,
                    protocol_version=version, port=tcp_port)
            except OSError:
                # invalid ip address
                gateway = mysensors.SerialGateway(
                    device, event_callback=None, persistence=persistence,
                    persistence_file=persistence_file,
                    protocol_version=version, baud=baud_rate)
        gateway.metric = hass.config.units.is_metric
        gateway.debug = config[DOMAIN].get(CONF_DEBUG)
        optimistic = config[DOMAIN].get(CONF_OPTIMISTIC)
        gateway = GatewayWrapper(gateway, optimistic, device)
        # pylint: disable=attribute-defined-outside-init
        gateway.event_callback = gateway.callback_factory()

        def gw_start(event):
            """Callback to trigger start of gateway and any persistence."""
            gateway.start()
            hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
                                 lambda event: gateway.stop())
            if persistence:
                for node_id in gateway.sensors:
                    gateway.event_callback('persistence', node_id)

        hass.bus.listen_once(EVENT_HOMEASSISTANT_START, gw_start)

        return gateway
Exemplo n.º 3
0
    def start(self):
        """Run the MQTT client."""
        print('Start MQTT client')
        self._mqttc.loop_start()

    def stop(self):
        """Stop the MQTT client."""
        print('Stop MQTT client')
        self._mqttc.disconnect()
        self._mqttc.loop_stop()


def event(message):
    """Callback for mysensors updates."""
    print("sensor_update " + str(message.node_id))


MQTTC = MQTT('localhost', 1883, 60)
MQTTC.start()

GATEWAY = mysensors.MQTTGateway(MQTTC.publish,
                                MQTTC.subscribe,
                                event_callback=event,
                                protocol_version="2.0",
                                in_prefix='mygateway1-out',
                                out_prefix='mygateway1-in',
                                retain=True)

GATEWAY.start()
Exemplo n.º 4
0
    def setup_gateway(device, persistence_file, baud_rate, tcp_port, in_prefix,
                      out_prefix):
        """Return gateway after setup of the gateway."""
        if device == MQTT_COMPONENT:
            if not setup_component(hass, MQTT_COMPONENT, config):
                return
            mqtt = get_component(MQTT_COMPONENT)
            retain = config[DOMAIN].get(CONF_RETAIN)

            def pub_callback(topic, payload, qos, retain):
                """Call mqtt publish function."""
                mqtt.publish(hass, topic, payload, qos, retain)

            def sub_callback(topic, callback, qos):
                """Call mqtt subscribe function."""
                mqtt.subscribe(hass, topic, callback, qos)

            gateway = mysensors.MQTTGateway(pub_callback,
                                            sub_callback,
                                            event_callback=None,
                                            persistence=persistence,
                                            persistence_file=persistence_file,
                                            protocol_version=version,
                                            in_prefix=in_prefix,
                                            out_prefix=out_prefix,
                                            retain=retain)
        else:
            try:
                is_serial_port(device)
                gateway = mysensors.SerialGateway(
                    device,
                    event_callback=None,
                    persistence=persistence,
                    persistence_file=persistence_file,
                    protocol_version=version,
                    baud=baud_rate)
            except vol.Invalid:
                try:
                    socket.getaddrinfo(device, None)
                    # valid ip address
                    gateway = mysensors.TCPGateway(
                        device,
                        event_callback=None,
                        persistence=persistence,
                        persistence_file=persistence_file,
                        protocol_version=version,
                        port=tcp_port)
                except OSError:
                    # invalid ip address
                    return
        gateway.metric = hass.config.units.is_metric
        optimistic = config[DOMAIN].get(CONF_OPTIMISTIC)
        gateway = GatewayWrapper(gateway, optimistic, device)
        # pylint: disable=attribute-defined-outside-init
        gateway.event_callback = gateway.callback_factory()

        def gw_start(event):
            """Callback to trigger start of gateway and any persistence."""
            if persistence:
                for node_id in gateway.sensors:
                    node = gateway.sensors[node_id]
                    for child_id in node.children:
                        child = node.children[child_id]
                        for value_type in child.values:
                            msg = mysensors.Message().modify(
                                node_id=node_id,
                                child_id=child_id,
                                type=1,
                                sub_type=value_type)
                            gateway.event_callback(msg)
            gateway.start()
            hass.bus.listen_once(EVENT_HOMEASSISTANT_STOP,
                                 lambda event: gateway.stop())

        hass.bus.listen_once(EVENT_HOMEASSISTANT_START, gw_start)

        return gateway
Exemplo n.º 5
0
 def setUp(self):
     """Set up gateway."""
     self.mock_pub = mock.Mock()
     self.mock_sub = mock.Mock()
     self.gateway = my.MQTTGateway(self.mock_pub, self.mock_sub)