You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派MQTT-IO连接报错:paho.mqtt.client无WebsocketWrapper属性

问题

群晖虚拟机运行Home Assistant,内置Mosquitto broker;树莓派部署MQTT-IO v2.3.0,通过MQTT连接HA实现GPIO控制智能家居,稳定运行超一年。上周树莓派SD卡损坏,无备份需重新部署,旧卡可短暂启动对比配置但未发现问题。执行python3 -m mqtt_io /home/Kwarco/Desktop/config.yml后,终端报AttributeError: module 'paho.mqtt.client' has no attribute 'WebsocketWrapper'错误,Mosquitto日志显示连接后立即断开。HA端无改动,仅软件版本不同,已尝试降级树莓派系统无效,也无法安装旧版MQTT-IO,需排查解决。


相关日志与配置

终端输入

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日志

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.

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

解决方案

该错误是asyncio-mqtt与paho-mqtt版本不兼容导致:新版paho-mqtt已移除WebsocketWrapper属性,但当前安装的asyncio-mqtt仍在调用它。

步骤1:卸载冲突库

pip3 uninstall -y asyncio-mqtt paho-mqtt

步骤2:安装兼容版本

针对MQTT-IO v2.3.0,安装适配的依赖版本:

pip3 install asyncio-mqtt==0.12.0 paho-mqtt==1.6.1

步骤3:重启服务

python3 -m mqtt_io /home/Kwarco/Desktop/config.yml

备选方案:虚拟环境隔离依赖

若全局安装仍有问题,可创建虚拟环境避免依赖冲突:

# 安装虚拟环境工具
sudo apt-get install python3-venv
# 创建并激活虚拟环境
python3 -m venv mqttio-env
source mqttio-env/bin/activate
# 安装指定版本的MQTT-IO及依赖
pip install mqtt-io==2.3.0 asyncio-mqtt==0.12.0 paho-mqtt==1.6.1
# 启动服务
python -m mqtt_io /home/Kwarco/Desktop/config.yml

内容的提问来源于stack exchange,提问作者Marco Houben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 02:33:09