Konfigurieren Sie die AWS IoT SiteWise Regelaktion - AWS IoT SiteWise

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.

Konfigurieren Sie die AWS IoT SiteWise Regelaktion

Die AWS IoT SiteWise Regelaktion sendet Daten aus der MQTT Nachricht, durch die die Regel ausgelöst wurde, an die Objekteigenschaften in AWS IoT SiteWise. Sie können mehrere Dateneinträge gleichzeitig in verschiedene Asset-Eigenschaften hochladen, um Updates für alle Sensoren eines Geräts in einer Nachricht zu senden. Sie können für jede Dateneingabe auch mehrere Datenpunkte gleichzeitig hochladen.

Anmerkung

Wenn Sie AWS IoT SiteWise mit der Regelaktion Daten an senden, müssen Ihre Daten alle Anforderungen des BatchPutAssetPropertyValue Vorgangs erfüllen. Beispielsweise darf der Zeitstempel Ihrer Daten nicht früher als 7 Tage vor der aktuellen Unix-Epoche liegen. Weitere Informationen finden Sie unter Daten aufnehmen mit dem. AWS IoT SiteWise API

Für jede Dateneingabe in der Regelaktion identifizieren Sie eine Komponenteneigenschaft und geben den Zeitstempel, die Qualität und den Wert jedes Datenpunkts für diese Komponenteneigenschaft an. Die Regelaktion erwartet Zeichenfolgen für alle Parameter.

Zur korrekten Identifizierung einer Komponenteneigenschaft in einer Eingabe können Sie eine der folgenden Angaben machen:

  • Die Asset ID (Komponenten-ID) (assetId) und die Property ID (Eigenschaften-ID) (propertyId) der Komponenteneigenschaft, an die Sie Daten senden. Sie finden die Asset-ID und die Eigenschaft-ID mithilfe der AWS-IoT-SiteWise-Konsole. Wenn Sie die Asset-ID kennen, können Sie den AWS CLI to call verwenden, DescribeAssetum die Immobilien-ID zu ermitteln.

  • Das Property alias (Eigenschaftsalias) (propertyAlias), bei dem es sich um ein Datenstrom-Alias handelt (z. B. /company/windfarm/3/turbine/7/temperature). Um diese Option verwenden zu können, müssen Sie zuerst den Alias der Komponenteneigenschaft festlegen. Weitere Informationen zur Festlegung von Eigenschaftsaliasnamen finden Sie unter Ordnen Sie industrielle Datenströme den Eigenschaften von Anlagen zu.

Verwenden Sie für den Zeitstempel in jedem Eintrag den von Ihrem Gerät gemeldeten Zeitstempel oder den von bereitgestellten Zeitstempel. AWS IoT Core Der Zeitstempel hat zwei Parameter:

  • Zeit in Sekunden (timeInSeconds) — Die Unix-Epoche in Sekunden, zu der der Sensor oder das Gerät die Daten gemeldet hat.

  • Offset in Nanos (offsetInNanos) — (Optional) Der Abstand zwischen Nanosekunden und der Zeit in Sekunden.

Wichtig

Wenn Ihr Zeitstempel eine Zeichenfolge ist, einen Dezimalteil hat oder nicht in Sekunden angegeben ist, wird die Anfrage AWS IoT SiteWise zurückgewiesen. Sie müssen den Zeitstempel in Sekunden und Nanosekunden-Offset konvertieren. Verwenden Sie Funktionen der AWS IoT Regel-Engine, um den Zeitstempel zu konvertieren. Weitere Informationen finden Sie hier:

Sie können Ersatzvorlagen für mehrere Parameter in der Aktion verwenden, um Berechnungen durchzuführen, Funktionen aufzurufen und Werte aus der Nachrichtennutzlast abzurufen. Weitere Informationen finden Sie im Entwicklerhandbuch unter Substitutionsvorlagen.AWS IoT

Anmerkung

Da ein Ausdruck in einer Substitutionsvorlage getrennt von der SELECT-Anweisung ausgewertet wird, können Sie keine Substitutionsvorlage verwenden, um auf einen Alias zu verweisen, der mit einer AS-Klausel erstellt wurde. Zusätzlich zu den unterstützten Funktionen und Operatoren können Sie nur in der ursprünglichen Nutzlast vorhandene Informationen referenzieren.

