

AWS IoT FleetWise は、2026 年 4 月 30 日をもって新規顧客に公開されなくなります。既存の AWS IoT FleetWise のお客様は、このサービスを引き続き使用できます。[の「接続モビリティのガイダンス AWS](https://aws.amazon.com/solutions/guidance/connected-mobility-on-aws/)」では、 AWS IoT FleetWise と同等の機能を実現するために使用できる接続モビリティソリューションのモジュラーサービスを開発およびデプロイする方法に関するガイダンスを提供します。

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

# チュートリアル: カスタムデコードインターフェイスを使用してネットワークに依存しないデータ収集を設定する
<a name="network-agnostic-data-collection"></a>

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

## 序章
<a name="network-agnostic-data-collection-intro"></a>

このチュートリアルでは、 AWS IoT FleetWise を設定してデータを収集し、カスタムデコードインターフェイスを利用するネットワークに依存しないデータ収集を使用してコマンドを実行する方法について説明します。ネットワークに依存しないデータ収集では、独自の方法を使用してシグナルをデコードしてから、指定したデータ送信先に送信できます。これにより、 AWS IoT FleetWise 専用のシグナルデコーダーを作成する必要がないため、時間を節約できます。独自の実装を使用してシグナルのサブセットをデコードすることも、デコーダーマニフェストを作成または更新`defaultForUnmappedSignals`するときに を使用することもできます。これにより、車両内のさまざまなソースでシグナルとトリガーを収集するための柔軟性も得られます。

 このチュートリアルは、標準のコントローラーエリアネットワーク (CAN バス) インターフェイス上にない車両信号を対象としています。たとえば、カスタムの車内形式またはスキームでエンコードされたデータなどです。

## 環境設定
<a name="network-agnostic-data-collection-setup"></a>

このチュートリアルでは、 AWS IoT FleetWise クラウド、および Edge 実装 APIsとしています。

## データモデル
<a name="network-agnostic-data-models"></a>

次のセクションでは、カスタムデコードインターフェイスを使用して車両プロパティをモデル化する方法について説明します。これは、データ収集とコマンドのユースケースに適用されます。また、IDLs など、車両で使用される基盤となるデータソースモデリングにも適用されます。

この例では、収集する車両センサー (現在の車両位置) とリモートで制御する車両アクチュエータ (Air Conditioner) の 2 つの車両プロパティがあります。どちらもこのスキームで定義されています。

```
// Vehicle WGS84 Coordinates
double Latitude;
double Longitude;

// Vehicle AC 
Boolean ActivateAC;
```

次のステップでは、カスタムデコードインターフェイス API を使用して、これらの定義を AWS IoT FleetWise にインポートします。 APIs

### シグナルカタログの更新
<a name="network-agnostic-signal-catalog-updates"></a>

これらの定義をシグナルカタログにインポートします。 AWS IoT FleetWise にシグナルカタログがすでにある場合は、更新 API を直接使用します。シグナルカタログがない場合は、まずシグナルカタログを作成してから、更新 API を呼び出します。

まず、これらの車両信号の VSS 表現を作成する必要があります。VSS は、 AWS IoT FleetWise の車両データを表す分類として使用されます。次の内容で「Vehicle-signals.json」という名前の JSON ファイルを作成します。

```
// vehicle-signals.json
// Verify that branches and nodes are unique in terms of fully qualified name
// in the signal catalog.
[
 {
    "branch": {
      "fullyQualifiedName": "Vehicle",
      "description": "Vehicle Branch"
    }
  },
  {
    "branch": {
      "fullyQualifiedName": "Vehicle.CurrentLocation",
      "description": "CurrentLocation"
    }
  },
  {
    "sensor": {
      "dataType": "DOUBLE",
      "fullyQualifiedName": "Vehicle.CurrentLocation.Latitude",
      "description": "Latitude"
    }
  },
  {
    "sensor": {
      "dataType": "DOUBLE",
      "fullyQualifiedName": "Vehicle.CurrentLocation.Longitude",
      "description": "Longitude"
    }
  },
  {
    "actuator": {
      "fullyQualifiedName": "Vehicle.ActivateAC",
      "description": "AC Controller",
      "dataType": "BOOLEAN"
    }
  }
]
```

シグナルカタログがない場合は、 を呼び出す必要があります`create-signal-catalog`。

```
VEHICLE_NODES=`cat vehicle-signals.json`
aws iotfleetwise create-signal-catalog \ 
        --name my-signal-catalog \
        --nodes "${VEHICLE_NODES}"
```

シグナルカタログがすでにある場合は、 `update-signal-catalog` API を使用してこれらのシグナルを追加できます。

```
VEHICLE_NODES=`cat vehicle-signals.json`
aws iotfleetwise update-signal-catalog \
        --name my-signal-catalog \
        --nodes-to-add "${VEHICLE_NODES}"
```

### 車両モデルとデコーダー
<a name="network-agnostic-vehicle-model-decoder"></a>

シグナルカタログにシグナルを挿入した後、次のステップは車両モデルを作成し、それらのシグナルをインスタンス化することです。そのためには、 `create-model-manifest`および `create-decoder-manifest` APIsを使用します。

まず、車両モデルに挿入するシグナル名をフォーマットします。

```
# Prepare the signals for insertion into the vehicle model.
VEHICLE_NODES=`cat vehicle-signals.json` 
VEHICLE_NODES=`echo ${VEHICLE_NODES} | jq -r ".[] | .actuator,.sensor | .fullyQualifiedName" | grep Vehicle\\.`
VEHICLE_NODES=`echo "${VEHICLE_NODES}" | jq -Rn [inputs]`
# This is how the vehicle model input looks. 
echo $VEHICLE_NODES
# [ "Vehicle.CurrentLocation.Latitude",
#   "Vehicle.CurrentLocation.Longitude",
#   "Vehicle.ActivateAC" ]
# Create the vehicle model with those signals.
aws iotfleetwise create-model-manifest \
    --name my-model-manifest \
    --signal-catalog-arn arn:xxxx:signal-catalog/my-signal-catalog \
    --nodes "${VEHICLE_NODES}"  
 
# Activate the vehicle model. 
 aws iotfleetwise update-model-manifest \
    --name my-model-manifest --status ACTIVE
```

次に、カスタムデコードインターフェイスを使用してデコーダーマニフェストを作成します。

**注記**  
この例の一部ではないカスタム IDs を指定する場合にのみ、ネットワークインターフェイスとシグナルを作成する必要があります。  
完全修飾名 (FQN) がカスタムデコードシグナル ID と異なる場合のデコード情報のマッピングについては、[https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/network-agnostic-dev-guide.md#aaos-vhal](https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/network-agnostic-dev-guide.md#aaos-vhal)」を参照してください。

```
// Create a network interface that is of type : CUSTOM_DECODING_INTERFACE
// custom-interface.json
[
  {
    "interfaceId": "NAMED_SIGNAL",
    "type": "CUSTOM_DECODING_INTERFACE",
    "customDecodingInterface": {
      "name": "NamedSignalInterface"
    }
  },
  {
    "interfaceId": "AC_ACTUATORS",
    "type": "CUSTOM_DECODING_INTERFACE",
    "customDecodingInterface": {
      "name": "NamedSignalInterface"
    }
  }
]
// custom-decoders.json
// Refer to the fully qualified names of the signals, make them of 
// type CUSTOM_DECODING_SIGNAL, and specify them as part of the same interface ID
// that was defined above.
[
    {
      "fullyQualifiedName": "Vehicle.CurrentLocation.Longitude",
      "interfaceId": "NAMED_SIGNAL",
      "type": "CUSTOM_DECODING_SIGNAL",
      "customDecodingSignal": {
        "id": "Vehicle.CurrentLocation.Longitude"
      }
    },
    {
      "fullyQualifiedName": "Vehicle.CurrentLocation.Latitude",
      "interfaceId": "NAMED_SIGNAL",
      "type": "CUSTOM_DECODING_SIGNAL",
      "customDecodingSignal": {
        "id": "Vehicle.CurrentLocation.Latitude"
      }
    },
    {
        "fullyQualifiedName": "Vehicle.ActivateAC",
        "interfaceId": "AC_ACTUATORS",
        "type": "CUSTOM_DECODING_SIGNAL",
        "customDecodingSignal": {
          "id": "Vehicle.ActivateAC"
        }
    }
]
# Create the decoder manifest.
 CUSTOM_INTERFACE=`cat custom-interface.json`
 CUSTOM_DECODERS=`cat custom-decoders.json`

aws iotfleetwise create-decoder-manifest \
   --name my-decoder-manifest \
   --model-manifest-arn arn:xxx:model-manifest/my-model-manifest \
   --network-interfaces "${CUSTOM_INTERFACE}" \
   --signal-decoders "${CUSTOM_DECODERS}"

 # Activate the decoder manifest.
 aws iotfleetwise update-decoder-manifest \
    --name my-decoder-manifest \
    --status ACTIVE
```

この時点で、 AWS IoT FleetWise でこれらのシグナルを完全にモデル化しました。次に、車両を作成し、作成したモデルに関連付けます。そのために `create-vehicle` API を使用します。

```
aws iotfleetwise create-vehicle \
    --decoder-manifest-arn arn:xxx:decoder-manifest/my-decoder-manifest \
    --association-behavior ValidateIotThingExists \
    --model-manifest-arn arn:xxx:model-manifest/my-model-manifest \
    --vehicle-name "my-vehicle"
```

次のステップでは、 AWS IoT FleetWise Edge コードベースに焦点を当て、必要なコード拡張子を記述します。

**注記**  
Edge 実装の詳細については、[https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/network-agnostic-dev-guide.md#implementing-your-own-sensors-and-actuators](https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/network-agnostic-dev-guide.md#implementing-your-own-sensors-and-actuators)」を参照してください。

## Send コマンド
<a name="test-command"></a>

次に、ソフトウェアをコンパイルし (ヘッダーと C\$1\$1 ファイルを CMake ファイルに追加してください）、クラウド APIs に戻ってこのアクチュエータでコマンドをテストします。

```
// Create a command targeting your vehicle.
aws iot create-command --command-id activateAC \
    --namespace "AWS-IoT-Fleetwise" \
    --endpoint-url endpoint-url \ 
    --role-arn ${SERVICE_ROLE_ARN} \
    --mandatory-parameters '[ { "name": "$actuatorPath.Vehicle.ActivateAC", "defaultValue": {"B": "false"} } ]' \
// You will receive the command ARN. 

{
    "commandId": "activateAC",
    "commandArn": "arn:aws:iot:xxx:command/activateAC"
}

// You can send the command to activate the AC targeting your vehicle. 

JOBS_ENDPOINT_URL=`aws iot describe-endpoint --endpoint-type iot:Jobs | jq -j .endpointAddress`
aws iot-jobs-data start-command-execution \
    --command-arn arn:aws:iot:xxx:command/activateAC \
    --target-arn arn:xxx:vehicle/my-vehicle \
    --parameters '{ "$actuatorPath.Vehicle.ActivateAC" : {"B": "true"}}' \
    --endpoint-url https://${JOBS_ENDPOINT_URL}
// You will receive the corresponding execution ID.
{
    "executionId": "01HSK4ZH6ME7D43RB2BV8JC51D"
}

// If you have the AWS IoT FleetWise Edge Agent running, you can see the logs.
[AcCommandDispatcher.cpp:26] [setActuatorValue()]:
[Actuator Vehicle.ActivateAC executed successfully for command ID 01HSK4ZH6ME7D43RB2BV8JC51D]
```