AWS IoT TwinMaker Beispiel für einen Zeitreihenanschluss in Cookie Factory - AWS IoT TwinMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

AWS IoT TwinMaker Beispiel für einen Zeitreihenanschluss in Cookie Factory

Der vollständige Code der Cookie-Factory-Lambda-Funktion ist verfügbar unter GitHub. Sie können die Implementierung zwar immer noch aktualisieren, nachdem Sie den Konnektor mit dem Komponententyp verknüpft haben, wir empfehlen jedoch dringend, den Lambda-Konnektor vor der Integration mit AWS IoT TwinMaker zu überprüfen. Sie können Ihre Lambda-Funktion in der Lambda-Konsole oder lokal in der testen. AWS CDK Weitere Informationen zum Testen Ihrer Lambda-Funktionen finden Sie unter Testen von Lambda-Funktionen und Lokales Testen AWS CDK von Anwendungen.

Beispiele für Cookie-Factory-Komponententypen

In einem Komponententyp definieren wir gemeinsame Eigenschaften, die von allen Komponenten gemeinsam genutzt werden. Für das Cookie-Factory-Beispiel haben physische Komponenten desselben Typs dieselben Abmessungen, sodass wir das Messschema im Komponententyp definieren können. Als Beispiel wird der Mischertyp im folgenden Beispiel definiert.

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

Beispielsweise kann eine physische Komponente Messungen in einer Timestream-Datenbank, Wartungsaufzeichnungen in einer SQL-Datenbank oder Alarmdaten in Alarmsystemen enthalten. Wenn Sie mehrere Komponenten erstellen und sie einer Entität zuordnen, werden verschiedene Datenquellen mit der Entität verknüpft und das Diagramm mit den Entitätskomponenten gefüllt. In diesem Zusammenhang benötigt jede Komponente eine telemetryId Eigenschaft, um den eindeutigen Schlüssel der Komponente in der entsprechenden Datenquelle zu identifizieren. Die Angabe der telemetryId Eigenschaft hat zwei Vorteile: Die Eigenschaft kann im Datenkonnektor als Filterbedingung verwendet werden, um nur Werte der angegebenen Komponente abzufragen. Wenn Sie den telemetryId Eigenschaftswert in die API-Antwort der Datenebene aufnehmen, nimmt der Client die ID und kann bei Bedarf eine umgekehrte Suche durchführen.

Wenn Sie TelemetryId dem Komponententyp die als externe ID hinzufügen, identifiziert sie die Komponente in der TimeStream Tabelle.

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

In ähnlicher Weise haben wir den Komponententyp fürWaterTank, wie im folgenden JSON-Beispiel gezeigt.

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

Das TelemetryType ist eine optionale Eigenschaft im Komponententyp, wenn sie darauf abzielt, Eigenschaftswerte im Entitätsbereich abzufragen. Ein Beispiel finden Sie in den definierten Komponententypen im AWS IoT TwinMaker GitHub Beispiel-Repository. Es gibt auch Alarmtypen, die in dieselbe Tabelle eingebettet sind, sodass die definiert TelemetryType ist und Sie gemeinsame Eigenschaften wie das TelemetryId und TelemetryType in einen übergeordneten Komponententyp extrahieren, damit andere untergeordnete Typen sie gemeinsam nutzen können.

Beispiel Lambda

Der Lambda-Konnektor muss auf die Datenquelle zugreifen und die Abfrageanweisung basierend auf der Eingabe generieren und an die Datenquelle weiterleiten. Eine an das Lambda gesendete Beispielanforderung wird im folgenden JSON-Beispiel gezeigt.

{ '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' }

Das Ziel der Lambda-Funktion besteht darin, historische Messdaten für eine bestimmte Entität abzufragen. AWS IoT TwinMaker stellt eine Zuordnung der Komponenteneigenschaften bereit, und Sie sollten einen instanziierten Wert für die Komponenten-ID angeben. Um beispielsweise die Abfrage auf Komponententypebene zu bearbeiten (was bei Alarmanwendungsfällen üblich ist) und den Alarmstatus aller Komponenten im Workspace zurückzugeben, enthält die Eigenschaftenübersicht Definitionen der Komponententypeigenschaften.

Im einfachsten Fall benötigen wir, wie in der vorherigen Anfrage, eine Reihe von Temperaturmesswerten für die jeweilige Komponente während des angegebenen Zeitfensters in aufsteigender Reihenfolge. Die Abfrageanweisung kann wie folgt zusammengefasst werden:

... 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} ...