

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

# 車両とコマンド
<a name="remote-command-vehicles"></a>

**重要**  
現在、特定の AWS IoT FleetWise 機能へのアクセスはゲートされています。詳細については、「[AWS AWS IoT FleetWise でのリージョンと機能の可用性](fleetwise-regions.md)」を参照してください。  
お客様は、安全かつ適用法に準拠した方法でコマンドをデプロイすることに全責任を負います。

コマンド機能を使用するには:

1. まず、コマンドリソースを作成します。必要に応じて、コマンドの実行に必要な情報を含むパラメータを指定します。

1. コマンドを受け取り、指定されたアクションを実行するターゲット車両を指定します。

1. これで、ターゲットデバイスで コマンドを実行し、コマンド実行の詳細を確認してステータスを取得し、CloudWatch ログを使用して問題のトラブルシューティングをさらに行うことができます。

以下のセクションでは、車両とコマンド間のワークフローを示します。

**Topics**
+ [ワークフローの概要](#remote-command-vehicles-overview)
+ [車両ワークフロー](#iot-remote-command-devices-workflow)
+ [コマンドワークフロー](#iot-remote-command-commands-workflow)
+ [(オプション) コマンド通知](#remote-command-notifications)

## ワークフローの概要
<a name="remote-command-vehicles-overview"></a>

次の手順では、車両とコマンド間のコマンドワークフローの概要を示します。コマンド HTTP API オペレーションのいずれかを使用すると、リクエストは Sigv4 認証情報を使用して署名されます。

**注記**  
`StartCommandExecution` API オペレーションを除き、HTTP プロトコルで実行されるすべてのオペレーションはコントロールプレーンエンドポイントを使用します。

1. 

**MQTT 接続を確立し、コマンドトピックをサブスクライブする**

   コマンドワークフローを準備するには、デバイスは`iot:Data-ATS`エンドポイントとの MQTT 接続を確立し、上記のコマンドリクエストトピックをサブスクライブする必要があります。オプションで、デバイスは受け入れられた応答トピックと拒否された応答トピックをサブスクライブすることもできます。

1. 

**車両モデルとコマンドリソースを作成する**

   および `CreateCommand`コントロールプレーン API オペレーションを使用して、車両`CreateVehicle`とコマンドリソースを作成できるようになりました。コマンドリソースには、車両でコマンドが実行されたときに適用される設定が含まれています。

1. 

**ターゲットデバイスでコマンド実行を開始する**

   アカウント固有の`iot:Jobs`エンドポイントで`StartCommandExecution`データプレーン API を使用して、車両でコマンド実行を開始します。API は、protobuf エンコードされたペイロードメッセージをコマンドリクエストトピックに発行します。

1. 

**コマンド実行の結果を更新する**

   車両はコマンドと受信したペイロードを処理し、`UpdateCommandExecution`API を使用してコマンド実行の結果をレスポンストピックに発行します。車両が応答トピックを受け入れたコマンドと拒否したコマンドをサブスクライブしている場合、応答がクラウドサービスによって受け入れられたか拒否されたかを示すメッセージが表示されます。

1. 

**(オプション) コマンド実行結果を取得する**

   コマンド実行の結果を取得するには、`GetCommandExecution`コントロールプレーン API オペレーションを使用できます。車両がコマンド実行結果をレスポンストピックに発行すると、この API は更新された情報を返します。

1. 

**(オプション) コマンドイベントのサブスクライブと管理**

   コマンド実行ステータスの更新に関する通知を受け取るには、 コマンドイベントトピックをサブスクライブします。その後、`CreateTopicRule`コントロールプレーン API を使用して、コマンドイベントデータを AWS Lambda 関数や Amazon SQS などの他のアプリケーションにルーティングし、その上にアプリケーションを構築できます。

## 車両ワークフロー
<a name="iot-remote-command-devices-workflow"></a>

次の手順では、 コマンド機能を使用する際の車両のワークフローについて詳しく説明します。

**注記**  
このセクションで説明するオペレーションでは、MQTT プロトコルを使用します。

1. 

**MQTT 接続を確立する**

   コマンド機能を使用するように車両を準備するには、まず AWS IoT Core メッセージブローカーに接続する必要があります。車両は、 メッセージブローカーに接続 AWS IoT Core して MQTT 接続を確立する `iot:Connect`アクションを実行することを許可されている必要があります。のデータプレーンエンドポイントを検索するには AWS アカウント、次に示すように `DescribeEndpoint` API または `describe-endpoint` CLI コマンドを使用します。

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   このコマンドを実行すると、以下に示すように、アカウント固有のデータプレーンエンドポイントが返されます。

   ```
   account-specific-prefix.iot.region.amazonaws.com
   ```

1. 

**Susbcribe to commands リクエストトピック**

   接続が確立されると、デバイスは AWS IoT コマンド MQTT リクエストトピックにサブスクライブできます。コマンドを作成してターゲットデバイスでコマンド実行を開始すると、メッセージブローカーによって protobuf エンコードされたペイロードメッセージがリクエストトピックに発行されます。その後、デバイスはペイロードメッセージを受信し、コマンドを処理することができます。この例では、 をターゲット車両の一意の識別子*`<DeviceID>`*に置き換えます。この ID は、車両の一意の識別子またはモノの名前にすることができます。
**注記**  
デバイスに送信するペイロードメッセージは、protobuf 形式を使用する必要があります。

   ```
   $aws/commands/things/<DeviceID>/executions/+/request/protobuf
   ```

1. 

**(オプション) コマンドレスポンストピックをサブスクライブする**

   必要に応じて、これらのコマンドレスポンストピックをサブスクライブして、クラウドサービスがデバイスからのレスポンスを承諾したか拒否したかを示すメッセージを受信できます。
**注記**  
車両が `/accepted`および `/rejected`レスポンストピックをサブスクライブすることはオプションです。車両は、これらのトピックに明示的にサブスクライブしていない場合でも、これらのレスポンスメッセージを自動的に受信します。

   ```
   $aws/commands/things/<DeviceID>/executions/<ExecutionId>/response/protobuf/accepted
   $aws/commands/things/<DeviceID>/executions/<ExecutionId>/response/protobuf/rejected
   ```

1. 

**コマンド実行の結果を更新する**

   その後、ターゲット車両は コマンドを処理します。次に、 `UpdateCommandExecution` API を使用して、実行の結果を次の MQTT レスポンストピックに発行します。
**注記**  
特定の車両とコマンドの実行の場合、*<DeviceID>* は、デバイスがサブスクライブしたリクエストトピックの対応するフィールドと一致する必要があります。

   ```
   $aws/commands/things/<DeviceID>/executions/<ExecutionId>/response/protobuf
   ```

   `UpdateCommandExecution` API は、TLS で認証された MQTT に対するデータプレーン API オペレーションです。
   + クラウドサービスがコマンド実行結果を正常に処理すると、MQTT が承諾したトピックにメッセージが発行されます。受け入れられたトピックは次の形式を使用します。

     ```
     $aws/commands/things/<DeviceID>/executions/<ExecutionId>/response/protobuf/accepted
     ```
   + クラウドサービスがコマンド実行結果を処理できなかった場合、MQTT 拒否トピックにレスポンスが発行されます。拒否されたトピックは次の形式を使用します。

     ```
     $aws/commands/things/<DeviceID>/executions/<ExecutionId>/response/protobuf/rejected
     ```

   この API の詳細と例については、「」を参照してください[コマンド実行結果を更新する](send-monitor-remote-command-cli.md#update-remote-command-execution-cli)。

## コマンドワークフロー
<a name="iot-remote-command-commands-workflow"></a>

次の手順では、コマンドワークフローについて詳しく説明します。

**注記**  
このセクションで説明するオペレーションでは、HTTP プロトコルを使用します。

1. 

**車両を登録する**

   これで、 コマンド機能を使用するように車両を準備できたので、車両を登録し、車両に送信されるコマンドを作成することで、アプリケーションを準備できます。車両を登録するには、[https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_CreateVehicle.html](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_CreateVehicle.html)コントロールプレーン API オペレーションを使用して車両モデル (モデルマニフェスト) のインスタンスを作成します。詳細と例については、[「車両の作成](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/create-vehicle.html)」を参照してください。

1. 

**コマンドを作成する**

   HTTP コントロールプレーン API [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html) オペレーションを使用して、ターゲットとする車両に適用されるコマンドをモデル化します。コマンドの実行時に使用するパラメータとデフォルト値を指定し、必ず `AWS-IoT-FleetWise`名前空間を使用してください。この API の使用に関する詳細と例については、「」を参照してください[コマンドリソースを作成する](create-manage-remote-command-cli.md#create-remote-command-cli)。

1. 

**コマンド実行を開始する**

   [https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_StartCommandExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_iotdata_StartCommandExecution.html) データプレーン API オペレーションを使用して、車両で作成したコマンドを実行できるようになりました。 AWS IoT Device Management はコマンドとコマンドパラメータを取得し、受信リクエストを検証します。次に、必要なパラメータを使用して AWS IoT FleetWise API を呼び出し、車両固有のペイロードを生成します。その後、ペイロードは MQTT AWS IoT Device Management 経由でデバイスがサブスクライブしたコマンドリクエストトピックにデバイスに送信されます。この API の使用に関する詳細と例については、「」を参照してください[コマンドを送信する (AWS CLI)](send-monitor-remote-command-cli.md#send-remote-command-cli)。

   ```
   $aws/commands/things/<DeviceID>/executions/+/request/protobuf
   ```
**注記**  
コマンドがクラウドから送信され、MQTT 永続セッションが使用中のときにデバイスがオフラインだった場合、コマンドはメッセージブローカーで待機します。デバイスがタイムアウト時間前にオンラインに戻り、コマンドリクエストトピックをサブスクライブしている場合、デバイスはコマンドを処理し、結果をレスポンストピックに発行できます。タイムアウト時間前にデバイスがオンラインに戻らない場合、コマンドの実行はタイムアウトし、ペイロードメッセージは期限切れになります。

1. 

**コマンド実行を取得する**

   デバイスで コマンドを実行したら、[https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommandExecution.html](https://docs.aws.amazon.com/iot/latest/apireference/API_GetCommandExecution.html)コントロールプレーン API オペレーションを使用して、コマンド実行の結果を取得してモニタリングします。API を使用して、最後に更新された日時、実行が完了した日時、指定されたパラメータなど、実行データに関する追加情報を取得することもできます。
**注記**  
最新のステータス情報を取得するには、デバイスがコマンド実行結果をレスポンストピックに公開している必要があります。

   この API の詳細と使用例については、「」を参照してください[コマンド実行の取得](send-monitor-remote-command-cli.md#get-remote-command-execution-cli)。

## (オプション) コマンド通知
<a name="remote-command-notifications"></a>

コマンドイベントにサブスクライブして、コマンド実行のステータスが変更されたときに通知を受け取ることができます。次の手順は、コマンドイベントにサブスクライブして処理する方法を示しています。

1. 

**トピックルールを作成する**

   コマンドイベントトピックにサブスクライブして、コマンド実行のステータスが変更されたときに通知を受け取ることができます。トピックルールを作成して、車両によって処理されたデータを AWS Lambda 関数などの他のアプリケーションにルーティングすることもできます。トピックルールは、 AWS IoT コンソールまたは[https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRule.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRule.html) AWS IoT Core コントロールプレーン API オペレーションを使用して作成できます。詳細については、[「Creating and AWS IoT rule](https://docs.aws.amazon.com/iot/latest/developerguide/iot-create-rule.html)」を参照してください。

   この例では、`<CommandID>` を通知を受信するコマンドの識別子に置き換え、`<CommandExecutionStatus>` をコマンド実行のステータスに置き換えます。

   ```
   $aws/events/commandExecution/<CommandID>/<CommandExecutionStatus>
   ```
**注記**  
すべてのコマンドとコマンド実行ステータスの通知を受け取るには、ワイルドカード文字を使用し、次のトピックにサブスクライブします。

   ```
   $aws/events/commandExecution/+/#
   ```

1. 

**コマンドイベントを受信して処理する**

   前のステップでコマンドイベントをサブスクライブするトピックルールを作成した場合は、受信したコマンドプッシュ通知を管理できます。オプションで、作成したトピックルールを使用して、Amazon SQS AWS Lambda、Amazon SNS、 AWS Step Functions などのアプリケーションを構築することもできます。

次のコードは、受信するコマンドイベント通知のサンプルペイロードを示しています。

```
{
    "executionId": "2bd65c51-4cfd-49e4-9310-d5cbfdbc8554",
    "status":"FAILED",
    "statusReason": {
         "reasonCode": "4",
         "reasonDescription": ""
    },
    "eventType": "COMMAND_EXECUTION",
    "commandArn":"arn:aws:iot:us-east-1:123456789012:command/0b9d9ddf-e873-43a9-8e2c-9fe004a90086",
    "targetArn":"arn:aws:iot:us-east-1:123456789012:thing/5006c3fc-de96-4def-8427-7eee36c6f2bd",
    "timestamp":1717708862107
}
```