コード例 #1
0
ファイル: paho_mqtt_client.py プロジェクト: rfaelens/HomieV3
    def connect(self):
        MQTT_Base.connect(self)

        self.mqtt_client = mqtt_client.Client(
            client_id=self.mqtt_settings['MQTT_CLIENT_ID'])
        self.mqtt_client.on_connect = self._on_connect
        self.mqtt_client.on_message = self._on_message
        #self.mqtt_client.on_publish = self._on_publish
        self.mqtt_client.on_disconnect = self._on_disconnect
        self.mqtt_client.enable_logger(mqtt_logger)
        self.mqtt_client.enable_logger()

        if self.mqtt_settings['MQTT_USERNAME']:
            self.mqtt_client.username_pw_set(
                self.mqtt_settings['MQTT_USERNAME'],
                password=self.mqtt_settings['MQTT_PASSWORD'])

        try:
            self.mqtt_client.connect(
                self.mqtt_settings['MQTT_BROKER'],
                port=self.mqtt_settings['MQTT_PORT'],
                keepalive=self.mqtt_settings['MQTT_KEEPALIVE'],
            )

            self.mqtt_client.loop_start()

        except Exception as e:
            logger.warning('MQTT Unable to connect to Broker {}'.format(e))
コード例 #2
0
    def connect(self):
        MQTT_Base.connect(self)

        self.mqtt_client = mqtt_client.Client(
            client_id=self.mqtt_settings["MQTT_CLIENT_ID"])
        self.mqtt_client.on_connect = self._on_connect
        self.mqtt_client.on_message = self._on_message
        # self.mqtt_client.on_publish = self._on_publish
        self.mqtt_client.on_disconnect = self._on_disconnect
        #self.mqtt_client.enable_logger(mqtt_logger)
        #self.mqtt_client.enable_logger()

        self.set_will(self.last_will, "lost", True, 1)

        if self.mqtt_settings["MQTT_USERNAME"]:
            self.mqtt_client.username_pw_set(
                self.mqtt_settings["MQTT_USERNAME"],
                password=self.mqtt_settings["MQTT_PASSWORD"],
            )

        try:
            self.mqtt_client.connect(
                self.mqtt_settings["MQTT_BROKER"],
                port=self.mqtt_settings["MQTT_PORT"],
                keepalive=self.mqtt_settings["MQTT_KEEPALIVE"],
            )

            self.mqtt_client.loop_start()

        except Exception as e:
            logger.warning("MQTT Unable to connect to Broker {}".format(e))

        self.mqtt_client.on_connect = self._on_connect
        self.mqtt_client.on_message = self._on_message
        self.mqtt_client.on_disconnect = self._on_disconnect

        if self.mqtt_settings["MQTT_USERNAME"]:
            self.mqtt_client.username_pw_set(
                self.mqtt_settings["MQTT_USERNAME"],
                password=self.mqtt_settings["MQTT_PASSWORD"],
            )

        def start():
            try:
                asyncio.set_event_loop(self.event_loop)
                logger.info('Starting Asyincio looping forever')
                self.event_loop.run_forever()
                logger.warning('Event loop stopped')

            except Exception as e:
                logger.error('Error in event loop {}'.format(e))

        self.event_loop = asyncio.new_event_loop()

        logger.info("Starting MQTT publish thread")
        self._ws_thread = threading.Thread(target=start, args=())

        self._ws_thread.daemon = True
        self._ws_thread.start()
コード例 #3
0
    def publish(self, topic, payload, retain, qos):
        MQTT_Base.publish(self, topic, payload, retain, qos)

        def p():
            self.mqtt_client.publish(topic, payload, retain=retain, qos=qos)

        wrapped = functools.partial(p)
        self.event_loop.call_soon_threadsafe(wrapped)
コード例 #4
0
    def _on_disconnect(self, client, userdata, rc):
        self.mqtt_connected = False  # note, change this uses the property setter, do not really need to catch this in the base class

        if rc > 0:  # unexpected disconnect
            rc_text = "Unknown result code {}".format(rc)
            if rc in COONNECTION_RESULT_CODES:
                rc_text = COONNECTION_RESULT_CODES[rc]

            logger.warning("MQTT Unexpected disconnection  {} {} {}".format(
                client, userdata, rc_text))
        MQTT_Base._on_disconnect(self, rc)
