Я использую приведенный ниже код для подключения к брокеру через WebSocket и SSL. Брокер защищен паролем. Мой код -
import paho.mqtt.client as mqtt
import ssl
import time
def on_connect(client, userdata, flags, rc):
print("connected with result code "+str(rc))
def on_publish(client, userdata, mid):
print("mid: "+str(mid))
client = mqtt.Client('device', transport = "websockets")
client.on_connect = on_connect
client.on_publish = on_publish
client.username_pw_set("login", "pass")
client.ws_set_options(path = "/logger")
client.tls_set(ca_certs=None, certfile=None, keyfile=None, cert_reqs=ssl.CERT_REQUIRED,
tls_version=ssl.PROTOCOL_TLS, ciphers=None)
connection = False
print("Trying to connect ...")
client.connect(host = "mqtt.broker.io", port=443)
connection = True
for _ in range(5):
time.sleep(1)
client.publish("some/topic", "HELLO", qos=2)
client.loop(1)
client.disconnect()
Ошибка, которую я получаю -
Попытка подключения ... подключение с кодом результата 0 Traceback (большинство последний звонок последний): файл "/home/souvik/GitLab/Embedded/demo_mqtt_auth.py", строка 30, в client.loop(1) Файл "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 1120, в цикле return self._loop(timeout) File "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 1164, в _loop rc = self.loop_read() Файл "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 1556, в loop_read rc = self._packet_read() Файл "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 2373, в _packet_read кроме ConnectionError как err: NameError: глобальное имя «ConnectionError» не определено
sleepiz_one на hw-1929-диагностика [$!] на (eu-west-1) заняла 6 секунд ❯ /bin/python /home/souvik/GitLab/Embedded/demo_mqtt_auth.py Попытка соединение ... соединение с кодом результата 0 Трассировка (последний вызов last): файл "/home/souvik/GitLab/Embedded/demo_mqtt_auth.py", строка 30, в client.loop(1) Файл "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 1120, в цикле return self._loop(timeout) File "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 1164, в _loop rc = self.loop_read() Файл "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 1556, в loop_read rc = self._packet_read() Файл "/home/souvik/.local/lib/python2.7/site-packages/paho/mqtt/client.py", строка 2373, в _packet_read кроме ConnectionError как err: NameError: глобальное имя «ConnectionError» не определено
Не слишком уверен, откуда я получаю исключение. Несмотря на то, что я получаю исключение, я вижу данные о брокере, поэтому я не уверен, что
Обновлено: я на paho-mqtt 1.6.1
🤔 А знаете ли вы, что...
В Python есть инструменты для тестирования кода, такие как библиотека unittest.
ConnectionError
был добавлен в Python 3.3.
Вы используете Python 2.7, срок службы которого истек в течение 3 лет.
Возможно, вам повезет понизить версию paho-mqtt
до версии до 1.6.0, так как это первая версия, в которой этот коммит ссылается на ConnectionError:
pip install paho-mqtt==1.5.1
или, альтернативно, до версии 1.6.1, которая утверждает, что «исправляет совместимость с Python 2.7»:
pip install paho-mqtt==1.6.1
Однако на самом деле вам следует прекратить использовать Python 2.7, так как он уже давно не поддерживается.