当我们用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