AWS IoT FleetWiseでCANデータベースファイルを使って、車両モデルとデコーダーマニフェストを作成する
AWS IoT FleetWiseは、車両のセンサーデータやCAN(Controller Area Network)バス上のシグナルデータを効率的に収集・活用できるサービスです。
今回は、CANデータベースファイル(DBCファイル)を利用して、AWS IoT FleetWise上で車両モデルとデコーダーマニフェストを作成する流れを試してみます。DBCファイルを活用することで、既存の車両シグナル定義をそのままクラウドに取り込むことができ、デコード情報の再利用や管理が容易になります。
試してみる
次のような流れで試します。
- CANデータベースファイル(DBCファイル)を作成する
- マネジメントコンソールから車両モデルを作成する
- マネジメントコンソールからデコーダーマニフェストを作成する
- AWS CLIからデコーダーマニフェストを作成する
CANデータベースファイル(DBCファイル)を作成する
次のような内容でDBCファイル、example.dbcを作成します。
ExampleSignalというシグナルを定義しています。
VERSION ""
NS_ :
NS_DESC_
CM_
BA_DEF_
BA_
VAL_
CAT_DEF_
CAT_
FILTER
BA_DEF_DEF_
EV_DATA_
ENVVAR_DATA_
SGTYPE_
SGTYPE_VAL_
BA_DEF_SGTYPE_
BA_SGTYPE_
SIG_TYPE_REF_
VAL_TABLE_
SIG_GROUP_
SIG_VALTYPE_
SIGTYPE_VALTYPE_
BO_TX_BU_
BA_DEF_REL_
BA_REL_
BA_DEF_DEF_REL_
BU_SG_REL_
BU_EV_REL_
BU_BO_REL_
SG_MUL_VAL_
BS_:
BU_: ECU1 ECU2
BO_ 100 ExampleMessage: 8 ECU1
SG_ ExampleSignal : 0|8@1+ (1,0) [0|255] "" ECU2
マネジメントコンソールから車両モデルを作成する
マネジメントコンソールから車両モデルを作成します。
名前と説明を入力し次に進めます。
※ 説明はオプションと記載されてますが、説明を入力しないと最後の確認画面で作成する際にエラーになるため、入力しておきます。
シグナルを追加するは、いったん何も選択せず、次に進めます。
シグナルをインポート画面で ファイルを選択
からdbcファイルを選択し、アップロードします。
画面下部にインポートされたシグナルが表示されます。
次に進めると、車両モデルの属性を追加できます。
最後に確認画面が表示されるので内容を確認し、車両モデルを作成します。
作成が完了すると、車両モデルの画面が表示されます。
マネジメントコンソールからデコーダーマニフェストを作成する
デコーダーマニフェストのタブを開き、デコーダーマニフェストを作成
をクリックします。
デコーダーマニフェスト作成画面が開いたら、名前を入力し、次に進みます。
ネットワークインターフェイスを設定します。
- ネットワークインターフェイスタイプは
CAN_INTERFACE
を選択- マネジメントコンソールでは他に
OBD_INTERFACE
を選択できます - 次の場合にはAWS CLIなどからデコーダーマニフェストの作成が必要です
- CANのプロトコル名やプロトコルバージョンなどオプショナルなプロパティを設定する場合
- 車両ミドルウェアネットワークインターフェイスやカスタムデコードインターフェイスを選択する場合
- 参考: AWS IoT FleetWise デコーダーマニフェストを作成する - AWS IoT FleetWise
- マネジメントコンソールでは他に
- ネットワークインターフェイス名は
can0
と入力します - ネットワークインターフェイスIDはもともと生成されていた値そのままを用います
- シグナルは
ExampleSignal
を選択します - ファイルをアップロードからDBCファイルをアップロードします
DBCファイルをアップロードすることで、シグナルのデコーダー情報を設定されます。
次に進めると、デコーダーマニフェストの確認画面が表示されるため、内容を確認し、作成します。
作成が完了すると、デコーダーマニフェストの画面が表示されます。
AWS CLIからデコーダーマニフェストを作成する
次は先ほどマネジメントコンソールで作成したデコーダーマニフェストと同様のものをAWS CLIから作成してみます。
AWS CLIではデコーダーマニフェストを作成し、その後DBCファイルをimportすることでデコーダー情報を設定します。
まずはデコーダーマニフェストを作成します。model-manifest-arnには、先程マネジメントコンソールから作成した車両モデルのARNを指定します。
マネジメントコンソールからデコーダーマニフェストを作成した際との違いとして、AWS CLIでは、canInterfaceにprotocolNameやprotocolVersionを指定できます。シグナルのデコード情報は、DBCファイルをimportするため、ここでは設定しません。
また、今回は試しませんが、DBCファイルを使わずにデコード情報を定義したり、CAN以外のネットワークインターフェイスを定義することも可能です。
- create-decoder-manifest — AWS CLI 2.26.2 Command Reference
- AWS IoT FleetWise デコーダーマニフェストを作成する - AWS IoT FleetWise
aws iotfleetwise create-decoder-manifest \
--name example_decoder2 \
--model-manifest-arn arn:aws:iotfleetwise:us-east-1:{アカウント番号}:model-manifest/test_car \
--network-interfaces '[
{
"interfaceId": "can_interface",
"type": "CAN_INTERFACE",
"canInterface": {
"name": "can0",
"protocolName": "CAN",
"protocolVersion": "2.0b"
}
}
]'
DBCファイルをimportしてデコーダーマニフェストを作成する場合、import-decoder-manifestコマンドを使います。networkInterfaceのところにはデコーダーマニフェスト作成時に指定したinterfaceIdを指定します。canDbcFilesにはDBCファイルをBASE64エンコードした内容を指定します。
aws iotfleetwise import-decoder-manifest \
--name example_decoder2 \
--network-file-definitions canDbc="{networkInterface=can_interface,canDbcFiles=[$(base64 -b 0 -i ./example.dbc)],signalsMap={ExampleSignal=ExampleSignal}}"
作成したデコーダーマニフェストを確認してみます。
aws iotfleetwise get-decoder-manifest \
--name example_decoder2
statusがDRAFTになっています。AWS CLIからデコーダーマニフェストを作成した場合は、ステータスがDRAFT状態になります。DRAFT状態の場合には、デコーダーマニフェストを紐づけた車両モデルから車両を作成できませんが、デコーダーマニフェストの更新が可能なようです。一方で、マネジメントコンソールからデコーダーマニフェストを作成した場合にはステータスがACTIVE状態になります。ACTIVE状態の場合には、車両モデルから車両を作成できますが、デコーダーマニフェストの更新ができなくなります。
{
"name": "example_decoder2",
"arn": "arn:aws:iotfleetwise:us-east-1:600032830501:decoder-manifest/example_decoder2",
"description": "",
"modelManifestArn": "arn:aws:iotfleetwise:us-east-1:600032830501:model-manifest/test_car",
"status": "DRAFT",
"creationTime": "2025-04-16T14:03:34.852000+09:00",
"lastModificationTime": "2025-04-16T14:03:55.712000+09:00"
}
登録されたデコード情報を確認してみます。
aws iotfleetwise list-decoder-manifest-signals --name example_decoder2
canSignalには、DBCファイルに定義されていたシグナル定義と同等の内容が登録されていそうです。
{
"signalDecoders": [
{
"fullyQualifiedName": "ExampleSignal",
"type": "CAN_SIGNAL",
"interfaceId": "can_interface",
"canSignal": {
"messageId": 100,
"isBigEndian": false,
"isSigned": false,
"startBit": 0,
"offset": 0.0,
"factor": 1.0,
"length": 8,
"name": "ExampleSignal"
}
}
]
}
さいごに
マネジメントコンソールとAWS CLIそれぞれでDBCファイルを用いたデコーダーマニフェストの作成を試しました。DBCファイルを用いることでデコード情報を再利用できるため便利です!
現時点では、マネジメントコンソールからできることは限られているようなので、AWS CLIを併用するのが良さそうです。
VSSデータのimportでもシグナルカタログの登録ができます。CANデータ以外のシグナルデータも含めて定義する場合やノードでの階層化なども可能なので、本格的に活用する場合はVSSを使うのが良さそうです。