5 |
5 |
6 """ |
6 """ |
7 Module implementing a PyQt wrapper around the paho MQTT client. |
7 Module implementing a PyQt wrapper around the paho MQTT client. |
8 """ |
8 """ |
9 |
9 |
10 from __future__ import unicode_literals |
10 from PyQt5.QtCore import ( |
11 try: |
11 pyqtSignal, pyqtSlot, QObject, QCoreApplication, QTimer |
12 str = unicode # __IGNORE_EXCEPTION__ |
12 ) |
13 except NameError: |
|
14 pass |
|
15 |
|
16 from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QCoreApplication, \ |
|
17 QTimer |
|
18 |
13 |
19 import paho.mqtt.client as mqtt |
14 import paho.mqtt.client as mqtt |
20 |
15 |
21 from Utilities.crypto import pwConvert |
16 from Utilities.crypto import pwConvert |
22 |
17 |
104 |
99 |
105 def __initCallbacks(self): |
100 def __initCallbacks(self): |
106 """ |
101 """ |
107 Private method to initialize the MQTT callback methods. |
102 Private method to initialize the MQTT callback methods. |
108 """ |
103 """ |
109 self.__mqttClient.on_connect = \ |
104 self.__mqttClient.on_connect = ( |
110 lambda client, userdata, flags, rc: self.onConnect.emit( |
105 lambda client, userdata, flags, rc: self.onConnect.emit( |
111 flags, rc) |
106 flags, rc)) |
112 self.__mqttClient.on_disconnect = \ |
107 self.__mqttClient.on_disconnect = ( |
113 lambda client, userdata, rc: self.onDisconnected.emit(rc) |
108 lambda client, userdata, rc: self.onDisconnected.emit(rc)) |
114 self.__mqttClient.on_log = \ |
109 self.__mqttClient.on_log = ( |
115 lambda client, userdata, level, buf: self.onLog.emit(level, buf) |
110 lambda client, userdata, level, buf: self.onLog.emit(level, buf)) |
116 self.__mqttClient.on_message = \ |
111 self.__mqttClient.on_message = ( |
117 lambda client, userdata, message: self.onMessage.emit( |
112 lambda client, userdata, message: self.onMessage.emit( |
118 message.topic, message.payload, message.qos, message.retain) |
113 message.topic, message.payload, message.qos, message.retain)) |
119 self.__mqttClient.on_publish = \ |
114 self.__mqttClient.on_publish = ( |
120 lambda client, userdata, mid: self.onPublish.emit(mid) |
115 lambda client, userdata, mid: self.onPublish.emit(mid)) |
121 self.__mqttClient.on_subscribe = \ |
116 self.__mqttClient.on_subscribe = ( |
122 lambda client, userdata, mid, grantedQos: self.onSubscribe.emit( |
117 lambda client, userdata, mid, grantedQos: self.onSubscribe.emit( |
123 mid, grantedQos) |
118 mid, grantedQos)) |
124 self.__mqttClient.on_unsubscribe = \ |
119 self.__mqttClient.on_unsubscribe = ( |
125 lambda client, userdata, mid: self.onUnsubscribe.emit(mid) |
120 lambda client, userdata, mid: self.onUnsubscribe.emit(mid)) |
126 |
121 |
127 @pyqtSlot() |
122 @pyqtSlot() |
128 def __connectTimeout(self): |
123 def __connectTimeout(self): |
129 """ |
124 """ |
130 Private slot handling a failed connection attempt. |
125 Private slot handling a failed connection attempt. |
340 parametersDict["WillQos"], |
335 parametersDict["WillQos"], |
341 parametersDict["WillRetain"]) |
336 parametersDict["WillRetain"]) |
342 |
337 |
343 # step 4: set TLS parameters |
338 # step 4: set TLS parameters |
344 if parametersDict["TlsEnable"]: |
339 if parametersDict["TlsEnable"]: |
345 if parametersDict["TlsCaCert"] and \ |
340 if ( |
346 parametersDict["TlsClientCert"]: |
341 parametersDict["TlsCaCert"] and |
|
342 parametersDict["TlsClientCert"] |
|
343 ): |
347 # use self signed client certificate |
344 # use self signed client certificate |
348 self.setTLS(caCerts=parametersDict["TlsCaCert"], |
345 self.setTLS(caCerts=parametersDict["TlsCaCert"], |
349 certFile=parametersDict["TlsClientCert"], |
346 certFile=parametersDict["TlsClientCert"], |
350 keyFile=parametersDict["TlsClientKey"]) |
347 keyFile=parametersDict["TlsClientKey"]) |
351 elif parametersDict["TlsCaCert"]: |
348 elif parametersDict["TlsCaCert"]: |