コード例 #5
0
ファイル: gmqtt_client.py プロジェクト: outlaw-dma/Homie4
    def publish(self, topic, payload, retain, qos):
        MQTT_Base.publish(self, topic, payload, retain, qos)

        if self.mqtt_connected is True:
            wrapped = functools.partial(self.mqtt_client.publish,
                                        topic,
                                        payload,
                                        retain=retain,
                                        qos=qos)
            self.event_loop.call_soon_threadsafe(wrapped)
        else:
            logger.warning(
                "Device MQTT publish NOT CONNECTED: {}, retain {}, qos {}, payload: {}"
                .format(topic, retain, qos, payload))
コード例 #6
0
ファイル: gmqtt_client.py プロジェクト: outlaw-dma/Homie4
    def connect(self):
        MQTT_Base.connect(self)

        self.mqtt_client = MQTTClient(
            'gmqtt'  #self.mqtt_settings["MQTT_CLIENT_ID"]
        )

        self.mqtt_client.on_connect = self._on_connect
        self.mqtt_client.on_message = self._on_message
        self.mqtt_client.on_disconnect = self._on_disconnect

        if self.mqtt_settings["MQTT_USERNAME"]:
            self.mqtt_client.set_auth_credentials(
                self.mqtt_settings["MQTT_USERNAME"],
                self.mqtt_settings["MQTT_PASSWORD"],
            )

        def start():
            try:
                logger.warning('Connecting to MQTT')
                asyncio.set_event_loop(self.event_loop)
                #                self.event_loop.run_until_complete(
                #                   self.mqtt_client.connect(self.mqtt_settings["MQTT_BROKER"], self.mqtt_settings["MQTT_PORT"],keepalive=self.mqtt_settings["MQTT_KEEPALIVE"], version=MQTTv311)
                #              )
                logger.warning('Looping forever')
                self.event_loop.run_forever()
                logger.warning('Event loop stopped')
                #self.session.close()
            except Exception as e:
                logger.error('Error in event loop {}'.format(e))

        self.event_loop = asyncio.new_event_loop()

        logger.warning("Starting MQTT thread")
        self._ws_thread = threading.Thread(target=start, args=())

        self._ws_thread.daemon = True
        self._ws_thread.start()

        future = asyncio.run_coroutine_threadsafe(
            self.mqtt_client.connect(
                self.mqtt_settings["MQTT_BROKER"],
                self.mqtt_settings["MQTT_PORT"],
                keepalive=self.mqtt_settings["MQTT_KEEPALIVE"],
                version=MQTTv311), self.event_loop)
コード例 #7
0
 def publish(self, topic, payload, retain=True, qos=0):
     MQTT_Base.publish(self, topic, payload, retain, qos)
     self.mqtt_client.publish(topic, payload, retain=retain, qos=qos)
コード例 #8
0
ファイル: paho_mqtt_client.py プロジェクト: rfaelens/HomieV3
 def publish(self, topic, payload, retain=True, qos=0):
     if isinstance(payload, bool):
         # boolean types must be sent as "true" or "false"
         payload = str(payload).lower()
     MQTT_Base.publish(self, topic, payload, retain, qos)
     self.mqtt_client.publish(topic, payload, retain=retain, qos=qos)
コード例 #9
0
    def __init__(self, mqtt_settings, last_will):
        MQTT_Base.__init__(self, mqtt_settings, last_will)

        self.mqtt_client = None
コード例 #10
0
 def close(self):
     MQTT_Base.close(self)
     self.event_loop.stop()
