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

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

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

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

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

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

{ "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 つの利点があります。1 つは、プロパティをデータコネクターでフィルター条件として使用して、特定のコンポーネントの値のみをクエリできること、もう 1 つは、データプレーン 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} ...