--- 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",