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 CDKPer ulteriori informazioni sul test delle funzioni Lambda, consulta Test delle funzioni Lambda e Test locale delle 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 di cookie factory, i componenti fisici dello stesso tipo condividono le stesse misurazioni, quindi possiamo definire lo schema di misurazione 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 in sistemi di allarme. La creazione di più componenti e la loro associazione a un'entità collega diverse fonti di dati all'entità e compila il grafico entità-componente. In questo contesto, ogni componente necessita di una telemetryId proprietà per identificare la chiave univoca del componente nella fonte di dati corrispondente. La specificazione della telemetryId proprietà presenta 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 TelemetryId al tipo di componente come ID esterno, il componente viene identificato 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 } } }

La TelemetryType è una proprietà opzionale nel tipo di componente se è finalizzata all'interrogazione dei valori delle proprietà nell'ambito dell'entità. Per un esempio, vedete i tipi di componenti definiti nel GitHub repository degli AWS IoT TwinMaker esempi. Nella stessa tabella sono incorporati anche tipi di allarme, quindi vengono definiti e si estraggono proprietà comuni come il TelemetryId tipo di componente principale TelemetryType da condividere con altri tipi secondari. TelemetryType

Esempio: Lambda

Il connettore Lambda deve accedere all'origine dati e generare l'istruzione di query in base all'input e inoltrarla all'origine dati. Un esempio di richiesta inviata alla Lambda è illustrato 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 la query a livello di tipo di componente (che è 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à dei tipi di componente.

Nel caso più semplice, come nella richiesta precedente, vogliamo una serie di campioni di temperatura durante la finestra temporale specificata per il componente specificato, 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} ...