Configura l'azione della AWS IoT SiteWise regola - AWS IoT SiteWise

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configura l'azione della AWS IoT SiteWise regola

L'azione della AWS IoT SiteWise regola invia i dati dal MQTT messaggio che ha avviato la regola alle proprietà della risorsa in AWS IoT SiteWise. È possibile caricare più immissioni di dati in diverse proprietà degli asset contemporaneamente, per inviare aggiornamenti per tutti i sensori di un dispositivo in un unico messaggio. Inoltre puoi caricare più punti dati contemporaneamente per ogni inserimento di dati.

Nota

Quando invii dati a AWS IoT SiteWise con l'azione della regola, i dati devono soddisfare tutti i requisiti dell'BatchPutAssetPropertyValueoperazione. Ad esempio, i dati non possono avere un timestamp precedente a 7 giorni dall'epoca Unix corrente. Per ulteriori informazioni, consulta Ingestione di dati con. AWS IoT SiteWise API

Per ogni inserimento di dati nell'azione di regola, puoi identificare una proprietà dell'asset e specificare il timestamp, la qualità e il valore di ciascun punto dati per la proprietà dell'asset. L'azione di regola prevede stringhe per tutti i parametri.

Per identificare una proprietà dell'asset, specifica uno dei seguenti valori:

  • Asset ID (ID asset) (assetId) e Property ID (ID proprietà) (propertyId) della proprietà dell'asset a cui invii i dati. Puoi trovare l'Asset ID e l'ID della proprietà utilizzando. Console AWS IoT SiteWise Se conosci l'Asset ID, puoi utilizzare la chiamata AWS CLI to DescribeAssetper trovare l'ID della proprietà.

  • Property alias (Alias proprietà) (propertyAlias), che è un alias del flusso di dati (ad esempio, /company/windfarm/3/turbine/7/temperature). Per utilizzare questa opzione, è necessario prima impostare l'alias della proprietà dell'asset. Per informazioni relative all'impostazione degli alias delle proprietà, consultare Mappa i flussi di dati industriali sulle proprietà degli asset.

Per il timestamp di ogni voce, utilizzate il timestamp riportato dall'apparecchiatura o il timestamp fornito da. AWS IoT Core Il timestamp ha due parametri:

  • Tempo in secondi (timeInSeconds) — L'ora dell'epoca Unix, in secondi, in cui il sensore o l'apparecchiatura ha riportato i dati.

  • Offset in nanos (offsetInNanos) — (Facoltativo) L'offset in nanosecondi dal tempo in secondi.

Importante

Se il timestamp è una stringa, ha una parte decimale o non è espresso in secondi, rifiuta la richiesta. AWS IoT SiteWise È necessario convertire il timestamp in secondi e offset in nanosecondi. Utilizza le funzionalità del motore delle AWS IoT regole per convertire il timestamp. Per ulteriori informazioni, consulta gli argomenti seguenti:

È possibile utilizzare modelli sostitutivi per diversi parametri dell'azione per eseguire calcoli, richiamare funzioni e recuperare valori dal payload dei messaggi. Per ulteriori informazioni, consulta Modelli sostitutivi nella Guida per gli sviluppatori.AWS IoT

Nota

Poiché un'espressione in un modello di sostituzione viene valutata separatamente dall'istruzione SELECT, non puoi utilizzare un modello di sostituzione per fare riferimento a un alias creato utilizzando una clausola AS. È possibile fare riferimento solo alle informazioni presenti nel payload originale, oltre alle funzioni e agli operatori supportati.

Ottenere timestamp per dispositivi che non riportano l'ora esatta

Se il sensore o l'apparecchiatura non riporta dati temporali accurati, recupera l'ora attuale di Unix dal motore delle AWS IoT regole con timestamp (). Questa funzione restituisce il tempo in millisecondi, quindi è necessario convertire il valore in tempo in secondi e l'offset in nanosecondi. A tale scopo, utilizzate le seguenti conversioni:

  • Per Time in seconds (Ora in secondi) (timeInSeconds), utilizza ${floor(timestamp() / 1E3)} per convertire l'ora da millisecondi in secondi.

  • Per Offset in nanos (Offset in nanosecondi) (offsetInNanos), utilizza ${(timestamp() % 1E3) * 1E6} per calcolare l'offset del timestamp in nanosecondi.

