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