翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
コマンド実行の開始とモニタリング
重要
現在、特定の 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
として を使用してコマンドを作成し、 AWS IoT FleetWise でコマンドを作成および実行するアクセス許可を付与role-Arn
する を指定しておく必要があります。詳細については、「コマンドリソースを作成する」を参照してください。 -
コマンドの作成時にパラメータに指定されたデフォルト値を使用する場合は、
parameters
フィールドをスキップできます。が作成時に指定mandatory-parameters
されていない場合、またはパラメータに独自の値を指定してデフォルト値を上書きする場合は、parameters
フィールドを指定する必要があります。これらの追加の例については、「」を参照してくださいリモートコマンドの使用シナリオ。 -
mandatory-parameters
フィールドには、最大 3 つの名前と値のペアを指定できます。ただし、車両で コマンドを実行する場合、名前と値のペアは 1 つだけ受け入れられ、name
フィールドは$actuatorPath.
プレフィックスで完全修飾名を使用する必要があります。
アカウント固有のデータプレーンエンドポイントを取得する
API コマンドを実行する前に、エンドポイントのアカウント固有のURLiot:Jobs
エンドポイントを取得する必要があります。たとえば、次のコマンドを実行するとします。
aws iot describe-endpoint --endpoint-type iot:Jobs
以下のレスポンス例URLに示すように、アカウント固有のエンドポイントが返されます。
{ "endpointAddress": "
<account-specific-prefix>
.jobs.iot.<region>
.amazonaws.com" }
リモートコマンドの送信例
リモートコマンドを車両に送信するには、次のコマンドを実行します。
-
を実行するコマンドARNの を
command-arn
に置き換えます。この情報は、create-command
CLI コマンドのレスポンスから取得できます。 -
ARN を、コマンドを実行するターゲットデバイスまたは AWS IoT モノの
target-arn
に置き換えます。注記
AWS IoT モノ (AWS IoT FleetWise 車両) ARNのターゲットを指定できます。モノのグループとフリートは現在サポートされていません。
-
を、 で取得したアカウント固有のエンドポイント
endpoint-url
に置き換えます。たとえばアカウント固有のデータプレーンエンドポイントを取得する、 のプレフィックスhttps://
を付けますhttps://
。123456789012abcd
.jobs.iot.ap-south-1
.amazonaws.com -
name
と を、 を使用してコマンドを作成したときに指定したcreate-command
mandatory-parameters
フィールドvalue
に置き換えますCLI。name
フィールドは、シグナルカタログで定義されている完全修飾名で、プレフィックス$actuatorPath.
として を使用します。例えば、name
は$actuatorPath.Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringMode
にすることができ、 は のようなステアリングモードのステータスを示すブール値にvalue
することができます{"B": false}
。 -
(オプション) 追加のパラメータ を指定することもできます
executionTimeoutSeconds
。このオプションのフィールドは、デバイスが実行結果で応答する必要がある時間を秒単位で指定します。タイムアウトは、最大値の 24 時間に設定できます。コマンド実行が作成されると、タイマーが開始されます。タイマーが期限切れになる前に、コマンドの実行ステータスが
SUCCEEDED
や などのターミナルにするステータスに変わらない場合FAILED
、ステータスは自動的に に変わりますTIMED_OUT
。注記
デバイスは、
TIMED_OUT
ステータスを報告したり、このステータスをSUCCEEDED
、、FAILED
などのステータスに上書き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 が呼び出された時刻に対応します。は、 を呼び出すときに executionTimeoutSeconds
パラメータを使用して設定されたタイムアウト値timeout_ms
に対応します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 オペレーションを使用してこのコマンドをすでに実行している必要があります。
実行されたコマンドのメタデータを取得するには、次のコマンドを実行します。
-
を コマンドの ID
execution-id
に置き換えます。この情報は、start-command-execution
CLI コマンドのレスポンスから取得できます。 -
ARN を、コマンドを実行するターゲット車両または AWS IoT モノの
target-arn
に置き換えます。
aws iot get-command-execution --execution-id
execution-id
\ --target-arntarget-arn
GetCommandExecution
API オペレーションは、コマンド実行ARNの 、実行ステータス、コマンドの実行が開始された時刻と完了した時刻に関する情報を含むレスポンスを返します。次のコードは、APIリクエストからのレスポンスの例を示しています。
各コマンド実行のステータスに関する追加のコンテキストを提供するために、 コマンド機能は statusReason
オブジェクトを提供します。オブジェクトには、 reasonCode
と の 2 つのフィールドが含まれていますreasonDescription
。これらのフィールドを使用すると、デバイスはコマンド実行のステータスに関する追加情報を提供できます。この情報は、クラウドから報告されたデフォルト reasonCode
および reasonDescription
を上書きします。
この情報を報告するために、デバイスは更新されたステータス情報をクラウドに発行できます。次に、 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。
-
特定のコマンド
targetArn
またはターゲット車両の実行を一覧表示するかどうかcommandArn
に応じて、少なくとも または を指定する必要があります。API リクエストを空にすることはできません。また、同じリクエストに両方のフィールドを含めることはできません。 -
startedTimeFilter
またはcompletedTimeFilter
情報のみを指定する必要があります。API リクエストを空にすることはできません。また、同じリクエストに両方のフィールドを含めることはできません。オブジェクトのbefore
およびafter
フィールドを使用して、特定の期間内に作成または完了したコマンド実行を一覧表示できます。 -
フィールド
before
とafter
フィールドの両方を現在の時刻より大きくすることはできません。デフォルトでは、値を指定しない場合、before
フィールドは現在の時刻、after
フィールドは現在の時刻 - 6 か月です。つまり、使用するフィルターに応じて、 APIは過去 6 か月以内に作成または完了したすべての実行を一覧表示します。 -
sort-order
パラメータを使用して、実行を昇順で一覧表示するかどうかを指定できます。デフォルトでは、このフィールドを指定しない場合、実行は降順で表示されます。 -
コマンド のコマンド実行を一覧表示するときに、ステータスに基づいてコマンド実行をフィルタリングすることはできませんARN。
コマンド実行の一覧表示の例
次の例は、 でコマンド実行を一覧表示する方法を示しています AWS アカウント。
コマンドを実行するときは、 を使用して特定のデバイス用に作成されたコマンド実行のみを表示するようにリストをフィルタリングするかtargetArn
、 を使用して指定された特定のコマンドの実行を表示するようにフィルタリングするかを指定する必要がありますcommandArn
。
この例では、次のように置き換えます。
-
など、実行をターゲットとするデバイスの Amazon リソースナンバー (ARN) を持つ<target-arn>
arn:aws:iot:
。us-east-1
:123456789012
:thing/b8e4157c98f332cffb37627f
-
など、実行をターゲットとするデバイスの Amazon リソースナンバー (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、コマンド実行がアカウントに存在しなくなったことを確認できます。