如果開啟進階版,推薦使用進階版物模型能力,已經提供了更完整的能力用於替代“裝置影子”功能。
功能介紹
裝置影子是一個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
}