全部產品
Search
文件中心

IoT Platform:裝置影子

更新時間:Jun 30, 2024

如果開啟進階版,推薦使用進階版物模型能力,已經提供了更完整的能力用於替代“裝置影子”功能。

功能介紹

裝置影子是一個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
}