Python的paho-mqtt库从1.x升级到2.0遇到的问题

尝试使用paho-mqtt库编写一个连接MQTT服务器并发布数据的小程序。程序很简单,直接参考的博文:MQTT服务搭建及python使用示例_python mqtt-CSDN博客。直接使用pip安装库:

pip install paho-mqtt

结果程序运行时直接报告错误:

Traceback (most recent call last):
  File "c:\Work\01-本科教学\嵌入式系统原理与应用\开发板测试\HZHY-Al300G 智能盒\mqtttest.py", line 47, in <module>
    run()
  File "c:\Work\01-本科教学\嵌入式系统原理与应用\开发板测试\HZHY-Al300G 智能盒\mqtttest.py", line 41, in run
    client = connect_mqtt()
  File "c:\Work\01-本科教学\嵌入式系统原理与应用\开发板测试\HZHY-Al300G 智能盒\mqtttest.py", line 19, in connect_mqtt
  File "C:\Users\Hai Li\AppData\Local\Programs\Python\Python39\lib\site-packages\paho\mqtt\client.py", line 772, in __init__      
    raise ValueError(
ValueError: Unsupported callback API version: version 2.0 added a callback_api_version, see docs/migrations.rst for details 

发现是版本不兼容。我下载的是最新的2.x版本,而原文是针对1.x写的,在原文中明确安装了老版本,只是我没有注意到。

pip install paho-mqtt=="1.6.1"

在官方的文档中给出了1.x升级到2.x的说明:Eclipse Paho™ MQTT Python Client — Eclipse paho-mqtt documentation 。

大多数重大变更应当引起足够注意,不应被忽视。其中,对所有人影响最大的是版本化的用户回调函数。其他重大变更可能不会影响您对paho-mqtt的使用。

以下是重大变更的列表(详细说明如下):

  1. 在用户回调函数中添加版本(如on_publish, on_connect等):简而言之,向Client()函数的首个参数添加mqtt.CallbackAPIVersion.VERSION1。

  2. 放弃对旧版Python的支持

  3. 移除了一些已弃用且未使用的参数或方法:如果您曾使用过它们,现在可以安全移除。

  4. 从公共接口中移除了几个函数/类

  5. 将ReasonCodes重命名为ReasonCode

  6. 改进了类型定义,导致了一些类型变更:这可能不会影响到您,具体细节见下文。

  7. 修复了connect_srv,其签名已更改

  8. 添加了新属性,这些属性可能与子类发生冲突

这些变更旨在提升库的稳定性和功能,同时可能需要对现有代码进行一些调整以适应新版本。

对于刚才的提到的程序需要修改如下:

def connect_mqtt():
    def on_connect(client, userdata, flags, rc, props):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect, return code %d\n", rc)
 
    client = mqtt_client.Client(mqtt_client.CallbackAPIVersion.VERSION2, client_id)
    client.on_connect = on_connect
    client.connect(broker, port)
    return client

其中有两处修改:

  1. 在建立client对象时加了一个参数:mqtt_client.CallbackAPIVersion.VERSION2。
  2. 在on_connect增加了一个参数props。

至此,修改的程序就可以正常运行了。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值