MqttMonitor/MqttClient.py

branch
eric7
changeset 92
2fb5c08019fd
parent 84
044df16e55aa
child 95
d830314cca87
--- a/MqttMonitor/MqttClient.py	Sun May 30 17:40:40 2021 +0200
+++ b/MqttMonitor/MqttClient.py	Sun May 30 18:21:40 2021 +0200
@@ -7,7 +7,7 @@
 Module implementing a PyQt wrapper around the paho MQTT client.
 """
 
-from PyQt5.QtCore import (
+from PyQt6.QtCore import (
     pyqtSignal, pyqtSlot, QObject, QCoreApplication, QTimer
 )
 
@@ -73,7 +73,7 @@
         @param userdata user data
         @type any
         @param protocol version of the MQTT protocol to use
-        @type int, one of mqtt.MQTTv31 or mqtt.MQTTv311
+        @type int, one of mqtt.MQTTv3, mqtt.MQTTv311 or mqtt.MQTTv5
         @param transport transport to be used
         @type str, one of "tcp" or "websockets"
         @param parent reference to the parent object
@@ -91,6 +91,7 @@
         
         self.onConnect.connect(self.__connectTimeoutTimer.stop)
         
+        # TODO: MQTTv5: set clean_session to None and remember cleanSession
         self.__mqttClient = mqtt.Client(
             client_id=clientId, clean_session=cleanSession, userdata=None,
             protocol=mqtt.MQTTv311, transport="tcp")
@@ -101,9 +102,12 @@
         """
         Private method to initialize the MQTT callback methods.
         """
+        # TODO: add properties to signal
+        # TODO: MQTTv5: add support for MQTTv5 signature
         self.__mqttClient.on_connect = (
-            lambda client, userdata, flags, rc: self.onConnect.emit(
-                flags, rc))
+            lambda client, userdata, flags, rc, properties:
+                self.onConnect.emit(flags, rc))
+        # TODO: MQTTv5: add support for MQTTv5 signature
         self.__mqttClient.on_disconnect = (
             lambda client, userdata, rc: self.onDisconnected.emit(rc))
         self.__mqttClient.on_log = (
@@ -113,9 +117,12 @@
                 message.topic, message.payload, message.qos, message.retain))
         self.__mqttClient.on_publish = (
             lambda client, userdata, mid: self.onPublish.emit(mid))
+        # TODO: add properties to signal
+        # TODO: MQTTv5: add support for MQTTv5 signature
         self.__mqttClient.on_subscribe = (
-            lambda client, userdata, mid, grantedQos: self.onSubscribe.emit(
-                mid, grantedQos))
+            lambda client, userdata, mid, grantedQos, properties:
+                self.onSubscribe.emit(mid, grantedQos))
+        # TODO: MQTTv5: add support for MQTTv5 signature
         self.__mqttClient.on_unsubscribe = (
             lambda client, userdata, mid: self.onUnsubscribe.emit(mid))
     
@@ -192,6 +199,7 @@
         """
         self.__mqttClient.user_data_set(userdata)
     
+    # TODO: MQTTv5: add support for properties
     def setLastWill(self, topic, payload=None, qos=0, retain=False):
         """
         Public method to set the last will of the client.
@@ -275,6 +283,8 @@
         """
         if reinit:
             self.reinitialise()
+        # TODO: MQTTv5: use 'clean_start' set to the remembered 'cleanSession'
+        # TODO: MQTTv5: add support for MQTTv5 properties
         self.__mqttClient.connect_async(
             host, port=port, keepalive=keepalive, bind_address=bindAddress)
         
@@ -374,7 +384,7 @@
         @rtype dict
         """
         return {
-            "ClientId": "ERIC6_MQTT_MONITOR_CLIENT",
+            "ClientId": "ERIC7_MQTT_MONITOR_CLIENT",
             "ConnectionTimeout": MqttClient.DefaultConnectTimeout,
             "Keepalive": 60,
             "CleanSession": True,
@@ -407,8 +417,12 @@
         """
         self.__connectTimeoutTimer.stop()
         
+        # TODO: MQTTv5: add support for properties (?)
+        # TODO: MQTTv5: add support for reason code
         self.__mqttClient.disconnect()
     
+    # TODO: MQTTv5: add support for properties
+    # TODO: MQTTv5: add support for subscribe options
     def subscribe(self, topic, qos=0):
         """
         Public method to subscribe to topics with quality of service.
@@ -423,6 +437,7 @@
         """
         return self.__mqttClient.subscribe(topic, qos=qos)
     
+    # TODO: MQTTv5: add support for properties (?)
     def unsubscribe(self, topic):
         """
         Public method to unsubscribe topics.
@@ -434,6 +449,7 @@
         """
         return self.__mqttClient.unsubscribe(topic)
     
+    # TODO: MQTTv5: add support for properties
     def publish(self, topic, payload=None, qos=0, retain=False):
         """
         Public method to publish to a topic.
@@ -564,6 +580,10 @@
         return QCoreApplication.translate(
             "MqttErrorMessage",
             "Error defined by errno.")
+    elif mqttErrno == mqtt.MQTT_ERR_QUEUE_SIZE:
+        return QCoreApplication.translate(
+            "MqttErrorMessage",
+            "Message queue full.")
     else:
         return QCoreApplication.translate(
             "MqttErrorMessage",

eric ide

mercurial