Я уже несколько дней смотрю на это и не могу понять! Надеюсь, что кто-нибудь укажет мне правильное направление!
Я запускаю Home Assistant на виртуальной машине Synology. В Home Assistant работает брокер Mosquitto. Я запускаю MQTT-IO (https://mqtt-io.app/2.3.0/#/ ) на RaspberryPi, чтобы подключить его контакты GPIO через MQTT к Home Assistant для управления устройствами в моем умном доме. ( https://mqtt-io.app/2.3.0/#/) Больше года все работало нормально, на прошлой неделе мой Пи съел уже старую SD-карту...
Потому что я тупой, у меня нет бэкапа ПИ :) Итак, я снова настроил это, моя старая SD-карта загружается и работает +-10 минут, прежде чем происходит сбой. Таким образом я могу сравнивать конфиги, но не разбираюсь!
Кажется, «новому» Пи чего-то не хватает.
Входной терминал
python3 -m mqtt_io /home/Kwarco/Desktop/config.yml
Выходной терминал
`2024-06-14 22:33:59 mqtt_io.server [INFO] Digital output 'Ctrl_GordijnDicht' current value is False (raw: True)
2024-06-14 22:34:00 mqtt_io.server [INFO] Digital output 'Ctrl_GordijnOpen' current value is False (raw: True)
2024-06-14 22:34:01 mqtt_io.server [INFO] Digital output 'Ctrl_VerluchtingPower' current value is False (raw: True)
2024-06-14 22:34:02 mqtt_io.server [INFO] Digital output 'Ctrl_Verluchting1' current value is False (raw: True)
2024-06-14 22:34:03 mqtt_io.server [INFO] Digital output 'Ctrl_Verluchting2' current value is False (raw: True)
2024-06-14 22:34:04 mqtt_io.server [INFO] Digital output 'Ctrl_Verluchting3' current value is False (raw: True)
2024-06-14 22:34:05 mqtt_io.server [INFO] Digital output 'Ctrl_LuikDicht' current value is False (raw: False)
2024-06-14 22:34:06 mqtt_io.server [INFO] Digital output 'Ctrl_LuikOpen' current value is False (raw: False)
2024-06-14 22:34:06 mqtt_io.server [INFO] Connecting to MQTT...
2024-06-14 22:34:06 mqtt_io.server [ERROR] Exception in critical task:
Traceback (most recent call last):
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 1380, in _main_loop
await self._connect_mqtt()
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 707, in _connect_mqtt
await self.mqtt.connect()
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/mqtt/asyncio_mqtt.py", line 51, in inner
await func(*args, **kwargs)
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/mqtt/asyncio_mqtt.py", line 116, in connect
await self._client.connect(timeout=timeout)
File "/home/Kwarco/.local/lib/python3.11/site-packages/asyncio_mqtt/client.py", line 82, in connect
if not isinstance(client_socket, mqtt.WebsocketWrapper):
^^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'paho.mqtt.client' has no attribute 'WebsocketWrapper'
2024-06-14 22:34:08 mqtt_io.server [INFO] Reconnecting to MQTT broker (infinite retries remaining)
2024-06-14 22:34:08 mqtt_io.server [INFO] Connecting to MQTT...
2024-06-14 22:34:08 mqtt_io.server [ERROR] Exception in critical task:
Traceback (most recent call last):
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 1380, in _main_loop
await self._connect_mqtt()
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 707, in _connect_mqtt
await self.mqtt.connect()
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/mqtt/asyncio_mqtt.py", line 51, in inner
await func(*args, **kwargs)
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/mqtt/asyncio_mqtt.py", line 116, in connect
await self._client.connect(timeout=timeout)
File "/home/Kwarco/.local/lib/python3.11/site-packages/asyncio_mqtt/client.py", line 82, in connect
if not isinstance(client_socket, mqtt.WebsocketWrapper):
^^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'paho.mqtt.client' has no attribute 'WebsocketWrapper'
^CTraceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/__main__.py", line 115, in <module>
main()
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/__main__.py", line 107, in main
mqtt_gpio.run()
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 1458, in run
self.loop.run_until_complete(self._main_task)
File "/usr/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 1422, in _main_loop
await asyncio.sleep(reconnect_delay)
File "/usr/lib/python3.11/asyncio/tasks.py", line 639, in sleep
return await future
^^^^^^^^^^^^
asyncio.exceptions.CancelledError
Exception ignored in: <coroutine object MqttIo.digital_output_loop at 0x75804708>
Traceback (most recent call last):
File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 1304, in digital_output_loop
File "/usr/lib/python3.11/asyncio/queues.py", line 160, in get
File "/usr/lib/python3.11/asyncio/base_events.py", line 761, in call_soon
File "/usr/lib/python3.11/asyncio/base_events.py", line 519, in _check_closed
RuntimeError: Event loop is closed
Exception ignored in: <function Client.__del__ at 0x758173e8>
Traceback (most recent call last):
File "/home/Kwarco/.local/lib/python3.11/site-packages/paho/mqtt/client.py", line 880, in __del__
File "/home/Kwarco/.local/lib/python3.11/site-packages/paho/mqtt/client.py", line 1139, in _reset_sockets
File "/home/Kwarco/.local/lib/python3.11/site-packages/paho/mqtt/client.py", line 1132, in _sock_close
File "/home/Kwarco/.local/lib/python3.11/site-packages/paho/mqtt/client.py", line 2867, in _call_socket_close
File "/home/Kwarco/.local/lib/python3.11/site-packages/asyncio_mqtt/client.py", line 308, in _on_socket_close
File "/usr/lib/python3.11/asyncio/base_events.py", line 761, in call_soon
File "/usr/lib/python3.11/asyncio/base_events.py", line 519, in _check_closed
RuntimeError: Event loop is closed
sys:1: RuntimeWarning: coroutine 'MqttIo._mqtt_publish' was never awaited
**Mosquitto broker logs:**
2024-06-14 22:34:06: New client connected from 192.168.XX.XX:43371 as mqtt-io-1634c5d8600786512fd602 (p2, c0, k60, u'Kwarco').
2024-06-14 22:34:08: New connection from 192.168.XX.XX:51041 on port 1883.
2024-06-14 22:34:08: Client mqtt-io-1634c5d8600786512fd602 already connected, closing old connection.
2024-06-14 22:34:08: New client connected from 192.168.XX.XX:51041 as mqtt-io-1634c5d860079c65156613caae5cfa86512fd602 (p2, c0, k60, u'Kwarco').
2024-06-14 22:34:09: Client mqtt-io-1634c5d8600786512fd602 closed its connection.`
Содержимое /home/Kwarco/Desktop/config.yml
mqtt:
host: 192.168.xx.xx
port: 1883
user: "Kwarco"
password: "xxxxxxxxxxxxxx"
ha_discovery:
enabled: yes
topic_prefix: pimqtt/gpio
status_topic: status
status_payload_running: online
status_payload_stopped: offline
status_payload_dead: dead
gpio_modules:
- name: raspberrypi
module: raspberrypi
digital_outputs:
- name: Ctrl_GordijnDicht
module: raspberrypi
pin: 2 # GPIO
on_payload: "ON"
off_payload: "OFF"
inverted: true
initial: high
- name: Ctrl_GordijnOpen
module: raspberrypi
pin: 3 # GPIO
on_payload: "ON"
off_payload: "OFF"
inverted: true
initial: high
- name: Ctrl_VerluchtingPower
module: raspberrypi
pin: 26 # GPIO
on_payload: "ON"
off_payload: "OFF"
inverted: true
initial: high
- name: Ctrl_Verluchting1
module: raspberrypi
pin: 6 # GPIO
on_payload: "ON"
off_payload: "OFF"
inverted: true
initial: high
- name: Ctrl_Verluchting2
module: raspberrypi
pin: 13 # GPIO
on_payload: "ON"
off_payload: "OFF"
inverted: true
initial: high
- name: Ctrl_Verluchting3
module: raspberrypi
pin: 19 # GPIO
on_payload: "ON"
off_payload: "OFF"
inverted: true
initial: high
- name: Ctrl_LuikDicht
module: raspberrypi
pin: 7 # GPIO
on_payload: "ON"
off_payload: "OFF"
inverted: false
initial: low
- name: Ctrl_LuikOpen
module: raspberrypi
pin: 1 # GPIO
on_payload: "ON"
off_payload: "OFF"
inverted: false
initial: low
Я не понимаю, что соединение не происходит. На стороне Home Assistant нет никаких изменений, я буквально использую ту же конфигурацию и команды. Единственное, что отличается, — это версии программного обеспечения. Я попытался понизить версию ОС Raspberry Pi без изменений. Я не могу установить предыдущую версию MQTT_IO






Лучше всего предположить, что ваш старый код работал с Paho v1.x, а в последней версии (v2.1) WebsocketWrapper удален как часть основного изменения версии v2.0.
https://github.com/eclipse/paho.mqtt.python/releases/tag/v2.0.0
Вам необходимо принудительно установить v1.x или обновить код для работы с новой библиотекой paho v2.0.
Здесь есть руководство по миграции: https://eclipse.dev/paho/files/paho.mqtt.python/html/migrations.html
Ну вот и все! я запустил «pip install paho-mqtt==1.6.1», чтобы понизить версию paho, теперь все работает! Спасибо!!