

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 管理 AWS 物联网 FleetWise 信号目录
<a name="signal-catalogs"></a>

**注意**  
您可以下载[演示脚本](https://raw.githubusercontent.com/aws/aws-iot-fleetwise-edge/main/tools/cloud/ros2-to-nodes.py)，将 ROS 2 消息转换为与信号目录兼容的 VSS .json 文件。有关更多信息，请参阅[视觉系统数据开发人员指南**](https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb)。

信号目录是标准化信号的集合，可以重复用于创建车辆模型。 AWS 物联网 FleetWise 支持[车辆信号规范 (VSS)](https://covesa.github.io/vehicle_signal_specification/introduction/overview/)，您可以按照该规格来定义信号。信号可以是以下任何一种。

**属性**  <a name="attribute-definition"></a>
属性表示通常不会变化的静态信息，例如制造商和生产日期。

**分支**  <a name="branch-definition"></a>
分支表示嵌套结构中的信号。分支演示信号层次结构。例如，`Vehicle` 分支有一个子分支 `Powertrain`。`Powertrain` 分支有一个子分支 `combustionEngine`。要找到 `combustionEngine` 分支，请使用 `Vehicle.Powertrain.combustionEngine` 表达式。

**传感器**  <a name="sensor-definition"></a>
传感器数据报告车辆的当前状态，并随着车辆状态（例如液位、温度、振动或电压）的变化而随着时间的推移变化。

**执行器**  <a name="actuator-definition"></a>
执行器数据报告车辆设备（例如电机、加热器和门锁）的状态。更改车辆设备的状态可以更新执行器数据。例如，您可以定义一个代表加热器的执行器。开启或关闭加热器时，执行器会收到新的数据。

**自定义结构**  <a name="custom-structure-definition"></a>
自定义结构（也称为结构体）表示复杂或高阶数据结构。它便于对来自同一来源的数据进行逻辑绑定或分组。结构用于在原子操作中读取或写入数据，例如表示复杂数据类型或高阶形状。  
在信号目录中，使用对结构数据类型的引用而不是基元数据类型来定义结构类型的信号。结构可用于所有类型的信号，包括传感器、属性、执行器和视觉系统数据类型。如果发送或接收结构类型的信号， AWS IoT FleetWise 预计所有包含的项目都具有有效值，因此所有项目都是必填项。例如，如果结构包含项目 Vehicle.Camera.Image.height、Vehicle.Camera.Image.width 和 Vehicle.Camera.Image.data，预计发送的信号包含所有这些项目的值。  
视觉系统数据目前为预览版，可能会发生变化。

**自定义属性**  <a name="custom-property-definition"></a>
自定义属性代表复杂数据结构的成员。该属性的数据类型可以是基元结构，也可以是其他结构。  
当使用结构和自定义属性表示高阶形状时，始终将预期的高阶形状定义为树结构并将其视为树结构。自定义属性用于定义所有叶节点，而结构用于定义所有非叶节点。

**注意**  
<a name="console-auto-create-signal-catalog"></a>如果您使用 AWS 物联网 FleetWise控制台创建第一个车辆模型，则无需手动创建信号目录。当您创建第一个车辆模型时， AWS IoT FleetWise 会自动为您创建信号目录。有关更多信息，请参阅 [创建 AWS 物联网 FleetWise 车辆模型](create-vehicle-model.md)。
<a name="console-auto-update-signal-catalog"></a>如果您使用 AWS 物联网 FleetWise控制台创建车辆模型，则可以上传.dbc 文件以导入信号。.dbc 是控制器局域网 (CAN 总线) 数据库支持的文件格式。创建车辆型号后，新的信号会自动添加到信号目录中。有关更多信息，请参阅 [创建 AWS 物联网 FleetWise 车辆模型](create-vehicle-model.md)。
<a name="signal-catalog-quota"></a>AWS 物联网 FleetWise 目前支持 AWS 账户 每个区域的信号目录。

AWS IoT FleetWise 提供了以下 API 操作，您可以使用这些操作来创建和管理信号目录。
+ [CreateSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_CreateSignalCatalog.html)— 创建新的信号目录。
+ [ImportSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ImportSignalCatalog.html)— 通过上传.json 文件导入信号以创建信号目录。信号必须按照 VSS 进行定义，并以 JSON 格式保存。
+ [UpdateSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_UpdateSignalCatalog.html)— 通过更新、删除或添加信号来更新现有信号目录。
+ [DeleteSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_DeleteSignalCatalog.html)— 删除现有的信号目录。
+ [ListSignalCatalogs](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListSignalCatalogs.html)— 检索所有信号目录摘要的分页列表。
+ [ListSignalCatalogNodes](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListSignalCatalogNodes.html)— 检索给定信号目录中所有信号（节点）摘要的分页列表。
+ [GetSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_GetSignalCatalog.html)— 检索有关信号目录的信息。

**Topics**
+ [

# 配置 AWS 物联网 FleetWise 信号
](define-signal.md)
+ [

# 创建 AWS 物联网 FleetWise 信号目录
](create-signal-catalog.md)
+ [

# 导入 AWS 物联网 FleetWise 信号目录
](import-signal.md)
+ [

# 更新物 AWS 联网 FleetWise 信号目录
](update-signal-catalog.md)
+ [

# 删除物 AWS 联网 FleetWise 信号目录
](delete-signal-catalog.md)
+ [

# 获取 AWS 物联网 FleetWise 信号目录信息
](get-signal-catalog-information.md)

# 配置 AWS 物联网 FleetWise 信号
<a name="define-signal"></a>

本节演示了如何配置分支、属性、传感器和执行器。

**Topics**
+ [

## 配置分支
](#configure-branch)
+ [

## 配置属性
](#configure-attributes)
+ [

## 配置传感器或执行器
](#configure-sensors-or-acuators)
+ [

## 配置复杂数据类型
](#configure-complex-data-types)

## 配置分支
<a name="configure-branch"></a>

要添加新连接，请指定以下信息：
+ `fullyQualifiedName` – 分支的完全限定名称是分支路径加上分支名称。使用点 (.) 表示子分支。例如，`Vehicle.Chassis.SteeringWheel` 是 `SteeringWheel` 分支的完全限定名称。`Vehicle.Chassis.` 是指向这个分支的路径。

  完全限定名称最多可包含 150 个字符。有效字符包括：a-z、A-Z、0-9、冒号 (:) 和下划线 (\$1)。
+ （可选）`Description` – 分支的描述。

  描述长度最多为 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。
+ （可选）`deprecationMessage` - 正在移动或删除的节点或分支的弃用消息。

  弃用消息最多可包含 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。
+ （可选）`comment` - 除描述之外的注释。注释可用于提供有关该分支的其他信息，例如分支的基本原理或对相关分支的引用。

  注释最多可包含 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。

## 配置属性
<a name="configure-attributes"></a>

要配置属性，请指定以下信息。
+ `dataType`— 该属性的数据类型必须是以下类型之一： INT8、、、、、、、、、、、、、、布尔值、浮点数、字符串、UNIX\$1TIMESTAMP UINT8 INT16 UINT16 INT32、\$1ARRAY UINT32、\$1ARRAY INT64 UINT64、\$1ARRAY、\$1ARRAY、\$1ARRAY、BOOLEAN\$1ARRAY、FLOAT\$1ARRAY、DOUBLEAN INT8 \$1ARRAY、DOUBLEAN UINT8 \$1ARRAY、 INT16 DOUBLEAN\$1ARRAY、 UINT16 DOUBLEAN INT32 \$1ARRAY、DOUBLEAN UINT32 \$1ARRAY、DOUBLEAN INT64 \$1ARRAY、DOUBLEAN UINT64 \$1ARRAY、DOUBLEAN\$1ARRAY、DOUBLEAN\$1ARRAY、在数据类型分支中定义。 fullyQualifiedName
+ `fullyQualifiedName` – 属性的完全限定名称是指向属性的路径加上属性的名称。使用点 (.) 表示子信号。例如，`Vehicle.Chassis.SteeringWheel.Diameter` 是 `Diameter` 属性的完全限定名称。`Vehicle.Chassis.SteeringWheel.` 是指向该属性的路径。

  完全限定名称最多可包含 150 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）和 \$1（下划线）。
+ （可选）`Description` - 属性的描述。

  描述长度最多为 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。
+ （可选）`unit` - 属性的科学单位，例如 km 或摄氏度。
+ （可选）`min` – 属性的最小值。
+ （可选）`max` – 属性的最大值。
+ （可选）`defaultValue` – 属性的默认值。
+ （可选）`assignedValue` - 分配给属性的值。
+ （可选）`allowedValues` - 该属性接受的值列表。
+ （可选）`deprecationMessage` - 正在移动或删除的节点或分支的弃用消息。

  弃用消息最多可包含 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。
+ （可选）`comment` - 除描述之外的注释。注释可用于提供有关属性的其他信息，例如属性的基本原理或对相关属性的引用。

  注释最多可包含 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。

## 配置传感器或执行器
<a name="configure-sensors-or-acuators"></a>

要配置传感器或执行器，请指定以下信息。
+ `dataType`— 信号的数据类型必须是以下类型之一： INT8、、、、、、、、、、、BOOLEAN、FLOAT、DOUBLE UINT8、STRING INT16 UINT16 INT32、UNIX\$1TIMESTAMP UINT32 INT64 UINT64、\$1ARRAY、\$1ARRAY、\$1ARRAY、\$1ARRAY、BOOLEAN\$1ARRAY、FLOAT\$1ARRAY、 INT8 DOUBLEAN\$1ARRAY、 UINT8 DOUBLEAN INT16 \$1ARRAY、DOUBLEAN UINT16 \$1ARRAY、DOUBLEAN INT32 \$1ARRAY、 UINT32 DOUBLEAN\$1ARRA INT64 Y、DOUBLEAN UINT64 \$1ARRAY、DOUBLEAN\$1ARRAY、DOUBLEAN\$1ARRAY、DOUBLEAN\$1在数据类型分支中定义。 fullyQualifiedName
+ `fullyQualifiedName` – 信号的完全限定名称是指向信号的路径加上信号的名称。使用点 (.) 表示子信号。例如，`Vehicle.Chassis.SteeringWheel.HandsOff.HandsOffSteeringState` 是 `HandsOffSteeringState` 执行器的完全限定名称。`Vehicle.Chassis.SteeringWheel.HandsOff.` 是该执行器的路径。

  完全限定名称最多可包含 150 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）和 \$1（下划线）。
+ （可选）`Description` - 信号的描述。

  描述长度最多为 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。
+ （可选）`unit`-信号的科学单位，例如 km 或摄氏度。
+ （可选）`min` - 信号的最小值。
+ （可选）`max` - 信号的最大值。
+ （可选）`assignedValue` - 分配给信号的值。
+ （可选）`allowedValues` - 信号接受的值列表。
+ （可选）`deprecationMessage` - 正在移动或删除的节点或分支的弃用消息。

  弃用消息最多可包含 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。
+ （可选）`comment` - 除描述之外的注释。注释可用于提供有关传感器或执行器的更多信息，例如其原理或对相关传感器或执行器的引用。

  注释最多可包含 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。

## 配置复杂数据类型
<a name="configure-complex-data-types"></a>

对视觉系统进行建模时会使用复杂数据类型。除分支外，这些数据类型还包括结构（也称为结构体）和属性。结构体是一种由多个值描述的信号，就像图像一样。属性代表结构的成员，例如原始数据类型（例如 UINT8）或其他结构（例如时间戳）。例如，Vehicle.Cameras.Front 代表分支，Vehicle.Cameras.Front.Image 代表结构体，Vehicle.Cameras.Timestamp 代表属性。

以下复杂数据类型示例演示了如何将信号和数据类型导出到单个.json 文件。

**Example 复杂数据类型**  

```
{
  "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"
        }
      }
    }
  }
}
```

**注意**  
您可以下载[演示脚本](https://raw.githubusercontent.com/aws/aws-iot-fleetwise-edge/main/tools/cloud/ros2-to-nodes.py)，将 ROS 2 消息转换为与信号目录兼容的 VSS .json 文件。有关更多信息，请参阅[视觉系统数据开发人员指南**](https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb)。  
视觉系统数据目前为预览版，可能会发生变化。

### 配置结构体
<a name="configure-custom-structure"></a>

要配置自定义结构（或结构体），请指定以下信息。
+ `fullyQualifiedName` – 自定义结构的完全限定名称。例如，自定义结构的完全限定名称可以是 `ComplexDataTypes.VehicleDataTypes.SVMCamera`。

  完全限定名称最多可包含 150 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）和 \$1（下划线）。
+ （可选）`Description` - 信号的描述。

  描述长度最多为 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。
+ （可选）`deprecationMessage` - 正在移动或删除的节点或分支的弃用消息。

  弃用消息最多可包含 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。
+ （可选）`comment` - 除描述之外的注释。注释可用于提供有关传感器或执行器的更多信息，例如其原理或对相关传感器或执行器的引用。

  注释最多可包含 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。

### 配置属性
<a name="configure-custom-property"></a>

要配置自定义属性，请指定以下信息。
+ `dataType`— 信号的数据类型必须是以下类型之一： INT8、、、、、、、、、、、布尔值、浮点数、双精度、字符串、UNIX\$1TIMESTAMP UINT8 INT16、\$1ARRAY UINT16、\$1ARRAY INT32 UINT32、\$1ARRAY INT64 UINT64、\$1ARRAY、\$1ARRAY、\$1ARRAY、BOOLEAN\$1ARRAY、FLOAT\$1ARRAY、DOUBLEAN\$1ARRAY、 INT8 DOUBLEAN UINT8 \$1ARRAY、DOUBLEAN INT16 \$1ARRAY、DOUBLEAN UINT16 \$1ARRAY、 INT32 DOUBLEAN\$1ARRAY、 UINT32 DOUBLEAN\$1ARRAY、 INT64 DOUBLEAN UINT64 \$1ARRAY、DOUBLEAN\$1ARRAY、DOUBLEAN 未知。
+ `fullyQualifiedName` – 自定义属性的完全限定名称。例如，自定义属性的完全限定名称可以是 `ComplexDataTypes.VehicleDataTypes.SVMCamera.FPS`。

  完全限定名称最多可包含 150 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）和 \$1（下划线）
+ （可选）`Description` - 信号的描述。

  描述长度最多为 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。
+ （可选）`deprecationMessage` - 正在移动或删除的节点或分支的弃用消息。

  弃用消息最多可包含 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。
+ （可选）`comment` - 除描述之外的注释。注释可用于提供有关传感器或执行器的更多信息，例如其原理或对相关传感器或执行器的引用。

  注释最多可包含 2048 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）、\$1（下划线）和 -（连字符）。
+ （可选）`dataEncoding` – 表示该属性是否为二进制数据。自定义属性的数据编码必须是下列编码之一：BINARY 或 TYPED。
+ （可选）`structFullyQualifiedName `-如果自定义属性的数据类型为 Struct 或，则为自定义属性的结构（结构）节点的完全限定名称。 StructArray

  完全限定名称最多可包含 150 个字符。有效字符包括：a-z、A-Z、0-9、:（冒号）和 \$1（下划线）。

# 创建 AWS 物联网 FleetWise 信号目录
<a name="create-signal-catalog"></a>

您可以使用 [CreateSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_CreateSignalCatalog.html)API 操作来创建信号目录。以下示例使用 AWS CLI。

要创建信号目录，请运行以下命令。

*signal-catalog-configuration*替换为包含配置的.json 文件的名称。

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

## 信号目录配置
<a name="signal-catalog-configuration"></a>
+ *signal-catalog-name*替换为您正在创建的信号目录的名称。
+ （可选）*description*替换为描述以帮助您识别信号目录。

有关如何配置分支、属性、传感器和执行器的更多信息，请参阅[配置 AWS 物联网 FleetWise 信号](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"
    }
  }
]
}
```

**注意**  
您可以下载[演示脚本](https://raw.githubusercontent.com/aws/aws-iot-fleetwise-edge/main/tools/cloud/ros2-to-nodes.py)，将 ROS 2 消息转换为与信号目录兼容的 VSS .json 文件。有关更多信息，请参阅[视觉系统数据开发人员指南**](https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb)。  
视觉系统数据目前为预览版，可能会发生变化。

如果您[启用了使用客户托管 AWS KMS 密钥的加密](key-management.md)，请包括以下政策声明，以便您的角色可以调用 `CreateSignalCatalog` API 操作。

------
#### [ 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"
            ]
        }
    ]
}
```

------

# 导入 AWS 物联网 FleetWise 信号目录
<a name="import-signal"></a>

您可以使用 AWS IoT FleetWise 控制台或 API 导入信号目录。

**Topics**
+ [

## 导入信号目录（控制台）
](#import-signal-catalog-console)
+ [

## 导入信号目录 (AWS CLI)
](#import-signal-catalog)

## 导入信号目录（控制台）
<a name="import-signal-catalog-console"></a>

您可以使用 AWS IoT FleetWise 控制台导入信号目录。

**重要**  
您最多可以有一个信号目录。如果您已经有信号目录，则无法在控制台中看到导入信号目录的选项。

**导入信号目录**

1. 打开[AWS 物联网 FleetWise控制台](https://console.aws.amazon.com/iotfleetwise/)。

1. 在导航窗格中，选择**信号目录**。

1. 在信号目录摘要页面上，选择**导入信号目录**。

1. 导入包含信号的文件。
   + 从 S3 存储桶上传文件

     1. 选择 **Import from S3**（从 S3 导入）。

     1. 选择**浏览 S3**。

     1. 对于**存储桶**，请输入存储桶名称或对象，从列表中选择它，然后从列表中选择文件。选择**选择文件**按钮。

     或者，对于 **S3 URI**，请输入 Amazon Simple Storage Service URI。有关更多信息，请参阅 *Amazon S3 用户指南*中的[存储桶访问方法](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html)。
   + 从您的计算机上传文件：

     1. 选择**从文件导入**。

     1. 上传[车辆信号规范 (VSS)](https://www.w3.org/auto/wg/wiki/Vehicle_Signal_Specification_(VSS)/Vehicle_Data_Spec) 格式的.json 文件。

1. 验证信号目录，然后选择**导入文件**。

## 导入信号目录 (AWS CLI)
<a name="import-signal-catalog"></a>

您可以使用 [ImportSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ImportSignalCatalog.html)API 操作上传有助于创建信号目录的 JSON 文件。您必须遵循[车辆信号规范 (VSS)](https://www.w3.org/auto/wg/wiki/Vehicle_Signal_Specification_(VSS)/Vehicle_Data_Spec) 才能将信号保存到 JSON 文件中。以下示例使用 AWS CLI。

要导入信号目录，请运行以下命令。
+ *signal-catalog-name*替换为您正在创建的信号目录的名称。
+  （可选）将描述替换为*description*，以帮助您识别信号目录。
+ *signal-catalog-configuration-vss*替换为包含 VSS 中定义的信号的 JSON 字符串文件的名称。

有关如何配置分支、属性、传感器和执行器的更多信息，请参阅[配置 AWS 物联网 FleetWise 信号](define-signal.md)。

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

### 信号目录配置 (VSS)
<a name="signal-catalog-configuration-VSS"></a>

JSON 必须经过字符串化并通过 `vssJson` 字段传递。以下是 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"
						}
					}
				}
			}
		}
	}
 
}
```

以下示例显示在 JSON 字符串的 VSS 中定义的相同信号。

```
{
   "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}}}}}}"
}
```

**注意**  
可以下载[演示脚本](https://raw.githubusercontent.com/aws/aws-iot-fleetwise-edge/main/tools/cloud/ros2-to-nodes.py)，将 ROS 2 消息转换为与信号目录兼容的 VSS JSON 文件。有关更多信息，请参阅[视觉系统数据开发人员指南**](https://github.com/aws/aws-iot-fleetwise-edge/blob/main/docs/dev-guide/vision-system-data/vision-system-data-demo.ipynb)。  
视觉系统数据目前为预览版，可能会发生变化。

如果您[启用了使用客户托管 AWS KMS 密钥的加密](key-management.md)，请包括以下政策声明，以便您的角色可以调用 `ImportSignalCatalog` API 操作。

------
#### [ 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"
            ]
        }
    ]
}
```

------

# 更新物 AWS 联网 FleetWise 信号目录
<a name="update-signal-catalog"></a>

您可以使用 [UpdateSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_UpdateSignalCatalog.html)API 操作来更新现有的信号目录。以下示例使用 AWS CLI。

要更新现有信号目录，请运行以下命令。

*signal-catalog-configuration*替换为包含配置的.json 文件的名称。

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

## 信号目录配置
<a name="update-signal-catalog-configuration"></a>

*signal-catalog-name*替换为您要更新的信号目录的名称。

有关如何配置分支、属性、传感器和执行器的更多信息，请参阅[配置 AWS 物联网 FleetWise 信号](define-signal.md)。

**重要**  
自定义结构是不可变的。如果您需要对现有的自定义结构（结构）重新排序或插入属性，请删除该结构并创建一个具有所需属性顺序的全新结构。  
要删除自定义结构，请在 `nodesToRemove` 中添加该结构的完全限定名称。如果结构被任何信号引用，则无法删除。在请求更新信号目录之前，必须更新或删除任何引用该结构（其数据类型定义为目标结构）的信号。

```
{
    	"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
    		}
    	}]
    }
```

如果您[启用了使用客户托管 AWS KMS 密钥的加密](key-management.md)，请包括以下政策声明，以便您的角色可以调用 `UpdateSignalCatalog` API 操作。

------
#### [ 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"
            ]
        }
    ]
}
```

------

## 验证信号目录更新
<a name="verify-catalog-update"></a>

您可以使用 [ListSignalCatalogNodes](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListSignalCatalogNodes.html)API 操作来验证信号目录是否已更新。以下示例使用 AWS CLI。

要检索给定信号目录中所有信号（节点）摘要的分页列表，请运行以下命令。

*signal-catalog-name*替换为您正在检查的信号目录的名称。

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

如果您[启用了使用客户托管 AWS KMS 密钥的加密](key-management.md)，请包括以下政策声明，以便您的角色可以调用 `ListSignalCatalogNodes` API 操作。

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

****  

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

------

# 删除物 AWS 联网 FleetWise 信号目录
<a name="delete-signal-catalog"></a>

您可以使用 [DeleteSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_DeleteSignalCatalog.html)API 操作删除信号目录。以下示例使用 AWS CLI。

**重要**  
在删除信号目录之前，请确保它没有关联的车辆型号、解码器清单、车辆、车队或活动。有关说明，请参阅：  
[删除物 AWS 联网 FleetWise 车辆模型](delete-vehicle-model.md)
[删除 AWS IoT FleetWise 解码器清单](delete-decoder-manifest.md)
[删除 AWS 物联网 FleetWise 车辆](delete-vehicle.md)
[删除 AWS 物联网 FleetWise 舰队](delete-fleet-cli.md)
[删除物 AWS 联网 FleetWise 活动](delete-campaign.md)

要删除现有信号目录，请运行以下命令。*signal-catalog-name*替换为要删除的信号目录的名称。

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

## 验证信号目录的删除
<a name="verify-catalog-update"></a>

您可以使用 [ListSignalCatalogs](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_ListSignalCatalogs.html)API 操作来验证信号目录是否已被删除。以下示例使用 AWS CLI。

要检索所有信号目录摘要的分页列表，请运行以下命令。

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

如果您[启用了使用客户托管 AWS KMS 密钥的加密](key-management.md)，请包括以下政策声明，以便您的角色可以调用 `ListSignalCatalogs` API 操作。

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

****  

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

------

# 获取 AWS 物联网 FleetWise 信号目录信息
<a name="get-signal-catalog-information"></a>

您可以使用 [GetSignalCatalog](https://docs.aws.amazon.com/iot-fleetwise/latest/APIReference/API_GetSignalCatalog.html)API 操作来检索信号目录信息。以下示例使用 AWS CLI。

要检索有关信号目录的信息，请运行以下命令。

*signal-catalog-name*替换为要检索的信号目录的名称。

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

如果您[启用了使用客户托管 AWS KMS 密钥的加密](key-management.md)，请包括以下政策声明，以便您的角色可以调用 `GetSignalCatalog` API 操作。

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

****  

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

------

**注意**  
此操作具有[最终一致性](https://web.stanford.edu/class/cs345d-01/rl/eventually-consistent.pdf)。换句话说，可能不会立即反映对信号目录进行的更改。