

AWS IoT FleetWise will no longer be open to new customers as of April 30, 2026. Existing AWS IoT FleetWise customers can continue using the service. The [Guidance for Connected Mobility on AWS](https://aws.amazon.com/solutions/guidance/connected-mobility-on-aws/) provides guidance on how to develop and deploy modular services for connected mobility solutions that can be used to achieve equivalent capabilities as AWS IoT FleetWise.

# Model AWS IoT FleetWise vehicles
<a name="vehicle-modeling"></a>

AWS IoT FleetWise provides a vehicle modeling framework that you can use to build virtual representations of your vehicles in the cloud. Signals, signal catalogs, vehicle models, and decoder manifests are the core components that you work with to model your vehicles.

![\[Image showing entities of the AWS IoT FleetWise domain and their relationships.\]](http://docs.aws.amazon.com/iot-fleetwise/latest/developerguide/images/FleetWise-Domain-Entity-Relationships.png)


**Signal**  <a name="signal-definition"></a>
Signals are fundamental structures that you define to contain vehicle data and its metadata. A signal can be an attribute, a branch, a sensor, or an actuator. For example, you can create a sensor to receive in-vehicle temperature values, and to store its metadata, including a sensor name, a data type, and a unit. For more information, see [Manage AWS IoT FleetWise signal catalogs](signal-catalogs.md).

**Signal catalog**  <a name="signal-catalog-definition"></a>
A signal catalog contains a collection of signals. Signals in a signal catalog can be used to model vehicles that use different protocols and data formats. For example, there are two cars made by different automakers: one uses the Control Area Network (CAN bus) protocol; the other one uses the On-board Diagnostics (OBD) protocol. You can define a sensor in the signal catalog to receive in-vehicle temperature values. This sensor can be used to represent the thermocouples in both cars. For more information, see [Manage AWS IoT FleetWise signal catalogs](signal-catalogs.md).

**Vehicle model (model manifest)**  <a name="vehicle-model-definition"></a>
Vehicle models are declarative structures that you can use to standardize the format of your vehicles and to define relationships between signals in the vehicles. Vehicle models enforce consistent information across multiple vehicles of the same type. You add signals to create vehicle models. For more information, see [Manage AWS IoT FleetWise vehicle modelsVehicle models](vehicle-models.md).

**Decoder manifest**  <a name="decoder-manifest-definition"></a>
Decoder manifests contain decoding information for each signal in vehicle models. Sensors and actuators in vehicles transmit low-level messages (binary data). With decoder manifests, AWS IoT FleetWise is able to transform binary data into human-readable values. Every decoder manifest is associated with a vehicle model. For more information, see [Manage AWS IoT FleetWise decoder manifests](decoder-manifests.md).

You can use the AWS IoT FleetWise console or API to model vehicles in the following way.

1. <a name="shared-create-import-signal-catalog"></a>Create or import a signal catalog containing signals that you'll use to create a vehicle model. For more information, see [Create an AWS IoT FleetWise signal catalog](create-signal-catalog.md) and [Import a signal catalog (AWS CLI)](import-signal.md#import-signal-catalog).
**Note**  
<a name="console-auto-create-signal-catalog"></a>If you use the AWS IoT FleetWise console to create the first vehicle model, you don't need to manually create a signal catalog. When you create your first vehicle model, AWS IoT FleetWise automatically creates a signal catalog for you. For more information, see [Create an AWS IoT FleetWise vehicle model](create-vehicle-model.md).
AWS IoT FleetWise currently supports a signal catalog for each AWS account per AWS Region.

1. <a name="shared-create-vehicle-model"></a>Use signals in the signal catalog to create a vehicle model. For more information, see [Create an AWS IoT FleetWise vehicle model](create-vehicle-model.md).
**Note**  
<a name="console-auto-update-signal-catalog"></a>If you use the AWS IoT FleetWise console to create a vehicle model, you can upload .dbc files to import signals. .dbc is a file format that Controller Area Network (CAN bus) databases support. After the vehicle model is created, new signals are automatically added to the signal catalog. For more information, see [Create an AWS IoT FleetWise vehicle model](create-vehicle-model.md).
If you use the `CreateModelManifest` API operation to create a vehicle model, you must use the `UpdateModelManifest` API operation to activate the vehicle model. For more information, see [Update an AWS IoT FleetWise vehicle model](update-vehicle-model-cli.md).
If you use the AWS IoT FleetWise console to create a vehicle model, AWS IoT FleetWise automatically activates the vehicle model for you.

1. <a name="shared-create-decoder-manifest"></a>Create a decoder manifest. The decoder manifest contains decoding information for every signal specified in the vehicle model that you created in the previous step. The decoder manifest is associated with the vehicle model that you created. For more information, see [Manage AWS IoT FleetWise decoder manifests](decoder-manifests.md).
**Note**  
If you use the `CreateDecoderManifest` API operation to create a decoder manifest, you must use the `UpdateDecoderManifest` API operation to activate the decoder manifest. For more information, see [Update an AWS IoT FleetWise decoder manifest](update-decoder-manifest.md).
If you use the AWS IoT FleetWise console to create a decoder manifest, AWS IoT FleetWise automatically activates the decoder manifest for you.

CAN bus databases support the .dbc file format. You might upload .dbc files to import signals and signal decoders. To get an example .dbc file, do the following.

**To get a .dbc file**

1. Download the [EngineSignals.zip](samples/EngineSignals.zip).

1. Navigate to the directory where you downloaded the `EngineSignals.zip` file.

1. Unzip the file and save it locally as `EngineSignals.dbc`.

**Topics**
+ [Manage AWS IoT FleetWise signal catalogs](signal-catalogs.md)
+ [Manage AWS IoT FleetWise vehicle models](vehicle-models.md)
+ [Manage AWS IoT FleetWise decoder manifests](decoder-manifests.md)

# Manage AWS IoT FleetWise signal catalogs
<a name="signal-catalogs"></a>

**Note**  
You can download a [demo script](https://raw.githubusercontent.com/aws/aws-iot-fleetwise-edge/main/tools/cloud/ros2-to-nodes.py) to convert ROS 2 messages to VSS .json files that are compatible with the signal catalog. For more information, see the [https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb](https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb).

A signal catalog is a collection of standardized signals that can be reused to create vehicle models. AWS IoT FleetWise supports [Vehicle Signal Specification (VSS)](https://covesa.github.io/vehicle_signal_specification/introduction/overview/) that you can follow to define signals. A signal can be any of the following type.

**Attribute**  <a name="attribute-definition"></a>
Attributes represent static information that generally doesn't change, such as manufacturer and manufacturing date.

**Branch**  <a name="branch-definition"></a>
Branches represent signals in a nested structure. Branches demonstrate signal hierarchies. For example, the `Vehicle` branch has a child branch, `Powertrain`. The `Powertrain` branch has a child branch, `combustionEngine`. To locate the `combustionEngine` branch, use the `Vehicle.Powertrain.combustionEngine` expression.

**Sensor**  <a name="sensor-definition"></a>
Sensor data reports the current state of the vehicle and change over time, as the state of the vehicle changes, such as fluid levels, temperatures, vibrations, or voltage.

**Actuator**  <a name="actuator-definition"></a>
Actuator data reports the state of a vehicle device, such as motors, heaters, and door locks. Changing the state of a vehicle device can update actuator data. For example, you can define an actuator to represent the heater. The actuator receives new data when you turn on or off the heater.

**Custom structure**  <a name="custom-structure-definition"></a>
A custom structure (also known as a struct) represents a complex or higher-order data structure. It facilitates logical binding or grouping of data that originates from the same source. A struct is used when data is read or written in an atomic operation, such as to represent a complex data type or higher-order shape.  
A signal of struct type is defined in the signal catalog using a reference to a struct data type instead of a primitive data type. Structs can be used for all types of signals including sensors, attributes, actuators, and vision system data types. If a signal of struct type is sent or received, AWS IoT FleetWise expects all included items to have valid values, so all items are mandatory. For example, if a struct contains the items Vehicle.Camera.Image.height, Vehicle.Camera.Image.width, and Vehicle.Camera.Image.data – it's expected that the sent signal contains values for all of these items.  
Vision system data is in preview release and is subject to change.

**Custom property**  <a name="custom-property-definition"></a>
A custom property represents a member of the complex data structure. The data type of the property can be either primitive or another struct.  
When representing a higher-order shape using a struct and custom property, the intended higher-order shape is always defined and visioned as a tree structure. The custom property is used to define all the leaf nodes while the struct is used to define all the non-leaf nodes.

**Note**  
<a name="console-auto-create-signal-catalog"></a>If you use the AWS IoT FleetWise console to create the first vehicle model, you don't need to manually create a signal catalog. When you create your first vehicle model, AWS IoT FleetWise automatically creates a signal catalog for you. For more information, see [Create an AWS IoT FleetWise vehicle model](create-vehicle-model.md).
<a name="console-auto-update-signal-catalog"></a>If you use the AWS IoT FleetWise console to create a vehicle model, you can upload .dbc files to import signals. .dbc is a file format that Controller Area Network (CAN bus) databases support. After the vehicle model is created, new signals are automatically added to the signal catalog. For more information, see [Create an AWS IoT FleetWise vehicle model](create-vehicle-model.md).
<a name="signal-catalog-quota"></a>AWS IoT FleetWise currently supports a signal catalog for each AWS account per Region.

AWS IoT FleetWise provides the following API operations that you can use to create and manage signal catalogs.
+ [CreateSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_CreateSignalCatalog.html) – Creates a new signal catalog.
+ [ImportSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ImportSignalCatalog.html) – Imports signals to create a signal catalog by uploading a .json file. Signals must be defined by following VSS and saved in the JSON format.
+ [UpdateSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_UpdateSignalCatalog.html) – Updates an existing signal catalog by updating, removing, or adding signals.
+ [DeleteSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_DeleteSignalCatalog.html) – Deletes an existing signal catalog.
+ [ListSignalCatalogs](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListSignalCatalogs.html) – Retrieves a paginated list of summaries of all signal catalogs.
+ [ListSignalCatalogNodes](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListSignalCatalogNodes.html) – Retrieves a paginated list of summaries of all signals (nodes) in a given signal catalog.
+ [GetSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_GetSignalCatalog.html) – Retrieves information about a signal catalog.

**Topics**
+ [Configure AWS IoT FleetWise signals](define-signal.md)
+ [Create an AWS IoT FleetWise signal catalog](create-signal-catalog.md)
+ [Import an AWS IoT FleetWise signal catalog](import-signal.md)
+ [Update an AWS IoT FleetWise signal catalog](update-signal-catalog.md)
+ [Delete an AWS IoT FleetWise signal catalog](delete-signal-catalog.md)
+ [Get AWS IoT FleetWise signal catalog information](get-signal-catalog-information.md)

# Configure AWS IoT FleetWise signals
<a name="define-signal"></a>

This section shows you how to configure branches, attributes, sensors, and actuators.

**Topics**
+ [Configure branches](#configure-branch)
+ [Configure attributes](#configure-attributes)
+ [Configure sensors or actuators](#configure-sensors-or-acuators)
+ [Configure complex data types](#configure-complex-data-types)

## Configure branches
<a name="configure-branch"></a>

To configure a branch, specify the following information.
+ `fullyQualifiedName` – The fully qualified name of the branch is the path to the branch plus the branch's name. Use a dot(.) to refer to a child branch. For example, `Vehicle.Chassis.SteeringWheel` is the fully qualified name for the `SteeringWheel` branch. `Vehicle.Chassis.` is the path to this branch.

  The fully qualified name can have up to 150 characters. Valid characters: a–z, A–Z, 0–9, colon (:), and underscore (\$1).
+ (Optional) `Description` – The description for the branch.

  The description can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).
+ (Optional) `deprecationMessage` – The deprecation message for the node or branch being moved or deleted.

  The deprecationMessage can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).
+ (Optional) `comment` – A comment in addition to the description. A comment can be used to provide additional information about the branch, such as the rationale for the branch or references to related branches.

  The comment can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).

## Configure attributes
<a name="configure-attributes"></a>

To configure an attribute, specify the following information.
+ `dataType` – The attribute's data type must be one of the following: INT8, UINT8, INT16, UINT16, INT32, UINT32, INT64, UINT64, BOOLEAN, FLOAT, DOUBLE, STRING, UNIX\$1TIMESTAMP, INT8\$1ARRAY, UINT8\$1ARRAY, INT16\$1ARRAY, UINT16\$1ARRAY, INT32\$1ARRAY, UINT32\$1ARRAY, INT64\$1ARRAY, UINT64\$1ARRAY, BOOLEAN\$1ARRAY, FLOAT\$1ARRAY, DOUBLE\$1ARRAY, STRING\$1ARRAY, UNIX\$1TIMESTAMP\$1ARRAY, UNKNOWN, fullyQualifiedName, or a custom struct defined in the data type branch.
+ `fullyQualifiedName` – The fully qualified name of the attribute is the path to the attribute plus the attribute's name. Use a dot(.) to refer to a child signal. For example, `Vehicle.Chassis.SteeringWheel.Diameter` is the fully qualified name for the `Diameter` attribute. `Vehicle.Chassis.SteeringWheel.` is the path to this attribute.

  The fully qualified name can have up to 150 characters. Valid characters: a–z, A–Z, 0–9, : (colon), and \$1 (underscore).
+ (Optional) `Description` – The description for the attribute.

  The description can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).
+ (Optional) `unit` – The scientific unit for the attribute, such as km or Celsius.
+ (Optional) `min` – The minimum value of the attribute.
+ (Optional) `max` – The maximum value of the attribute.
+ (Optional) `defaultValue` – The default value of the attribute.
+ (Optional) `assignedValue` – The value assigned to the attribute.
+ (Optional) `allowedValues` – A list of values that the attribute accepts.
+ (Optional) `deprecationMessage` – The deprecation message for the node or branch that's being moved or deleted.

  The deprecationMessage can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).
+ (Optional) `comment` – A comment in addition to the description. A comment can be used to provide additional information about the attribute, such as the rationale for the attribute or references to related attributes.

  The comment can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).

## Configure sensors or actuators
<a name="configure-sensors-or-acuators"></a>

To configure a sensor or actuator, specify the following information.
+ `dataType` – The signal's data type must be one of the following: INT8, UINT8, INT16, UINT16, INT32, UINT32, INT64, UINT64, BOOLEAN, FLOAT, DOUBLE, STRING, UNIX\$1TIMESTAMP, INT8\$1ARRAY, UINT8\$1ARRAY, INT16\$1ARRAY, UINT16\$1ARRAY, INT32\$1ARRAY, UINT32\$1ARRAY, INT64\$1ARRAY, UINT64\$1ARRAY, BOOLEAN\$1ARRAY, FLOAT\$1ARRAY, DOUBLE\$1ARRAY, STRING\$1ARRAY, UNIX\$1TIMESTAMP\$1ARRAY, UNKNOWN, fullyQualifiedName, or a custom struct defined in the data type branch.
+ `fullyQualifiedName` – The fully qualified name of the signal is the path to the signal plus the signal's name. Use a dot(.) to refer to a child signal. For example, `Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringState` is the fully qualified name for the `HandsOffSteeringState` actuator. `Vehicle.Chassis.SteeringWheel.HandsOff.` is the path to this actuator.

  The fully qualified name can have up to 150 characters. Valid characters: a–z, A–Z, 0–9, : (colon), and \$1 (underscore).
+ (Optional) `Description` – The description for the signal.

  The description can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).
+ (Optional) `unit` – The scientific unit for the signal, such as km or Celsius.
+ (Optional) `min` – The minimum value of the signal.
+ (Optional) `max` – The maximum value of the signal.
+ (Optional) `assignedValue` – The value assigned to the signal.
+ (Optional) `allowedValues` – list of values that the signal accepts.
+ (Optional) `deprecationMessage` – The deprecation message for the node or branch that's being moved or deleted.

  The deprecationMessage can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).
