コマンド実行の開始とモニタリング - AWS IoT FleetWise

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

コマンド実行の開始とモニタリング

重要

現在、特定の 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-arn target-arn \ --execution-timeout-seconds 30 \ --endpoint-url endpoint-url \ --parameters '[ { "name": name, "value": value } ]'

StartCommandExecution API オペレーションはコマンド実行 ID を返します。この ID を使用して、コマンド実行ステータス、詳細、コマンド実行履歴をクエリできます。

{ "executionId": "07e4b780-7eca-4ffd-b772-b76358da5542" }

コマンドを実行すると、デバイスに次の情報を含む通知が送信されます。issued_timestamp_ms フィールドは、 StartCommandExecution API が呼び出された時刻に対応します。は、 を呼び出すときに executionTimeoutSecondsパラメータを使用して設定されたタイムアウト値timeout_msに対応しますStartCommandExecutionAPI。

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-arn target-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を使用します。

コマンド実行を一覧表示する際の考慮事項

を使用する際の考慮事項を以下に示しますListCommandExecutionsAPI。

  • 特定のコマンドtargetArnまたはターゲット車両の実行を一覧表示するかどうかcommandArnに応じて、少なくとも または を指定する必要があります。API リクエストを空にすることはできません。また、同じリクエストに両方のフィールドを含めることはできません。

  • startedTimeFilter または completedTimeFilter情報のみを指定する必要があります。API リクエストを空にすることはできません。また、同じリクエストに両方のフィールドを含めることはできません。オブジェクトの beforeおよび afterフィールドを使用して、特定の期間内に作成または完了したコマンド実行を一覧表示できます。

  • フィールドbeforeafterフィールドの両方を現在の時刻より大きくすることはできません。デフォルトでは、値を指定しない場合、 beforeフィールドは現在の時刻、 afterフィールドは現在の時刻 - 6 か月です。つまり、使用するフィルターに応じて、 APIは過去 6 か月以内に作成または完了したすべての実行を一覧表示します。

  • sort-order パラメータを使用して、実行を昇順で一覧表示するかどうかを指定できます。デフォルトでは、このフィールドを指定しない場合、実行は降順で表示されます。

  • コマンド のコマンド実行を一覧表示するときに、ステータスに基づいてコマンド実行をフィルタリングすることはできませんARN。

コマンド実行の一覧表示の例

次の例は、 でコマンド実行を一覧表示する方法を示しています AWS アカウント。

コマンドを実行するときは、 を使用して特定のデバイス用に作成されたコマンド実行のみを表示するようにリストをフィルタリングするかtargetArn、 を使用して指定された特定のコマンドの実行を表示するようにフィルタリングするかを指定する必要がありますcommandArn

この例では、次のように置き換えます。

  • <target-arn> など、実行をターゲットとするデバイスの Amazon リソースナンバー (ARN) を持つ arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f

  • <target-arn> など、実行をターゲットとするデバイスの Amazon リソースナンバー (ARN) を持つ arn:aws:iot:us-east-1:123456789012:thing/b8e4157c98f332cffb37627f

  • <after> を、作成された実行を一覧表示する時間に置き換えます。たとえば、 です2024-11-01T03:00

aws iot list-command-executions \ --target-arn <target-arn> \ --started-time-filter '{after=<after>}' \ --sort-order "ASCENDING"

このコマンドを実行すると、作成したコマンド実行のリスト、実行が開始された時刻、完了した時刻を含むレスポンスが生成されます。また、ステータス情報と、ステータスに関する追加情報を含む 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 が生成されます。を使用してGetCommandExecutionAPI、コマンド実行がアカウントに存在しなくなったことを確認できます。