本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
啟動和監控命令執行
建立命令資源後,您可以在目標裝置上啟動命令執行。一旦裝置開始執行命令,即可開始更新命令執行的結果,並將狀態更新和結果資訊發佈至MQTT預留主題。然後,您可以擷取命令執行的狀態,並監控您帳戶中的執行狀態。
本節說明如何使用 AWS IoT 主控台和 啟動和監控命令 AWS CLI。
啟動命令執行
重要
您全權負責以安全且符合適用法律的方式部署命令。
開始命令執行之前,您必須確定:
-
您已在 AWS IoT 命名空間中建立命令,並提供承載資訊。當您開始執行 命令時,裝置會處理承載中的指示,並執行指定的動作。如需建立命令的詳細資訊,請參閱 建立命令資源。
-
您的裝置已訂閱 命令的MQTT預留主題。當您啟動命令執行時,承載資訊將發佈至下列預留MQTT請求主題。
在這種情況下,
<devices>
可以是 IoT 物件或MQTT用戶端,也可以<DeviceID>
是物件名稱或用戶端 ID。支援的<PayloadFormat>
是 JSON和 CBOR。如需命令主題的詳細資訊,請參閱 命令主題。$aws/commands/
<devices>
/<DeviceID>
/executions/+/request/<PayloadFormat>
如果
<PayloadFormat>
不是 JSON和 CBOR,則以下顯示命令主題格式。$aws/commands/
<devices>
/<DeviceID>
/executions/+/request
當您想要執行命令時,您必須指定將接收命令的目標裝置,並執行指定的指示。如果裝置尚未在 AWS IoT 登錄檔中註冊,目標裝置可以是 AWS IoT 實物,也可以是用戶端 ID。收到命令承載後,裝置可以開始執行命令並執行指定的動作。
AWS IoT 物件
命令的目標裝置可以是您已在 AWS IoT 物件登錄檔中註冊的 AWS IoT 物件。中的物件 AWS IoT 可讓您更輕鬆地搜尋和管理裝置。
當您 AWS IoT 從 Connect 裝置頁面CreateThing
將裝置連接到 時,您可以將裝置註冊為物件API。您可以從 AWS IoT 主控台的物件中樞DescribeThing
,找到要執行命令的現有物件API。如需如何將裝置註冊為 AWS IoT 物件的詳細資訊,請參閱使用登錄檔管理物件。
用戶端 ID
如果您的裝置尚未向 註冊為物件 AWS IoT,您可以改為使用用戶端 ID。
用戶端 ID 是您指派給裝置或用戶端的唯一識別符。用戶端 ID 是在MQTT通訊協定中定義,且可包含英數字元、底線或破折號。每個連線的裝置都必須是唯一的 AWS IoT。
注意
-
如果您的裝置已在 AWS IoT 登錄檔中註冊為物件,則用戶端 ID 可以與物件名稱相同。
-
如果您的命令執行以特定MQTT用戶端 ID 為目標,若要從以用戶端 ID 為基礎的命令主題接收命令承載,您的裝置必須使用相同的用戶端 ID 連線至 AWS IoT 。
用戶端 ID 通常是您的裝置連線時可以使用的MQTT用戶端 ID AWS IoT Core。此 ID 由 AWS IoT 用來識別每個特定裝置,以及管理連線和訂閱。
逾時表示您的裝置可以提供命令執行結果的持續時間,以秒為單位。
建立命令執行後,計時器會啟動。如果裝置離線或無法在逾時持續時間內報告執行結果,則命令執行將會逾時,且執行狀態將報告為 TIMED_OUT
。
此欄位是選用的,如果您不指定任何值,則預設為 10 秒。您也可以將逾時設定為最大值 12 小時。
逾時值和TIMED_OUT
執行狀態
雲端和裝置都可以報告逾時。
命令傳送至裝置後,計時器便會啟動。如果未在指定的逾時持續時間內從裝置收到回應,如上所述。在此情況下,雲端會將命令執行狀態設定為 TIMED_OUT
,原因碼為 $NO_RESPONSE_FROM_DEVICE
。
這可能會發生在下列任一情況下。
-
裝置在執行 命令時離線。
-
裝置無法在指定的持續時間內完成執行命令。
-
裝置無法在逾時持續時間內報告更新的狀態資訊。
在此執行個體中,當從雲端報告 TIMED_OUT
的執行狀態時,命令執行為非終端機。您的裝置可以發佈回應,將狀態覆寫為任何終端狀態 、 SUCCEEDED
FAILED
或 REJECTED
。命令執行現在會變成終端機,不接受任何進一步的更新。
您的裝置也可以透過報告執行命令時發生逾時,來更新雲端啟動TIMED_OUT
的狀態。在此情況下,命令執行狀態會保持在 ,TIMED_OUT
但statusReason
物件會根據裝置報告的資訊更新。命令執行現在會變成終端機,而且不會接受進一步的更新。
使用MQTT持久性工作階段
您可以設定MQTT持久性工作階段以搭配 AWS IoT Device Management 命令功能使用。此功能在例如當您的裝置離線時特別有用,而且您希望確保裝置在逾時持續時間之前恢復上線時仍能收到命令,並執行指定的指示。
根據預設,MQTT持久性工作階段到期設定為 60 分鐘。如果您的命令執行逾時設定為超過此持續時間的值,則執行時間超過 60 分鐘的命令執行可能會遭到訊息代理程式拒絕,而且可能會失敗。若要執行持續時間超過 60 分鐘的命令,您可以請求增加持久性工作階段到期時間。
注意
為了確保您正確使用MQTT持久性工作階段功能,請確定清除開始旗標設定為零。如需詳細資訊,請參閱MQTT持久性工作階段。
若要從主控台開始執行命令,請前往 AWS IoT 主控台的 Command Hub
使用StartCommandExecution
HTTP資料平面API操作來啟動命令執行。API 請求和回應與命令執行 ID 相關聯。裝置完成執行命令後,即可將訊息發佈至命令回應主題,向雲端報告狀態和執行結果。對於自訂回應碼,您擁有的應用程式碼可以處理回應訊息並將結果發佈到其中 AWS IoT。
如果您的裝置已訂閱命令請求主題, StartCommandExecution
API會將承載訊息發佈至主題。承載可以使用您選擇的任何格式。如需詳細資訊,請參閱命令承載。
$aws/commands/
<devices>
/<DeviceID>
/executions/+/request/<PayloadFormat>
如果承載格式不是 JSON或 CBOR,則以下顯示命令請求主題的格式。
$aws/commands/
<devices>
/<DeviceID>
/executions/+/request
範例IAM政策
使用API此操作之前,請確定您的IAM政策授權您在裝置上執行此動作。下列範例顯示允許使用者執行 StartCommandExecution
動作的 IAM政策。
在此範例中,取代:
-
搭配您的 AWS 區域,例如region
ap-south-1
。 -
您的 AWS 帳戶 號碼,例如account-id
。123456789012
-
具有 AWS IoT 命令的唯一識別符,例如command-id
。如果您想要傳送多個命令,您可以在IAM政策中指定這些命令。LockDoor
-
使用devices
thing
或 ,client
取決於您的裝置是否已註冊為 AWS IoT 實物,或是否指定為MQTT用戶端。 -
使用您的 AWS IoTdevice-id
thing-name
或client-id
。
{ "Effect": "Allow", "Action": [ "iot:StartCommandExecution" ], "Resource": [ "arn:aws:iot:
region
:account-id
:command/command-id
", "arn:aws:iot:region
:account-id
:devices
/device-id
" ] }
取得帳戶特定的資料平面端點
執行 API命令之前,您必須取得URL端點的帳戶特定iot:Jobs
端點。例如,如果您執行此命令:
aws iot describe-endpoint --endpoint-type iot:Jobs
它將傳回帳戶特定的端點,URL如以下範例回應所示。
{ "endpointAddress": "
<account-specific-prefix>
.jobs.iot.<region>
.amazonaws.com" }
啟動命令執行範例 (AWS CLI)
下列範例示範如何使用 命令開始執行start-command-execution
AWS CLI 命令。
在此範例中,取代:
-
使用您要執行之命令ARN的 。您可以從<command-arn>
create-command
CLI命令的回應取得此資訊。例如,如果您正在執行變更方向盤模式的命令,請使用arn:aws:iot:
。region
:account-id
:command/SetComfortSteeringMode
-
目標ARN裝置的物件,可以是您要執行命令的 IoT 物件或MQTT用戶端。例如,如果您要執行目標裝置的 命令<target-arn>
myRegisteredThing
,請使用arn:aws:iot:
。region
:account-id
:thing/myRegisteredThing
-
使用您在 中取得的帳戶特定端點取得帳戶特定的資料平面端點,字首為<endpoint-url>
https://
。例如:https://
。123456789012abcd
.jobs.iot.ap-south-1
.amazonaws.com -
(選用) 您也可以在執行
StartCommandExecution
API操作時指定其他參數executionTimeoutSeconds
。此選用欄位指定裝置必須完成執行命令的時間,以秒為單位。根據預設,值為 10 秒。當命令執行狀態為 時CREATED
,計時器會啟動。如果在計時器過期之前未收到命令執行結果,則狀態會自動變更為TIMED_OUT
。
aws iot-jobs-data start-command-execution \ --command-arn
<command-arn>
\ --target-arn<target-arn>
\ --endpoint<endpoint-url>
\ --executionTimeoutSeconds900
執行此命令會傳回命令執行 ID。您可以使用此 ID 來查詢命令執行狀態、詳細資訊和命令執行歷史記錄。
注意
如果命令已棄用,則StartCommandExecution
API請求會失敗,但出現驗證例外狀況。若要修正此錯誤,請先使用 UpdateCommand
還原命令API,然後執行 StartCommandExecution
請求。
{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542" }
更新命令執行的結果
使用UpdateCommandExecution
MQTT資料平面API操作更新命令執行的狀態或結果。
注意
使用此 之前API:
-
您的裝置必須已建立MQTT連線並訂閱命令請求和回應主題。如需詳細資訊,請參閱高階命令工作流程。
-
您必須已使用
StartCommandExecution
API操作執行此命令。
使用此操作之前API,請確定您的IAM政策授權您的裝置執行這些動作。以下顯示範例政策,授權您的裝置執行 動作。如需允許使用者執行UpdateCommandExecution
動作的其他範例IAM政策,請參閱 連線和發佈政策範例。
在此範例中,取代:
-
, AWS 區域例如Region
ap-south-1
。 -
您的 AWS 帳戶 號碼,例如AccountID
。123456789012
-
您以命令執行為目標的 AWS IoT 物件名稱,例如ThingName
。myRegisteredThing
-
和commands-request-topic
,以及 AWS IoT 命令請求和回應主題的名稱。如需詳細資訊,請參閱高階命令工作流程。commands-response-topic
MQTT 用戶端 ID IAM的政策範例
下列程式碼顯示使用MQTT用戶端 ID 時的範例裝置政策。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/json" ] }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/request/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/clients/${iot:ClientId}/executions/*/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/request/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/clients/${iot:ClientId}/executions/+/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }
IoT 物件IAM的政策範例
下列程式碼顯示使用 AWS IoT 物件時的範例裝置政策。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/request/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topic/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/*/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": [ "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/request/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/accepted/json", "arn:aws:iot:us-east-1:123456789012:topicfilter/$aws/commands/things/${iot:Connection.Thing.ThingName}/executions/+/response/rejected/json" ] }, { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:us-east-1:123456789012:client/${iot:ClientId}" } ] }
在請求主題收到命令執行後,裝置會處理命令。然後UpdateCommandExecution
API,它會使用 將命令執行的狀態和結果更新為下列回應主題。
$aws/commands/
<devices>
/<DeviceID>
/executions/<ExecutionId>
/response/<PayloadFormat>
在此範例中,
是目標裝置的唯一識別符,而 <DeviceID>
是目標裝置上命令執行的識別符。<execution-id>
<PayloadFormat>
可以是 JSON或 CBOR。
注意
如果您尚未向 註冊裝置 AWS IoT,您可以使用用戶端 ID 做為識別符,而不是物件名稱。
$aws/commands/clients/
<ClientID>
/executions/<ExecutionId>
/response/<PayloadFormat>
裝置回報執行狀態的更新
您的裝置可以使用 API來報告命令執行的任何下列狀態更新。如需這些狀態的詳細資訊,請參閱 命令執行狀態。
-
IN_PROGRESS
:當裝置開始執行命令時,它可以將狀態更新為IN_PROGRESS
。 -
SUCCEEDED
:當裝置成功處理命令並完成執行時,裝置可以將訊息發佈至回應主題,做為SUCCEEDED
。 -
FAILED
:如果裝置無法執行 命令,它可以將訊息以 形式發佈到回應主題FAILED
。 -
REJECTED
:如果裝置無法接受 命令,它可以將訊息發佈至回應主題,做為REJECTED
。 -
TIMED_OUT
:TIMED_OUT
由於下列任何原因,命令執行狀態可能會變更為 。-
未收到命令執行的結果。這可能是因為未在指定的持續時間內完成執行,或裝置無法將狀態資訊發佈至回應主題。
-
裝置報告嘗試執行 命令時發生逾時。
-
如需 TIMED_OUT
狀態的詳細資訊,請參閱 逾時值和TIMED_OUT執行狀態。
使用 時的考量事項 UpdateCommandExecution
API
以下是使用 UpdateCommandExecution
時的一些重要考量API。
-
您的裝置可以使用選用
statusReason
的 物件,可用來提供有關執行的其他資訊。如果您的裝置提供此物件,則需要物件reasonCode
的欄位,但reasonDescription
欄位是選用的。 -
當您的裝置使用
statusReason
物件時,reasonCode
必須使用 模式[A-Z0-9_-]+
,而且長度不超過 64 個字元。如果您提供reasonDescription
,請確定長度不超過 1,024 個字元。它可以使用控制字元以外的任何字元,例如新行。 -
您的裝置可以使用選用
result
物件來提供命令執行結果的相關資訊,例如遠端函數呼叫的傳回值。如果您提供result
,它必須至少需要一個項目。 -
在
result
欄位中,您將項目指定為鍵/值對。對於每個項目,您必須將資料類型資訊指定為字串、布林值或二進位。字串資料類型必須使用金鑰s
,布林資料類型必須使用金鑰b
,而二進位資料類型必須使用金鑰bin
。您必須確保這些資料類型被提及為小寫。 -
如果您在執行
UpdateCommandExecution
時遇到錯誤API,您可以在 Amazon 中的AWSIoTLogsV2
日誌群組中檢視錯誤 CloudWatch。如需啟用記錄和檢視日誌的資訊,請參閱 設定 AWS IoT 記錄。
UpdateCommandExecution
API 範例
下列程式碼顯示您的裝置如何使用 UpdateCommandExecution
API 來報告執行狀態的範例、提供狀態額外資訊statusReason
的欄位,以及提供執行結果相關資訊的結果欄位,例如在這種情況下的汽車電池百分比。
{ "status": "IN_PROGRESS", "statusReason": { "reasonCode": "200", "reasonDescription": "Execution_in_progress" }, "result": { "car_battery": { "s": "car battery at 50 percent" } } }
擷取命令執行
執行命令之後,您可以從 AWS IoT 主控台和使用 擷取命令執行的相關資訊 AWS CLI。您可以取得下列資訊。
注意
若要擷取最新的命令執行狀態,您的裝置必須使用 將狀態資訊發佈至回應主題UpdateCommandExecution
MQTTAPI,如下所述。在裝置發佈至此主題之前, GetCommandExecution
API會將狀態報告為 CREATED
或 TIMED_OUT
。
您建立的每個命令執行都會有:
-
執行 ID,這是命令執行的唯一識別符。
-
命令執行的狀態。當您在目標裝置上執行 命令時,命令執行會進入
CREATED
狀態。然後,它可以轉換到其他命令執行狀態,如下所述。 -
命令執行的結果。
-
唯一的命令 ID 和已建立執行的目標裝置。
-
開始日期,顯示建立命令執行的時間。
您可以使用下列其中一種方法,從主控台擷取命令執行。
-
從命令中樞頁面
前往 AWS IoT 主控台的 Command Hub
頁面,並執行這些步驟。 -
選擇您在目標裝置上建立執行的命令。
-
在命令詳細資訊頁面的命令歷史記錄索引標籤中,您會看到您建立的執行。選擇您要擷取資訊的執行。
-
如果您的裝置使用
UpdateCommandExecution
API 提供結果資訊,您可以在此頁面的結果索引標籤中找到此資訊。
-
-
從物件中樞頁面
如果您在執行 命令時選擇 AWS IoT 物件做為目標裝置,您可以從物件中樞頁面檢視執行詳細資訊。
-
前往 AWS IoT 主控台中的物件中樞
頁面,然後選擇您為其建立命令執行的物件。 -
在物件詳細資訊頁面的命令歷史記錄中,您會看到您建立的執行。選擇您要擷取資訊的執行。
-
如果您的裝置使用
UpdateCommandExecution
API 提供結果資訊,您可以在此頁面的結果索引標籤中找到此資訊。
-
使用GetCommandExecution
AWS IoT Core 控制平面HTTPAPI操作擷取命令執行的相關資訊。您必須已使用 StartCommandExecution
API操作執行此命令。
範例IAM政策
使用API此操作之前,請確定您的IAM政策授權您在裝置上執行此動作。下列範例顯示允許使用者執行 GetCommandExecution
動作的 IAM政策。
在此範例中,取代:
-
搭配您的 AWS 區域,例如region
ap-south-1
。 -
您的 AWS 帳戶 號碼,例如account-id
。123456789012
-
使用您唯一的 AWS IoT 命令識別符,例如command-id
。LockDoor
-
使用devices
thing
或 ,client
取決於您的裝置是否已註冊為 AWS IoT 實物,或是否指定為MQTT用戶端。 -
使用您的 AWS IoTdevice-id
thing-name
或client-id
。
{ "Effect": "Allow", "Action": [ "iot:GetCommandExecution" ], "Resource": [ "arn:aws:iot:
region
:account-id
:command/command-id
", "arn:aws:iot:region
:account-id
:devices
/device-id
" ] }
擷取命令執行範例
下列範例說明如何擷取使用 命令執行之start-command-execution
AWS CLI 命令的相關資訊。下列範例示範如何擷取已執行的命令相關資訊,以關閉方向盤模式。
在此範例中,取代:
-
具有您要擷取資訊的命令執行識別符。<execution-id>
-
使用您要鎖定執行目標之裝置的 Amazon Resource Number (ARN)。您可以從<target-arn>
start-command-execution
CLI命令的回應取得此資訊。 -
或者,如果您的裝置使用
UpdateCommandExection
API來提供執行結果,您可以指定是否GetCommandExecution
API使用GetCommandExecution
將命令執行結果包含在 的回應中API。
aws iot get-command-execution --execution-id
<execution-id>
\ --target-arn<target-arn>
\ --include-result
執行此命令會產生回應,其中包含命令執行ARN的 、執行狀態,以及開始執行的時間和完成時間的相關資訊。它也提供statusReason
物件,其中包含 狀態的其他資訊。如需不同狀態和狀態原因的詳細資訊,請參閱 命令執行狀態。
下列程式碼顯示請求的範例回應API。
注意
執行回應中的 completedAt
欄位對應至裝置向雲端回報終端機狀態的時間。在TIMED_OUT
狀態的情況下,只有在裝置報告逾時時,才會設定此欄位。狀態由雲端設定TIMED_OUT
時,TIMED_OUT
狀態不會更新。如需逾時行為的詳細資訊,請參閱 命令執行逾時考量。
{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "commandArn": "arn:aws:iot:ap-south-1:123456789012:command/LockDoor", "targetArn": "arn:aws:iot:ap-south-1:123456789012:thing/myRegisteredThing", "status": "SUCCEEDED", "statusReason": { "reasonCode": "DEVICE_SUCCESSFULLY_EXECUTED", "reasonDescription": "SUCCESS" }, "result": { "sn": { "s": "ABC-001" }, "digital": { "b": true } }, "createdAt": "2024-03-23T00:50:10.095000-07:00", "completedAt": "2024-03-23T00:50:10.095000-07:00" }
使用MQTT測試用戶端檢視命令更新
您可以使用MQTT測試用戶端,在使用命令功能MQTT時檢視訊息交換。在您的裝置與 建立MQTT連線後 AWS IoT,您可以建立命令、指定承載,然後在裝置上執行它。當您執行 命令時,如果您的裝置已訂閱 命令的MQTT預留請求主題,則會看到發佈至此主題的承載訊息。
然後,裝置會收到承載指示,並在 IoT 裝置上執行指定的操作。然後,它會使用 UpdateCommandExecution
API將命令執行結果和狀態資訊發佈至 command. AWS IoT Device Management listens 的MQTT預留回應主題,以更新回應主題,並將更新的資訊和發佈日誌至 AWS CloudTrail 和 Amazon CloudWatch。然後,您可以從主控台或使用 GetCommandExecution
擷取最新的命令執行資訊API。
下列步驟說明如何使用MQTT測試用戶端來觀察訊息。
-
在 AWS IoT 主控台中開啟MQTT測試用戶端
。 -
在訂閱索引標籤上,輸入下列主題,然後選擇訂閱,其中
<thingId>
是您已註冊之裝置的物件名稱 AWS IoT。注意
您可以在 AWS IoT 主控台的物件中樞
頁面找到裝置的物件名稱,或者,如果裝置尚未註冊為物件,您可以在 AWS IoT 從 Connect 裝置頁面連線至 時註冊裝置 。 $aws/commands/things/
<thingId>
/executions/+/request -
(選用) 在訂閱索引標籤上,您也可以輸入下列主題,然後選擇訂閱。
$aws/commands/things/+/executions/+/response/accepted/json $aws/commands/things/+/executions/+/response/rejected/json
-
當您啟動命令執行時,將使用裝置已訂閱的請求主題 ,將訊息承載傳送至裝置
$aws/commands/things/
。在MQTT測試用戶端中,您應該會看到命令承載,其中包含裝置處理命令的指示。<thingId>
/executions/+/request -
裝置開始執行命令後,可以將狀態更新發佈到下列MQTT保留回應主題,以用於命令。
$aws/commands/
<devices>
/<device-id>
/executions/<executionId>
/response/json例如,請考慮您執行的命令,以開啟汽車的 AC,將溫度降至所需的值。以下JSON顯示 車輛發佈至回應主題的範例訊息,顯示無法執行 命令。
{ "deviceId": "My_Car", "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542", "status": "FAILED", "statusReason": { "reasonCode": "CAR_LOW_ON_BATTERY", "reasonDescription": "Car battery is lower than 5 percent" } }
在這種情況下,您可以為汽車的電池充電,然後再次執行 命令。
在 中列出命令執行 AWS 帳戶
執行命令之後,您可以從 AWS IoT 主控台和使用 擷取命令執行的相關資訊 AWS CLI。您可以取得下列資訊。
-
執行 ID,這是命令執行的唯一識別符。
-
命令執行的狀態。當您在目標裝置上執行 命令時,命令執行會進入
CREATED
狀態。然後,它可以轉換到其他命令執行狀態,如下所述。 -
唯一的命令 ID 和建立執行的目標裝置。
-
開始日期,顯示建立命令執行的時間。
您可以使用下列其中一種方法,從主控台查看所有命令執行。
-
從命令中樞頁面
前往 AWS IoT 主控台的 Command Hub
頁面,並執行這些步驟。 -
選擇您在目標裝置上建立執行的命令。
-
在命令詳細資訊頁面中,前往命令歷史記錄索引標籤,您會看到您建立的執行清單。
-
-
從物件中樞頁面
如果您在執行 命令時選擇 AWS IoT 物件做為目標裝置,並為單一裝置建立多個命令執行,您可以從物件中樞頁面檢視裝置的執行。
-
前往 AWS IoT 主控台中的物件中樞
頁面,然後選擇您為其建立執行的物件。 -
在物件詳細資訊頁面的命令歷史記錄中,您會看到為裝置建立的執行清單。
-
使用ListCommandExecutions
AWS IoT Core 控制平面HTTPAPI操作列出您帳戶中的所有命令執行。
範例IAM政策
使用API此操作之前,請確定您的IAM政策授權您在裝置上執行此動作。下列範例顯示允許使用者執行 ListCommandExecutions
動作的 IAM政策。
在此範例中,取代:
-
, AWS 區域例如region
ap-south-1
。 -
您的 AWS 帳戶 號碼,例如account-id
。123456789012
-
使用您唯一的 AWS IoT 命令識別符,例如command-id
。LockDoor
{ "Effect": "Allow", "Action": "iot:ListCommandExecutions", "Resource": * }
列出命令執行範例
下列範例示範如何在 中列出命令執行 AWS 帳戶。
執行 命令時,您必須指定是否要篩選清單,以僅顯示使用 為特定裝置建立的命令執行targetArn
,還是使用 指定的特定命令執行commandArn
。
在此範例中,取代:
-
搭配您以執行為目標之裝置的 Amazon Resource Number (ARN),例如<target-arn>
arn:aws:iot:
。us-east-1
:123456789012
:thing/b8e4157c98f332cffb37627f
-
搭配您以執行為目標之裝置的 Amazon Resource Number (ARN),例如<target-arn>
arn:aws:iot:
。us-east-1
:123456789012
:thing/b8e4157c98f332cffb37627f
-
,以及您想要列出建立之執行的時間,例如<after>
2024-11-01T03:00
。
aws iot list-command-executions \ --target-arn
\ --started-time-filter '{after=
<target-arn>
}' \ --sort-order "ASCENDING"
<after>
執行此命令會產生回應,其中包含您建立的命令執行清單、執行開始執行的時間,以及執行完成的時間。它也提供狀態資訊,以及包含狀態額外資訊的statusReason
物件。
{ "commandExecutions": [ { "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002", "executionId": "b2b654ca-1a71-427f-9669-e74ae9d92d24", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f", "status": "TIMED_OUT", "createdAt": "2024-11-24T14:39:25.791000-08:00", "startedAt": "2024-11-24T14:39:25.791000-08:00" }, { "commandArn": "arn:aws:iot:us-east-1:123456789012:command/TestMe002", "executionId": "34bf015f-ef0f-4453-acd0-9cca2d42a48f", "targetArn": "arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f", "status": "IN_PROGRESS", "createdAt": "2024-11-24T14:05:36.021000-08:00", "startedAt": "2024-11-24T14:05:36.021000-08:00" } ] }
如需不同狀態和狀態原因的詳細資訊,請參閱 命令執行狀態。
刪除命令執行
如果您不想再使用命令執行,可以從您的帳戶永久移除它。
注意
-
命令執行只有在進入終端機狀態時,才能刪除,例如
SUCCEEDED
、FAILED
或REJECTED
。 -
此操作只能使用 AWS IoT Core API或 執行 AWS CLI。無法從 主控台使用。
使用此操作之前API,請確定您的IAM政策授權您的裝置執行這些動作。以下顯示授權您的裝置執行 動作的範例政策。
在此範例中,取代:
-
, AWS 區域例如Region
ap-south-1
。 -
使用您的 AWS 帳戶 號碼,例如AccountID
。123456789012
-
具有您要刪除執行之命令的識別符。CommandID
-
使用devices
thing
或 ,client
取決於您的裝置是否已註冊為 AWS IoT 實物,或是否指定為MQTT用戶端。 -
使用您的 AWS IoTdevice-id
thing-name
或client-id
。
{ "Effect": "Allow", "Action": [ "iot:DeleteCommandExecution" ], "Resource": [ "arn:aws:iot:
region
:account-id
:command/command-id
", "arn:aws:iot:region
:account-id
:devices
/device-id
" ] }
下列範例示範如何使用 命令刪除delete-command
AWS CLI 命令。根據您的應用程式,將
取代為您要刪除的命令執行識別符,並將 <execution-id>
取代為目標裝置的 ARN 。<target-arn>
aws iot delete-command-execution \ --execution-id
<execution-id>
\ --target-arn<target-arn>
如果API請求成功,則命令執行會產生 200 狀態碼。您可以使用 GetCommandExecution
API來驗證命令執行是否不再存在於您的帳戶中。