如果开启高级版,推荐使用高级版物模型能力,已经提供了更完整的能力用于替代“设备影子”功能。
功能介绍
设备影子是一个JSON文档,用于存储设备上报状态、应用程序期望状态信息。
- 每个设备有且只有一个设备影子,设备可以通过MQTT获取和设置设备影子以此来同步状态,该同步可以是影子同步给设备,也可以是设备同步给影子。
- 应用程序通过物联网平台的SDK获取和设置设备影子,获取设备最新状态或者下发期望状态给设备。
SDK使用
版本需求
Aliyun IoT Python SDK version ≥ 1.1.0
主动更新影子
通过thing_update_shadow的接口可以更新影子状态
reported = {"color":"red"}
# reported - 上报的影子数据
# version - 影子数据的版本号,例子中为1
res = linkkit.thing_update_shadow(reported, 1)
if res == 0:
print('success')
该接口主要异步化向云平台上报影子数据。
执行结果将异步返回,可以通过设置回调函数on_thing_shadow_get
获得相关结果,范例如下:
linkkit.on_thing_shadow_get = on_thing_shadow_get
...
def on_thing_shadow_get(self, payload, userdata):
print("on_thing_shadow_get:", payload)
如果影子设置成功,回调中payload对象数据如下:
{
"method": "reply",
"payload": {
"status": "success",
"version": 1
},
"timestamp": 1544686266
}
查询影子数据
通过thing_get_shadow
的接口可以查询最新的影子数据,范例如下:
res = linkkit.thing_get_shadow()
if res == 0:
print('success')
该接口主要异步化向云平台提交一个查询影子的请求,返回rc。rc为0标识请求成功,可以在异步的回调函数中关联该ID获取最终的结果。
执行结果将异步返回,可以通过设置回调函数on_thing_shadow_get
获得相关结果,范例如下:
linkkit.on_thing_shadow_get = on_thing_shadow_get
...
def on_thing_shadow_get(self, payload, userdata):
print("on_thing_shadow_get:", payload)
对于正确的get操作,异步返回的on_thing_shadow_get
回调中payload对象数据范例如下:
{
"method": "reply",
"payload": {
"status": "success",
"state": {
"reported": {
"color": "red"
}
},
"metadata": {
"reported": {
"color": {
"timestamp": 1544701176
}
}
}
},
"timestamp": 1544784614,
"version": 1
}
为了更方便的获取影子信息,SDK也会本地缓存一份/shadow/get/{pk}/{dn}topic
里面的影子数据,可以通过local_get_latest_shadow
来读取。
监听影子变更
- 影子的作用是允许云端去更新影子desired状态,设备端可以通过设置回调函数。
on_thing_shadow_get
获得desired状态的变更。- 执行结果将异步返回,可以通过设置回调函数
on_thing_shadow_get
获得相关结果,示例如下:
linkkit.on_thing_shadow_get = on_thing_shadow_get
...
def on_thing_shadow_get(self, payload, userdata):
print("on_thing_shadow_get:", payload)
对于desired状态的变更,on_thing_shadow_get
回调中payload对象数据示例如下:
{
"method": "control",
"payload": {
"status": "success",
"state": {
"reported": {
"color": "red"
},
"desired": {
"color": "green"
}
},
"metadata": {
"reported": {
"color": {
"timestamp": 1544701176
}
},
"desired": {
"color": {
"timestamp": 1544702121
}
}
}
},
"timestamp": 1544702121,
"version": 3
}