本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
啟動和監控命令執行
重要
某些 AWS IoT FleetWise 功能的存取目前受到鎖定。如需詳細資訊,請參閱AWSAWS IoT FleetWise 中的區域和功能可用性。
建立命令資源後,您可以在目標車輛上啟動命令執行。車輛開始執行命令後,即可開始更新命令執行的結果,並將狀態更新和結果資訊發佈至MQTT預留主題。然後,您可以擷取命令執行的狀態,並監控您帳戶中的執行狀態。
本主題說明如何使用 將命令傳送至車輛 AWS CLI。它也說明如何監控和更新命令執行的狀態。
傳送遠端命令
您可以使用StartCommandExecution
AWS IoT 資料平面API操作將命令傳送至車輛。接著,車輛會將命令轉送至汽車中介軟體服務 (例如 SOME/IP (透過 IP 的可擴展服務導向中介軟體)),或將其發佈至車輛網路 (例如控制器區域網路 (CAN) 裝置介面)。下列為使用 AWS CLI的範例。
傳送遠端命令時的考量事項
當您在 中啟動命令執行時 AWS IoT FleetWise:
-
您必須為車輛佈建 AWS IoT 物件。如需詳細資訊,請參閱Provision AWS IoT FleetWise 車輛。
-
您必須已使用 建立 命令
AWS-IoT-FleetWise
做為命名空間role-Arn
,並提供 授予您在 AWS IoT FleetWise 中建立和執行命令的許可。如需詳細資訊,請參閱建立命令資源。 -
如果您選擇在建立命令時使用任何為參數指定的預設值,則可以略過
parameters
欄位。如果mandatory-parameters
未在建立時指定 ,或者如果您想要透過為參數指定自己的值來覆寫任何預設值,則必須指定parameters
欄位。如需這些其他範例,請參閱 遠端命令使用案例。 -
您可以為
mandatory-parameters
欄位指定最多三個名稱值對。不過,在車輛上執行 命令時,只接受一個名稱/值對,而name
欄位必須使用完整名稱與$actuatorPath.
字首。
取得帳戶特定的資料平面端點
執行 API命令之前,您必須取得URL端點的帳戶特定iot:Jobs
端點。例如,如果您執行此命令:
aws iot describe-endpoint --endpoint-type iot:Jobs
它會傳回帳戶特定的端點,URL如以下範例回應所示。
{ "endpointAddress": "
<account-specific-prefix>
.jobs.iot.<region>
.amazonaws.com" }
傳送遠端命令範例
若要將遠端命令傳送至車輛,請執行下列命令。
-
針對您要執行的命令
command-arn
,將 取代ARN為 。您可以從create-command
CLI命令的回應取得此資訊。 -
target-arn
將 取代ARN為您要執行命令的目標裝置或 AWS IoT 物件。注意
您可以指定 AWS IoT 物件ARN的目標 (AWS IoT FleetWise 車輛)。目前不支援物件群組和機群。
-
endpoint-url
以您在 中取得的帳戶特定端點取代 取得帳戶特定的資料平面端點,字首為https://
,例如https://
。123456789012abcd
.jobs.iot.ap-south-1
.amazonaws.com -
value
將name
和 取代為您使用create-command
建立命令時指定的mandatory-parameters
欄位CLI。name
欄位是訊號目錄中定義的完整名稱,字首$actuatorPath.
為 。例如,name
可以是$actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode
,value
也可以是 布林值,指出轉向模式狀態,例如{"B": false}
。 -
(選用) 您也可以指定其他參數
executionTimeoutSeconds
。此選用欄位指定裝置必須以執行結果回應的時間,以秒為單位。您可以將逾時設定為最大值 24 小時。建立命令執行後,計時器便會啟動。在計時器過期之前,如果命令執行狀態未變更為使其成為終端機的狀態,例如
SUCCEEDED
或FAILED
,則狀態會自動變更為TIMED_OUT
。注意
裝置也可以報告
TIMED_OUT
狀態,或將此狀態覆寫為 狀態FAILED
,例如SUCCEEDED
、 或REJECTED
,且命令執行會變成終端機。如需詳細資訊,請參閱命令執行逾時狀態。
aws iot-jobs-data start-command-execution \ --command-arn
command-arn
\ --target-arntarget-arn
\ --execution-timeout-seconds30
\ --endpoint-urlendpoint-url
\ --parameters '[ { "name":name
, "value":value
} ]'
StartCommandExecution
API 操作會傳回命令執行 ID。您可以使用此 ID 來查詢命令執行狀態、詳細資訊和命令執行歷史記錄。
{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542" }
在您執行 命令之後,您的裝置將收到包含下列資訊的通知。issued_timestamp_ms
欄位對應至StartCommandExecution
API叫用 的時間。timeout_ms
對應至叫用 時使用 executionTimeoutSeconds
參數設定的逾時值StartCommandExecution
API。
timeout_ms:
9000000
issued_timestamp_ms:1723847831317
更新命令執行結果
若要更新命令執行的狀態,您的裝置必須已建立MQTT連線並訂閱下列命令請求主題。
在此範例中,將 取代
為目標裝置的唯一識別符,可以是 <device-id>
VehicleId
或物件名稱,並將
取代為命令執行的識別符。<execution-id>
注意
-
承載必須使用 protobuf 格式。
-
您的裝置可選擇性地訂閱
/accepted
和/rejected
回應主題。即使您的裝置尚未明確訂閱,也會收到這些回應訊息。
// Request topic $aws/devices/
<DeviceID>
/command_executions/+/request/protobuf // Response topics (Optional) $aws/devices/<DeviceID>
/command_executions/<ExecutionId>
/response/accepted/protobuf $aws/devices/<DeviceID>
/command_executions/<ExecutionId>
/response/rejected/protobuf
您的裝置可以將訊息發佈至命令回應主題。處理 命令後,它會傳送 protobuf 編碼回應至此主題。<DeviceID>
欄位必須符合請求主題中的對應欄位。
$aws/devices/
<DeviceID>
/command_executions/<ExecutionId>
/response/<PayloadFormat>
裝置發佈對本主題的回應後,您可以使用 GetCommandExecution
擷取更新的狀態資訊API。命令執行的狀態可以是此處列出的任何項目。
-
IN_PROGRESS
-
SUCCEEDED
-
FAILED
-
REJECTED
-
TIMED_OUT
請注意,任何狀態中的命令執行 SUCCEEDED
、 FAILED
和 REJECTED
為終端機,且狀態是由裝置回報。當命令執行為終端機時,這表示不會對其狀態或相關欄位進行進一步更新。裝置或雲端可能會報告TIMED_OUT
狀態。如果雲端回報,裝置稍後可能會更新狀態原因欄位。
例如,以下顯示 裝置發佈的範例MQTT訊息。
注意
針對命令執行狀態,如果您的裝置使用 statusReason
物件來發佈狀態資訊,您必須確定:
-
reasonCode
使用 模式[A-Z0-9_-]+
,長度不超過 64 個字元。 -
長度
reasonDescription
不超過 1,024 個字元。它可以使用控制字元以外的任何字元,例如新行。
{ "deviceId": "", "executionId": "", "status": "CREATED", "statusReason": { "reasonCode": "", "reasonDescription": "" } }
如需示範如何使用 AWS IoT Core MQTT測試用戶端訂閱主題並查看命令執行訊息的範例,請參閱 AWS IoT Core 開發人員指南中的使用MQTT測試用戶端檢視命令更新。
取得遠端命令執行
您可以使用GetCommandExecution
AWS IoT 控制平面API操作來擷取命令執行的相關資訊。您必須已使用 StartCommandExecution
API操作執行此命令。
若要擷取已執行命令的中繼資料,請執行下列命令。
-
execution-id
將 取代為 命令的 ID。您可以從start-command-execution
CLI命令的回應取得此資訊。 -
target-arn
將 取代ARN為您要執行命令的目標車輛或 AWS IoT 物件。
aws iot get-command-execution --execution-id
execution-id
\ --target-arntarget-arn
GetCommandExecution
API 操作會傳回回應,其中包含命令執行ARN的 、執行狀態,以及命令開始執行的時間和完成時間的相關資訊。下列程式碼顯示請求的範例回應API。
為了提供每個命令執行狀態的其他內容,命令功能會提供 statusReason
物件。物件包含兩個欄位 reasonCode
和 reasonDescription
。使用這些欄位,您的裝置可以提供有關命令執行狀態的其他資訊。此資訊會覆寫任何預設 reasonDescription
reasonCode
和從雲端回報的 。
若要報告此資訊,您的裝置可以將更新的狀態資訊發佈至雲端。然後,當您使用 GetCommandExecution
擷取命令執行狀態時API,您會看到最新的狀態碼。
注意
執行回應中的 completedAt
欄位對應至裝置向雲端回報終端機狀態的時間。在TIMED_OUT
狀態的情況下,只有在裝置回報 A 逾時時,才會設定此欄位。狀態由雲端設定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/myFrontDoor", "status": "SUCCEEDED", "statusReason": { "reasonCode": "65536", "reasonDescription": "SUCCESS" }, "createdAt": "2024-03-23T00:50:10.095000-07:00", "completedAt": "2024-03-23T00:50:10.095000-07:00", "Parameters": '{ "$actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode": { "B": true } }' }
列出您帳戶中的命令執行
使用ListCommandExecutions
AWS IoT Core 控制平面HTTPAPI操作列出您帳戶中的所有命令執行。此範例使用 AWS CLI。
列出命令執行時的考量
以下是使用 ListCommandExecutions
時的一些考量API。
-
您必須
commandArn
根據要列出特定命令targetArn
或目標車輛的執行,至少指定 或 。API 請求不能為空,且不能包含相同請求中的兩個欄位。 -
您必須僅提供
startedTimeFilter
或completedTimeFilter
資訊。API 請求不能為空,且不能包含相同請求中的兩個欄位。您可以使用 物件的before
和after
欄位,列出在特定時間範圍內建立或完成的命令執行。 -
before
和after
欄位不得大於目前時間。根據預設,如果您未指定任何值,before
欄位是目前時間,after
欄位是目前時間 - 6 個月。也就是說,根據您使用的篩選條件, API會列出過去六個月內建立或完成的所有執行。 -
您可以使用
sort-order
參數來指定是否要以遞增順序列出執行。根據預設,如果您未指定此欄位,則執行會以遞減順序列出。 -
當列出命令 的命令執行時,您無法根據命令執行的狀態來篩選命令執行ARN。
列出命令執行範例
下列範例示範如何在 中列出命令執行 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
。
下列範例示範如何使用 命令刪除delete-command-execution
AWS CLI 命令執行。
將 取代為您要刪除之命令執行的識別符。<execution-id>
aws iot delete-command-execution --execution-id
<execution-id>
如果API請求成功,則命令執行會產生 200 的狀態碼。您可以使用 GetCommandExecution
API來驗證命令執行是否不再存在於您的帳戶中。