Conversione di timestamp in formato stringa

Se il sensore o l'apparecchiatura riporta i dati temporali in formato stringa (ad esempio,2020-03-03T14:57:14.699Z), usa time_to_epoch (String, String). Questa funzione inserisce il timestamp e lo schema di formato come parametri e restituisce l'ora in millisecondi. Quindi, è necessario convertire il tempo in tempo in secondi e l'offset in nanosecondi. A tale scopo, utilizzate le seguenti conversioni:

  • Per Tempo in secondi (timeInSeconds), utilizzare ${floor(time_to_epoch("2020-03-03T14:57:14.699Z", "yyyy-MM-dd'T'HH:mm:ss'Z'") / 1E3)} per convertire la stringa del timestamp in millisecondi e quindi in secondi.

  • Per Offset in nanos (offsetInNanos), usa per calcolare l'offset in nanosecondi della stringa del ${(time_to_epoch("2020-03-03T14:57:14.699Z", "yyyy-MM-dd'T'HH:mm:ss'Z'") % 1E3) * 1E6} timestamp.

Nota

La time_to_epoch funzione supporta stringhe di timestamp con precisione fino a un millisecondo. Per convertire stringhe con precisione in microsecondi o nanosecondi, configura una AWS Lambda funzione richiamata dalla regola per convertire il timestamp in valori numerici. Per ulteriori informazioni, consulta Conversione di stringhe di timestamp con precisione in nanosecondi.

Conversione di stringhe di timestamp con precisione in nanosecondi

Se il dispositivo invia informazioni sul timestamp in formato stringa con precisione in nanosecondi (ad esempio,), 2020-03-03T14:57:14.699728491Z utilizza la procedura seguente per configurare l'azione della regola. Potete creare una AWS Lambda funzione che converta il timestamp da una stringa in Time in seconds (timeInSeconds) e Offset in nanos (). offsetInNanos Quindi, usa aws_lambda (functionArn,inputJson) nei parametri di azione della regola per richiamare quella funzione Lambda e utilizzare l'output nella regola.

Nota

Questa sezione contiene istruzioni avanzate che presuppongono che si abbia familiarità con la creazione delle risorse seguenti:

Per creare un'azione di AWS IoT SiteWise regola che analizzi le stringhe del timestamp
  1. Crea una funzione Lambda con le seguenti proprietà:

    • Nome della funzione: utilizza un nome di funzione descrittivo (ad esempio,ConvertNanosecondTimestampFromString).

    • Runtime — Usa un runtime Python 3, come Python 3.11 (). python3.11

    • Autorizzazioni: crea un ruolo con AWS LambdaBasicExecutionRoleautorizzazioni Lambda di base ().

    • Livelli: aggiungi il AWS SDKPandaslivello -Python311 per l'utilizzo della funzione Lambda. numpy

    • Codice funzione: utilizzate il seguente codice di funzione, che utilizza un argomento di stringa denominato timestamp e restituisce e valori per quel timestamp. timeInSeconds 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 }

      Questa funzione Lambda immette stringhe di timestamp in formato 8601 utilizzando datetime64 from. ISO NumPy

      Nota

      Se le stringhe del timestamp non sono in formato ISO 8601, puoi implementare una soluzione che definisca il formato del timestamp. pandas Per ulteriori informazioni, consulta pandas.to_datetime.

  2. Quando configuri l' AWS IoT SiteWise azione per la tua regola, usa i seguenti modelli sostitutivi per Time in seconds () e Offset in nanos (). timeInSeconds offsetInNanos Questi modelli di sostituzione presuppongono che il payload del messaggio contenga la stringa timestamp in timestamp. La aws_lambda funzione utilizza una JSON struttura per il secondo parametro, quindi potete modificare i modelli di sostituzione seguenti, se necessario.

    • Per Time in seconds (Tempo in secondi) (timeInSeconds), utilizzare il seguente modello di sostituzione.

      ${aws_lambda('arn:aws:lambda:region:account-id:function:ConvertNanosecondTimestampFromString', {'timestamp': timestamp}).timeInSeconds}
    • Per Offset in nanos (Offset in nanosecondi) (offsetInNanos), utilizzare il seguente modello di sostituzione.

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

    Per ogni parametro, sostituisci region e account-id con la tua regione e l'ID AWS dell'account. Se hai usato un nome diverso per la tua funzione Lambda, cambia anche quello.

  3. Concedi AWS IoT le autorizzazioni per richiamare la tua funzione con l'autorizzazione. lambda:InvokeFunction Per ulteriori informazioni, consulta aws_lambda (,). functionArn inputJson

  4. Verifica la tua regola (ad esempio, usa il client di AWS IoT MQTT test) e verifica che AWS IoT SiteWise riceva i dati che invii.

    Se la regola non funziona come previsto, consultare Risolvere i problemi relativi a un'azione relativa a una regola AWS IoT SiteWise.

