本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
本節說明應用程式或服務如何與 AWS IoT Device Shadow 服務互動。此範例假設應用程式或服務只透過影子與影子與該裝置互動。此範例不包含任何管理動作,例如建立或刪除影子。
此範例使用 AWS IoT Device Shadow 服務的 REST API 與陰影互動。與 中使用的範例不同在裝置中使用影子,它使用 REST 的publish/subscribe communications model, this example uses the request/response通訊模型API。這表示應用程式或服務必須先提出請求,才能收到 的回應 AWS IoT。不過,此模型的缺點是它不支援通知。如果您的應用程式或服務需要裝置狀態變更的及時通知,請考慮MQTT支援發佈/訂閱通訊模型的 MQTT或 WSS 通訊協定,如 中所述在裝置中使用影子。
重要
請確定您的應用程式或服務對影子的使用與裝置中的對應實作一致,並支援這些功能。例如,請考慮如何建立、更新和刪除影子,以及如何在裝置和存取影子的應用程式或服務中處理更新。您的設計應該清楚指定裝置狀態的更新和報告方式,以及您的應用程式和服務如何與裝置及其影子互動。
具名影子APIURL的 REST 為:
https://
endpoint
/things/thingName
/shadow?name=shadowName
和一個未命名的影子:
https://
endpoint
/things/thingName
/shadow
其中:
- 端點
-
CLI 命令傳回的端點:
aws iot describe-endpoint --endpoint-type IOT:Data-ATS
- thingName
-
影子所屬物件物件的名稱
- shadowName
-
已命名影子的名稱。此參數不會與未命名影子搭配使用。
在連線至 時初始化應用程式或服務 AWS IoT
當應用程式第一次連線到 時 AWS IoT,應該傳送HTTPGET請求到其用於取得其使用之陰影的目前狀態URLs的 。這可讓它將應用程式或服務同步到影子。
應用程式或服務連線到 時,處理狀態會變更 AWS IoT
當應用程式或服務連線到 時 AWS IoT,它可以在其使用的陰影URLs的 上傳送HTTPGET請求,以定期查詢目前狀態。
當最終使用者與應用程式或服務互動以變更裝置狀態時,應用程式或服務可以將HTTPPOST請求傳送到其用來更新陰影desired
狀態URLs的影子 。此請求會傳回已接受的變更,但您可能需要透過提出HTTPGET請求來輪詢影子,直到裝置以其新狀態更新影子為止。
偵測裝置已連線
若要判斷裝置目前是否連線,請在影子文件中包含connected
屬性,並使用 MQTT Last Will and Testament (LWT) 訊息,在裝置因錯誤而中斷連線false
時,將connected
屬性設定為 。
注意
MQTT LWT AWS IoT Device Shadow 服務會忽略傳送至 AWS IoT 預留主題 (開頭為 $ 的主題) 的訊息。不過,它們是由訂閱的用戶端和 AWS IoT 規則引擎處理,因此您需要建立傳送至非預留主題LWT的訊息,以及將MQTTLWT訊息重新發佈為影子更新訊息的規則,以將其發佈至影子的預留更新主題
。ShadowTopicPrefix
/update
傳送訊息給 Device Shadow 服務 LWT
-
建立規則,以重新發佈保留主題上的MQTTLWT訊息。下列範例規則會接聽有關
my/things/myLightBulb/update
主題的訊息,並將其重新發佈至$aws/things/myLightBulb/shadow/update
。{ "rule": { "ruleDisabled": false, "sql": "SELECT * FROM 'my/things/myLightBulb/update'", "description": "Turn my/things/ into $aws/things/", "actions": [ { "republish": { "topic": "$$aws/things/myLightBulb/shadow/update", "roleArn": "arn:aws:iam:123456789012:role/aws_iot_republish" } } ] } }
-
當裝置連線到 時 AWS IoT,它會註冊LWT訊息到未保留的主題,以便重新發佈規則進行辨識。在此範例中,該主題是
my/things/myLightBulb/update
,它會將連線的內容設定為false
。{ "state": { "reported": { "connected":"false" } } }
-
連線後,裝置會在其影子更新主題上發佈訊息
$aws/things/myLightBulb/shadow/update
,並報告其目前狀態,其中包括將其connected
屬性設定為true
。{ "state": { "reported": { "connected":"true" } } }
-
在裝置正常中斷連線之前,它會發佈其影子更新主題的訊息
$aws/things/myLightBulb/shadow/update
,以報告其最新狀態,其中包括將其connected
屬性設定為false
。{ "state": { "reported": { "connected":"false" } } }
-
如果裝置因錯誤而中斷連線, AWS IoT 訊息代理程式會代表裝置發佈裝置LWT的訊息。重新發佈規則會偵測到此訊息,並發佈影子更新訊息,以更新 Device Shadow 的
connected
屬性。