本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
高階命令工作流程
此工作流程顯示裝置如何與 AWS IoT Device Management命令互動。所有 HTTP API 請求都使用 Sigv4 登入資料進行簽署。
建立和管理命令
若要建立和管理裝置的命令,請執行下列步驟。
-
建立命令資源
從 Command Hub 或使用 API 建立命令
。 CreateCommand -
指定承載
以任何格式提供承載。指定內容類型,以確保正確的裝置解釋。
對於具有承載範本的動態命令,最終承載會在執行時間使用您提供的參數產生。範本僅支援 JSON 格式,但產生的承載可以 JSON 或 CBOR 傳送。
-
(選用) 管理建立的命令
建立後更新顯示名稱和描述。不再需要時,將命令標記為已棄用,或將其永久刪除。若要修改承載資訊,請建立新的 命令。
為您的命令選擇目標裝置並訂閱 MQTT 主題
選擇您的目標裝置,並設定 MQTT 主題以接收命令和發佈回應。
-
選擇命令的目標裝置
選擇要接收和執行 命令的目標裝置。針對已註冊的裝置使用物件名稱,或未註冊裝置的用戶端 ID。如需詳細資訊,請參閱目標裝置考量事項。
-
設定AWS IoT裝置政策
設定授予許可的 IAM 政策,以接收執行和發佈更新。如需政策範例範例 IAM 政策,請參閱 。
-
建立 MQTT 連線
將裝置連接至訊息中介裝置,並訂閱請求和回應主題。裝置需要
iot:Connect許可。使用DescribeEndpointAPI 或 CLIdescribe-endpoint命令尋找您的資料平面端點:aws iot describe-endpoint --endpoint-type iot:Data-ATS執行此命令會傳回帳戶特定的資料平面端點,如下所示。
account-specific-prefix.iot.region.amazonaws.com -
訂閱命令主題
訂閱 命令請求主題。當您啟動執行時,訊息中介裝置會將承載發佈至此主題。您的裝置會接收並處理 命令。
(選用) 訂閱回應主題 (
accepted或rejected) 以接收雲端服務是否接受或拒絕裝置回應的確認。在此範例中,取代:
-
<device>thing或 ,client取決於您要鎖定的裝置是否已註冊為 IoT 物件,或指定為 MQTT 用戶端。 -
具有目標裝置的唯一識別符。此 ID 可以是唯一的 MQTT 用戶端 ID 或物件名稱。<DeviceID>
注意
如果承載類型不是 JSON 或 CBOR,則命令請求主題中可能不存在
<PayloadFormat>欄位。若要取得承載格式,建議您使用 MQTT5 從 MQTT 訊息標頭取得格式資訊。如需詳細資訊,請參閱命令主題。$aws/commands/<devices>/<DeviceID>/executions/+/request/<PayloadFormat>$aws/commands/<devices>/<DeviceID>/executions/+/response/accepted/<PayloadFormat>$aws/commands/<devices>/<DeviceID>/executions/+/response/rejected/<PayloadFormat> -
啟動和監控目標裝置的命令執行
建立命令並指定命令的目標之後,您可以執行下列步驟,在目標裝置上開始執行。
-
在目標裝置上啟動命令執行
從 Command Hub
或使用 StartCommandExecutionAPI 搭配您的帳戶特定端點啟動執行。iot:Data-ATS用於雙堆疊 (IPv4/IPv6) 或僅用於iot:JobsIPv4。API 會將承載發佈至 命令請求主題。
注意
如果裝置離線並使用 MQTT 持久性工作階段,則 Command 會等待訊息中介裝置。當裝置在逾時前重新連線時,可以處理 命令並發佈結果。如果逾時過期,則執行會逾時,並將捨棄承載。
-
更新命令執行的結果
裝置會收到承載、處理 命令、執行指定的動作,以及使用
UpdateCommandExecutionMQTT API 將結果發佈至命令回應主題。如果訂閱接受和拒絕的主題,裝置會收到雲端服務是否接受或拒絕回應的確認。根據您在請求主題中指定的內容,
<devices>可以是實物或用戶端,而<DeviceID>可以是您的AWS IoT實物名稱或 MQTT 用戶端 ID。注意
<PayloadFormat>只能是命令回應主題中的 JSON 或 CBOR。$aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat> -
(選用) 擷取命令執行結果
從AWS IoT主控台或使用 擷取執行結果
GetCommandExecution。裝置必須將結果發佈至 Commands 回應主題,以取得最新資訊。檢視其他詳細資訊,包括上次更新時間、結果和完成時間。
(選用) 啟用命令事件的通知
訂閱 命令事件,以在執行狀態變更時收到通知。
-
建立主題規則
訂閱 Commands 事件主題以取得狀態變更通知。使用AWS IoT主控台或 建立主題規則,將裝置資料路由到其他服務AWS Lambda,AWS IoT例如 Amazon SQS 和 AWSStep Functions建立 AWS IoT 規則。
在此範例中,將 取代
為您要接收通知之命令的識別符,並將<CommandID>取代為命令執行的狀態。<CommandExecutionStatus>$aws/events/commandExecution/<CommandID>/<CommandExecutionStatus>注意
若要接收所有命令和命令執行狀態的通知,您可以使用萬用字元並訂閱下列主題。
$aws/events/commandExecution/+/# -
接收和處理命令事件
管理命令推送通知,並使用訂閱的事件建置應用程式。
下列程式碼顯示您將收到的命令事件通知的範例承載。
{ "executionId": "2bd65c51-4cfd-49e4-9310-d5cbfdbc8554", "status":"FAILED", "statusReason": { "reasonCode": "DEVICE_TOO_BUSY", "reasonDescription": "" }, "eventType": "COMMAND_EXECUTION", "commandArn":"arn:aws:iot:us-east-1:123456789012:command/0b9d9ddf-e873-43a9-8e2c-9fe004a90086", "targetArn":"arn:aws:iot:us-east-1:123456789012:thing/5006c3fc-de96-4def-8427-7eee36c6f2bd", "timestamp":1717708862107}