

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

# データ収集と処理のための状態テンプレートの操作
<a name="state-template-api-operations"></a>

**重要**  
現在、特定の AWS IoT FleetWise 機能へのアクセスはゲートされています。詳細については、「[AWS AWS IoT FleetWise でのリージョンと機能の可用性](fleetwise-regions.md)」を参照してください。

以下のセクションでは、状態テンプレートを使用してデータ収集の有効化と無効化、フェッチオペレーションの実行、車両からの状態データの処理を行う方法について説明します。

**Topics**
+ [状態テンプレートを使用して状態データ収集をアクティブ化または非アクティブ化する](start-stop-data-ingestion.md)
+ [状態テンプレートを使用して車両状態スナップショットを取得する](on-demand-operations.md)
+ [MQTT メッセージングを使用して最後の既知の状態車両データを処理する](process-last-known-state-vehicle-data.md)

# 状態テンプレートを使用して状態データ収集をアクティブ化または非アクティブ化する
<a name="start-stop-data-ingestion"></a>

**重要**  
現在、特定の AWS IoT FleetWise 機能へのアクセスはゲートされています。詳細については、「[AWS AWS IoT FleetWise でのリージョンと機能の可用性](fleetwise-regions.md)」を参照してください。

以下のセクションでは、 を使用して状態テンプレートによるデータ取り込みをアクティブ化および非アクティブ化する方法について説明します AWS CLI。

**重要**  
開始する前に、[状態テンプレート](state-templates.md)を既に作成し、そのテンプレートとその更新戦略を車両に関連付けていることを確認してください。

エッジエージェントがクラウドにシグナル更新を送信できるように、状態テンプレートをアクティブ化する必要があります。

状態テンプレートを使用してこれらのオペレーションを実行するには、まずコマンドリソースを作成し、次に車両でコマンド実行を開始します。次のセクションでは、この API を使用する方法と、データインジェストを有効または無効にする方法について説明します。

