本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在裝置離線時保留裝置狀態
這些教學課程向您展示如何使用 AWS IoT Device Shadow 服務來儲存及更新裝置的狀態資訊。Shadow 文件是一個 JSON 文件,其根據裝置、本機應用程式或服務發佈的訊息,顯示裝置狀態的變化。於本教學課程中,Shadow 文件會顯示燈泡顏色的變化。這些教學課程還會顯示影子如何在裝置與網際網路中斷連線時,儲存此資訊,並在裝置回復連線並請求此資訊時,將最新狀態資訊傳回裝置。
建議您依此處顯示的順序試試這些教學課程,從您需要建立的 AWS IoT 資源和必要的硬體設定開始,這亦可協助您逐步學習概念。這些教學課程顯示如何配置及連接 Raspberry Pi 裝置,以與 AWS IoT 使用。若您並無所需的硬體,您可依照這些教學課程進行調整,以適應您選擇的裝置或使用 Amazon EC2 建立虛擬裝置。
教學課程案例概觀
這些教學課程的案例為本機應用程式或服務,可變更燈泡的顏色,及將其資料發佈置預留的影子主題。這些教學課程類似於互動式入門教學課程中說明的 Device Shadow 功能,並在 Raspberry Pi 裝置實作。本節中的教學課程側重於單一經典影子裝置,同時展現如何容納已命名影子或多個裝置的方法。
下列教學課程將會協助您了解如何使用 AWS IoT Device Shadow 服務。
-
教學課程:準備好 Raspberry Pi 來執行影子應用程式
本教學課程展示如何設定 Raspberry Pi 以與 AWS IoT 連線。您還會建立一個 AWS IoT 政策文件和物件資源,下載憑證,然後將政策連接至該物件資源。此教學課程約需 30 分鐘方能完成。
-
教學課程:安裝裝置 SDK 並執行 Device Shadows 的範例應用程式
本教學課程會展示如何安裝所需的工具、軟體和 AWS IoT Python 的裝置 SDK,然後執行範例影子應用程式。本教學課程以 連接 Raspberry Pi 或其他裝置 中提出的概念為基礎,需 20 分鐘才能完成。
-
教學課程:使用範例應用程式和 MQTT 測試用戶端,與 Device Shadow 互動
本教學課程將會展示如何使用
shadow.py
範例應用程式和 AWS IoT 主控台來觀察 AWS IoT Device Shadows 和燈泡狀態變化間的交互影響。本教學課程也會展示如何將 MQTT 訊息傳送至 Device Shadow 的預留主題。此教學課程約需 45 分鐘方能完成。
AWS IoT Device Shadow 概觀
Device Shadow 是個裝置的持續虛擬表示法,由您在 AWS IoT 登錄檔中建立的物件資源所管理。Shadow 文件是個 JSON 或 JavaScript 標記法文件,用來存儲和檢索裝置的目前狀態資訊。您可透過 MQTT 或 HTTP REST API,使用影子來取得及設定裝置的狀態 (無論該裝置是否連線至網際網路)。
Shadow 的文件包含 state
屬性,說明裝置狀態的下列層面:
-
desired
:應用程式會透過更新desired
物件來指定裝置屬性的所需狀態。 -
reported
:裝置會報告其在reported
物件中的目前狀態。 -
delta
:AWS IoT會報告delta
物件中所需狀態與報告狀態之間的差異。
以下為 Shadow 狀態文件的範例:
{ "state": { "desired": { "color": "green" }, "reported": { "color": "blue" }, "delta": { "color": "green" } } }
如要更新裝置的 Shadow 文件,您可使用預留的 MQTT 主題、以 HTTP 支援 GET
、UPDATE
和 DELETE
操作的 Device Shadow REST API,以及 AWS IoT CLI
在上一個範例中,假設您想將 desired
顏色變更為 yellow
。如要執行此動作,請傳送請求至 UpdateThingShadow API 或將訊息發佈至更新主題 $aws/things/THING_NAME/shadow/update
。
{ "state": { "desired": { "color": yellow } } }
更新只會影響請求中所指定的欄位。成功更新 Device Shadow 後,AWS IoT 會發佈新 desired
狀態到 delta
主題 $aws/things/THING_NAME/shadow/delta
。於此狀況下,Shadow 文件看起來像這樣:
{ "state": { "desired": { "color": yellow }, "reported": { "color": green }, "delta": { "color": yellow } } }
然後,使用 Update
主題 $aws/things/THING_NAME/shadow/update
及下列 JSON 訊息,對 AWS IoT Device Shadow 報告新的狀態:
{ "state": { "reported": { "color": yellow } } }
若您想要取得目前的狀態資訊,請將請求傳送至 GetThingShadow API 或將 MQTT 訊息發佈至取得主題 $aws/things/THING_NAME/shadow/get
。
如需使用 Device Shadow 服務的相關資訊,請參閱 AWS IoT Device Shadow 服務。
如需在裝置、應用程式和服務中使用 Device Shadows 的詳細資訊,請參閱 在裝置中使用影子 和 在應用程式和服務中使用影子。
如需有關與 AWS IoT 影子交互影響的資訊,請參閱 與影子互動。
如需 MQTT 預留主題和 HTTP REST API 的相關資訊,請參閱 裝置影子MQTT主題 和 裝置影子 REST API。