AWS IoT TwinMakerクッキー ファクトリ時系列コネクタの例 - AWS IoT TwinMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS IoT TwinMakerクッキー ファクトリ時系列コネクタの例

クッキーファクトリの Lambda 関数の完全なコードは GitHub で公開されています。コネクタをコンポーネントタイプにリンクした後でも実装を更新することはできますが、 AWS IoT TwinMakerとインテグレートする前に Lambda コネクタを検証することを強くお勧めします。Lambda 関数のテストは、Lambda コンソールで行うか、 AWS CDKのローカルで行います。Lambda 関数のテストの詳細については、「Lambda 関数のテスト」および「アプリケーションのローカルテスト」を参照してください AWS CDK

クッキーファクトリのコンポーネントタイプの例

コンポーネントタイプでは、コンポーネント間で共有される共通のプロパティを定義します。Cookie Factory の例では、同じタイプの物理コンポーネントが同じ測定値を共有するため、コンポーネントタイプで測定値スキーマを定義できます。一例として、以下の例ではミキサータイプを定義しています。

{ "componentTypeId": "com.example.cookiefactory.mixer" "propertyDefinitions": { "RPM": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "Temperature": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true } } }

たとえば、物理コンポーネントに Timestream データベースの測定値、SQL データベースのメンテナンスレコード、アラームシステムのアラームデータが含まれる場合があります。複数のコンポーネントを作成してエンティティに関連付けると、さまざまなデータソースがエンティティにリンクされ、エンティティコンポーネントグラフにデータが入力されます。このコンテキストでは、各コンポーネントには、対応するデータソース内のコンポーネントの一意のキーを識別するための telemetryIdプロパティが必要です。telemetryId プロパティを指定すると、2 つの利点があります。 プロパティをフィルター条件としてデータコネクタで使用して、指定されたコンポーネントの値をクエリできます。また、データプレーン API レスポンスに telemetryIdプロパティ値を含めると、クライアント側は ID を受け取り、必要に応じて逆引き検索を実行できます。

コンポーネントタイプTelemetryIdに外部 ID として を追加すると、TimeStreamテーブル内のコンポーネントが識別されます。

{ "componentTypeId": "com.example.cookiefactory.mixer" "propertyDefinitions": { "telemetryId": { "dataType": { "type": "STRING" }, "isTimeSeries": false, "isRequiredInEntity": true, "isExternalId": true, "isStoredExternally": false }, "RPM": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "Temperature": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true } } }

同様に、以下の JSON の例に示すように、WaterTank のコンポーネントタイプがあります。

{ "componentTypeId": "com.example.cookiefactory.watertank", "propertyDefinitions": { "flowRate1": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "flowrate2": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "tankVolume1": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "tankVolume2": { "dataType": { "type": "DOUBLE" }, "isTimeSeries": true, "isRequiredInEntity": false, "isExternalId": false, "isStoredExternally": true }, "telemetryId": { "dataType": { "type": "STRING" }, "isTimeSeries": false, "isRequiredInEntity": true, "isExternalId": true, "isStoredExternally": false } } }

エンティティスコープ内のプロパティ値のクエリを目的としている場合、TelemetryType はコンポーネントタイプのオプションプロパティです。例については、AWS IoT TwinMaker サンプル GitHub リポジトリで定義されているコンポーネントタイプを参照してください。同じテーブルにはアラームタイプも埋め込まれているので、TelemetryType が定義され、TelemetryIdTelemetryType などの共通プロパティを親コンポーネントタイプに抽出して、他の子タイプと共有できます。

Lambda の例

Lambda コネクタは、データソースにアクセスし、入力に基づいてクエリステートメントを生成し、それをデータソースに転送する必要があります。Lambda に送信されるリクエスト例を、次の JSON 例で示すことができます。

{ 'workspaceId': 'CookieFactory', 'selectedProperties': ['Temperature'], 'startDateTime': 1648796400, 'startTime': '2022-04-01T07:00:00.000Z', 'endDateTime': 1650610799, 'endTime': '2022-04-22T06:59:59.000Z', 'properties': { 'telemetryId': { 'definition': { 'dataType': { 'type': 'STRING' }, 'isTimeSeries': False, 'isRequiredInEntity': True, 'isExternalId': True, 'isStoredExternally': False, 'isImported': False, 'isFinal': False, 'isInherited': True, }, 'value': { 'stringValue': 'Mixer_22_680b5b8e-1afe-4a77-87ab-834fbe5ba01e' } } 'Temperature': { 'definition': { 'dataType': { 'type': 'DOUBLE' }, 'isTimeSeries': True, 'isRequiredInEntity': False, 'isExternalId': False, 'isStoredExternally': True, 'isImported': False, 'isFinal': False, 'isInherited': False } } 'RPM': { 'definition': { 'dataType': { 'type': 'DOUBLE' }, 'isTimeSeries': True, 'isRequiredInEntity': False, 'isExternalId': False, 'isStoredExternally': True, 'isImported': False, 'isFinal':False, 'isInherited': False } }, 'entityId': 'Mixer_22_d133c9d0-472c-48bb-8f14-54f3890bc0fe', 'componentName': 'MixerComponent', 'maxResults': 100, 'orderByTime': 'ASCENDING' }

Lambda 関数の目的は、特定のエンティティの履歴測定データをクエリすることです。 はコンポーネントプロパティマップ AWS IoT TwinMaker を提供するため、コンポーネント ID にインスタンス化された値を指定する必要があります。たとえば、コンポーネントタイプレベルのクエリ (アラームのユースケースで一般的) を処理し、ワークスペース内のすべてのコンポーネントのアラームステータスを返すには、プロパティマップにコンポーネントタイププロパティ定義があります。

最も簡単なケースとして、前述のリクエストと同様に、特定のコンポーネントの特定の時間枠内の一連の温度サンプルを昇順で取得する必要があります。このクエリステートメントは、以下のように要約できます。

... SELECT measure_name, time, measure_value::double FROM {database_name}.{table_name} WHERE time < from_iso8601_timestamp('{request.start_time}') AND time >= from_iso8601_timestamp('{request.end_time}') AND TelemetryId = '{telemetry_id}' AND measure_name = '{selected_property}' ORDER BY time {request.orderByTime} ...