Я пытаюсь заставить работать базовый клиент Python Paho. К сожалению, paho продолжает давать сбой из-за различных ошибок вместо обработки сообщений mqtt.
Код клиента Python (в основном взят из документа Python Paho):
Exception in thread paho-mqtt-client-python-mqtt-dht22:
Traceback (most recent call last):
File "/usr/lib/python3.12/threading.py", line 1073, in _bootstrap_inner
self.run()
File "/usr/lib/python3.12/threading.py", line 1010, in run
self._target(*self._args, **self._kwargs)
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 4523, in _thread_main
self.loop_forever(retry_first_connection=True)
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 2297, in loop_forever
rc = self._loop(timeout)
^^^^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 1686, in _loop
rc = self.loop_read()
^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 2100, in loop_read
rc = self._packet_read()
^^^^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 3142, in _packet_read
rc = self._packet_handle()
^^^^^^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 3808, in _packet_handle
return self._handle_publish()
^^^^^^^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 4099, in _handle_publish
(slen, packet) = struct.unpack(pack_format, self._in_packet['packet'])
struct.error: bad char in struct format
Exception in thread paho-mqtt-client-python-mqtt-dht22:
Traceback (most recent call last):
File "/usr/lib/python3.12/threading.py", line 1073, in _bootstrap_inner
Traceback (most recent call last):
File "/home/simon/code/mqtt_sink.py", line 76, in
self.run()
File "/usr/lib/python3.12/threading.py", line 1010, in run
self._target(*self._args, **self._kwargs)
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 4523, in _thread_main
run()
self.loop_forever(retry_first_connection=True)
File "/home/simon/code/mqtt_sink.py", line 71, in run
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 2297, in loop_forever
client.loop_forever()
rc = self._loop(timeout)
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 2297, in loop_forever
^^^^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 1686, in _loop
rc = self._loop(timeout)
^^^^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 1686, in _loop
rc = self.loop_read()
rc = self.loop_read()
^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 2100, in loop_read
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 2100, in loop_read
rc = self._packet_read()
rc = self._packet_read()
^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 3142, in _packet_read
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 3142, in _packet_read
rc = self._packet_handle()
rc = self._packet_handle()
^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 3816, in _packet_handle
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 3816, in _packet_handle
self._handle_suback()
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 4053, in _handle_suback
self._handle_suback()
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 4053, in _handle_suback
reasoncodes = [ReasonCode(SUBACK >> 4, identifier=c) for c in granted_qos]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/reasoncodes.py", line 129, in __init__
reasoncodes = [ReasonCode(SUBACK >> 4, identifier=c) for c in granted_qos]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/reasoncodes.py", line 129, in __init__
self.getName() # check it's good
self.getName() # check it's good
^^^^^^^^^^^^^^
^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/reasoncodes.py", line 172, in getName
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/reasoncodes.py", line 172, in getName
return self.__getName__(self.packetType, self.value)
return self.__getName__(self.packetType, self.value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/reasoncodes.py", line 140, in __getName__
File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/reasoncodes.py", line 140, in __getName__
raise KeyError(identifier)
raise KeyError(identifier)
KeyError: 48
В любом случае это не работает. Я немного поискал, но пока не нашел ничего полезного в Интернете.
Сервер Mosquitto и источник сообщений работают, как
mosquitto_sub -u simon -P password -t "home/sensors/dht22" -i spy
отображает отправленные сообщения.
Что не так с моим кодом, есть идеи?
ИЗМЕНИТЬ 13.11.2024:
Мне удалось заставить его работать, удалив client.loop_start(). Итак, если у вас возникли подобные проблемы: используйте цикл_forever().
Я пытаюсь заставить работать базовый клиент Python Paho. К сожалению, paho продолжает давать сбой из-за различных ошибок вместо обработки сообщений mqtt. Код клиента Python (в основном взят из документа Python Paho): [code]from paho.mqtt import client as mqtt_client
if __name__ == '__main__': run() [/code] Выполнение этого вместе с mosquitto недетерминировано приводит к любому результату. [code]Exception in thread paho-mqtt-client-python-mqtt-dht22: Traceback (most recent call last): File "/usr/lib/python3.12/threading.py", line 1073, in _bootstrap_inner self.run() File "/usr/lib/python3.12/threading.py", line 1010, in run self._target(*self._args, **self._kwargs) File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 4523, in _thread_main self.loop_forever(retry_first_connection=True) File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 2297, in loop_forever rc = self._loop(timeout) ^^^^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 1686, in _loop rc = self.loop_read() ^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 2100, in loop_read rc = self._packet_read() ^^^^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 3142, in _packet_read rc = self._packet_handle() ^^^^^^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 3808, in _packet_handle return self._handle_publish() ^^^^^^^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 4099, in _handle_publish (slen, packet) = struct.unpack(pack_format, self._in_packet['packet']) struct.error: bad char in struct format [/code] или в [code]Exception in thread paho-mqtt-client-python-mqtt-dht22: Traceback (most recent call last): File "/usr/lib/python3.12/threading.py", line 1073, in _bootstrap_inner Traceback (most recent call last): File "/home/simon/code/mqtt_sink.py", line 76, in self.run() File "/usr/lib/python3.12/threading.py", line 1010, in run self._target(*self._args, **self._kwargs) File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 4523, in _thread_main run() self.loop_forever(retry_first_connection=True) File "/home/simon/code/mqtt_sink.py", line 71, in run File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 2297, in loop_forever client.loop_forever() rc = self._loop(timeout) File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 2297, in loop_forever ^^^^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 1686, in _loop rc = self._loop(timeout) ^^^^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 1686, in _loop rc = self.loop_read() rc = self.loop_read() ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 2100, in loop_read File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 2100, in loop_read rc = self._packet_read() rc = self._packet_read() ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 3142, in _packet_read File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 3142, in _packet_read rc = self._packet_handle() rc = self._packet_handle() ^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 3816, in _packet_handle File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 3816, in _packet_handle self._handle_suback() File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 4053, in _handle_suback self._handle_suback() File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/client.py", line 4053, in _handle_suback reasoncodes = [ReasonCode(SUBACK >> 4, identifier=c) for c in granted_qos] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/reasoncodes.py", line 129, in __init__ reasoncodes = [ReasonCode(SUBACK >> 4, identifier=c) for c in granted_qos] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/reasoncodes.py", line 129, in __init__ self.getName() # check it's good self.getName() # check it's good ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/reasoncodes.py", line 172, in getName File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/reasoncodes.py", line 172, in getName return self.__getName__(self.packetType, self.value) return self.__getName__(self.packetType, self.value) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/reasoncodes.py", line 140, in __getName__ File "/home/simon/.avenv/mqtt/lib/python3.12/site-packages/paho/mqtt/reasoncodes.py", line 140, in __getName__ raise KeyError(identifier) raise KeyError(identifier) KeyError: 48 [/code] В любом случае это не работает. Я немного поискал, но пока не нашел ничего полезного в Интернете. Сервер Mosquitto и источник сообщений работают, как [code]mosquitto_sub -u simon -P password -t "home/sensors/dht22" -i spy[/code] отображает отправленные сообщения. Что не так с моим кодом, есть идеи? ИЗМЕНИТЬ 13.11.2024: Мне удалось заставить его работать, удалив client.loop_start(). Итак, если у вас возникли подобные проблемы: используйте цикл_forever().