View a markdown version of this page

AWS IoT TwinMaker esempio di connettore per serie temporali di cookie factory - AWS IoT TwinMaker

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

AWS IoT TwinMaker esempio di connettore per serie temporali di cookie factory

Il codice completo della funzione Lambda di cookie factory è disponibile su GitHub. Sebbene sia ancora possibile aggiornare l'implementazione dopo aver collegato il connettore al tipo di componente, consigliamo vivamente di verificare il connettore Lambda prima dell'integrazione con. AWS IoT TwinMaker Puoi testare la tua funzione Lambda nella console Lambda o localmente in. AWS CDK Per ulteriori informazioni sul test delle funzioni Lambda, consulta Testare le funzioni Lambda e Testare localmente le applicazioni. AWS CDK

Esempi di tipi di componenti di cookie factory

In un tipo di componente, definiamo proprietà comuni condivise tra i componenti. Per l'esempio della cookie factory, i componenti fisici dello stesso tipo condividono le stesse misure, quindi possiamo definire lo schema delle misurazioni nel tipo di componente. Ad esempio, il tipo di mixer è definito nell'esempio seguente.

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

Ad esempio, un componente fisico potrebbe contenere misurazioni in un database Timestream, registri di manutenzione in un database SQL o dati di allarme nei sistemi di allarme. La creazione di più componenti e la loro associazione a un'entità collega diverse fonti di dati all'entità e popola il grafico entità-componente. In questo contesto, ogni componente necessita di una telemetryId proprietà per identificare la chiave univoca del componente nella sorgente dati corrispondente. La specificazione della telemetryId proprietà ha due vantaggi: la proprietà può essere utilizzata nel connettore dati come condizione di filtro per interrogare solo i valori del componente specificato e, se si include il valore della telemetryId proprietà nella risposta dell'API del piano dati, il lato client acquisisce l'ID e può eseguire una ricerca inversa se necessario.

Se si aggiunge il TelemetryId tipo di componente come ID esterno, viene identificato il componente nella tabella. 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 } } }

Allo stesso modo abbiamo il tipo di componente perWaterTank, come mostrato nel seguente esempio JSON.

{ "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È una proprietà opzionale nel tipo di componente se è finalizzata a interrogare i valori delle proprietà nell'ambito dell'entità. Per un esempio, consultate i tipi di componenti definiti nel GitHub repository degli AWS IoT TwinMaker esempi. Esistono anche tipi di allarme incorporati nella stessa tabella, quindi vengono definiti e TelemetryType si estraggono proprietà comuni come TelemetryId and TelemetryType a un tipo di componente principale per condividerle con altri tipi secondari.

Esempio: Lambda

Il connettore Lambda deve accedere all'origine dati e generare l'istruzione di interrogazione in base all'input e inoltrarla all'origine dati. Una richiesta di esempio inviata a Lambda è mostrata nel seguente esempio 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' }

L'obiettivo della funzione Lambda è interrogare i dati di misurazione storici per una determinata entità. AWS IoT TwinMaker fornisce una mappa delle proprietà dei componenti ed è necessario specificare un valore istanziato per l'ID del componente. Ad esempio, per gestire l'interrogazione a livello di tipo di componente (comune nei casi d'uso degli allarmi) e restituire lo stato di allarme di tutti i componenti nell'area di lavoro, la mappa delle proprietà contiene le definizioni delle proprietà del tipo di componente.

Nel caso più semplice, come nella richiesta precedente, vogliamo una serie di campioni di temperatura durante una determinata finestra temporale per il componente dato, in ordine temporale crescente. L'istruzione di interrogazione può essere riassunta come segue:

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