python | mqtt协议通信 | 代码报错 | 亲测有效

当我们用python实现mqtt协议后,运行代码可能出现以下报错

Unsupported callback API version: version 2.0 added a callback_api_version, see docs/migrations.rst for details

翻译

不支持的回调 API 版本:2.0 版本添加了一个callback_api_version,详情请参阅docs/migrations.rst
具体细节详见官方文档

原因

回调参数不一致,2.0 版更改了传递给用户回调的参数。回调的版本 1 已弃用,但在版本 2.x 中仍受支持。

解决方法

方法1:使用旧版本的回调。只需告诉 paho-mqtt 您选择此版本即可。在客户端中,修改如下代码即可:

from paho.mqtt import client as mqtt_client
# OLD code
client = mqtt_client.Client(client_id)
# NEW code
client = mqtt_client.Client(mqtt_client.CallbackAPIVersion.VERSION1, client_id)
# 其中,mqtt_client为导入模块的别名

但是采用方法1后,在每次运行的时候,会出现以下警告

DeprecationWarning: Callback API version 1 is deprecated, update to latest version

翻译

弃用警告:回调 API 版本 1 已弃用,请更新至最新版本

Tips: CallbackAPIVersion.VERSION1:2.0版本之前paho-mqtt使用的历史版本。这是在引入CallbackAPIVersion之前使用的API。此版本已弃用,并将在 paho-mqtt 版本 3.0 中删除

方法2:使用新版本的 API 回调。需要更新回调

Tips: 采用方法2后,不会出现方法1中的警告信息

修改后的程序如下:

def connect_mqtt():
    def on_connect(client, userdata, flags, rc, properties):
        if rc == 0:
            print("Connected to MQTT Broker!")
        else:
            print("Failed to connect,return code {}".format(rc))
    client = mqtt_client.Client(mqtt_client.CallbackAPIVersion.VERSION2, client_id)
    # client =mqtt_client.Client(client_id)     # 旧版本API
    # 创建MQTT客户端对象
    client.on_connect = on_connect
    client.connect(broker, port)
    return client

其中,有两处修改:

1)在创建client对象时,新增参数:mqtt_client.CallbackAPIVersion.VERSION2

2)在on_connect()函数中,新增参数:properties

方法3:降低paho-mqtt版本号到1.0版本

其中,v1.0中最新的版本号为1.6.1

$ pip install paho-mqtt==1.6.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一束满天星⁢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值