**Topics**
+ [`CreateCommand` API を使用する場合](#start-stop-ingestion-create-command)
+ [例: 状態テンプレートをアクティブ化する](#start-stop-ingestion-activate-template)
+ [例: 状態テンプレートを非アクティブ化する](#start-stop-ingestion-deactivate-template)

## `CreateCommand` API を使用する場合
<a name="start-stop-ingestion-create-command"></a>

`AWS-IoTFleetwise`「」名前空間にコマンドリソースを作成し、状態テンプレートのコマンドリソースを作成または送信するときに、次のパラメータを使用します。
+ `$stateTemplate.name` – オペレーションを実行するステートテンプレートの名前。オペレーションを実行する前に、状態テンプレートを車両に適用する必要があります。詳細については、「[AWS IoT FleetWise 状態テンプレートを車両に関連付ける](state-templates.md#apply-state-templates)」を参照してください。
+ `$stateTemplate.operation` – 状態テンプレートで実行されるオペレーション。このパラメータには、次のいずれかの値を使用します。
  + `activate` – エッジエージェントは、状態テンプレートを車両に適用したときに、`stateTemplateUpdateStrategy`指定した (変更時または定期的な) に基づいて、クラウドへのシグナル更新の送信を開始します。詳細については、「[AWS IoT FleetWise 状態テンプレートを車両に関連付ける](state-templates.md#apply-state-templates)」を参照してください。

    また、自動状態テンプレートの非アクティブ化時間を定義して、指定した期間後に更新を停止することもできます。自動非アクティブ化時間が指定されていない場合、状態テンプレートは非アクティブ化呼び出しが発行されるまで更新を送信し続けます。

    `activate` コマンドを受信するとすぐに、デバイスは更新戦略に従って状態テンプレートで指定されたシグナルを送信する必要があります。 AWS IoT FleetWise では、デバイスがアクティブ化コマンドを受信すると、送信する最初のメッセージに状態テンプレート内のすべてのシグナルのスナップショットを含めることをお勧めします。以降のメッセージは、更新戦略に従って送信する必要があります。
  + `deactivate` – エッジエージェントは、クラウドへのシグナル更新の送信を停止します。
  + `fetchSnapshot` – エッジエージェントは、状態テンプレートを車両に適用したときに`stateTemplateUpdateStrategy`指定した に関係なく、状態テンプレートで定義されたシグナルの 1 回限りのスナップショットを送信します。
+ (オプション) `$stateTemplate.deactivateAfterSeconds` – 状態テンプレートは、指定された時間後に自動的に非アクティブ化されます。このパラメータは、 パラメータの値が`$stateTemplate.operation`「アクティブ」の場合にのみ使用できます。このパラメータが指定されていない場合、またはこのパラメータの値が 0 の場合、エッジエージェントは状態テンプレートの「非アクティブ化」オペレーションを受信するまで、シグナル更新をクラウドに送信し続けます。状態テンプレートが自動的に非アクティブ化されることはありません。

  最小値: 0、最大値: 4294967295。

**注記**  
API は、既にアクティブな状態にあるテンプレートのアクティベーションリクエストに応答して成功を返します。
API は、すでに非アクティブ化状態にあるテンプレートの非アクティブ化リクエストに応答して成功を返します。
状態テンプレートに対して行った最新のリクエストは、有効になるリクエストです。たとえば、状態テンプレートを 1 時間以内に非アクティブ化するようにリクエストし、同じテンプレートを 4 時間以内に非アクティブ化するように 2 回目のリクエストを行うと、4 時間の非アクティブ化は最新のリクエストであるために有効になります。

**重要**  
検証例外は、次のいずれかのシナリオで発生する可能性があります。  
車両`ASSOCIATED`に付属していない状態テンプレートが提供されます。
状態テンプレートをアクティブ化するリクエストは行われますが、車両`DEPLOYED`にはありません。
状態テンプレートへのリクエストは行われますが、車両`DELETED`上にあります。

## 例: 状態テンプレートをアクティブ化する
<a name="start-stop-ingestion-activate-template"></a>

状態テンプレートをアクティブ化するには、まずコマンドリソースを作成します。その後、状態テンプレートをアクティブ化する車両に次のコマンドを送信できます。この例では、コマンドの作成時にパラメータのデフォルト値を指定する方法を示します。これらのパラメータとその値は、コマンド実行を開始して状態テンプレートをアクティブ化するときに使用されます。

1. 

**コマンドリソースを作成する**

   車両にコマンドを送信する前に、コマンドリソースを作成する必要があります。コマンドを車両に送信するときに、必須パラメータの代替値を指定できます。詳細については、「[コマンドリソースを作成する](create-manage-remote-command-cli.md#create-remote-command-cli)」を参照してください。
**重要**  
`$stateTemplate.name` および `$stateTemplate.operation`パラメータは、文字列データ型として指定する必要があります。他のデータ型が指定されている場合、またはこれら 2 つのパラメータのいずれかが欠落している場合、コマンドの実行は検証例外で失敗します。`$stateTemplate.deactivateAfterSeconds` パラメータは`Long`データ型として指定する必要があります。

   ```
   aws iot create-command \
       --description "This command activates a state template on a vehicle"
       --command-id ActivateStateTemplate \
       --display-name "Activate State Template" \
       --namespace AWS-IoTFleetWise \
       --mandatory-parameters '[
       {
           "name": "$stateTemplate.name",
           "defaultValue": {"S": "ST123"}
       },
       {
           "name": "$stateTemplate.operation",
           "defaultValue": {"S": "activate"}
       },
       {
           "name": "$stateTemplate.deactivateAfterSeconds",
           "defaultValue": {"L": "120"}
       } 
   ]'
   ```

1. 

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

   コマンドを作成したら、コマンドを車両に送信します。コマンドリソースの作成時に必須パラメータの値を指定しなかった場合は、今すぐ指定する必要があります。詳細については、「[コマンドを送信する (AWS CLI)](send-monitor-remote-command-cli.md#send-remote-command-cli)」を参照してください。
**重要**  
API オペレーションには、アカウント固有の AWS IoT ジョブデータプレーン API エンドポイントを使用していることを確認してください。

   ```
   aws iot-jobs-data start-command-execution \
       --endpoint-url <endpoint-url> \
       --command-arn arn:aws:iot:region:111122223333:command/ActivateStateTemplate \
       --target-arn arn:aws:iot:region:111122223333:thing/<VEHICLE_NAME>
   ```

1. 

**状態テンプレートオペレーションのステータスを取得する**

   コマンドの実行を開始したら、 `GetCommandExecution` API を使用して状態テンプレートを取得できます。

   ```
   aws iot get-command-execution --execution-id <EXECUTION_ID> 
   ```

## 例: 状態テンプレートを非アクティブ化する
<a name="start-stop-ingestion-deactivate-template"></a>

状態テンプレートを非アクティブ化するには、まずコマンドリソースを作成します。その後、状態テンプレートを非アクティブ化する車両に次のコマンドを送信できます。この例では、コマンドの作成時にパラメータのデフォルト値を指定する方法を示します。これらのパラメータとその値は、コマンド実行を開始して状態テンプレートを非アクティブ化するときに使用されます。

1. 

**コマンドリソースを作成する**

   車両にコマンドを送信する前に、コマンドリソースを作成する必要があります。コマンドを車両に送信するときに、必須パラメータの代替値を指定できます。詳細については、「[コマンドリソースを作成する](create-manage-remote-command-cli.md#create-remote-command-cli)」を参照してください。

   ```
   aws iot create-command \
       --description "This command deactivates a state template on a vehicle"
       --command-id DeactivateStateTemplate \
       --display-name "Deactivate State Template" \
       --namespace AWS-IoTFleetWise \
       --mandatory-parameters '[
       {
           "name": "$stateTemplate.name",
           "defaultValue": {"S": "ST123"}
       },
       {
           "name": "$stateTemplate.operation",
           "defaultValue": {"S": "deactivate"}
       }    
   ]'
   ```

1. 

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

   コマンドを作成したら、コマンドを車両に送信します。コマンドリソースの作成時に必須パラメータの値を指定しなかった場合は、今すぐ指定する必要があります。詳細については、「[コマンドを送信する (AWS CLI)](send-monitor-remote-command-cli.md#send-remote-command-cli)」を参照してください。

   ```
   aws iot-jobs-data start-command-execution \
       --endpoint-url <endpoint-url> \
       --command-arn arn:aws:iot:region:111122223333:command/DeactivateStateTemplate \
       --target-arn arn:aws:iot:region:111122223333:thing/<VEHICLE_NAME>
   ```

1. 

**状態テンプレートオペレーションのステータスを取得する**

   コマンドの実行を開始したら、 `GetCommandExecution` API を使用して状態テンプレートを取得できます。

   ```
   aws iot get-command-execution  --execution-id <EXECUTION_ID> 
   ```

# 状態テンプレートを使用して車両状態スナップショットを取得する
<a name="on-demand-operations"></a>

**重要**  
現在、特定の AWS IoT FleetWise 機能へのアクセスはゲートされています。詳細については、「[AWS AWS IoT FleetWise でのリージョンと機能の可用性](fleetwise-regions.md)」を参照してください。

[https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateCommand.html) AWS IoT Core コントロールプレーン API オペレーションまたは AWS IoT FleetWise コンソールを使用して、車両の最後の既知の状態を取得できます。

**重要**  
検証例外は、次のいずれかのシナリオで発生する可能性があります。  
車両`ASSOCIATED`に付属していない状態テンプレートが提供されます。
状態テンプレートをアクティブ化するリクエストは行われますが、車両`DEPLOYED`にはありません。
状態テンプレートへのリクエストは行われますが、車両`DELETED`上にあります。

## 車両状態のスナップショットを取得する (コンソール)
<a name="fetch-state-console"></a>

 AWS IoT FleetWise コンソールを使用して、車両の最後の既知の状態を取得できます。 AWS IoT FleetWise は、データを取得するためのコマンドを作成します。

**車両の状態を取得するには**

1. [AWS IoT FleetWise コンソール](https://console.aws.amazon.com/iotfleetwise)を開きます。

1. ナビゲーションペインで、**[車両]** を選択します。

1. リストから車両を選択して、詳細ページを開きます。

1. **状態テンプレート**タブで、**データの取得**を選択します。

1. コマンドを送信してデータを取得するアクセス許可を AWS IoT FleetWise に付与する IAM ロールを選択します。[「アクセスの制御](https://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/controlling-access.html#generate-command-payload)」を参照してください。

1. **取得状態**を選択します。

## 車両状態のスナップショットを取得する (AWS CLI)
<a name="fetch-state-cli"></a>

状態スナップショットを取得するには、まずコマンドリソースを作成します。その後、状態スナップショットを取得する車両に次のコマンドを送信できます。`CreateCommand` API とそのパラメータの使用の詳細については、「」を参照してください[`CreateCommand` API を使用する場合](start-stop-data-ingestion.md#start-stop-ingestion-create-command)。

1. 

**コマンドリソースを作成する**

   次の例は、フェッチオペレーションを実行するコマンドリソースを作成する方法を示しています。コマンドを車両に送信するときに、必須パラメータの代替値を指定できます。詳細については、「[コマンドリソースを作成する](create-manage-remote-command-cli.md#create-remote-command-cli)」を参照してください。

   ```
   aws iot create-command \
       --command-id <COMMAND_ID> \
       --display-name "FetchSnapshot State Template" \
       --namespace AWS-IoTFleetWise \
       --mandatory-parameters '[
         {
             "name": "$stateTemplate.name",
             "defaultValue": {"S": "ST123"}
         }, 
         {
             "name": "$stateTemplate.operation",
             "defaultValue": {"S": "fetchSnapshot"}
         }
       ]'
   ```

   レスポンス:

   ```
   { 
       "commandId": "<COMMAND_ID>",
       "commandArn": "arn:aws:iot:<REGION>:111122223333:command/<COMMAND_ID>"
   }
   ```

1. 

**コマンド実行を開始して状態スナップショットを取得する**

   コマンドを作成したら、コマンドを車両に送信します。コマンドリソースの作成時に必須パラメータの値を指定しなかった場合は、今すぐ指定する必要があります。詳細については、「[コマンドを送信する (AWS CLI)](send-monitor-remote-command-cli.md#send-remote-command-cli)」を参照してください。

   ```
   aws iot-jobs-data start-command-execution \
       --command-arn arn:aws:iot:region:111122223333:command/<COMMAND_ID> \
       --target-arn arn:aws:iot:region:111122223333:thing/<VEHICLE_NAME>
   ```

   レスポンス:

   ```
   {
       "executionId": "<UNIQUE_UUID>"
   }
   ```

1. 状態テンプレートオペレーションのステータスを取得する

   コマンドの実行を開始したら、 `GetCommandExecution` API を使用して状態テンプレートを取得できます。

   ```
   aws iot get-command-execution --execution-id <EXECUTION_ID> 
   ```

# MQTT メッセージングを使用して最後の既知の状態車両データを処理する
<a name="process-last-known-state-vehicle-data"></a>

**重要**  
現在、特定の AWS IoT FleetWise 機能へのアクセスはゲートされています。詳細については、「[AWS AWS IoT FleetWise でのリージョンと機能の可用性](fleetwise-regions.md)」を参照してください。

車両から更新を受け取り、そのデータを処理するには、次の MQTT トピックにサブスクライブします。詳細については、「*AWS IoT Core デベロッパーガイド*」の「[MQTT topics](https://docs.aws.amazon.com/iot/latest/developerguide/iot-connect-devices.html)」を参照してください。

```
$aws/iotfleetwise/vehicles/$vehicle_name/last_known_state/$state_template_name/data
```

MQTT は注文を保証しないため、最後の既知の状態シグナル更新メッセージが順序どおりに受信されない可能性があります。MQTT を使用して車両データを受信および処理するクライアントは、これを処理する必要があります。最後の既知の状態シグナル更新メッセージは、MQTT 5 メッセージングプロトコルに従います。

各 MQTT メッセージのメッセージヘッダーには、次のユーザープロパティがあります。
+ **vehicleName** – [車両の](vehicles.md)一意の識別子。
+ **stateTemplateName** – 最後の既知の[状態テンプレート](state-templates.md)の一意の識別子。

さらに、状態テンプレートを更新または作成するときに`metadataExtraDimensions`リクエストパラメータを指定することで、MQTT メッセージヘッダーに含める[車両属性](signal-catalogs.md)を指定できます。([「 状態テンプレート](state-templates.md)」を参照してください）。

MQTT メッセージヘッダーのユーザープロパティは、ペイロードを検査せずにメッセージを異なる宛先にルーティングするのに役立ちます。

MQTT メッセージペイロードには、車両から収集されたデータが含まれます。状態テンプレートを作成または更新するときに`extraDimensions`リクエストパラメータを指定することで、MQTT メッセージペイロードに含める車両属性を指定できます (「」を参照[AWS IoT FleetWise 状態テンプレートを作成する](state-templates.md))。追加のディメンションは、追加のディメンションを関連付けることで、車両から収集されたデータを強化します。

MQTT メッセージペイロードはプロトコルバッファ (Protobuf) でエンコードされ、MQTT メッセージヘッダーには application/octet-stream として定義されたコンテンツタイプインジケータが含まれています。Protobuf エンコーディングスキーマは次のとおりです。

```
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

syntax = "proto3";

option java_package = "com.amazonaws.iot.autobahn.schemas.lastknownstate";
package Aws.IoTFleetWise.Schemas.CustomerMessage;

message LastKnownState {

  /*
   * The absolute timestamp in milliseconds since Unix Epoch of when the event was triggered in vehicle.
   */
  uint64 time_ms = 1;

  /*
   * This field is deprecated, use signals instead
   */
  repeated Signal signal = 2 [ deprecated = true ];

  repeated Signal signals = 3;

  repeated ExtraDimension extra_dimensions = 4;
}

message Signal {

  /*
   * The Fully Qualified Name of the signal is the path to the signal plus the signal's name.
   * For example, Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringState
   * The fully qualified name can have up to 150 characters. Valid characters: a-z, A-Z, 0-9, : (colon), and _ (underscore).
   */
  string name = 1;

  /*
   * The FWE reported signal value can be one of the following data types.
   */
  oneof SignalValue {
    double double_value = 2;

    bool boolean_value = 3;

    sint32 int8_value = 4;

    uint32 uint8_value = 5;

    sint32 int16_value = 6;

    uint32 uint16_value = 7;

    sint32 int32_value = 8;

    uint32 uint32_value = 9;

    sint64 int64_value = 10;

    uint64 uint64_value = 11;

    float float_value = 12;
    /*
     * An UTF-8 encoded or 7-bit ASCII string
     */
    string string_value = 13;
  }
}

message ExtraDimension {
  /*
   * The Fully Qualified Name of the attribute is the path to the attribute plus the attribute's name.
   * For example, Vehicle.Model.Color
   * The fully qualified name can have up to 150 characters. Valid characters: a-z, A-Z, 0-9, : (colon), and _ (underscore).
   */
  string name = 1;

  oneof ExtraDimensionValue {
    /*
     * An UTF-8 encoded or 7-bit ASCII string
     */
    string string_value = 2;
  }
}
```

コードの説明は以下のとおりです。
+ `time_ms`:

  車両でイベントがトリガーされたときの絶対タイムスタンプ (Unix エポックからのミリ秒単位）。Edge Agent ソフトウェアは、このタイムスタンプのために車両のクロックで を使用します。
+ `signal`:

  シグナル情報`Signal`を含む の配列: `name` (文字列) および `signalValue`は、、`double`、、`bool`、、`int8``uint8`、`int16`、`uint16`、、`int32``uint32``int64``uint64``float`、、 のデータ型をサポートします`string`。
+ `extra_dimensions`:

  車両属性情報`ExtraDimensions`を含む の配列: `name` (文字列) で`extraDimensionValue`、現在 `string` データ型のみをサポートしています。