Nota

Questa soluzione richiama la funzione Lambda due volte per ogni stringa di timestamp. Puoi creare un'altra regola per ridurre il numero di chiamate alla funzione Lambda se la regola gestisce più punti dati con lo stesso timestamp in ogni payload.

A tale scopo, create una regola con un'azione di ripubblicazione che richiami la Lambda e pubblichi il payload originale con la stringa del timestamp convertita in and. timeInSeconds offsetInNanos Quindi, create una regola con un'azione di regola per consumare il payload convertito AWS IoT SiteWise . Con questo approccio, riduci il numero di volte in cui la regola richiama la Lambda ma aumenti il numero di azioni della AWS IoT regola eseguite. Considerare il prezzo di ciascun servizio se si applica questa soluzione al caso d'uso.

Esempi di configurazioni di regole

Questa sezione contiene esempi di configurazioni di regole per creare una regola con un' AWS IoT SiteWise azione.

Esempio Azione di regola di esempio che utilizza alias di proprietà come argomenti dei messaggi

L'esempio seguente crea una regola con un' AWS IoT SiteWise azione che utilizza l'argomento (tramite topic ()) come alias di proprietà per identificare le proprietà degli asset. Utilizzate questo esempio per definire una regola per l'importazione di dati di doppio tipo in tutte le turbine eoliche di tutti i parchi eolici. Questo esempio richiede la definizione di alias di proprietà su tutte le proprietà degli asset delle turbine. È necessario definire una seconda regola simile per importare dati di tipo intero.

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

Il payload di esempio in sitewise-rule-payload.json contiene quanto segue.

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

Con questa azione di regola, inviate il seguente messaggio a un alias di proprietà di una turbina eolica (ad esempio,/company/windfarm/3/turbine/7/temperature) come argomento per l'inserimento dei dati.

{ "type": "double", "value": "38.3", "timeInSeconds": "1581368533" }
Esempio Azione di regola di esempio che utilizza timestamp() per determinare l'ora

L'esempio seguente crea una regola con un' AWS IoT SiteWise azione che identifica la proprietà di un asset IDs e utilizza timestamp () per determinare l'ora corrente.

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

Il payload di esempio in sitewise-rule-payload.json contiene quanto segue.

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

Con questa azione della regola, inviate il seguente messaggio a per my/asset/property/topic importare i dati.

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

Risoluzione dei problemi dell'azione di regola

Per risolvere l'azione della AWS IoT SiteWise regola in AWS IoT Core, configura i CloudWatch registri o configura un'azione di errore di ripubblicazione per la regola. Per ulteriori informazioni, consulta Risolvere i problemi relativi a un'azione relativa a una regola AWS IoT SiteWise.