阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 先登录这个
步骤一:在项目中创建开关遥控器产品 - 物联网应用开发 - 阿里云
物模型开发
设备可以使用物模型功能,实现属性上报、事件上报和服务调用
比较重要的阿里云文档:
https://help.aliyun.com/document_detail/98370.html 物模型开发
以下是一个样例,可以实现MQTT Topic通信和物模型开发
import logging
import sys
from linkkit import linkkit
class CustomerThings(object):
def __init__(self):
self.__linkkit = linkkit.LinkKit(
host_name="cn-shanghai",
product_key="gsf8fx1IxB1",
device_name="device1",
device_secret="7e475324fb0a5977ba77b9176d644668")
#SDK回调函数连接
self.__linkkit.enable_logger(logging.DEBUG)
self.__linkkit.on_connect = self.on_connect
self.__linkkit.on_disconnect = self.on_disconnect
self.__linkkit.on_subscribe_topic = self.on_subscribe_topic
self.__linkkit.on_thing_enable = self.on_thing_enable
self.__linkkit.on_thing_disable = self.on_thing_disable
self.__linkkit.on_thing_prop_changed = self.on_thing_prop_changed
self.__linkkit.on_thing_prop_post = self.on_thing_prop_post
self.__linkkit.thing_setup("tsl.json")
#用户需要从云端控制台下载物模型文件,该文件需要集成到应用工程中,这样对应的topic才能正确的接收和发送消息
#连接
def on_connect(self, session_flag, rc, userdata):
print("on_connect:%d,rc:%d,userdata:" % (session_flag, rc))
#断开连接
def on_disconnect(self, rc, userdata):
print("on_disconnect:rc:%d,userdata:" % rc)
#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
#订阅
#物模型功能可用时通过on_thing_enable通知用户,然后用户可以进行属性上报,事件上报,服务响应:
def on_thing_enable(self, userdata):
print("on_thing_enable")
#取消订阅,物模型功能不可用时通过 on_thing_disable 通知用户,属性上报,事件上报,服务响应不可用
def on_thing_disable(self, userdata):
print("on_thing_disable")
#云端设置属性
def on_thing_prop_changed(self, params, userdata):
print("on_thing_prop_changed" + str(params))
prop_data = params
#属性上报,通过thing_post_property上报属性,传入参数为与物模型定义中属性对应的字典对象
prop_data = {
"abs_speed": 11,
"power_stage": 10
}
rc, request_id = self.__linkkit.thing_post_property(prop_data)
#服务端对上报的属性做出处理发出响应,SDK通过on_thing_prop_post 通知用户
def on_thing_prop_post(self, request_id, code, data, message, userdata):
print("on_thing_prop_post request id:%s, code:%d, data:%s message:%s" %
(request_id, code, str(data), message))
def user_loop(self):
self.__linkkit.connect_async()
while True:
try:
msg = input()
except KeyboardInterrupt:
sys.exit()
if __name__ == "__main__":
custom_things = CustomerThings()
custom_things.user_loop()
属性上报:
rc, request_id = lk.thing_post_property(prop_data)
服务端对上报的属性做出处理发出响应,SDK通过on_thing_prop_post 通知用户
def on_thing_prop_post(self, request_id, code, data, message, userdata):
print("on_thing_prop_post request id:%s, code:%d, data:%s message:%s" %
(request_id, code, str(data), message))
thing_post_property返回值rc为0时,表明请求写入发送缓冲区成功,rc为其它值为写入发送缓冲失败,
当on_thing_prop_post 调用时,表明结果从云端返回了请求结果,code为200时表明解析成功,其它值为失败,失败信息可在message中查看
属性设置:
服务端发送设置属性消息后,SDK通过设置的回调函数on_thing_prop_changed通知用户,回调函数中params为包含属性名与值的字典对象,用户需要对接收到的新属性进行处理:
lk.on_thing_prop_changed = on_thing_prop_changed
...
def on_thing_prop_changed(self, params, userdata):
print("on_thing_prop_changed params:" + str(params))
注: SDK不会主动上报属性变化,如需要修改后再次上报云端,需要用户自行调用thing_post_property()发送