+ (Optional) `comment` – A comment in addition to the description. A comment can be used to provide additional information about the sensor or actuator, such as their rationale or references to related sensors or actuators.

  The comment can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).

## Configure complex data types
<a name="configure-complex-data-types"></a>

Complex data types are used when modeling vision systems. In addition to branches, these data types are made up of structures (also known as a struct) and properties. A struct is a signal that is described by multiple values, like an image. A property represents a member of the struct, like a primitive data type (such as UINT8) or another struct (such as timestamp). For example, Vehicle.Cameras.Front represents a branch, Vehicle.Cameras.Front.Image represents a struct, and Vehicle.Cameras.Timestamp represents a property.

The following complex data type example demonstrates how signals and data types are exported to a single .json file.

**Example complex data type**  

```
{
  "Vehicle": {
    "type": "branch"
    // Signal tree
  },
  "ComplexDataTypes": {
    "VehicleDataTypes": {
      // complex data type tree
      "children": {
        "branch": {
          "children": {
            "Struct": {
              "children": {
                "Property": {
                  "type": "property",
                  "datatype": "Data type",
                  "description": "Description",
                  //                  ...
                }
              },
              "description": "Description",
              "type": "struct"
            }
          }
          "description": "Description",
          "type": "branch"
        }
      }
    }
  }
}
```

**Note**  
You can download a [demo script](https://raw.githubusercontent.com/aws/aws-iot-fleetwise-edge/main/tools/cloud/ros2-to-nodes.py) to convert ROS 2 messages to VSS .json files that are compatible with the signal catalog. For more information, see the [https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb](https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb).  
Vision system data is in preview release and is subject to change.

### Configure struct
<a name="configure-custom-structure"></a>

To configure a custom structure (or struct), specify the following information.
+ `fullyQualifiedName` – The fully qualified name of the custom structure. For example, the fully qualified name of a custom structure might be `ComplexDataTypes.VehicleDataTypes.SVMCamera`.

  The fully qualified name can have up to 150 characters. Valid characters: a–z, A–Z, 0–9, : (colon), and \$1 (underscore).
+ (Optional) `Description` – The description for the signal.

  The description can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).
+ (Optional) `deprecationMessage` – The deprecation message for the node or branch that's being moved or deleted.

  The deprecationMessage can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).
+ (Optional) `comment` – A comment in addition to the description. A comment can be used to provide additional information about the sensor or actuator, such as their rationale or references to related sensors or actuators.

  The comment can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).

### Configure property
<a name="configure-custom-property"></a>

To configure a custom property, specify the following information.
+ `dataType` – The signal's data type must be one of the following: INT8, UINT8, INT16, UINT16, INT32, UINT32, INT64, UINT64, BOOLEAN, FLOAT, DOUBLE, STRING, UNIX\$1TIMESTAMP, INT8\$1ARRAY, UINT8\$1ARRAY, INT16\$1ARRAY, UINT16\$1ARRAY, INT32\$1ARRAY, UINT32\$1ARRAY, INT64\$1ARRAY, UINT64\$1ARRAY, BOOLEAN\$1ARRAY, FLOAT\$1ARRAY, DOUBLE\$1ARRAY, STRING\$1ARRAY, UNIX\$1TIMESTAMP\$1ARRAY, STRUCT, STRUCT\$1ARRAY, or UNKNOWN.
+ `fullyQualifiedName` – The fully qualified name of the custom property. For example, the fully qualified name of a custom property might be `ComplexDataTypes.VehicleDataTypes.SVMCamera.FPS`.

  The fully qualified name can have up to 150 characters. Valid characters: a–z, A–Z, 0–9, : (colon), and \$1 (underscore)
+ (Optional) `Description` – The description for the signal.

  The description can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).
+ (Optional) `deprecationMessage` – The deprecation message for the node or branch that's being moved or deleted.

  The deprecationMessage can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).
+ (Optional) `comment` – A comment in addition to the description. A comment can be used to provide additional information about the sensor or actuator, such as their rationale or references to related sensors or actuators.

  The comment can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).
+ (Optional) `dataEncoding` – Indicates whether the property is binary data. The custom property's data encoding must be one of the following: BINARY or TYPED.
+ (Optional) `structFullyQualifiedName ` – The fully qualified name of the structure (struct) node for the custom property if the data type of the custom property is Struct or StructArray.

  The fully qualified name can have up to 150 characters. Valid characters: a–z, A–Z, 0–9, : (colon), and \$1 (underscore).

# Create an AWS IoT FleetWise signal catalog
<a name="create-signal-catalog"></a>

You can use the [CreateSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_CreateSignalCatalog.html) API operation to create a signal catalog. The following example uses AWS CLI.

To create a signal catalog, run the following command.

Replace *signal-catalog-configuration* with the name of the .json file that contains the configuration.

```
aws iotfleetwise create-signal-catalog --cli-input-json file://signal-catalog-configuration.json
```

## Signal catalog configuration
<a name="signal-catalog-configuration"></a>
+ Replace *signal-catalog-name* with the name of the signal catalog that you're creating.
+ (Optional) Replace *description* with a description to help you identify the signal catalog.

For more information about how to configure branches, attributes, sensors, and actuators, see [Configure AWS IoT FleetWise signals](define-signal.md).

