

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

# 使用和创建组件类型
<a name="twinmaker-component-types"></a>

本主题将引导您了解用于创建 Amazon IoT TwinMaker 组件类型的值和结构。它向您展示了如何创建可以传递给 [CreateComponentType](https://docs.amazonaws.cn/iot-twinmaker/latest/apireference/API_CreateComponentType.html)API 的请求对象，也可以使用 Amazon IoT TwinMaker 控制台中的组件类型编辑器来创建请求对象。

组件为其关联实体的属性和数据提供上下文。

## 内置组件类型
<a name="twinmaker-component-types-built-in"></a>

在 Amazon IoT TwinMaker 控制台中，当您选择工作区，然后在左侧窗格中选择**组件类型**时，您会看到以下组件类型。
+ **com.amazon.iotsitewise.resourcesync**：一种组件类型，可自动同步您的 Amazon IoT SiteWise 资产和资产模型并将其转换为实体、组件和组件类型。 Amazon IoT TwinMaker 有关使用 Amazon IoT SiteWise 资产同步的更多信息，请参阅与[资产同步 Amazon IoT SiteWise](https://docs.amazonaws.cn/iot-twinmaker/latest/guide/tm-sw-asset-sync.html)。
+ **com.amazon.iottwinmaker.alarm.basic**：一个基本的警报组件，可将警报数据从外部来源提取到实体。此组件未包含连接到特定数据来源的函数。这意味着警报组件是抽象的，可以由另一种组件类型继承，该组件类型指定了数据来源和从该数据来源读取的函数。
+ **com.amazon.iottwinmaker.documents**：包含实体相关信息的文档的标题到 URL 的简单映射。
+ **com.amazon.iotsitewise.connector.edgevideo：一种使用边缘连接器 for Kinesis Video Streams 组件将视频**从物联网设备提取到实体的组件。 Amazon IoT Greengrass [Kinesis Video Amazon IoT Greengrass Streams 的 Edge Con Amazon IoT TwinMaker nec](https://docs.amazonaws.cn/greengrass/v2/developerguide/kvs-edge-connector-component.html) tor 组件不是组件，而是一个部署在物联网设备上的本地 Amazon IoT Greengrass 预构建组件。
+ **com.amazon.iotsitewise.connector**：一种将 Amazon IoT SiteWise 数据提取到实体的组件。
+ **com.amazon.iottwinmaker.parameters**：一种向实体添加静态键值对的组件。
+ **com.amazon.kvs.video：将视频从 K** inesis Video Streams 提取到实体的组件。 Amazon IoT TwinMaker 

![组件类型控制台页面，其中列出了几种预定义的组件类型。](http://docs.amazonaws.cn/iot-twinmaker/latest/guide/images/ComponentTypesPredefined.png)


## Amazon IoT TwinMaker 组件类型的核心特征
<a name="twinmaker-component-types-core"></a>

下面的列表介绍了组件类型的核心特征。
+ **属性定义**：该[PropertyDefinitionRequest](https://docs.amazonaws.cn/iot-twinmaker/latest/apireference/API_PropertyDefinitionRequest.html)对象定义了一个可以在场景编辑器中填充的属性，也可以使用从外部数据源提取的数据进行填充。您设置的静态属性存储在中 Amazon IoT TwinMaker。从数据来源提取的时间序列属性和其他属性存储在外部。

  可以在 `PropertyDefinitionRequest` 映射的字符串中指定属性定义。每个字符串对于映射必须是唯一的。
+ **函数**：该[FunctionRequest](https://docs.amazonaws.cn/iot-twinmaker/latest/apireference/API_FunctionRequest.html)对象指定一个 Lambda 函数，该函数从外部数据源读取并可能写入外部数据源。

  如果组件类型包含一个属性，其值存储在外部但没有相应的函数来检索这些值，则它属于抽象组件类型。您可以从抽象组件类型扩展具体的组件类型。您无法向实体添加抽象组件类型。它们不会出现在场景编辑器中。

  您可以在 `FunctionRequest` 映射的字符串中指定函数。该字符串必须指定以下一个预定义函数类型。
  + `dataReader`：一个从外部来源提取数据的函数。
  + `dataReaderByEntity`：一个从外部来源提取数据的函数。

    当您使用这种类型的数据读取器时，[GetPropertyValueHistory](https://docs.amazonaws.cn/iot-twinmaker/latest/apireference/API_GetPropertyValueHistory.html)API 操作仅支持针对该组件类型的属性的实体特定查询。（只能请求 `componentName` \+ `entityId` 的属性值历史记录。）
  + `dataReaderByComponentType`：一个从外部来源提取数据的函数。

    当您使用这种类型的数据读取器时，[GetPropertyValueHistory](https://docs.amazonaws.cn/iot-twinmaker/latest/apireference/API_GetPropertyValueHistory.html)API 操作仅支持对该组件类型中的属性的跨实体查询。（只能请求 `componentTypeId` 的属性值历史记录。）
  + `dataWriter`：一种将数据写入外部来源的函数。
  + `schemaInitializer`：一个在每次创建包含组件类型的实体时都会自动初始化属性值的函数。

  非抽象组件类型需要三种类型的数据读取器函数之一。

  [有关实现时间流遥测组件（包括警报）的 Lambda 函数的示例，请参阅Amazon IoT TwinMaker 示例](https://github.com/aws-samples/aws-iot-twinmaker-samples/blob/main/src/modules/timestream_telemetry/lambda_function/udq_data_reader.py)中的数据读取器。
**注意**  
由于警报连接器继承自抽象警报组件类型，因此 Lambda 函数必须返回 `alarm_key` 值。如果没有返回此值，Grafana 将无法将其识别为警报。这对于所有返回警报的组件都是必需的。
+ **继承**：组件类型通过继承来提高代码的可重用性。一个组件类型可以继承最多 10 个父组件类型。

  使用 `extendsFrom` 参数指定组件类型，您的组件类型将从那里继承属性和函数。
+  **isSingleton**：某些组件包含属性，如位置坐标，这些属性在一个实体中不能包含多次。将 `isSingleton` 参数的值设置为 `true`，表示组件类型在一个实体中只能包含一次。

## 创建属性定义
<a name="twinmaker-component-types-property-def"></a>

下表描述 `PropertyDefinitionRequest` 的参数。


| 参数 | 描述 | 
| --- | --- | 
| `isExternalId` | 一个布尔值，它指定该属性是否是外部存储的属性值的唯一标识符（例如 Amazon IoT SiteWise 资产 ID）。<br />此属性的默认值为 `false`。 | 
| `isStoredExternally` | 指定是否在外部存储属性的布尔值。<br />此属性的默认值为 `false`。 | 
| `isTimeSeries` | 指定属性是否存储时间序列数据的布尔值。<br />此属性的默认值为 `false` | 
| `isRequiredInEntity` | 一个布尔值，用于指定属性在使用该组件类型的实体中是否必须要有一个值。 | 
| `dataType` | 一个[DataType](https://docs.amazonaws.cn/iot-twinmaker/latest/apireference/API_DataType.html)对象，用于指定属性的数据类型（例如字符串、地图、列表和度量单位）。 | 
| `defaultValue` | 一个指定属性的默认值的[DataValue](https://docs.amazonaws.cn/iot-twinmaker/latest/apireference/API_DataValue.html)对象。 | 
| `configuration` | 一种 string-to-string 地图，用于指定连接到外部数据源所需的其他信息。 | 

## 创建函数
<a name="twinmaker-component-types-function"></a>

下表描述 `FunctionRequest` 的参数。


| 参数 | 描述 | 
| --- | --- | 
| ` implementedBy` | 一个[DataConnector](https://docs.amazonaws.cn/iot-twinmaker/latest/apireference/API_DataConnector.html)对象，它指定连接到外部数据源的 Lambda 函数。 | 
| `requiredProperties` | 该函数从外部数据来源读取和写入外部数据来源所需属性的列表。 | 
| `scope` | 函数的范围。`Workspace` 用于范围跨越整个工作区的函数。`Entity` 用于范围仅限于包含该组件的实体的函数。 | 

有关说明如何创建和扩展组件类型的示例，请参阅 [示例组件类型](twinmaker-component-types-examples.md)。