高階命令工作流程 - AWS IoT Core

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

高階命令工作流程

此工作流程顯示裝置如何與 AWS IoT Device Management命令互動。所有 HTTP API 請求都使用 Sigv4 登入資料進行簽署。

AWS IoT Device Management裝置命令高階工作流程概觀。

建立和管理命令

若要建立和管理裝置的命令,請執行下列步驟。

  1. 建立命令資源

    從 Command Hub 或使用 API 建立命令CreateCommand

  2. 指定承載

    以任何格式提供承載。指定內容類型,以確保正確的裝置解釋。

    對於具有承載範本的動態命令,最終承載會在執行時間使用您提供的參數產生。範本僅支援 JSON 格式,但產生的承載可以 JSON 或 CBOR 傳送。

  3. (選用) 管理建立的命令

    建立後更新顯示名稱和描述。不再需要時,將命令標記為已棄用,或將其永久刪除。若要修改承載資訊,請建立新的 命令。

為您的命令選擇目標裝置並訂閱 MQTT 主題

選擇您的目標裝置,並設定 MQTT 主題以接收命令和發佈回應。

  1. 選擇命令的目標裝置

    選擇要接收和執行 命令的目標裝置。針對已註冊的裝置使用物件名稱,或未註冊裝置的用戶端 ID。如需詳細資訊,請參閱目標裝置考量事項

  2. 設定AWS IoT裝置政策

    設定授予許可的 IAM 政策,以接收執行和發佈更新。如需政策範例範例 IAM 政策,請參閱 。

  3. 建立 MQTT 連線

    將裝置連接至訊息中介裝置,並訂閱請求和回應主題。裝置需要 iot:Connect 許可。使用 DescribeEndpoint API 或 CLI describe-endpoint 命令尋找您的資料平面端點:

    aws iot describe-endpoint --endpoint-type iot:Data-ATS

    執行此命令會傳回帳戶特定的資料平面端點,如下所示。

    account-specific-prefix.iot.region.amazonaws.com
  4. 訂閱命令主題

    訂閱 命令請求主題。當您啟動執行時,訊息中介裝置會將承載發佈至此主題。您的裝置會接收並處理 命令。

    (選用) 訂閱回應主題 (acceptedrejected) 以接收雲端服務是否接受或拒絕裝置回應的確認。

    在此範例中,取代:

    • <device> thing或 ,client取決於您要鎖定的裝置是否已註冊為 IoT 物件,或指定為 MQTT 用戶端。

    • <DeviceID> 具有目標裝置的唯一識別符。此 ID 可以是唯一的 MQTT 用戶端 ID 或物件名稱。

    注意

    如果承載類型不是 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>

啟動和監控目標裝置的命令執行

建立命令並指定命令的目標之後,您可以執行下列步驟,在目標裝置上開始執行。

  1. 在目標裝置上啟動命令執行

    Command Hub 或使用 StartCommandExecution API 搭配您的帳戶特定端點啟動執行。iot:Data-ATS 用於雙堆疊 (IPv4/IPv6) 或僅用於 iot:Jobs IPv4。

    API 會將承載發佈至 命令請求主題。

    注意

    如果裝置離線並使用 MQTT 持久性工作階段,則 Command 會等待訊息中介裝置。當裝置在逾時前重新連線時,可以處理 命令並發佈結果。如果逾時過期,則執行會逾時,並將捨棄承載。

  2. 更新命令執行的結果

    裝置會收到承載、處理 命令、執行指定的動作,以及使用 UpdateCommandExecution MQTT API 將結果發佈至命令回應主題。如果訂閱接受和拒絕的主題,裝置會收到雲端服務是否接受或拒絕回應的確認。

    根據您在請求主題中指定的內容,<devices> 可以是實物或用戶端,而 <DeviceID> 可以是您的AWS IoT實物名稱或 MQTT 用戶端 ID。

    注意

    <PayloadFormat> 只能是命令回應主題中的 JSON 或 CBOR。

    $aws/commands/<devices>/<DeviceID>/executions/<ExecutionId>/response/<PayloadFormat>
  3. (選用) 擷取命令執行結果

    從AWS IoT主控台或使用 擷取執行結果GetCommandExecution。裝置必須將結果發佈至 Commands 回應主題,以取得最新資訊。檢視其他詳細資訊,包括上次更新時間、結果和完成時間。

(選用) 啟用命令事件的通知

訂閱 命令事件,以在執行狀態變更時收到通知。

  1. 建立主題規則

    訂閱 Commands 事件主題以取得狀態變更通知。使用AWS IoT主控台或 建立主題規則,將裝置資料路由到其他服務AWS Lambda,AWS IoT例如 Amazon SQS 和 AWSStep Functions建立 AWS IoT 規則

    在此範例中,將 取代<CommandID>為您要接收通知之命令的識別符,並將 <CommandExecutionStatus>取代為命令執行的狀態。

    $aws/events/commandExecution/<CommandID>/<CommandExecutionStatus>
    注意

    若要接收所有命令和命令執行狀態的通知,您可以使用萬用字元並訂閱下列主題。

    $aws/events/commandExecution/+/#
  2. 接收和處理命令事件

    管理命令推送通知,並使用訂閱的事件建置應用程式。

下列程式碼顯示您將收到的命令事件通知的範例承載。

{ "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 }