```
{
    "name": "signal-catalog-name",
    "description": "description",
    "nodes": [
  {
    "branch": {
      "fullyQualifiedName": "Types"
    }
  },
  {
    "struct": {
      "fullyQualifiedName": "Types.sensor_msgs_msg_CompressedImage"
    }
  },
  {
    "struct": {
      "fullyQualifiedName": "Types.std_msgs_Header"
    }
  },
  {
    "struct": {
      "fullyQualifiedName": "Types.builtin_interfaces_Time"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.builtin_interfaces_Time.sec",
      "dataType": "INT32",
      "dataEncoding": "TYPED"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.builtin_interfaces_Time.nanosec",
      "dataType": "UINT32",
      "dataEncoding": "TYPED"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.std_msgs_Header.stamp",
      "dataType": "STRUCT",
      "structFullyQualifiedName": "Types.builtin_interfaces_Time"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.std_msgs_Header.frame_id",
      "dataType": "STRING",
      "dataEncoding": "TYPED"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.sensor_msgs_msg_CompressedImage.header",
      "dataType": "STRUCT",
      "structFullyQualifiedName": "Types.std_msgs_Header"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.sensor_msgs_msg_CompressedImage.format",
      "dataType": "STRING",
      "dataEncoding": "TYPED"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.sensor_msgs_msg_CompressedImage.data",
      "dataType": "UINT8_ARRAY",
      "dataEncoding": "BINARY"
    }
  },
  {
    "branch": {
      "fullyQualifiedName": "Vehicle",
      "description": "Vehicle"
    }
  },
  {
    "branch": {
      "fullyQualifiedName": "Vehicle.Cameras"
    }
  },
  {
    "branch": {
      "fullyQualifiedName": "Vehicle.Cameras.Front"
    }
  },
  {
    "sensor": {
      "fullyQualifiedName": "Vehicle.Cameras.Front.Image",
      "dataType": "STRUCT",
      "structFullyQualifiedName": "Types.sensor_msgs_msg_CompressedImage"
    }
  },
  {
    "struct": {
      "fullyQualifiedName": "Types.std_msgs_msg_Float64"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.std_msgs_msg_Float64.data",
      "dataType": "DOUBLE",
      "dataEncoding": "TYPED"
    }
  },
  {
    "sensor": {
      "fullyQualifiedName": "Vehicle.Velocity",
      "dataType": "STRUCT",
      "structFullyQualifiedName": "Types.std_msgs_msg_Float64"
    }
  },
  {
    "struct": {
      "fullyQualifiedName": "Types.sensor_msgs_msg_RegionOfInterest"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.sensor_msgs_msg_RegionOfInterest.x_offset",
      "dataType": "UINT32",
      "dataEncoding": "TYPED"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.sensor_msgs_msg_RegionOfInterest.y_offset",
      "dataType": "UINT32",
      "dataEncoding": "TYPED"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.sensor_msgs_msg_RegionOfInterest.height",
      "dataType": "UINT32",
      "dataEncoding": "TYPED"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.sensor_msgs_msg_RegionOfInterest.width",
      "dataType": "UINT32",
      "dataEncoding": "TYPED"
    }
  },
  {
    "property": {
      "fullyQualifiedName": "Types.sensor_msgs_msg_RegionOfInterest.do_rectify",
      "dataType": "BOOLEAN",
      "dataEncoding": "TYPED"
    }
  },
  {
    "branch": {
      "fullyQualifiedName": "Vehicle.Perception"
    }
  },
  {
    "sensor": {
      "fullyQualifiedName": "Vehicle.Perception.Obstacle",
      "dataType": "STRUCT",
      "structFullyQualifiedName": "Types.sensor_msgs_msg_RegionOfInterest"
    }
  }
]
}
```