Abrufen von Zeitstempeln für Geräte, die keine genaue Uhrzeit melden

Wenn Ihr Sensor oder Ihre Ausrüstung keine genauen Zeitdaten meldet, rufen Sie mit timestamp () die aktuelle Unix-Epochenzeit von der AWS IoT Regel-Engine ab. Diese Funktion gibt die Zeit in Millisekunden aus. Sie müssen den Wert also in Zeit in Sekunden und den Offset in Nanosekunden umrechnen. Verwenden Sie dazu die folgenden Konvertierungen:

  • Verwenden Sie für Time in seconds (Zeit in Sekunden) (timeInSeconds) ${floor(timestamp() / 1E3)}, um die Zeit von Millisekunden in Sekunden zu konvertieren.

  • Verwenden Sie für Offset in nanos (Verschiebung in Nanosekunden) (offsetInNanos) ${(timestamp() % 1E3) * 1E6}, um den Nanosekunden-Versatz des Zeitstempels zu berechnen.

Konvertierung von Zeitstempeln im Zeichenkettenformat

Wenn Ihr Sensor oder Ihre Ausrüstung Zeitdaten im Zeichenkettenformat meldet (z. B.2020-03-03T14:57:14.699Z), verwenden Sie time_to_epoch (String, String). Diese Funktion gibt den Zeitstempel und das Formatmuster als Parameter ein und gibt die Zeit in Millisekunden aus. Dann müssen Sie die Zeit in Zeit in Sekunden und den Offset in Nanosekunden umrechnen. Verwenden Sie dazu die folgenden Konvertierungen:

  • Verwenden Sie für Time in seconds (timeInSeconds), ${floor(time_to_epoch("2020-03-03T14:57:14.699Z", "yyyy-MM-dd'T'HH:mm:ss'Z'") / 1E3)} um die Zeitstempelzeichenfolge in Millisekunden und dann in Sekunden zu konvertieren.

  • Verwenden Sie für Offset in nanos (offsetInNanos), um den Nanosekunden-Offset der Zeitstempelzeichenfolge ${(time_to_epoch("2020-03-03T14:57:14.699Z", "yyyy-MM-dd'T'HH:mm:ss'Z'") % 1E3) * 1E6} zu berechnen.

Anmerkung

Die time_to_epoch Funktion unterstützt Zeitstempelzeichenfolgen mit einer Genauigkeit von bis zu Millisekunden. Um Zeichenketten mit Mikro- oder Nanosekundengenauigkeit zu konvertieren, konfigurieren Sie eine AWS Lambda Funktion, die Ihre Regel aufruft, um den Zeitstempel in numerische Werte umzuwandeln. Weitere Informationen finden Sie unter Konvertierung von Zeitstempelzeichenfolgen mit einer Genauigkeit von Nanosekunden.

Konvertierung von Zeitstempelzeichenfolgen mit einer Genauigkeit von Nanosekunden

Wenn Ihr Gerät Zeitstempelinformationen im Zeichenkettenformat mit einer Genauigkeit im Nanosekundenbereich sendet (z. B.2020-03-03T14:57:14.699728491Z), gehen Sie wie folgt vor, um Ihre Regelaktion zu konfigurieren. Sie können eine AWS Lambda Funktion erstellen, die den Zeitstempel aus einer Zeichenfolge in Zeit in Sekunden (timeInSeconds) und Offset in Nanos () umwandelt. offsetInNanos Verwenden Sie dann aws_lambda (functionArn,inputJson) in Ihren Regelaktionsparametern, um diese Lambda-Funktion aufzurufen und die Ausgabe in Ihrer Regel zu verwenden.

Anmerkung

Dieser Abschnitt enthält erweiterte Anweisungen, die davon ausgehen, dass Sie mit dem Erstellen der folgenden Ressourcen vertraut sind:

