连接
把PRODUCT_KEY,DEVICE_NAME,DEVICE_SECRET换成你自己的(发送那边说过了这里不赘述)
from linkkit import linkkit
import time
PRODUCT_KEY = "k1ikm***X2w"
DEVICE_NAME = "testdevice0420_3"
DEVICE_SECRET = "5fd1c11****b610ae88b5aaca3043698"
lk = linkkit.LinkKit(
host_name="cn-shanghai", # 根据实际地域修改
product_key=PRODUCT_KEY,
device_name=DEVICE_NAME,
device_secret=DEVICE_SECRET
)
lk.connect_async()# 这句是当设备连接成功后,如果设备由于网络等原因断开连接,设备会根据配置的保活等参数,自动发起重新连接的请求
time.sleep(3) # 等待连接
订阅
这里的接收逻辑是订阅对应的topic,topic有了消息就能收到
去产品里定义一个topic类用于测试,要有订阅权限

接收
on_topic_message是接收回调函数,收到消息就会执行李米娜的语句
def on_topic_message(topic, payload, qos, userdata):# 接收回调函数,收到消息自动执行
print(f"收到消息:Topic: {topic}, Payload: {str(payload)}, QoS: {qos}")
lk.on_topic_message = on_topic_message
这句放在结尾保持设备的连接状态
while(1): #放在代码结尾,保持连接状态
time.sleep(1)
测试接收
运行代码,可以在设备里找到订阅了的topic

点击这个发布消息,成功接收

完整代码
from linkkit import linkkit
import time
PRODUCT_KEY = "k1ikm***2w"
DEVICE_NAME = "testdevice**0_3"
DEVICE_SECRET = "5fd1c1149d0b610ae88b5aaca3043698" # 请替换真实DeviceSecret
lk = linkkit.LinkKit(
host_name="cn-shanghai", # 根据实际地域修改
product_key=PRODUCT_KEY,
device_name=DEVICE_NAME,
device_secret=DEVICE_SECRET
)
lk.connect_async()# 这句是当设备连接成功后,如果设备由于网络等原因断开连接,设备会根据配置的保活等参数,自动发起重新连接的请求
time.sleep(3) # 等待连接
topic = "/k1ikmb0TX2w/testdevice0420_3/user/test250420"
lk.subscribe_topic(topic,qos=1) # 订阅topic,qos为消息质量等级,1为最多一次,0为最少一次,3为确保送达
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
lk.on_subscribe_topic = on_subscribe_topic
def on_topic_message(topic, payload, qos, userdata):
print(f"收到消息:Topic: {topic}, Payload: {str(payload)}, QoS: {qos}")
lk.on_topic_message = on_topic_message
while(1):
time.sleep(1)
当然我们真正要使用肯定不是自发自收。可以通过云产品流转实现一个设备发另一个设备收,具体看第四节。
4103

被折叠的 条评论
为什么被折叠?



