如果開啟高級版,推薦使用高級版物模型能力,已經(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
}