Um eine AWS IoT SiteWise Regelaktion zu erstellen, die Zeitstempelzeichenfolgen analysiert
  1. Erstellen Sie eine Lambda-Funktion mit den folgenden Eigenschaften:

    • Funktionsname — Verwenden Sie einen beschreibenden Funktionsnamen (z. B.ConvertNanosecondTimestampFromString).

    • Runtime — Verwenden Sie eine Python-3-Runtime wie Python 3.11 (python3.11).

    • Berechtigungen — Erstellen Sie eine Rolle mit grundlegenden Lambda-Berechtigungen (AWS LambdaBasicExecutionRole).

    • Ebenen — Fügen Sie die Schicht AWS SDKPandas-Python311 hinzu, die von der Lambda-Funktion verwendet werden soll. numpy

    • Funktionscode — Verwenden Sie den folgenden Funktionscode, der ein Zeichenkettenargument mit dem Namen verwendet timestamp und Werte für diesen Zeitstempel ausgibttimeInSeconds. offsetInNanos

      import json import math import numpy # Converts a timestamp string into timeInSeconds and offsetInNanos in Unix epoch time. # The input timestamp string can have up to nanosecond precision. def lambda_handler(event, context): timestamp_str = event['timestamp'] # Parse the timestamp string as nanoseconds since Unix epoch. nanoseconds = numpy.datetime64(timestamp_str, 'ns').item() time_in_seconds = math.floor(nanoseconds / 1E9) # Slice to avoid precision issues. offset_in_nanos = int(str(nanoseconds)[-9:]) return { 'timeInSeconds': time_in_seconds, 'offsetInNanos': offset_in_nanos }

      Diese Lambda-Funktion gibt Zeitstempelzeichenfolgen im Format ISO8601 unter Verwendung von datetime64 von ein. NumPy

      Anmerkung

      Wenn Ihre Zeitstempelzeichenfolgen nicht im ISO 8601-Format vorliegen, können Sie eine Lösung implementieren, die das Zeitstempelformat definiert. pandas Weitere Informationen finden Sie unter pandas.to_datetime.

  2. Wenn Sie die AWS IoT SiteWise Aktion für Ihre Regel konfigurieren, verwenden Sie die folgenden Ersatzvorlagen für Zeit in Sekunden (timeInSeconds) und Offset in Nanos (). offsetInNanos Diese Ersetzungsvorlagen gehen davon aus, dass Ihre Nachrichtennutzlast die Zeitstempelzeichenfolge in timestamp enthält. Die aws_lambda Funktion verwendet eine JSON Struktur für ihren zweiten Parameter, sodass Sie die folgenden Ersetzungsvorlagen bei Bedarf ändern können.

    • Verwenden Sie für Zeit in Sekunden (timeInSeconds) die folgende Ersetzungsvorlage.

      ${aws_lambda('arn:aws:lambda:region:account-id:function:ConvertNanosecondTimestampFromString', {'timestamp': timestamp}).timeInSeconds}
    • Verwenden Sie für Verschiebung in Nanosekunden (offsetInNanos) die folgende Ersetzungsvorlage.

      ${aws_lambda('arn:aws:lambda:region:account-id:function:ConvertNanosecondTimestampFromString', {'timestamp': timestamp}).offsetInNanos}

    Ersetzen Sie für jeden Parameter region and account-id mit Ihrer Region und AWS Konto-ID. Wenn Sie einen anderen Namen für Ihre Lambda-Funktion verwendet haben, ändern Sie diesen ebenfalls.

  3. Erteilen Sie mit der AWS IoT Erlaubnis Berechtigungen zum Aufrufen Ihrer Funktion. lambda:InvokeFunction Weitere Informationen finden Sie unter aws_lambda (,). functionArn inputJson

  4. Testen Sie Ihre Regel (verwenden Sie beispielsweise den AWS IoT MQTT Testclient) und stellen Sie sicher, dass dieser die von Ihnen AWS IoT SiteWise gesendeten Daten empfängt.

    Wenn Ihre Regel nicht wie erwartet funktioniert, finden Sie weitere Informationen unter Problembehandlung bei einer AWS IoT SiteWise Regelaktion.

Anmerkung

Diese Lösung ruft die Lambda-Funktion zweimal für jede Zeitstempelzeichenfolge auf. Sie können eine weitere Regel erstellen, um die Anzahl der Lambda-Funktionsaufrufen zu reduzieren, wenn Ihre Regel mehrere Datenpunkte verarbeitet, die in jeder Nutzlast denselben Zeitstempel haben.

