使用Python连接阿里云物联网

最近在做物联网相关的项目,想着用python模拟一个mqtt客户端,向云端发送数据以及从云端接收数据。

参考文章 《mqtt实战-Python接入阿里云物联网平台》

1 安装阿里云物联网平台提供的python sdk 第三方库
pip install aliyun-iot-linkkit
2 阿里云物联网平台创建设备
3.python代码(这里直接从参考文章里面拷贝出来,谢谢大神提供的代码)
from linkkit import linkkit
import time
import json
#连接阿里云

ProductKey=“a1Q6aDL1iKa” #你的产品key
DeviceName=“demo” #你的设备名称
DeviceSecret=“ba14184b64f6bce3ca1284c7b2c411e1”#你的设备密码
def on_connect(session_flag, rc, userdata):
print(“on_connect:%d,rc:%d,userdata:” % (session_flag, rc))
pass
#取消连接阿里云
def on_disconnect(rc, userdata):
print(“on_disconnect:rc:%d,userdata:” % rc)
def on_subscribe_topic(mid, granted_qos, userdata):#订阅topic
print(“on_subscribe_topic mid:%d, granted_qos:%s” %
(mid, str(‘,’.join(‘%s’ % it for it in granted_qos))))
pass
#接收云端的数据
def on_topic_message(topic, payload, qos, userdata):
#设备端的接收到的数据却是b:"123"用了一个切片去处理数据
print(“阿里云上传回的数值是:”, str(payload))
#拿到接收来的数据
data=str(payload)[2:-1]
print(“阿里云上传回的数值是:”,data)
dataDict=json.loads(data)
print(“阿里云上传回的数值是:”,type(dataDict)) #切片左闭右开 取头不取尾
#print(dataDict[“jiang”])
#多层解析
#{“temp”:{“value”:62}}
print(dataDict[“temp”][“value”]) #解析多层数据

pass

#终止订阅云端数据
def on_unsubscribe_topic(mid, userdata):
print(“on_unsubscribe_topic mid:%d” % mid)
pass
#发布消息的结果,判断是否成功调用发布函数
def on_publish_topic(mid, userdata):
print(“on_publish_topic mid:%d” % mid)
#设置连接参数,方法为“一机一密”型
lk = linkkit.LinkKit(
host_name=“cn-shanghai”,#填自己的host_name
product_key=ProductKey,#填自己的product_key
device_name=DeviceName,#填自己的device_name
device_secret=DeviceSecret)#填自己的device_secret
#注册接收到云端数据的方法
lk.on_connect = on_connect
#注册取消接收到云端数据的方法
lk.on_disconnect = on_disconnect
#注册云端订阅的方法
lk.on_subscribe_topic = on_subscribe_topic
#注册当接受到云端发送的数据的时候的方法
lk.on_topic_message = on_topic_message
#注册向云端发布数据的时候顺便所调用的方法
lk.on_publish_topic = on_publish_topic
#注册取消云端订阅的方法
lk.on_unsubscribe_topic = on_unsubscribe_topic

#连接阿里云的函数(异步调用)
lk.connect_async()
time.sleep(2)
#订阅主题
rc, mid = lk.subscribe_topic(lk.to_full_topic(“user/get”))
#发布主题

while True:
data={
“RoomTemp”:28
}
rc, mid = lk.publish_topic(lk.to_full_topic(“/sys/a1Q6aDL1iKa/demo/thing/event/property/post”),str(data))
time.sleep(2)
pass

上文中加粗的部分,个人认为有问题
(1) to_full_topic将关联的productname和devicename与括号中的参数结合生成推送的字符串;
(2)data中除了实际属性值,还需要加入 id, method等参数。

经过调试,将文中加粗的部分改为下面的内容,调试成功
data={
“id”:“789”,
“version”:“1.0”,
“params”:{“RoomTemp”:30},
“method”:“thing.event.property.post”
}

rc,mid=lk.publish_topic(“/sys/a1Q6aDL1iKa/demo/thing/event/property/post”,str(data))

time.sleep(2)
pass

经过调整之后,云端可以将数据刷新。

另附一种将变化的数据上传到阿里云端的示例,
将代码中的温度参数改为可变的参数,然后每次发送之前,改变该参数的值。
temperature=30

while True:

temperature=temperature+1
if(temperature>40):
    temperature=30
data={
    "id":"789",
    "version":"1.0",
    "params":{"RoomTemp":temperature},
    "method":"thing.event.property.post"
}




rc,mid=lk.publish_topic("/sys/a1Q6aDL1iKa/demo/thing/event/property/post",str(data))

time.sleep(2)
pass

在这里插入图片描述

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值