如果開啟高級版,推薦使用高級版物模型能力,已經(jīng)提供了更完整的能力用于替代“設(shè)備影子”功能。
功能介紹
設(shè)備影子是一個JSON文檔,用于存儲設(shè)備上報狀態(tài)、應(yīng)用程序期望狀態(tài)信息。
- 每個設(shè)備有且只有一個設(shè)備影子,設(shè)備可以通過MQTT獲取和設(shè)置設(shè)備影子以此來同步狀態(tài),該同步可以是影子同步給設(shè)備,也可以是設(shè)備同步給影子。
- 應(yīng)用程序通過物聯(lián)網(wǎng)平臺的SDK獲取和設(shè)置設(shè)備影子,獲取設(shè)備最新狀態(tài)或者下發(fā)期望狀態(tài)給設(shè)備。
SDK使用
版本需求
Aliyun IoT Python SDK version ≥ 1.1.0
主動更新影子
通過thing_update_shadow的接口可以更新影子狀態(tài)
reported = {"color":"red"}
# reported - 上報的影子數(shù)據(jù)
# version - 影子數(shù)據(jù)的版本號,例子中為1
res = linkkit.thing_update_shadow(reported, 1)
if res == 0:
print('success')
該接口主要異步化向云平臺上報影子數(shù)據(jù)。
執(zhí)行結(jié)果將異步返回,可以通過設(shè)置回調(diào)函數(shù)on_thing_shadow_get
獲得相關(guān)結(jié)果,范例如下:
linkkit.on_thing_shadow_get = on_thing_shadow_get
...
def on_thing_shadow_get(self, payload, userdata):
print("on_thing_shadow_get:", payload)
如果影子設(shè)置成功,回調(diào)中payload對象數(shù)據(jù)如下:
{
"method": "reply",
"payload": {
"status": "success",
"version": 1
},
"timestamp": 1544686266
}
查詢影子數(shù)據(jù)
通過thing_get_shadow
的接口可以查詢最新的影子數(shù)據(jù),范例如下:
res = linkkit.thing_get_shadow()
if res == 0:
print('success')
該接口主要異步化向云平臺提交一個查詢影子的請求,返回rc。rc為0標識請求成功,可以在異步的回調(diào)函數(shù)中關(guān)聯(lián)該ID獲取最終的結(jié)果。
執(zhí)行結(jié)果將異步返回,可以通過設(shè)置回調(diào)函數(shù)on_thing_shadow_get
獲得相關(guān)結(jié)果,范例如下:
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
回調(diào)中payload對象數(shù)據(jù)范例如下:
{
"method": "reply",
"payload": {
"status": "success",
"state": {
"reported": {
"color": "red"
}
},
"metadata": {
"reported": {
"color": {
"timestamp": 1544701176
}
}
}
},
"timestamp": 1544784614,
"version": 1
}
為了更方便的獲取影子信息,SDK也會本地緩存一份/shadow/get/{pk}/{dn}topic
里面的影子數(shù)據(jù),可以通過local_get_latest_shadow
來讀取。
監(jiān)聽影子變更
- 影子的作用是允許云端去更新影子desired狀態(tài),設(shè)備端可以通過設(shè)置回調(diào)函數(shù)。
on_thing_shadow_get
獲得desired狀態(tài)的變更。- 執(zhí)行結(jié)果將異步返回,可以通過設(shè)置回調(diào)函數(shù)
on_thing_shadow_get
獲得相關(guān)結(jié)果,示例如下:
linkkit.on_thing_shadow_get = on_thing_shadow_get
...
def on_thing_shadow_get(self, payload, userdata):
print("on_thing_shadow_get:", payload)
對于desired狀態(tài)的變更,on_thing_shadow_get
回調(diào)中payload對象數(shù)據(jù)示例如下:
{
"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
}