Erstellen Sie dazu eine Regel mit einer Aktion zum erneuten Veröffentlichen, die Lambda aufruft und die ursprüngliche Nutzlast mit der in und konvertierten Zeitstempelzeichenfolge veröffentlicht. timeInSeconds offsetInNanos Erstellen Sie dann eine Regel mit einer AWS IoT SiteWise Regelaktion, um die konvertierte Payload zu verwenden. Mit diesem Ansatz reduzieren Sie die Häufigkeit, mit der die Regel Lambda aufruft, erhöhen jedoch die Anzahl der ausgeführten AWS IoT Regelaktionen. Berücksichtigen Sie die Preise für jeden Service, wenn Sie diese Lösung auf Ihren Anwendungsfall anwenden.

Beispiele für Regelkonfigurationen

Dieser Abschnitt enthält Beispielregelkonfigurationen zum Erstellen einer Regel mit einer AWS IoT SiteWise Aktion.

Beispielregelaktion, die Eigenschaftsaliasse als Nachrichtenthemen verwendet

Im folgenden Beispiel wird eine Regel mit einer AWS IoT SiteWise Aktion erstellt, die das Thema (über topic ()) als Eigenschaftsalias zur Identifizierung von Asset-Eigenschaften verwendet. Verwenden Sie dieses Beispiel, um eine Regel für die Aufnahme von Daten vom Typ Doppeltyp für alle Windturbinen in allen Windparks zu definieren. Für dieses Beispiel müssen Sie Eigenschaftsaliasnamen für die Eigenschaften aller Turbinenanlagen definieren. Sie müssten eine zweite, ähnliche Regel definieren, um Daten vom Typ Ganzzahl aufzunehmen.

aws iot create-topic-rule \ --rule-name SiteWiseWindFarmRule \ --topic-rule-payload file://sitewise-rule-payload.json

Die Beispielnutzlast in sitewise-rule-payload.json hat folgenden Inhalt.

{ "sql": "SELECT * FROM '/company/windfarm/+/turbine/+/+' WHERE type = 'double'", "description": "Sends data to the wind turbine asset property with the same alias as the topic", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "iotSiteWise": { "putAssetPropertyValueEntries": [ { "propertyAlias": "${topic()}", "propertyValues": [ { "timestamp": { "timeInSeconds": "${timeInSeconds}" }, "value": { "doubleValue": "${value}" } } ] } ], "roleArn": "arn:aws:iam::account-id:role/MySiteWiseActionRole" } } ] }

Senden Sie mit dieser Regelaktion die folgende Nachricht als Thema für die Datenaufnahme an einen Alias für eine Windenergieanlage (z. B./company/windfarm/3/turbine/7/temperature).

{ "type": "double", "value": "38.3", "timeInSeconds": "1581368533" }
Beispielregelaktion, die timestamp() verwendet, um die Zeit zu bestimmen

Im folgenden Beispiel wird eine Regel mit einer AWS IoT SiteWise Aktion erstellt, die eine Anlageneigenschaft anhand von timestamp () identifiziert IDs und mithilfe von timestamp () die aktuelle Uhrzeit bestimmt.

aws iot create-topic-rule \ --rule-name SiteWiseAssetPropertyRule \ --topic-rule-payload file://sitewise-rule-payload.json

Die Beispielnutzlast in sitewise-rule-payload.json hat folgenden Inhalt.

{ "sql": "SELECT * FROM 'my/asset/property/topic'", "description": "Sends device data to an asset property", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "iotSiteWise": { "putAssetPropertyValueEntries": [ { "assetId": "a1b2c3d4-5678-90ab-cdef-22222EXAMPLE", "propertyId": "a1b2c3d4-5678-90ab-cdef-33333EXAMPLE", "propertyValues": [ { "timestamp": { "timeInSeconds": "${floor(timestamp() / 1E3)}", "offsetInNanos": "${(timestamp() % 1E3) * 1E6}" }, "value": { "doubleValue": "${value}" } } ] } ], "roleArn": "arn:aws:iam::account-id:role/MySiteWiseActionRole" } } ] }

Senden Sie mit dieser Regelaktion die folgende Nachricht an den, my/asset/property/topic um Daten aufzunehmen.

{ "type": "double", "value": "38.3" }

Problembehandlung bei der -Regelaktion

Um Ihre AWS IoT SiteWise Regelaktion zu beheben AWS IoT Core, konfigurieren Sie CloudWatch Protokolle oder konfigurieren Sie eine Aktion zum erneuten Veröffentlichen von Fehlern für Ihre Regel. Weitere Informationen finden Sie unter Problembehandlung bei einer AWS IoT SiteWise Regelaktion.