**Note**  
You can download a [demo script](https://raw.githubusercontent.com/aws/aws-iot-fleetwise-edge/main/tools/cloud/ros2-to-nodes.py) to convert ROS 2 messages to VSS .json files that are compatible with the signal catalog. For more information, see the [https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb](https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb).  
Vision system data is in preview release and is subject to change.

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `CreateSignalCatalog` API operation.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

# Import an AWS IoT FleetWise signal catalog
<a name="import-signal"></a>

You can use the AWS IoT FleetWise console or API to import a signal catalog.

**Topics**
+ [Import a signal catalog (console)](#import-signal-catalog-console)
+ [Import a signal catalog (AWS CLI)](#import-signal-catalog)

## Import a signal catalog (console)
<a name="import-signal-catalog-console"></a>

You can use the AWS IoT FleetWise console to import a signal catalog.

**Important**  
You can have a maximum of one signal catalog. If you already have a signal catalog, you won't see the option to import a signal catalog in the console.

**To import a signal catalog**

1. Open the [AWS IoT FleetWise console](https://console.aws.amazon.com/iotfleetwise/).

1. On the navigation pane, choose **Signal catalog**.

1. On the signal catalog summary page, choose **Import signal catalog**.

1. Import the file containing the signals.
   + To upload a file from an S3 bucket:

     1. Choose **Import from S3**.

     1. Choose **Browse S3**.

     1. For **Buckets**, enter the bucket name or object, choose it from the list, and then choose the file from the list. Choose the **Choose file** button.

     Or, for **S3 URI**, enter an Amazon Simple Storage Service URI. For more information, see [Methods for accessing a bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html) in the *Amazon S3 User Guide*.
   + To upload a file from your computer:

     1. Choose **Import from file**.

     1. Upload a .json file in a [Vehicle Signal Specification (VSS)](https://www.w3.org/auto/wg/wiki/Vehicle_Signal_Specification_(VSS)/Vehicle_Data_Spec) format.

1. Verify the signal catalog, and then choose **Import file**.

## Import a signal catalog (AWS CLI)
<a name="import-signal-catalog"></a>

You can use the [ImportSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ImportSignalCatalog.html) API operation to upload a JSON file that helps create a signal catalog. You must follow the [Vehicle Signal Specification (VSS)](https://www.w3.org/auto/wg/wiki/Vehicle_Signal_Specification_(VSS)/Vehicle_Data_Spec) to save signals in the JSON file. The following example uses AWS CLI.

To import a signal catalog, run the following command.
+ Replace *signal-catalog-name* with the name of the signal catalog that you're creating.
+  (Optional) Replace description with a *description* to help you identify the signal catalog.
+ Replace *signal-catalog-configuration-vss* with the name of the JSON string file that contains signals defined in VSS.

For more information about how to configure branches, attributes, sensors, and actuators, see [Configure AWS IoT FleetWise signals](define-signal.md).

```
aws iotfleetwise import-signal-catalog \
                 --name signal-catalog-name \
                 --description  description \
                 --vss file://signal-catalog-configuration-vss.json
```

### Signal catalog configuration (VSS)
<a name="signal-catalog-configuration-VSS"></a>

The JSON must be stringified and passed through the `vssJson` field. The following is an example of signals defined in VSS.

```
{
	"Vehicle": {
		"type": "branch",
		"children": {
			"Chassis": {
				"type": "branch",
				"description": "All data concerning steering, suspension, wheels, and brakes.",
				"children": {
					"SteeringWheel": {
						"type": "branch",
						"description": "Steering wheel signals",
						"children": {
							"Diameter": {
								"type": "attribute",
								"description": "The diameter of the steering wheel",
								"datatype": "float",
								"unit": "cm",
								"min": 1,
								"max": 50
							},
							"HandsOff": {
								"type": "branch",
								"children": {
									"HandsOffSteeringState": {
										"type": "actuator",
										"description": "HndsOffStrWhlDtSt. Hands Off Steering State",
										"datatype": "boolean"
									},
									"HandsOffSteeringMode": {
										"type": "actuator",
										"description": "HndsOffStrWhlDtMd. Hands Off Steering Mode",
										"datatype": "int8",
										"min": 0,
										"max": 2
									}
								}
							}
						}
					},
					"Accelerator": {
						"type": "branch",
						"description": "",
						"children": {
							"AcceleratorPedalPosition": {
								"type": "sensor",
								"description": "Throttle__Position. Accelerator pedal position as percent. 0 = Not depressed. 100 = Fully depressed.",
								"datatype": "uint8",
								"unit": "%",
								"min": 0,
								"max": 100.000035
							}
						}
					}
				}
			},
			"Powertrain": {
				"type": "branch",
				"description": "Powertrain data for battery management, etc.",
				"children": {
					"Transmission": {
						"type": "branch",
						"description": "Transmission-specific data, stopping at the drive shafts.",
						"children": {
							"VehicleOdometer": {
								"type": "sensor",
								"description": "Vehicle_Odometer",
								"datatype": "float",
								"unit": "km",
								"min": 0,
								"max": 67108863.984375
							}
						}
					},
					"CombustionEngine": {
						"type": "branch",
						"description": "Engine-specific data, stopping at the bell housing.",
						"children": {
							"Engine": {
								"type": "branch",
								"description": "Engine description",
								"children": {
									"timing": {
										"type": "branch",
										"description": "timing description",
										"children": {
											"run_time": {
												"type": "sensor",
												"description": "Engine run time",
												"datatype": "int16",
												"unit": "ms",
												"min": 0,
												"max": 10000
											},
											"idle_time": {
												"type": "sensor",
												"description": "Engine idle time",
												"datatype": "int16",
												"min": 0,
												"unit": "ms",
												"max": 10000
											}
										}
									}
								}
							}
						}
					}
				}
			},
			"Axle": {
				"type": "branch",
				"description": "Axle signals",
				"children": {
					"TireRRPrs": {
						"type": "sensor",
						"description": "TireRRPrs. Right rear Tire pressure in kilo-Pascal",
						"datatype": "float",
						"unit": "kPaG",
						"min": 0,
						"max": 1020
					}
				}
			}
		}
	},
	"Cameras": {
		"type": "branch",
		"description": "Branch to aggregate all cameras in the vehicle",
		"children": {
			"FrontViewCamera": {
				"type": "sensor",
				"datatype": "VehicleDataTypes.SVMCamera",
				"description": "Front view camera"
			},
			"RearViewCamera": {
				"type": "sensor",
				"datatype": "VehicleDataTypes.SVMCamera",
				"description": "Rear view camera"
			},
			"LeftSideViewCamera": {
				"type": "sensor",
				"datatype": "VehicleDataTypes.SVMCamera",
				"description": "Left side view camera"
			},
			"RightSideViewCamera": {
				"type": "sensor",
				"datatype": "VehicleDataTypes.SVMCamera",
				"description": "Right side view camera"
			}
		}
	},
	"ComplexDataTypes": {
		"VehicleDataTypes": {
			"type": "branch",
			"description": "Branch to aggregate all camera related higher order data types",
			"children": {
				"SVMCamera": {
					"type": "struct",
					"description": "This data type represents Surround View Monitor (SVM) camera system in a vehicle",
					"comment": "Test comment",
					"deprecation": "Test deprecation message",
					"children": {
						"Make": {
							"type": "property",
							"description": "Make of the SVM camera",
							"datatype": "string",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						},
						"Description": {
							"type": "property",
							"description": "Description of the SVM camera",
							"datatype": "string",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						},
						"FPS": {
							"type": "property",
							"description": "FPS of the SVM camera",
							"datatype": "double",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						},
						"Orientation": {
							"type": "property",
							"description": "Orientation of the SVM camera",
							"datatype": "VehicleDataTypes.Orientation",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						},
						"Range": {
							"type": "property",
							"description": "Range of the SVM camera",
							"datatype": "VehicleDataTypes.Range",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						},
						"RawData": {
							"type": "property",
							"description": "Represents binary data of the SVM camera",
							"datatype": "uint8[]",
							"dataencoding": "binary",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						},
						"CapturedFrames": {
							"type": "property",
							"description": "Represents selected frames captured by the SVM camera",
							"datatype": "VehicleDataTypes.Frame[]",
							"dataencoding": "typed",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						}
					}
				},
				"Range": {
					"type": "struct",
					"description": "Range of a camera in centimeters",
					"comment": "Test comment",
					"deprecation": "Test deprecation message",
					"children": {
						"Min": {
							"type": "property",
							"description": "Minimum range of a camera in centimeters",
							"datatype": "uint32",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						},
						"Max": {
							"type": "property",
							"description": "Maximum range of a camera in centimeters",
							"datatype": "uint32",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						}
					}
				},
				"Orientation": {
					"type": "struct",
					"description": "Orientation of a camera",
					"comment": "Test comment",
					"deprecation": "Test deprecation message",
					"children": {
						"Front": {
							"type": "property",
							"description": "Indicates whether the camera is oriented to the front of the vehicle",
							"datatype": "boolean",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						},
						"Rear": {
							"type": "property",
							"description": "Indicates whether the camera is oriented to the rear of the vehicle",
							"datatype": "boolean",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						},
						"Side": {
							"type": "property",
							"description": "Indicates whether the camera is oriented to the side of the vehicle",
							"datatype": "boolean",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						}
					}
				},
				"Frame": {
					"type": "struct",
					"description": "Represents a camera frame",
					"comment": "Test comment",
					"deprecation": "Test deprecation message",
					"children": {
						"Data": {
							"type": "property",
							"datatype": "string",
							"dataencoding": "binary",
							"comment": "Test comment",
							"deprecation": "Test deprecation message"
						}
					}
				}
			}
		}
	}
 
}
```

The following example shows the same signals defined in VSS in a JSON string.

```
{
   "vssJson": "{\"Vehicle\":{\"type\":\"branch\",\"children\":{\"Chassis\":{\"type\":\"branch\",\"description\":\"All data concerning steering, suspension, wheels, and brakes.\",\"children\":{\"SteeringWheel\":{\"type\":\"branch\",\"description\":\"Steering wheel signals\",\"children\":{\"Diameter\":{\"type\":\"attribute\",\"description\":\"The diameter of the steering wheel\",\"datatype\":\"float\",\"unit\":\"cm\",\"min\":1,\"max\":50},\"HandsOff\":{\"type\":\"branch\",\"children\":{\"HandsOffSteeringState\":{\"type\":\"actuator\",\"description\":\"HndsOffStrWhlDtSt. Hands Off Steering State\",\"datatype\":\"boolean\"},\"HandsOffSteeringMode\":{\"type\":\"actuator\",\"description\":\"HndsOffStrWhlDtMd. Hands Off Steering Mode\",\"datatype\":\"int8\",\"min\":0,\"max\":2}}}}},\"Accelerator\":{\"type\":\"branch\",\"description\":\"\",\"children\":{\"AcceleratorPedalPosition\":{\"type\":\"sensor\",\"description\":\"Throttle__Position. Accelerator pedal position as percent. 0 = Not depressed. 100 = Fully depressed.\",\"datatype\":\"uint8\",\"unit\":\"%\",\"min\":0,\"max\":100.000035}}}}},\"Powertrain\":{\"type\":\"branch\",\"description\":\"Powertrain data for battery management, etc.\",\"children\":{\"Transmission\":{\"type\":\"branch\",\"description\":\"Transmission-specific data, stopping at the drive shafts.\",\"children\":{\"VehicleOdometer\":{\"type\":\"sensor\",\"description\":\"Vehicle_Odometer\",\"datatype\":\"float\",\"unit\":\"km\",\"min\":0,\"max\":67108863.984375}}},\"CombustionEngine\":{\"type\":\"branch\",\"description\":\"Engine-specific data, stopping at the bell housing.\",\"children\":{\"Engine\":{\"type\":\"branch\",\"description\":\"Engine description\",\"children\":{\"timing\":{\"type\":\"branch\",\"description\":\"timing description\",\"children\":{\"run_time\":{\"type\":\"sensor\",\"description\":\"Engine run time\",\"datatype\":\"int16\",\"unit\":\"ms\",\"min\":0,\"max\":10000},\"idle_time\":{\"type\":\"sensor\",\"description\":\"Engine idle time\",\"datatype\":\"int16\",\"min\":0,\"unit\":\"ms\",\"max\":10000}}}}}}}}},\"Axle\":{\"type\":\"branch\",\"description\":\"Axle signals\",\"children\":{\"TireRRPrs\":{\"type\":\"sensor\",\"description\":\"TireRRPrs. Right rear Tire pressure in kilo-Pascal\",\"datatype\":\"float\",\"unit\":\"kPaG\",\"min\":0,\"max\":1020}}}}}}"
}
```

**Note**  
You can download a [demo script](https://raw.githubusercontent.com/aws/aws-iot-fleetwise-edge/main/tools/cloud/ros2-to-nodes.py) to convert ROS 2 messages to VSS JSON files that are compatible with the signal catalog. For more information, see the [https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb](https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb).  
Vision system data is in preview release and is subject to change.

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `ImportSignalCatalog` API operation.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

# Update an AWS IoT FleetWise signal catalog
<a name="update-signal-catalog"></a>

You can use the [UpdateSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_UpdateSignalCatalog.html) API operation to update an existing signal catalog. The following example uses AWS CLI.

To update an existing signal catalog, run the following command.

Replace *signal-catalog-configuration* with the name of the .json file that contains the configuration.

```
aws iotfleetwise update-signal-catalog --cli-input-json file://signal-catalog-configuration.json
```

## Signal catalog configuration
<a name="update-signal-catalog-configuration"></a>

Replace *signal-catalog-name* with the name of the signal catalog that you're updating.

For more information about how to configure branches, attributes, sensors, and actuators, see [Configure AWS IoT FleetWise signals](define-signal.md).

**Important**  
Custom structures are immutable. If you need to re-order or insert properties to an existing custom structure (struct), delete the structure and create a brand-new structure with the desired order of properties.  
To delete a custom structure, add the structure's fully qualified name in `nodesToRemove`. A structure can't be deleted if it's referred to by any signals. Any signals that refer to the structure (their data type is defined as the target structure) must be updated or deleted before the request to update the signal catalog.

```
{
    	"name": "signal-catalog-name",
    	"nodesToAdd": [{
    			"branch": {
    				"description": "Front left of vehicle specific data.",
    				"fullyQualifiedName": "Vehicle.Front.Left"
    			}
    		},
    		{
    			"branch": {
    				"description": "Door-specific data for the front left of vehicle.",
    				"fullyQualifiedName": "Vehicle.Front.Left.Door"
    			}
    		},
    		{
    			"actuator": {
    				"fullyQualifiedName": "Vehicle.Front.Left.Door.Lock",
    				"description": "Whether the front left door is locked.",
    				"dataType": "BOOLEAN"
    			}
    		},
    		{
    			"branch": {
    				"fullyQualifiedName": "Vehicle.Camera"
    			}
    		},
    		{
    			"struct": {
    				"fullyQualifiedName": "Vehicle.Camera.SVMCamera"
    			}
    		},
    		{
    			"property": {
    				"fullyQualifiedName": "Vehicle.Camera.SVMCamera.ISO",
    				"dataType": "STRING"
    			}
    		}
    	],
    	"nodesToRemove": ["Vehicle.Chassis.SteeringWheel.HandsOffSteeringState"],
    	"nodesToUpdate": [{
    		"attribute": {
    			"dataType": "FLOAT",
    			"fullyQualifiedName": "Vehicle.Chassis.SteeringWheel.Diameter",
    			"max": 55
    		}
    	}]
    }
```

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `UpdateSignalCatalog` API operation.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

## Verify signal catalog update
<a name="verify-catalog-update"></a>

You can use the [ListSignalCatalogNodes](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListSignalCatalogNodes.html) API operation to verify if a signal catalog was updated. The following example uses AWS CLI.

To retrieve a paginated list of summaries of all signals (nodes) in a given signal catalog, run the following command.

Replace *signal-catalog-name* with the name of the signal catalog that you're checking.

```
aws iotfleetwise list-signal-catalog-nodes --name signal-catalog-name
```

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `ListSignalCatalogNodes` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

# Delete an AWS IoT FleetWise signal catalog
<a name="delete-signal-catalog"></a>

You can use the [DeleteSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_DeleteSignalCatalog.html) API operation to delete a signal catalog. The following example uses AWS CLI.

**Important**  
Before deleting a signal catalog, make sure it has no associated vehicle models, decoder manifests, vehicles, fleets, or campaigns. For instructions, see the following:  
[Delete an AWS IoT FleetWise vehicle model](delete-vehicle-model.md)
[Delete an AWS IoT FleetWise decoder manifest](delete-decoder-manifest.md)
[Delete an AWS IoT FleetWise vehicle](delete-vehicle.md)
[Delete an AWS IoT FleetWise fleet](delete-fleet-cli.md)
[Delete an AWS IoT FleetWise campaign](delete-campaign.md)

To delete an existing signal catalog, run the following command. Replace *signal-catalog-name* with the name of the signal catalog that you're deleting.

```
aws iotfleetwise delete-signal-catalog --name signal-catalog-name
```

## Verify signal catalog deletion
<a name="verify-catalog-update"></a>

You can use the [ListSignalCatalogs](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListSignalCatalogs.html) API operation to verify if a signal catalog has been deleted. The following example uses AWS CLI.

To retrieve a paginated list of summaries of all signal catalogs, run the following command.

```
aws iotfleetwise list-signal-catalogs
```

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `ListSignalCatalogs` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

# Get AWS IoT FleetWise signal catalog information
<a name="get-signal-catalog-information"></a>

You can use the [GetSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_GetSignalCatalog.html) API operation to retrieve signal catalog information. The following example uses AWS CLI.

To retrieve information about a signal catalog, run the following command.

Replace *signal-catalog-name* with the name of the signal catalog that you want to retrieve.

```
aws iotfleetwise get-signal-catalog --name signal-catalog-name
```

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `GetSignalCatalog` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

**Note**  
This operation is [eventually consistent](https://web.stanford.edu/class/cs345d-01/rl/eventually-consistent.pdf). In other words, changes to the signal catalog might not be reflected immediately.

# Manage AWS IoT FleetWise vehicle models
<a name="vehicle-models"></a>

You use signals to create vehicle models that help standardize the format of your vehicles. Vehicle models enforce consistent information across multiple vehicles of the same type, so that you can process data from fleets of vehicles. Vehicles created from the same vehicle model inherit the same group of signals. For more information, see [Manage AWS IoT FleetWise vehicles](vehicles.md).

Each vehicle model has a status field that contains the state of the vehicle model. The state can be one of the following values:
+ `ACTIVE` – The vehicle model is active.
+ `DRAFT` – The configuration of the vehicle model is saved. 

**Important**  
You must have a signal catalog before you can create a vehicle model using the `CreateModelManifest` API operation. For more information, see [Create an AWS IoT FleetWise signal catalog](create-signal-catalog.md).
If you use the AWS IoT FleetWise console to create a vehicle model, AWS IoT FleetWise automatically activates the vehicle model for you.
If you use the `CreateModelManifest` API operation to create a vehicle model, the vehicle model stays in the `DRAFT` state.
You can't create vehicles from vehicle models that are in the `DRAFT` state. Use the `UpdateModelManifest` API operation to change vehicle models to the `ACTIVE` state.
You can't edit vehicle models that are in the `ACTIVE` state.

**Topics**
+ [Create an AWS IoT FleetWise vehicle model](create-vehicle-model.md)
+ [Update an AWS IoT FleetWise vehicle model](update-vehicle-model-cli.md)
+ [Delete an AWS IoT FleetWise vehicle model](delete-vehicle-model.md)
+ [Get AWS IoT FleetWise vehicle model information](get-vehicle-model-information.md)

# Create an AWS IoT FleetWise vehicle model
<a name="create-vehicle-model"></a>

You can use the AWS IoT FleetWise console or API to create vehicle models. 

**Topics**
+ [Create a vehicle model (console)](#create-vehicle-model-console)
+ [Create a vehicle model (AWS CLI)](#create-vehicle-model-cli)

## Create a vehicle model (console)
<a name="create-vehicle-model-console"></a>

In the AWS IoT FleetWise console, you can create a vehicle model in the following ways:
+ [Use a template provided by AWS](#use-obd-template)
+ [Manually create a vehicle model](#manually-create-vehicle-model)
+ [Duplicate a vehicle model](#duplicate-vehicle-model)

### Use a template provided by AWS
<a name="use-obd-template"></a>

AWS IoT FleetWise provides an On-board Diagnostic (OBD) II, J1979 template that automatically creates a signal catalog, a vehicle model, and a decoder manifest for you. The template also adds OBD network interfaces to the decoder manifest. For more information, see [Manage AWS IoT FleetWise decoder manifests](decoder-manifests.md).

**To create a vehicle model by using a template**

1. <a name="fleetwise-open-console"></a>Open the [AWS IoT FleetWise console](https://console.aws.amazon.com/iotfleetwise).

1. <a name="choose-vehicle-models"></a>On the navigation pane, choose **Vehicle models**.

1. On the **Vehicle models** page, choose **Add provided template**.

1. Choose **On-board diagnostics (OBD) II**.

1. Enter a name for the OBD network interface that AWS IoT FleetWise is creating.

1. Choose **Add**.

### Manually create a vehicle model
<a name="manually-create-vehicle-model"></a>

You can add signals from the signal catalog or import signals by uploading one or more .dbc files. A .dbc file is a file format that Controller Area Network (CAN bus) databases support.

**Important**  
You can't create a vehicle model with vision system data signals using the AWS IoT FleetWise console. Instead, use the AWS CLI to create a vehicle model.  
Vision system data is in preview release and is subject to change.

**To manually create a vehicle model**

1. <a name="fleetwise-open-console"></a>Open the [AWS IoT FleetWise console](https://console.aws.amazon.com/iotfleetwise).

1. <a name="choose-vehicle-models"></a>On the navigation pane, choose **Vehicle models**.

1. On the **Vehicle models** page, choose **Create vehicle model**, and then do the following.

**Topics**
+ [Step 1: Configure vehicle model](#configure-vehicle-model-console)
+ [Step 2: Add signals](#add-signals-console)
+ [Step 3: Import signals](#import-signals-console)
+ [(Optional) Step 4: Add attributes](#add-attrobutes-console)
+ [Step 5: Review and create](#review-and-create-vehicle-model)

#### Step 1: Configure vehicle model
<a name="configure-vehicle-model-console"></a>

In **General information**, do the following.

1. Enter a name for the vehicle model.

1. (Optional) Enter a description.

1. Choose **Next**.

#### Step 2: Add signals
<a name="add-signals-console"></a>

**Note**  
If this is the first time you've used AWS IoT FleetWise, this step isn't available until you have a signal catalog. When the first vehicle model is created, AWS IoT FleetWise automatically creates a signal catalog with signals added to the first vehicle model.
If you're experienced with AWS IoT FleetWise, you can add signals to your vehicle model by selecting signals from the signal catalog or uploading .dbc files to import signals.
You must have at least one signal to create a vehicle model.

**To add signals**

1. Choose one or more signals from the signal catalog that you're adding to the vehicle model. You can review selected signals in the right pane.
**Note**  
Only selected signals will be added to the vehicle model.

1. Choose **Next**.

#### Step 3: Import signals
<a name="import-signals-console"></a>

**Note**  
If this is the first time you've used AWS IoT FleetWise, you must upload at least one .dbc file to import signals.
If you're experienced with AWS IoT FleetWise, you can add signals to your vehicle model by selecting signals from the signal catalog or uploading .dbc files to import signals.
You must have at least one signal to create a vehicle model.

**To import signals**

1. Choose **Choose files**.

1. In the dialog box, choose the .dbc file that contains signals. You can upload multiple .dbc files.

1. AWS IoT FleetWise parses your .dbc files to retrieve signals. 

   In the **Signals** section, specify the following metadata for each signal.
   + **Name** – The signal's name.

     The signal name must be unique. The signal name plus the path can have up to 150 characters. Valid characters: a–z, A–Z, 0–9, : (colon), and \$1 (underscore).
   + **Data type** – The signal's data type must be one of the following: INT8, UINT8, INT16, UINT16, INT32, UINT32, INT64, UINT64, BOOLEAN, FLOAT, DOUBLE, STRING, UNIX\$1TIMESTAMP, INT8\$1ARRAY, UINT8\$1ARRAY, INT16\$1ARRAY, UINT16\$1ARRAY, INT32\$1ARRAY, UINT32\$1ARRAY, INT64\$1ARRAY, UINT64\$1ARRAY, BOOLEAN\$1ARRAY, FLOAT\$1ARRAY, DOUBLE\$1ARRAY, STRING\$1ARRAY, UNIX\$1TIMESTAMP\$1ARRAY, or UNKNOWN.
   + **Signal type** – The type of the signal, which can be **Sensor** or **Actuator**.
   + (Optional) **Unit** – The scientific unit for the signal, such as km or Celsius.
   + (Optional) **Path** – The path to the signal. Similar to JSONPath, use a dot(.) to refer to a child signal. For example, **Vehicle.Engine.Light**.

     The signal name plus the path can have up to 150 characters. Valid characters: a–z, A–Z, 0–9, : (colon), and \$1 (underscore).
   + (Optional) **Min** – The minimum value of the signal.
   + (Optional) **Max** – The maximum value of the signal.
   + (Optional) **Description** – The description for the signal.

     The description can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).

1. Choose **Next**.

#### (Optional) Step 4: Add attributes
<a name="add-attrobutes-console"></a>

You can add up to 100 attributes, including the existing attributes in the signal catalog.

**To add attributes**

1. In **Add attributes**, specify the following metadata for each attribute.
   + **Name** – The attribute's name.

     The signal name must be unique. The signal name and path can have up to 150 characters. Valid characters: a–z, A–Z, 0–9, : (colon), and \$1 (underscore)
   + **Data type** – The attribute's data type must be one of the following: INT8, UINT8, INT16, UINT16, INT32, UINT32, INT64, UINT64, BOOLEAN, FLOAT, DOUBLE, STRING, UNIX\$1TIMESTAMP, INT8\$1ARRAY, UINT8\$1ARRAY, INT16\$1ARRAY, UINT16\$1ARRAY, INT32\$1ARRAY, UINT32\$1ARRAY, INT64\$1ARRAY, UINT64\$1ARRAY, BOOLEAN\$1ARRAY, FLOAT\$1ARRAY, DOUBLE\$1ARRAY, STRING\$1ARRAY, UNIX\$1TIMESTAMP\$1ARRAY, or UNKNOWN
   + (Optional) **Unit** – The scientific unit for the attribute, such as km or Celsius.
   + (Optional) **Path** – The path to the signal. Similar to JSONPath, use a dot(.) to refer to a child signal. For example, **Vehicle.Engine.Light**.

     The signal name plus the path can have up to 150 characters. Valid characters: a–z, A–Z, 0–9, : (colon), and \$1 (underscore)
   + (Optional) **Min** – The minimum value of the attribute.
   + (Optional) **Max** – The maximum value of the attribute.
   + (Optional) **Description** – The description for the attribute.

     The description can have up to 2048 characters. Valid characters: a–z, A–Z, 0–9, : (colon), \$1 (underscore), and - (hyphen).

1. Choose **Next**.

#### Step 5: Review and create
<a name="review-and-create-vehicle-model"></a>

Verify the configurations for the vehicle model, and then choose **Create**.

### Duplicate a vehicle model
<a name="duplicate-vehicle-model"></a>

AWS IoT FleetWise can copy the configurations of an existing vehicle model to create a new model. Signals specified in the selected vehicle model are copied to the new vehicle model. 

**To duplicate a vehicle model**

1. <a name="fleetwise-open-console"></a>Open the [AWS IoT FleetWise console](https://console.aws.amazon.com/iotfleetwise).

1. <a name="choose-vehicle-models"></a>On the navigation pane, choose **Vehicle models**.

1. Choose a model from the vehicle model list, and then choose **Duplicate model**.

To configure the vehicle model, follow the [Manually create a vehicle model](#manually-create-vehicle-model) tutorial.

It can take a few minutes for AWS IoT FleetWise to process your request to create the vehicle model. After the vehicle model is successfully created, on the **Vehicle models** page, the **Status** column shows **ACTIVE**. When the vehicle model becomes active, you can't edit it.

## Create a vehicle model (AWS CLI)
<a name="create-vehicle-model-cli"></a>

You can use the [CreateModelManifest](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_CreateModelManifest.html) API operation to create vehicle models (model manifests). The following example uses the AWS CLI. 

**Important**  
You must have a signal catalog before you can create a vehicle model using the `CreateModelManifest` API operation. For more information about how to create a signal catalog, see [Create an AWS IoT FleetWise signal catalog](create-signal-catalog.md).

To create a vehicle model, run the following command.

Replace *vehicle-model-configuration* with the name of the .json file that contains the configuration.

```
aws iotfleetwise create-model-manifest --cli-input-json file://vehicle-model-configuration.json
```

### Vehicle model configuration
<a name="vehicle-model-configuration"></a>
+ Replace *vehicle-model-name* with the name of the vehicle model that you're creating.
+ Replace *signal-catalog-ARN* with the Amazon Resource Name (ARN) of the signal catalog.
+ (Optional) Replace *description* with a description to help you identify the vehicle model.

For more information about how to configure branches, attributes, sensors, and actuators, see [Configure AWS IoT FleetWise signals](define-signal.md).

```
{
    "name": "vehicle-model-name",
    "signalCatalogArn": "signal-catalog-ARN", 
    "description": "description",
    "nodes": ["Vehicle.Chassis"]
}
```

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `CreateModelManifest` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

# Update an AWS IoT FleetWise vehicle model
<a name="update-vehicle-model-cli"></a>

You can use the [UpdateModelManifest](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_UpdateModelManifest.html) API operation to update an existing vehicle model (model manifests). The following example uses the AWS CLI. 

To update an existing vehicle model, run the following command.

Replace *update-vehicle-model-configuration* with the name of the .json file that contains the configuration.

```
aws iotfleetwise update-model-manifest --cli-input-json file://update-vehicle-model-configuration.json
```

## Update vehicle model configuration
<a name="update-vehicle-model-configuration"></a>
+ Replace *vehicle-model-name* with the name of the vehicle model that you're updating.
+ (Optional) To activate the vehicle model, replace *vehicle-model-status* with `ACTIVE`. 
**Important**  
After the vehicle model is activated, you can't change the vehicle model.
+ (Optional) Replace *description* with an updated description to help you identify the vehicle model.

```
{
    "name": "vehicle-model-name",
    "status": "vehicle-model-status",                        
    "description": "description",
    "nodesToAdd": ["Vehicle.Front.Left"],
    "nodesToRemove": ["Vehicle.Chassis.SteeringWheel"],   
}
```

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `UpdateModelManifest` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

## Verify vehicle model update
<a name="verify-model-update"></a>

You can use the [ListModelManifestNodes](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListModelManifestNodes.html) API operation to verify if a vehicle model was updated. The following example uses AWS CLI.

To retrieve a paginated list of summaries of all signals (nodes) in a given vehicle model, run the following command.

Replace *vehicle-model-name* with the name of the vehicle model that you're checking.

```
aws iotfleetwise list-model-manifest-nodes /
                 --name vehicle-model-name
```

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `ListModelManifestNodes` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

# Delete an AWS IoT FleetWise vehicle model
<a name="delete-vehicle-model"></a>

You can use the AWS IoT FleetWise console or API to delete vehicle models.

**Important**  
Vehicles and decoder manifests associated with the vehicle model must be deleted first. For more information, see [Delete an AWS IoT FleetWise vehicle](delete-vehicle.md) and [Delete an AWS IoT FleetWise decoder manifest](delete-decoder-manifest.md).

## Delete a vehicle model (console)
<a name="delete-vehicle-model-console"></a>

To delete a vehicle model, use the AWS IoT FleetWise console.

**To delete a vehicle model**

1. <a name="fleetwise-open-console"></a>Open the [AWS IoT FleetWise console](https://console.aws.amazon.com/iotfleetwise).

1. <a name="choose-vehicle-models"></a>On the navigation pane, choose **Vehicle models**.

1. On the **Vehicle models** page, choose the target vehicle model.

1. Choose **Delete**.

1. In **Delete **vehicle-model-name**?**, enter the name of the vehicle model to delete, and then choose **Confirm**.

## Delete a vehicle model (AWS CLI)
<a name="delete-vehicle-model-cli"></a>

You can use the [DeleteModelManifest](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_DeleteModelManifest.html) API operation to delete an existing vehicle model (model manifests). The following example uses the AWS CLI. 

To delete a vehicle model, run the following command.

Replace *model-manifest-name* with the name of the vehicle model that you're deleting.

```
aws iotfleetwise delete-model-manifest --name model-manifest-name
```

### Verify vehicle model deletion
<a name="verify-model-deletion"></a>

You can use the [ListModelManifests](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListModelManifests.html) API operation to verify if a vehicle model was deleted. The following example uses AWS CLI.

To retrieve a paginated list of summaries of all vehicle models, run the following command.

```
aws iotfleetwise list-model-manifests
```

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `ListModelManifests` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

# Get AWS IoT FleetWise vehicle model information
<a name="get-vehicle-model-information"></a>

You can use the [GetModelManifest](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_GetModelManifest.html) API operation to retrieve information about a vehicle model. The following example uses AWS CLI.

To retrieve information about a vehicle model, run the following command.

Replace *vehicle-model* with the name of the vehicle model that you want to retrieve.

```
aws iotfleetwise get-model-manifest --name vehicle-model
```

**Note**  
This operation is [eventually consistent](https://web.stanford.edu/class/cs345d-01/rl/eventually-consistent.pdf). In other words, changes to the vehicle model might not be reflected immediately.

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `GetModelManifest` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

# Manage AWS IoT FleetWise decoder manifests
<a name="decoder-manifests"></a>

**Important**  
Access to certain AWS IoT FleetWise features is currently gated. For more information, see [AWS Region and feature availability in AWS IoT FleetWise](fleetwise-regions.md).

Decoder manifests contain decoding information that AWS IoT FleetWise uses to transform vehicle data (binary data) into human-readable values and to prepare your data for data analyses. Network interface and signal decoders are the core components that you work with to configure decoder manifests. 

**Network interface**  <a name="network-interface-definition"></a>
Contains information about the protocol that the in-vehicle network uses. AWS IoT FleetWise supports the following protocols.    
**Controller Area Network (CAN bus)**  
A protocol that defines how data is communicated between electronic control units (ECUs). ECUs can be the engine control unit, airbags, or the audio system.  
**On-board diagnostic (OBD) II**  
A further developed protocol that defines how self-diagnostic data is communicated between ECUs. It provides a number of standard diagnostic trouble codes (DTCs) that help identify what is wrong with your vehicle.  
**Vehicle middleware**  
The vehicle middleware defined as a type of network interface. Examples of vehicle middleware include Robot Operating System (ROS 2) and Scalable service-Oriented MiddlewarE over IP (SOME/IP).  
AWS IoT FleetWise supports ROS 2 middleware for vision system data.  
**Custom interfaces**  
You can also use your own interface to decode signals at the Edge. This can save you time since you don't need to create decoding rules in the cloud.

**Signal decoder**  <a name="decoder-signal-definition"></a>
Provides detailed decoding information for a specific signal. Every signal specified in the vehicle model must be paired with a signal decoder. If the decoder manifest contains CAN network interfaces, it must contain CAN decoder signals. If the decoder manifest contains OBD network interfaces, it must contain OBD signal decoders.  
The decoder manifest must contain message signal decoders if it also contains vehicle middleware interfaces. Or, if the decoder manifest contains custom decoding interfaces, it must also contain custom decoding signals.

Each decoder manifest must be associated with a vehicle model. AWS IoT FleetWise uses the associated decoder manifest to decode data from vehicles created based on the vehicle model.

Each decoder manifest has a status field that contains the state of the decoder manifest. The state can be one of the following values:
+ `ACTIVE` – The decoder manifest is active.
+ `DRAFT` – The configuration of the decoder manifest isn't saved. 
+ `VALIDATING` – The decoder manifest is under validation for its eligibility. This only applies to decoder manifests that contain at least one vision system data signal.
+ `INVALID` – The decoder manifest failed validation and can't be activated yet. This only applies to decoder manifests that contain at least one vision system data signal. You can use the ListDecoderManifests and GetDecoderManifest APIs to check the reason for a failed validation.

**Important**  
If you use the AWS IoT FleetWise console to create a decoder manifest, AWS IoT FleetWise automatically activates the decoder manifest for you.
If you use the `CreateDecoderManifest` API operation to create a decoder manifest, the decoder manifest stays in the `DRAFT` state.
You can't create vehicles from vehicle models that are associated with a `DRAFT` decoder manifest. Use the `UpdateDecoderManifest` API operation to change the decoder manifest to the `ACTIVE` state.
You can't edit decoder manifests that are in the `ACTIVE` state.

**Topics**
+ [Configure AWS IoT FleetWise network interfaces and decoder signals](configure-network-interfaces-decoder-signals.md)
+ [Create an AWS IoT FleetWise decoder manifest](create-decoder-manifest.md)
+ [Update an AWS IoT FleetWise decoder manifest](update-decoder-manifest.md)
+ [Delete an AWS IoT FleetWise decoder manifest](delete-decoder-manifest.md)
+ [Get AWS IoT FleetWise decoder manifest information](get-decoder-manifest-information.md)

# Configure AWS IoT FleetWise network interfaces and decoder signals
<a name="configure-network-interfaces-decoder-signals"></a>

**Important**  
Access to certain AWS IoT FleetWise features is currently gated. For more information, see [AWS Region and feature availability in AWS IoT FleetWise](fleetwise-regions.md).

Every decoder manifest has at least a network interface and signal decoders paired with signals specified in the associated vehicle model.

If the decoder manifest contains CAN network interfaces, it must contain CAN signal decoders. If the decoder manifest contains OBD network interfaces, it must contain OBD signal decoders.

**Topics**
+ [Configure network interfaces](#configure-network-interfaces)
+ [Configure signal decoders](#configure-decoder-signals)

## Configure network interfaces
<a name="configure-network-interfaces"></a>

To configure a CAN network interface, specify the following information.
+ `name` – The CAN interface's name. 

  The interface name must be unique and can have 1–100 characters.
+ (Optional) `protocolName` – The protocol's name.

  Valid values: `CAN-FD` and `CAN`
+ (Optional) `protocolVersion` – AWS IoT FleetWise currently supports CAN-FD and CAN 2.0b.

  Valid values: `1.0` and `2.0b`

To configure an OBD network interface, specify the following information.
+ `name` – The OBD interface's name. 

  The interface name must be unique and can have 1–100 characters.
+ `requestMessageId` – The ID of the message that is requesting data.
+ (Optional) `dtcRequestIntervalSeconds` – How often to request diagnostic trouble codes (DTCs) from the vehicle in seconds. For example, if the specified value is 120, the Edge Agent software collects stored DTCs once every 2 minutes.
+ (Optional) `hasTransmissionEcu` – Whether the vehicle has a transmission control module (TCM).

  Valid values: `true` and `false`
+ (Optional) `obdStandard` – The OBD standard that AWS IoT FleetWise supports. AWS IoT FleetWise currently supports the World Wide Harmonization On-Board Diagnostics (WWH-OBD) ISO15765-4 standard.
+ (Optional) `pidRequestIntervalSeconds` – How often to request OBD II PIDs from the vehicle. For example, if the specified value is 120, the Edge Agent software collects OBD II PIDs once every 2 minutes.
+ (Optional) `useExtendedIds` – Whether to use extended IDs in the message.

  Valid values: `true` and `false`

To configure a vehicle middleware network interface, specify the following information.
+ `name` – The vehicle middleware interface's name. 

  The interface name must be unique and can have 1–100 characters.
+ `protocolName` – The protocol's name.

  Valid values: `ROS_2`

To configure a custom decoding interface, specify the following information.
+ `name` – The name of your decoder that you use to decode signals at the Edge.

  The decoder interface name can have 1–100 characters.

## Configure signal decoders
<a name="configure-decoder-signals"></a>

To configure a CAN signal decoder, specify the following information.
+ `factor` – The multiplier used to decode the message.
+ `isBigEndian` – Whether the byte ordering of the message is big-endian. If it's big-endian, the most significant value in the sequence is stored first, at the lowest storage address.
+ `isSigned` – Whether the message is signed. If it's signed, the message can represent both positive and negative numbers.
+ `length` – The length of the message in bits.
+ `messageId` – The ID of the message.
+ `offset` – The offset used to calculate the signal value. Combined with factor, the calculation is `value = raw_value * factor + offset`.
+ `startBit` – Indicates the location of the first bit of the message.
+ (Optional) `name` – The name of the signal.
+ (Optional) `signalValueType` – The value type of the signal. Integer is the default value type.

To configure an OBD signal decoder, specify the following information.
+ `byteLength` – The length of the message in bytes.
+ `offset` – The offset used to calculate the signal value. Combined with scaling, the calculation is `value = raw_value * scaling + offset`.
+ `pid` – The diagnostic code used to request a message from a vehicle for this signal.
+ `pidResponseLength` – The length of the requested message.
+ `scaling` – The multiplier used to decode the message.
+ `serviceMode` – The mode of operation (diagnostic service) in a message.
+ `startByte` – Indicates the beginning of the message.
+ (Optional) `bitMaskLength` – The number of bits that are masked in a message.
+ (Optional) `bitRightShift` – The number of positions shifted to the right.
+ (Optional) `isSigned` – Whether the message is signed. If it's signed, the message can represent both positive and negative numbers. The message is not signed by default (`false`).
+ (Optional) `signalValueType` – The value type of the signal. Integer is the default value type.

To configure a message signal decoder, specify the following information.
+ `topicName` – The topic name for the message signal. It corresponds to topics in ROS 2. For more information about the structured message object, see [StructuredMessage](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_StructuredMessage.html).
+ `structuredMessage` – The structured message for the message signal. It can be defined with either a primitiveMessageDefinition, structuredMessageListDefinition, or structuredMessageDefinition recursively.

To configure a custom decoding signal, specify the following information.
+ (Optional) `id` – The ID of the signal that you decode yourself using your decoder interface. The signal ID can have 1–150 characters. If not specified, the `id` defaults to the `fullyQualifiedName` of the signal.

# Create an AWS IoT FleetWise decoder manifest
<a name="create-decoder-manifest"></a>

**Important**  
Access to certain AWS IoT FleetWise features is currently gated. For more information, see [AWS Region and feature availability in AWS IoT FleetWise](fleetwise-regions.md).

You can use the AWS IoT FleetWise console or API to create a decoder manifest for your vehicle model.

**Topics**
+ [Create a decoder manifest (console)](#create-decoder-manifest-console)
+ [Create a decoder manifest (AWS CLI)](#create-decoder-manifest-cli)

## Create a decoder manifest (console)
<a name="create-decoder-manifest-console"></a>

You can use the AWS IoT FleetWise console to create a decoder manifest that's associated with your vehicle model.

**Important**  
You can't configure vision system data signals in decoder manifests using the AWS IoT FleetWise console. Instead, use the AWS CLI. Vision system data is in preview release and is subject to change.

**To create a decoder manifest**

1. <a name="fleetwise-open-console"></a>Open the [AWS IoT FleetWise console](https://console.aws.amazon.com/iotfleetwise).

1. <a name="choose-vehicle-models"></a>On the navigation pane, choose **Vehicle models**.

1. Choose the target vehicle model.

1. On the vehicle model summary page, choose **Create decoder manifest**, and then do the following.

**Topics**
+ [Step 1: Configure decoder manifest](#configure-decoder-manifest-console)
+ [Step 2: Map CAN interface](#map-can-interface)
+ [Step 3: Review and create](#review-and-create-decoder-manifest-console)

### Step 1: Configure decoder manifest
<a name="configure-decoder-manifest-console"></a>

In **General information**, do the following.

1. Enter a unique name for the decoder manifest.

1. (Optional) Enter a description.

1. Choose **Next**.

#### Add network interfaces
<a name="add-network-interfaces"></a>

Each decoder manifest must have at least one network interface. You can add multiple network interfaces to a decoder manifest.

**To add a network interface**

1. Upload a network interface file. You can upload a .dbc file for CAN protocols, or a .json file for ROS 2 or custom interfaces.

1. Enter a name for your network interface. If you uploaded a custom interface, the name is already provided.

#### Map missing signals
<a name="map-missing-decoders"></a>

If there are signals in the vehicle model that are missing paired signal decoders in the uploaded network interfaces, you can create a default custom decoder that will map the missing signals. This is optional since you can manually map the signals in the next step.

**To create a default custom decoder**

1. Select **Create default custom decoder for missing signals**.

1. Choose **Next**.

### Step 2: Map CAN interface
<a name="map-can-interface"></a>

You can map the CAN signals with CAN signal decoders. If you selected the **Create default custom decoder for missing signals** checkbox, any signals that are missing a decoder signal are automatically mapped to default custom signal decoders.

**To map CAN signals**

1. In **CAN signal mapping**, select a signal decoder.

1. Choose **Next**.

**Note**  
If you added a ROS 2 or a custom interface, you can verify the mappings before creating the decoder manifest.

### Step 3: Review and create
<a name="review-and-create-decoder-manifest-console"></a>

Verify the configurations for the decoder manifest, and then choose **Create**.

## Create a decoder manifest (AWS CLI)
<a name="create-decoder-manifest-cli"></a>

You can use the [CreateDecoderManifest](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_CreateDecoderManifest.html) API operation to create decoder manifests. The following example uses the AWS CLI. 

**Important**  
You must have a vehicle model before you can create a decoder manifest. Every decoder manifest must be associated with a vehicle model. For more information, see [Create an AWS IoT FleetWise vehicle model](create-vehicle-model.md).

To create a decoder manifest, run the following command.

Replace *decoder-manifest-configuration* with the name of the .json file that contains the configuration.

```
aws iotfleetwise create-decoder-manifest --cli-input-json file://decoder-manifest-configuration.json
```

### Decoder manifest with CAN interface configuration
<a name="decoder-manifest-configuration"></a>
+ Replace *decoder-manifest-name* with the name of the decoder manifest that you're creating.
+ Replace *vehicle-model-ARN* with the Amazon Resource Name (ARN) of the vehicle-model.
+ (Optional) Replace *description* with a description to help you identify the decoder manifest.

For more information about how to configure branches, attributes, sensors, and actuators, see [Configure AWS IoT FleetWise network interfaces and decoder signals](configure-network-interfaces-decoder-signals.md).

```
{
    "name": "decoder-manifest-name",
    "modelManifestArn": "vehicle-model-arn",
    "description": "description",
    "networkInterfaces": [
        {
            "canInterface": {
                "name": "myNetworkInterface",
                "protocolName": "CAN",
                "protocolVersion": "2.0b"
            },
            "interfaceId": "Qq1acaenByOB3sSM39SYm",
            "type": "CAN_INTERFACE"
        }
    ],
    "signalDecoders": [
        {
            "canSignal": {
                "name": "Engine_Idle_Time",
                "factor": 1,
                "isBigEndian": true,
                "isSigned": false,
                "length": 24,
                "messageId": 271343712,
                "offset": 0,
                "startBit": 16
            },
            "fullyQualifiedName": "Vehicle.EngineIdleTime",
            "interfaceId": "Qq1acaenByOB3sSM39SYm",
            "type": "CAN_SIGNAL"
        },
        {
            "canSignal": {
                "name": "Engine_Run_Time",
                "factor": 1,
                "isBigEndian": true,
                "isSigned": false,
                "length": 24,
                "messageId": 271343712,
                "offset": 0,
                "startBit": 40
            },
            "fullyQualifiedName": "Vehicle.EngineRunTime",
            "interfaceId": "Qq1acaenByOB3sSM39SYm",
            "type": "CAN_SIGNAL"
        }
    ]
}
```

### Decoder manifest with vehicle middleware interface configuration
<a name="decoder-manifest-vehicle-middleware-configuration"></a>
+ Replace *decoder-manifest-name* with the name of the decoder manifest that you're creating.
+ Replace *vehicle-model-ARN* with the Amazon Resource Name (ARN) of the vehicle-model.
+ (Optional) Replace *description* with a description to help you identify the decoder manifest.

The order of property nodes within a structure (struct) must remain consistent as defined in the signal catalog and vehicle model (model manifest). For more information about how to configure branches, attributes, sensors, and actuators, see [Configure AWS IoT FleetWise network interfaces and decoder signals](configure-network-interfaces-decoder-signals.md).

```
{
	"name": "decoder-manifest-name",
	"modelManifestArn": "vehicle-model-arn",
	"description": "description",
	"networkInterfaces": [{
		"canInterface": {
			"name": "myNetworkInterface",
			"protocolName": "CAN",
			"protocolVersion": "2.0b"
		},
		"interfaceId": "Qq1acaenByOB3sSM39SYm",
		"type": "CAN_INTERFACE"
	}, {
		"type": "VEHICLE_MIDDLEWARE",
		"interfaceId": "G1KzxkdnmV5Hn7wkV3ZL9",
		"vehicleMiddleware": {
			"name": "ROS2_test",
			"protocolName": "ROS_2"
		}
	}],
	"signalDecoders": [{
			"canSignal": {
				"name": "Engine_Idle_Time",
				"factor": 1,
				"isBigEndian": true,
				"isSigned": false,
				"length": 24,
				"messageId": 271343712,
				"offset": 0,
				"startBit": 16
			},
			"fullyQualifiedName": "Vehicle.EngineIdleTime",
			"interfaceId": "Qq1acaenByOB3sSM39SYm",
			"type": "CAN_SIGNAL"
		},
		{
			"canSignal": {
				"name": "Engine_Run_Time",
				"factor": 1,
				"isBigEndian": true,
				"isSigned": false,
				"length": 24,
				"messageId": 271343712,
				"offset": 0,
				"startBit": 40
			},
			"fullyQualifiedName": "Vehicle.EngineRunTime",
			"interfaceId": "Qq1acaenByOB3sSM39SYm",
			"type": "CAN_SIGNAL"
		},
		{
			"fullyQualifiedName": "Vehicle.CompressedImageTopic",
			"type": "MESSAGE_SIGNAL",
			"interfaceId": "G1KzxkdnmV5Hn7wkV3ZL9",
			"messageSignal": {
				"topicName": "CompressedImageTopic:sensor_msgs/msg/CompressedImage",
				"structuredMessage": {
					"structuredMessageDefinition": [{
							"fieldName": "header",
							"dataType": {
								"structuredMessageDefinition": [{
										"fieldName": "stamp",
										"dataType": {
											"structuredMessageDefinition": [{
													"fieldName": "sec",
													"dataType": {
														"primitiveMessageDefinition": {
															"ros2PrimitiveMessageDefinition": {
																"primitiveType": "INT32"
															}
														}
													}
												},
												{
													"fieldName": "nanosec",
													"dataType": {
														"primitiveMessageDefinition": {
															"ros2PrimitiveMessageDefinition": {
																"primitiveType": "UINT32"
															}
														}
													}
												}
											]
										}
									},
									{
										"fieldName": "frame_id",
										"dataType": {
											"primitiveMessageDefinition": {
												"ros2PrimitiveMessageDefinition": {
													"primitiveType": "STRING"
												}
											}
										}
									}
								]
							}
						},
						{
							"fieldName": "format",
							"dataType": {
								"primitiveMessageDefinition": {
									"ros2PrimitiveMessageDefinition": {
										"primitiveType": "STRING"
									}
								}
							}
						},
						{
							"fieldName": "data",
							"dataType": {
								"structuredMessageListDefinition": {
									"name": "listType",
									"memberType": {
										"primitiveMessageDefinition": {
											"ros2PrimitiveMessageDefinition": {
												"primitiveType": "UINT8"
											}
										}
									},
									"capacity": 0,
									"listType": "DYNAMIC_UNBOUNDED_CAPACITY"
								}
							}
						}
					]
				}
			}
		}
	]
}
```

### Decoder manifest with custom decoder configuration
<a name="decoder-manifest-custom-decoder-config"></a>
+ Replace *decoder-manifest-name* with the name of the decoder manifest that you're creating.
+ Replace *vehicle-model-ARN* with the Amazon Resource Name (ARN) of the vehicle-model.
+ (Optional) Replace *description* with a description to help you identify the decoder manifest.

For more information about how to configure branches, attributes, sensors, and actuators, see [Configure AWS IoT FleetWise network interfaces and decoder signals](configure-network-interfaces-decoder-signals.md).

```
{
	"name": "decoder-manifest-name",
	"modelManifestArn": "vehicle-model-arn",
	"description": "description",
	"networkInterfaces": [
        {
		    "interfaceId": "myCustomInterfaceId",
		    "type": "CUSTOM_DECODING_INTERFACE",
            "customDecodingInterface": {
                "name": "myCustomInterface"
            }
        }
    ],
    "signalDecoders": [
        {
            "customDecodingSignal": {
                "fullyQualifiedName": "Vehicle.actuator1",
                "interfaceId": "myCustomInterfaceId",
                "type": "CUSTOM_DECODING_SIGNAL",
                "customDecodingSignal": {
                    "id": "Vehicle.actuator1"
                }
            }
        },
        {
            "customDecodingSignal": {
                "fullyQualifiedName": "Vehicle.actuator2",
                "interfaceId": "myCustomInterfaceId",
                "type": "CUSTOM_DECODING_SIGNAL",
                "customDecodingSignal": {
                    "id": "Vehicle.actuator2"
                }
            }
        }
    ]
}
```

**Note**  
You can download a [demo script](https://raw.githubusercontent.com/aws/aws-iot-fleetwise-edge/main/tools/cloud/ros2-to-decoders.py) to create a decoder manifest with vision system signals. For more information, see the [https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb](https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb).  
Vision system data is in preview release and is subject to change.

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `CreateDecoderManifest` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

# Update an AWS IoT FleetWise decoder manifest
<a name="update-decoder-manifest"></a>

**Important**  
Access to certain AWS IoT FleetWise features is currently gated. For more information, see [AWS Region and feature availability in AWS IoT FleetWise](fleetwise-regions.md).

You can use the [UpdateDecoderManifest](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_UpdateDecoderManifest.html) API operation to update a decoder manifest. You can add, remove, and update network interfaces and signal decoders. You can also change the status of the decoder manifest. The following example uses the AWS CLI.

To update a decoder manifest, run the following command.

Replace *decoder-manifest-name* with the name of the decoder manifest that you're updating.

```
aws iotfleetwise update-decoder-manifest / 
                --name decoder-manifest-name /
                --status ACTIVE
```

If the signals don't have specified decoding rules, you can create default decoding rules. The signals are added to a custom decoded interface with the `CustomDecodingSignal$id` set to the fully qualified name of the signal. To update a decoder manifest with default decoding rules, run the following command.

Replace *decoder-manifest-name* with the name of the decoder manifest that you're updating.

```
aws iotfleetwise update-decoder-manifest / 
                --name decoder-manifest-name /
                --status ACTIVE
                --default-for-unmapped-signals CUSTOM_DECODING
```

**Important**  
After you activate the decoder manifest, you can't edit it.

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `UpdateDecoderManifest` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey*",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

## Verify decoder manifest update
<a name="verify-decoder-update"></a>

You can use the [ListDecoderManifestSignals](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListDecoderManifestSignals.html) API operation to verify if decoder signals in the decoder manifest were updated. The following example uses AWS CLI.

To retrieve a paginated list of summaries of all decoder signals (nodes) in a given decoder manifest, run the following command.

Replace *decoder-manifest-name* with the name of the decoder manifest that you're checking.

```
aws iotfleetwise list-decoder-manifest-signals /
                 --name decoder-manifest-name
```

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `ListDecoderManifestSignals` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

You can use the [ListDecoderManifestNetworkInterfaces](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListDecoderManifestNetworkInterfaces.html) API operation to verify if network interfaces in the decoder manifest were updated. The following example uses AWS CLI.

To retrieve a paginated list of summaries of all network interfaces in a given decoder manifest, run the following command.

Replace *decoder-manifest-name* with the name of the decoder manifest that you're checking.

```
aws iotfleetwise list-decoder-manifest-network-interfaces /
                 --name decoder-manifest-name
```

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `ListDecoderManifestNetworkInterfaces` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

# Delete an AWS IoT FleetWise decoder manifest
<a name="delete-decoder-manifest"></a>

You can use the AWS IoT FleetWise console or API to delete a decoder manifest.

**Important**  
Vehicles associated with the decoder manifest must be deleted first. For more information, see [Delete an AWS IoT FleetWise vehicle](delete-vehicle.md).

**Topics**
+ [Delete a decoder manifest (console)](#delete-decoder-manifest-console)
+ [Delete a decoder manifest (AWS CLI)](#delete-decoder-manifest-cli)

## Delete a decoder manifest (console)
<a name="delete-decoder-manifest-console"></a>

You can use the AWS IoT FleetWise console to delete a decoder manifest.

**To delete a decoder manifest**

1. <a name="fleetwise-open-console"></a>Open the [AWS IoT FleetWise console](https://console.aws.amazon.com/iotfleetwise).

1. <a name="choose-vehicle-models"></a>On the navigation pane, choose **Vehicle models**.

1. Choose the target vehicle model.

1. On the vehicle model summary page, choose the **Decoder manifests** tab.

1. Choose the target decoder manifest, and then choose **Delete**.

1. In **Delete **decoder-manifest-name**?**, enter the name of the decoder manifest to delete, and then choose **Confirm**.

## Delete a decoder manifest (AWS CLI)
<a name="delete-decoder-manifest-cli"></a>

You can use the [DeleteDecoderManifest](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_DeleteDecoderManifest.html) API operation to delete a decoder manifest. The following example uses AWS CLI.

**Important**  
Before you delete the decoder manifest, delete the associated vehicles first. For more information, see [Delete an AWS IoT FleetWise vehicle](delete-vehicle.md).

To delete a decoder manifest, run the following command.

Replace *decoder-manifest-name* with the name of the decoder manifest that you're deleting.

```
aws iotfleetwise delete-decoder-manifest --name decoder-manifest-name
```

### Verify decoder manifest deletion
<a name="verify-decoder-deletion"></a>

You can use the [ListDecoderManifests](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListDecoderManifests.html) API operation to verify if a decoder manifest has been deleted. The following example uses AWS CLI.

To retrieve a paginated list of summaries of all decoder manifests, run the following command.

```
aws iotfleetwise list-decoder-manifests
```

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `ListDecoderManifests` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------

# Get AWS IoT FleetWise decoder manifest information
<a name="get-decoder-manifest-information"></a>

You can use the [GetDecoderManifest](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_GetDecoderManifest.html) API operation to verify if network interfaces and signal decoders in the decoder manifest have been updated. The following example uses AWS CLI.

To retrieve information about a decoder manifest, run the following command.

Replace *decoder-manifest* with the name of the decoder manifest that you want to retrieve.

```
aws iotfleetwise get-decoder-manifest --name decoder-manifest
```

**Note**  
This operation is [eventually consistent](https://web.stanford.edu/class/cs345d-01/rl/eventually-consistent.pdf). In other words, changes to the decoder manifest might not be reflected immediately.

If you [enabled encryption](key-management.md) using a customer managed AWS KMS key, include the following policy statement so that your role can invoke the `GetDecoderManifest` API operation. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:us-east-1:111122223333:key/KMS_KEY_ID"
            ]
        }
    ]
}
```

------