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 Zeitreihen-Connector für eine Cookie Factory
Der vollständige Code der Cookie
Beispiele für Cookie-Factory-Komponententypen
In einem Komponententyp definieren wir gemeinsame Eigenschaften, die von allen Komponenten gemeinsam genutzt werden. Für das Beispiel mit der Cookie Factory 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 könnte 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 die Client-Seite die ID und kann bei Bedarf eine umgekehrte Suche durchführen.
Wenn Sie die TelemetryId dem Komponententyp 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ür dieWaterTank, 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-RepositoryTelemetryType TelemetryId und in einen übergeordneten Komponententyp extrahierenTelemetryType, damit sie von anderen untergeordneten Typen gemeinsam genutzt werden können.
Beispiel Lambda
Der Lambda-Connector muss auf die Datenquelle zugreifen und die Abfrageanweisung auf der Grundlage der Eingabe generieren und an die Datenquelle weiterleiten. Eine Beispielanfrage, die an das Lambda gesendet wurde, 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 verarbeiten (was bei Alarmen häufig der Fall ist) und den Alarmstatus aller Komponenten im Workspace zurückzugeben, enthält die Eigenschaftenübersicht Definitionen für Komponententypeigenschaften.
Im einfachsten Fall benötigen wir, wie in der vorherigen Anfrage, eine Reihe von Temperaturproben während des angegebenen Zeitfensters für die angegebene Komponente 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} ...