

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用和建立元件類型


本主題將逐步引導您瞭解用來建立 AWS IoT TwinMaker 元件類型的值和結構。它會示範如何建立要求物件，您可以傳遞至 [CreateComponentType](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_CreateComponentType.html)API 或使用 AWS IoT TwinMaker 主控台中的元件類型編輯器。

組件為其關聯實體提供屬性和數據的上下文。

## 內建元件類型


在 AWS IoT TwinMaker 主控台中，當您選擇工作區，然後在左窗格中選擇 [**元件類型**] 時，您會看到下列元件類型。
+ 自動同步 AWS IoT SiteWise 資產和資產**模型，並將其轉換為實體元件和元件類型的元件類型的元件類型。** AWS IoT TwinMaker 如需有關使用 AWS IoT SiteWise 資產同步的詳細資訊，請參閱[與資產同步 AWS IoT SiteWise](https://docs.aws.amazon.com/iot-twinmaker/latest/guide/tm-sw-asset-sync.html)。
+ 基本：一**個基本的警報組件，可將警報數據從外部源提取到實體。**此組件不包含連接到特定數據源的函數。這意味著警報組件是抽象的，並且可以由另一個組件類型繼承，該組件類型指定了數據源和從該源讀取的函數。
+ 文件：**包含實體相關資訊之文件的**標題至 URL 的簡單對應。
+ **連接器. 邊緣視訊：使用適用於運動視訊串流的邊緣連接器，從 IoT 裝置提取視訊至實體的元件。** AWS IoT Greengrass [Kinesis Video Streams AWS IoT Greengrass 元件的邊緣連接器](https://docs.aws.amazon.com/greengrass/v2/developerguide/kvs-edge-connector-component.html)不是 AWS IoT TwinMaker 元件，而是部署在 IoT 裝置本機上的預先建置 AWS IoT Greengrass 元件。
+ **連接器：將數據提取到實體中的組件。** AWS IoT SiteWise 
+ **參數：將靜態鍵值對添加到實體的組件。**
+ **視頻：從 Kinesis Video Streams 提取視頻到一個實體的組件。** AWS IoT TwinMaker 

![\[[元件類型主控台] 頁面包含數個預先定義的元件類型清單。\]](http://docs.aws.amazon.com/zh_tw/iot-twinmaker/latest/guide/images/ComponentTypesPredefined.png)


## AWS IoT TwinMaker 元件類型的核心功能


下列清單說明元件類型的核心功能。
+ **屬性定義**：[PropertyDefinitionRequest](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_PropertyDefinitionRequest.html)物件定義了一個屬性，您可以在場景撰寫器中填入該屬性，也可以使用從外部資料來源提取的資料填入該屬性。您設定的靜態屬性會儲存在中 AWS IoT TwinMaker。從資料來源提取的時間序列屬性和其他屬性會儲存在外部。

  您可以在對`PropertyDefinitionRequest`映的字串內指定性質定義。每個字串對於地圖必須是唯一的。
+ **函**數：[FunctionRequest](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_FunctionRequest.html)物件指定 Lambda 函數，該函數可從外部資料來源讀取和寫入外部資料來源。

  包含具有儲存在外部但沒有對應函數來擷取值的屬性之屬性的組件型別是抽象組件型別。您可以從抽象組件類型擴展具體組件類型。您無法將抽象組件類型添加到實體。它們不會出現在場景作曲家中。

  您可以在要對`FunctionRequest`映的字串內指定函數。字串必須指定下列其中一種預先定義的函數類型。
  + `dataReader`：從外部源提取數據的函數。
  + `dataReaderByEntity`：從外部源提取數據的函數。

    當您使用這種類型的資料讀取器時，[GetPropertyValueHistory](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_GetPropertyValueHistory.html)API 作業僅支援此元件類型中屬性的實體特定查詢。（您只能請求 `componentName` \$1 的屬性值歷史記錄`entityId`。）
  + `dataReaderByComponentType`：從外部源提取數據的函數。

    當您使用這種類型的資料讀取器時，[GetPropertyValueHistory](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_GetPropertyValueHistory.html)API 作業僅支援此元件類型中屬性的跨實體查詢。(您只能要求的屬性值歷史記錄`componentTypeId`。)
  + `dataWriter`：將資料寫入外部來源的函數。
  + `schemaInitializer`：每當您建立包含元件類型的實體時，會自動初始化屬性值的函數。

  在非抽象組件類型中，需要三種類型的數據讀取器函數之一。

  如需實作時間串流遙測元件 (包括警示) 的 Lambda 函數範例，請參閱[AWS 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 的參數`PropertyDefinitionRequest`。


| 參數 | 描述 | 
| --- | --- | 
| `isExternalId` | 布林值；指定屬性是否為儲存在外部之屬性值的唯一識別碼 (例如 AWS IoT SiteWise 資產 ID)。 此屬性的預設值為 `false`。 | 
| `isStoredExternally` | 布林值；指定屬性值是否儲存在外部。 此屬性的預設值為 `false`。 | 
| `isTimeSeries` | 布林值；指定屬性是否儲存時間序列資料。 此屬性的預設值為 `false` | 
| `isRequiredInEntity` | 布林值；指定屬性在使用元件類型的實體中是否必須具有值。 | 
| `dataType` | 指定屬性之資料類型 (例如字串、[DataType](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_DataType.html)對映、清單和測量單位) 的物件。  | 
| `defaultValue` | 指[DataValue](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_DataValue.html)定屬性預設值的物件。  | 
| `configuration` | 一種 string-to-string 地圖，指定您需要連接到外部資料來源的其他資訊。  | 

## 建立函數


下表說明 a 的參數`FunctionRequest`。


| 參數 | 描述 | 
| --- | --- | 
| ` implementedBy` | 指[DataConnector](https://docs.aws.amazon.com/iot-twinmaker/latest/apireference/API_DataConnector.html)定連線至外部資料來源之 Lambda 函數的物件。  | 
| `requiredProperties` | 函數為了讀取和寫入外部資料來源所需的屬性清單。 | 
| `scope` | 函數的範圍。用`Workspace`於範圍涵蓋整個工作區的函數。用`Entity`於範圍限制為包含元件之實體的函數。 | 

如需展示如何建立和延伸元件類型的範例，請參閱[範例元件類型](twinmaker-component-types-examples.md)。

# 範例元件類型


本主題包含示範如何實作元件類型重要概念的範例。

## 警報 (摘要)


下列範例是顯示在 AWS IoT TwinMaker 主控台中的抽象警示元件類型。它包含`functions`一個包含沒`dataReader`有`implementedBy`值的列表。

```
{
  "componentTypeId": "com.example.alarm.basic:1",
  "workspaceId": "MyWorkspace",
  "description": "Abstract alarm component type",
  "functions": {
    "dataReader": {
         "isInherited": false
    }
  },
  "isSingleton": false,
  "propertyDefinitions": {
    "alarm_key": {
      "dataType": { "type": "STRING" },
      "isExternalId": true,
      "isRequiredInEntity": true,
      "isStoredExternally": false,
      "isTimeSeries": false
    },
    "alarm_status": {
      "dataType": {
        "allowedValues": [
          {
            "stringValue": "ACTIVE"
          },
          {
            "stringValue": "SNOOZE_DISABLED"
          },
          {
            "stringValue": "ACKNOWLEDGED"
          },
          {
            "stringValue": "NORMAL"
          }
        ],
        "type": "STRING"
      },
      "isRequiredInEntity": false,
      "isStoredExternally": true,
      "isTimeSeries": true
    }
  }
}
```

備註：

`componentTypeId`和的值`workspaceID`是必要的。的值對您的工作區`componentTypeId`必須是唯一的。的值`alarm_key`是唯一識別碼，函數可用來從外部來源擷取警示資料。密鑰的值是必需的，並存儲在中 AWS IoT TwinMaker。時`alarm_status`間序列值儲存在外部來源中。

[範例中AWS IoT TwinMaker 提供更多範例。](https://github.com/aws-samples/aws-iot-twinmaker-samples)

## 時間流遙測


下列範例是簡單的元件類型，可從外部來源擷取特定元件類型 (例如警示或 Cookie 混合器) 的遙測資料。它指定了組件類型繼承的 Lambda 函數。

```
{
    "componentTypeId": "com.example.timestream-telemetry",
    "workspaceId": "MyWorkspace",
    "functions": {
        "dataReader": {
            "implementedBy": {
                "lambda": {
                    "arn": "lambdaArn"
                }
            }
        }
    },
    "propertyDefinitions": {
        "telemetryType": {
            "dataType": { "type": "STRING" },
            "isExternalId": false,
            "isStoredExternally": false,
            "isTimeSeries": false,
            "isRequiredInEntity": true
        },
        "telemetryId": {
            "dataType": { "type": "STRING" },
            "isExternalId": false,
            "isStoredExternally": false,
            "isTimeSeries": false,
            "isRequiredInEntity": true
        }
    }
}
```

## 報警（從抽象報警繼承）


下列範例會繼承抽象警示和時間串流遙測元件類型。它指定了自己的 Lambda 函數來檢索警報數據。

```
{
    "componentTypeId": "com.example.cookiefactory.alarm",
    "workspaceId": "MyWorkspace",
    "extendsFrom": [
        "com.example.timestream-telemetry",
        "com.amazon.iottwinmaker.alarm.basic"
    ],
    "propertyDefinitions": {
        "telemetryType": {
            "defaultValue": {
                "stringValue": "Alarm"
            }
        }
    },
    "functions": {
        "dataReader": {
            "implementedBy": {
                "lambda": {
                    "arn": "lambdaArn"
                }
            }
        }
    }
}
```

**注意**  
由於警示連接器繼承自抽象警示元件類型，因此 Lambda 函數必須傳回`alarm_key`值。如果您沒有傳回此值，Grafana 將無法將其識別為鬧鐘。這是所有返回警報的組件都必需的。

## 設備實例


本節中的範例說明如何建立潛在設備的模型。您可以使用這些範例來獲得有關如何在自己的流程中建模設備的一些想法。

### 餅乾攪拌機


下列範例會繼承自時間串流遙測元件類型。它為 Cookie 混合器的旋轉速率和溫度指定其他時間序列屬性。

```
{
    "componentTypeId": "com.example.cookiefactory.mixer",
    "workspaceId": "MyWorkspace",
    "extendsFrom": [
        "com.example.timestream-telemetry"
    ],
    "propertyDefinitions": {
        "telemetryType": {
            "defaultValue" : { "stringValue": "Mixer" }
        },
        "RPM": {
            "dataType": { "type": "DOUBLE" },
            "isTimeSeries": true,
            "isStoredExternally": true
        },
        "Temperature": {
            "dataType": { "type": "DOUBLE" },
            "isTimeSeries": true,
            "isStoredExternally": true
        }
    }
}
```

### 水箱


下列範例會繼承自時間串流遙測元件類型。它為水箱的體積和流量指定其他時間序列屬性。

```
{
    "componentTypeId": "com.example.cookiefactory.watertank",
    "workspaceId": "MyWorkspace",
    "extendsFrom": [
        "com.example.timestream-telemetry"
    ],
    "propertyDefinitions": {
        "telemetryType": {
            "defaultValue" : { "stringValue": "WaterTank" }
        },
        "tankVolume1": {
            "dataType": { "type": "DOUBLE" },
            "isTimeSeries": true,
            "isStoredExternally": true
        },
        "tankVolume2": {
            "dataType": { "type": "DOUBLE" },
            "isTimeSeries": true,
            "isStoredExternally": true
        },
        "flowRate1": {
            "dataType": { "type": "DOUBLE" },
            "isTimeSeries": true,
            "isStoredExternally": true
        },
        "flowrate2": {
            "dataType": { "type": "DOUBLE" },
            "isTimeSeries": true,
            "isStoredExternally": true
        }
    }
}
```

### 空間位置


下列範例包含屬性，其值會儲存在中 AWS IoT TwinMaker。由於這些值是由使用者指定並儲存在內部，因此不需要任何函數即可擷取它們。此範例也會使用資`RELATIONSHIP`料類型來指定與其他元件類型的關係。

此元件提供輕量型機制，用於將上下文加入至數位孿生。您可以使用它來添加元數據，指示某些東西的位置。您也可以在邏輯上使用此資訊，以判斷哪些攝影機可以看到某個設備或空間，或知道如何將某人派往某個位置。

```
{
    "componentTypeId": "com.example.cookiefactory.space",
    "workspaceId": "MyWorkspace",
    "propertyDefinitions": {
        "position":  {"dataType": {"nestedType": {"type": "DOUBLE"},"type": "LIST"}},
        "rotation":  {"dataType": {"nestedType": {"type": "DOUBLE"},"type": "LIST"}},
        "bounds":  {"dataType": {"nestedType": {"type": "DOUBLE"},"type": "LIST"}},
        "parent_space" : { "dataType": {"type": "RELATIONSHIP"}}
    }
}
```