コード例 #11
0
    def connect(self):
        MQTT_Base.connect(self)

        self.mqtt_transport = "tcp"

        if "MQTT_TRANSPORT" in self.mqtt_settings:
            if (self.mqtt_settings["MQTT_TRANSPORT"] in ["tcp", "websockets"]):
                self.mqtt_transport = self.mqtt_settings["MQTT_TRANSPORT"]
            else:
                logger.warning(
                    "MQTT transport {} not supported, falling back to TCP".
                    format(self.mqtt_settings["MQTT_TRANSPORT"]))

        # If Websocket path is set, assume websockets transport
        if "MQTT_WS_PATH" in self.mqtt_settings:
            self.mqtt_transport = "websockets"

        self.mqtt_client = mqtt_client.Client(
            client_id=self.mqtt_settings["MQTT_CLIENT_ID"],
            transport=self.mqtt_transport
            #clean_session=0
        )
        self.mqtt_client.on_connect = self._on_connect
        self.mqtt_client.on_message = self._on_message
        # self.mqtt_client.on_publish = self._on_publish
        self.mqtt_client.on_disconnect = self._on_disconnect
        #self.mqtt_client.enable_logger(mqtt_logger)
        #self.mqtt_client.enable_logger()

        self.set_will(self.last_will, "lost", True, 1)

        if "MQTT_WS_PATH" in self.mqtt_settings:
            self.mqtt_client.ws_set_options(
                path=self.mqtt_settings["MQTT_WS_PATH"])

        if self.mqtt_settings["MQTT_USERNAME"]:
            self.mqtt_client.username_pw_set(
                self.mqtt_settings["MQTT_USERNAME"],
                password=self.mqtt_settings["MQTT_PASSWORD"],
            )

        if self.mqtt_settings["MQTT_USE_TLS"]:
            self.mqtt_client.tls_set()

        try:
            self.mqtt_client.connect(
                self.mqtt_settings["MQTT_BROKER"],
                port=self.mqtt_settings["MQTT_PORT"],
                keepalive=self.mqtt_settings["MQTT_KEEPALIVE"],
            )
            self.mqtt_client.loop_start()

        except Exception as e:
            logger.warning("MQTT Unable to connect to Broker {}".format(e))

        def start():
            try:
                asyncio.set_event_loop(self.event_loop)
                logger.info('Starting Asyincio looping forever')
                self.event_loop.run_forever()
                logger.warning('Event loop stopped')

            except Exception as e:
                logger.error('Error in event loop {}'.format(e))

        self.event_loop = asyncio.new_event_loop()

        logger.info("Starting MQTT publish thread")
        self._ws_thread = threading.Thread(target=start, args=())

        self._ws_thread.daemon = True
        self._ws_thread.start()
コード例 #12
0
 def _on_message(self, client, userdata, msg):
     topic = msg.topic
     payload = msg.payload.decode("utf-8")
     MQTT_Base._on_message(self, topic, payload, msg.retain, msg.qos)
コード例 #13
0
 def set_will(self, will, topic, retain, qos):
     MQTT_Base.set_will(self, will, topic, retain, qos)
     self.mqtt_client.will_set(will, topic, retain, qos)
コード例 #14
0
 def unsubscribe(self, topic):  # subclass to provide
     MQTT_Base.unsubscribe(self, topic)
     self.mqtt_client.unsubscribe(topic)
コード例 #15
0
 def subscribe(self, topic, qos):  # subclass to provide
     MQTT_Base.subscribe(self, topic, qos)
     self.mqtt_client.subscribe(topic, qos)
コード例 #16
0
ファイル: gmqtt_client.py プロジェクト: outlaw-dma/Homie4
 def set_will(self, will, topic, retain, qos):
     MQTT_Base.set_will(self, will, topic, retain, qos)
コード例 #17
0
ファイル: gmqtt_client.py プロジェクト: outlaw-dma/Homie4
    def __init__(self, mqtt_settings):
        MQTT_Base.__init__(self, mqtt_settings)

        self.mqtt_client = None
コード例 #18
0
ファイル: gmqtt_client.py プロジェクト: outlaw-dma/Homie4
 def _on_disconnect(self, client, packet, exc=None):
     self.mqtt_connected = False  # note, change this uses the property setter, do not really need to catch this in the base class
     logger.warning("MQTT Disconnection  {} {} {}".format(
         client, packet, exc))
     MQTT_Base._on_disconnect(self, 0)
コード例 #19
0
ファイル: gmqtt_client.py プロジェクト: outlaw-dma/Homie4
 def _on_message(self, client, topic, payload, qos, properties):
     #topic = msg.topic
     #payload = msg.payload.decode("utf-8")
     MQTT_Base._on_message(self, topic, payload, False, qos)