基础知识学习参考:
1、使用消息通讯Topic
2、python link SDK
一、环境变量配置
1、python3.6:下载安装
2、安装paho-mqtt 1.4.0版本
pip install paho-mqtt==1.4.0
3、安装安装Link SDK最新版本
pip install aliyun-iot-linkkit
4、下载python ADK demo文件:下载
5、解压pycharm打开
二、MQTT订阅
1、填入了ProductKey、DeviceName等参数信息
2、订阅信息替换
通过lk.to_full_topic(“xxx/xxx”)快速生成一个topic。to_full_topic是一个Topic自动生成接口,在上一步已经填入了ProductKey、DeviceName等参数,该接口调用后将返回一个字符串,其值等同于/YourProductKey/YourDeviceName/xxx/xxx。
3、订阅结果通过on_subscribe_topic通知用户:
lk.on_subscribe_topic = on_subscribe_topic
def on_subscribe_topic(mid, granted_qos, userdata):
print("on_subscribe_topic mid:%d, granted_qos:%s" %
(mid, str(','.join('%s' % it for it in granted_qos))))
pass
granded_qos为订阅Topic列表对应的QoS返回结果,正常值为0或1,128表示订阅失败。
4、接收与处理来自云端的消息,通过on_topic_message()回调告知用户:
lk.on_topic_message = on_topic_message
def on_topic_message(topic, payload, qos, userdata):
print("on_topic_message:" + topic + " payload:" + str(payload) + " qos:" + str(qos))
pass
5、通过物联网平台在线调试测试代码,先运行代码再调试顺序不要错:
输入3,granded_qos为订阅Topic列表对应的QoS返回结果,128表示订阅失败了。
原因是通过lk.to_full_topic(“xxx/xxx”)快速生成的topic缺少前面的sys/
此时我们不使用lk.to_full_topic(“xxx/xxx”)方法生成topic,直接输入正常的topic
运行代码后输入3,granded_qos为订阅Topic列表对应的QoS返回结果,正常值为0或1,这里返回了1就是正常订阅了,通过日志也可以看到成功了。
再次调试
控制台可查看到调试的订阅结果
至此订阅代码调试完成了。
三、MQTT发布
1、比如发布设备属性上报主题
2、发布消息逻辑
(1)通过调用publish_topic()实现将消息发送到云端:
rc, mid = lk.publish_topic(topic, payload)
(2)消息发送后,云端是否成功接收通过on_publish_topic回调通知用户:
lk.on_publish_topic = on_publish_topic
def on_publish_topic(mid, userdata):
print("on_publish_topic mid:%d" % mid)
publish_topic rc返回值为0则表明已经写入到了发送缓冲区,回调on_publish_topic表明publish成功。
(3)代码修改,保证topic正确,消息格式可以从日志中复制
3、运行代码输入5,控制台日志可以看到topic拼接得到正确,rc返回的0
4、日志中确认是否有发布成功日志
至此,订阅/发布代码逻辑都已调通。