Passa al contenuto principale

RuleNodes

RuleNodes​

I RuleNode sono i blocchi funzionali di una RuleChain in optiCLOUD. Determinano come i messaggi in ingresso vengono filtrati, arricchiti, trasformati, salvati o inoltrati ad altri sistemi.

Questa pagina serve come orientamento pratico sui nodi disponibili e sui loro ambiti di impiego:

  • Quali nodi esistono?
  • A cosa servono?
  • Quali uscite o relazioni hanno?

Panoramica per categorie​

Nodi di filtro​

RuleNodeScopo
Message Type FilterLascia passare solo determinati tipi di messaggio
Message Type SwitchDistribuisce i messaggi su percorsi diversi in base al tipo di messaggio
File Type SwitchRamifica i messaggi di file in base al tipo di file
File Names FilterFiltra i nomi dei file in base ai prefissi
Device FilterLimita l'elaborazione a determinati dispositivi
Script (Filter)Esegue una logica di filtro definita liberamente tramite JavaScript
SwitchInoltra i messaggi a uscite dinamiche tramite script
Check Existence FieldsVerifica se i campi sono presenti nel messaggio o nei metadati
GPS Geofencing FilterLascia passare solo i messaggi all'interno di un geofence

Nodi di azione​

RuleNodeScopo
Save TimeseriesSalva la telemetria come serie temporale
Save AttributesSalva gli attributi in uno scope selezionato
Save AlarmsSalva gli stati di allarme dai messaggi di allarme
Create AlarmCrea o aggiorna un allarme
Clear AlarmTermina un allarme esistente
Alarm CounterConta gli allarmi all'interno di una finestra temporale
LogScrive output di debug o di log
GeneratorGenera messaggi periodicamente
Message CountConta i messaggi in ingresso e pubblica il contatore
DelayRitarda l'inoltro di un messaggio
Aggregate OSF FileLegge file OSF e ne ricava telemetria
Aggregate JSONL FileLegge file JSONL e ne ricava telemetria
Process Raw Data FileElabora le operazioni sui file nel blob storage
Generate ReportCrea rapporti su un periodo definito
Device SystemAggrega dati di più dispositivi
GPS Geofencing EventsGenera eventi all'ingresso o all'uscita da un geofence
RPC Call RequestInvia una chiamata RPC a un dispositivo
RPC Call ReplyRisponde a una chiamata RPC in ingresso

Nodi di arricchimento​

RuleNodeScopo
Originator AttributesCarica gli attributi dell'elemento di origine nei metadati
Originator TelemetryCarica la telemetria dell'elemento di origine nei metadati
Originator FieldsIntegra i dati anagrafici dell'elemento di origine
Tenant DetailsIntegra le informazioni del tenant

Nodi di trasformazione​

RuleNodeScopo
Script (Transform)Modifica messaggio, metadati o tipo di messaggio tramite JavaScript
To EmailCostruisce un oggetto e-mail a partire da un messaggio

Nodi esterni​

RuleNodeScopo
REST API CallInvia dati a un'interfaccia REST esterna
MQTTPubblica messaggi su un broker MQTT
KafkaPubblica messaggi in un topic Kafka
RabbitMQInvia messaggi a RabbitMQ
AWS SQSInvia messaggi a una coda SQS
AWS SNSPubblica messaggi su un topic SNS
GCP Pub/SubPubblica messaggi su Google Pub/Sub
Send EmailInvia un'e-mail tramite SMTP

Nodi scheduler​

RuleNodeScopo
Create Scheduled TaskPianifica un'esecuzione singola differita nel tempo
Clear Scheduled TaskElimina un'attività pianificata in precedenza

Nodi di eventi e allarmi​

RuleNodeScopo
Complex AlarmCrea allarmi in base a schemi complessi in tempo reale
Complex Event ProcessingValuta i dati dei file con regole di evento
Enrich AlarmIntegra gli allarmi esistenti con informazioni aggiuntive

Panoramica di dettaglio​

Nodi di filtro​

Message Type Filter​

Categoria: Filtro
Uscite: True, False

Il nodo verifica se il tipo di messaggio del messaggio in ingresso è contenuto in un elenco configurato. In caso di corrispondenza il messaggio prosegue tramite True, altrimenti tramite False.

Configurazione​

LabelObbligatorioDescrizione
Message Types FilterSìElenco dei tipi di messaggio consentiti. Deve essere inserito almeno un tipo.

I valori supportati sono, tra gli altri, POST_ATTRIBUTES_REQUEST, POST_TELEMETRY_REQUEST, TO_SERVER_RPC_REQUEST, TO_DEVICE_RPC_REQUEST, ACTIVITY_EVENT, INACTIVITY_EVENT, CONNECT_EVENT, DISCONNECT_EVENT, BLOB_STORE_REQUEST e POST_ALARMS.

Esempio​

Utilizzare questo nodo quando, ad es., devono essere elaborati ulteriormente solo i dati di telemetria. In questo caso si configura POST_TELEMETRY_REQUEST e si collega l'uscita TRUE a un ulteriore nodo, che riceverà quindi con certezza solo messaggi di tipo POST_TELEMETRY_REQUEST.


Message Type Switch​

Categoria: Filtro
Uscite: una per tipo di messaggio più Other

Il nodo distribuisce i messaggi su uscite fisse in base al loro tipo di messaggio. È adatto come distributore iniziale in una RuleChain, quando tipi di messaggio diversi devono essere elaborati in rami separati.

Configurazione​

Questo nodo non ha opzioni configurabili. Le uscite sono definite in modo fisso.

UscitaCondizione
POST_ATTRIBUTESIl tipo di messaggio è POST_ATTRIBUTES_REQUEST
POST_TELEMETRYIl tipo di messaggio è POST_TELEMETRY_REQUEST
POST_ALARMSIl tipo di messaggio è POST_ALARMS
BLOB_STORE_REQUESTIl tipo di messaggio è BLOB_STORE_REQUEST
RPC_REQUEST_FROM_DEVICEIl tipo di messaggio è TO_SERVER_RPC_REQUEST
RPC_REQUEST_TO_DEVICEIl tipo di messaggio è TO_DEVICE_RPC_REQUEST
ACTIVITY_EVENTIl tipo di messaggio è ACTIVITY_EVENT
INACTIVITY_EVENTIl tipo di messaggio è INACTIVITY_EVENT
CONNECT_EVENTIl tipo di messaggio è CONNECT_EVENT
DISCONNECT_EVENTIl tipo di messaggio è DISCONNECT_EVENT
OtherTutti gli altri tipi di messaggio

Esempio​

In una Root RuleChain questo nodo può trovarsi subito dopo l'ingresso, per suddividere telemetria, attributi, allarmi, messaggi RPC e operazioni sui file in rami di elaborazione separati.


File Type Switch​

Categoria: Filtro
Uscite: OSF, JSONL, Other

Il nodo ramifica i messaggi di file in base all'estensione del file. Viene impiegato nelle pipeline di file, dopo che un'operazione su file è stata riconosciuta come BLOB_STORE_REQUEST.

Configurazione​

Questo nodo non ha opzioni configurabili. Il riconoscimento avviene in base all'estensione del file nei metadati.

UscitaEstensioni di file riconosciute
OSF.osf, .osfz
JSONL.log, .log.gz
OtherTutte le altre estensioni di file

Esempio​

Inoltrare i file .osf ad es. a Aggregate OSF File.


File Names Filter​

Categoria: Filtro
Uscite: True, False

Il nodo lascia proseguire i messaggi di file tramite True solo se il nome del file inizia con uno dei prefissi configurati.

Configurazione​

LabelObbligatorioDescrizione
File PrefixesSìElenco di prefissi di nomi di file. Il controllo è case-sensitive.

Note​

  • Un elenco di prefissi vuoto comporta che tutti i messaggi proseguano tramite False.
  • Il nome del file viene letto dai metadati del messaggio, di norma da fileName.

Esempio​

Se un dispositivo carica file con data_ e config_, è possibile utilizzare due File Names Filter per elaborare separatamente i due gruppi di file.


Device Filter​

Categoria: Filtro
Uscite: True, False

Il nodo limita l'elaborazione a determinati dispositivi. L'elenco dei dispositivi può essere utilizzato, a seconda dell'impostazione, come elenco di abilitazione o elenco di blocco.

Configurazione​

LabelObbligatorioDescrizione
DevicesSìSelezione dei dispositivi tramite selezione multipla.
Allow selected devicesSìAttivato: solo i dispositivi selezionati proseguono tramite True. Disattivato: i dispositivi selezionati vengono bloccati.

Uscite​

UscitaCondizione
TrueIl dispositivo è consentito o non bloccato
FalseIl dispositivo non è consentito o è bloccato esplicitamente

Esempio​

Se una regola deve essere eseguita solo per determinati dispositivi, è possibile anteporre alla regola il DeviceFilter, in modo che inoltri alla regola successiva solo una selezione di dispositivi.


Script (Filter)​

Categoria: Filtro
Uscite: True, False

Il nodo esegue una funzione JavaScript. Se lo script restituisce true, il messaggio prosegue tramite True. Con false o in caso di errore dello script, prosegue tramite False.

Configurazione​

LabelObbligatorioDescrizione
Filter FunctionSìFunzione JavaScript con la firma Filter(msg, metadata, msgType).

Contesto dello script​

VariabileDescrizione
msgCorpo del messaggio JSON
metadataMetadati del messaggio
msgTypeTipo di messaggio

Esempio​

var threshold = parseFloat(metadata.tempThreshold) || 50;
return msg.temperature > threshold;

Switch​

Categoria: Filtro
Uscite: dinamiche tramite script

Il nodo inoltra un messaggio a una o più uscite denominate. I nomi delle uscite vengono restituiti come array da una funzione JavaScript.

Configurazione​

LabelObbligatorioDescrizione
Switch FunctionSìFunzione JavaScript con la firma Switch(msg, metadata, msgType).

Lo script deve restituire un array di stringhe. Ogni stringa corrisponde a un nome di uscita.

Note​

  • I nomi di uscita non collegati vengono ignorati.
  • Un array vuoto scarta il messaggio.
  • Per tutti i possibili valori restituiti dovrebbero essere create nella RuleChain le connessioni corrispondenti.

Esempio​

Con la seguente funzione è possibile, ad es., verificare il valore di temperatura di un messaggio e inoltrare i messaggi in modo diverso in base al valore.

  • La connessione "highTemp" potrebbe essere inoltrata, ad es., a un nodo di allarme che genera un allarme "High Temperature"
  • La connessione "lowTemp" potrebbe essere inoltrata, ad es., a un nodo di allarme che genera un allarme "Low Temperature"
  • La connessione "normalTemp" potrebbe essere inoltrata, ad es., a un nodo che imposta un attributo "TempStatus = OK"
function nextRelation(msg) {
if(msg.temperature > 50){
return ['highTemp'];
} else if (msg.temperature < 20){
return ['lowTemp'];
} else {
return ['normalTemp'];
}

}
return nextRelation(msg);

Check Existence Fields​

Categoria: Filtro
Uscite: True, False

Il nodo verifica se determinati campi sono presenti nel corpo del messaggio e/o nei metadati. In questo modo i nodi successivi possono essere protetti da messaggi incompleti.

Configurazione​

LabelObbligatorioDescrizione
Message DataNoNomi dei campi che devono essere presenti nel corpo del messaggio.
Message MetadataNoNomi dei campi che devono essere presenti nei metadati.
Check All Keys PresentSìAttivato: tutti i campi indicati devono essere presenti. Disattivato: deve essere presente almeno un campo.

Almeno uno dei due campi messageNames o metadataNames deve contenere voci.

Esempio​

Prima di un nodo Script è possibile verificare, ad es., se tutti i canali utilizzati nello script sono presenti anche nel messaggio. Ciò evita che lo script fallisca e riduce la complessità dello script, in cui altrimenti si dovrebbero eventualmente adottare precauzioni tramite condizioni if/else per verificare se i canali sono presenti. Se questo nodo è anteposto a un nodo Script, nel nodo Script si può partire dal presupposto che i canali siano presenti nel messaggio.


GPS Geofencing Filter​

Categoria: Filtro
Uscite: True, False

Il nodo verifica se le coordinate GPS si trovano all'interno di un geofence definito. Il controllo è privo di stato e valuta di volta in volta il messaggio corrente.

Configurazione​

LabelObbligatorioDescrizione
Latitude Key NameSìNome del campo per la latitudine nel corpo del messaggio.
Longitude Key NameSìNome del campo per la longitudine nel corpo del messaggio.
Fetch Perimeter Info from MetadataSìAttivato: la definizione del geofence viene letta dai metadati. Disattivato: il geofence viene configurato in modo statico nel nodo.
Perimeter TypeSì, con configurazione staticaCircle o Polygon.
Campi CircleSì, con cerchioCentro, raggio e unità del cerchio.
Polygon DefinitionSì, con poligonoDefinizione GeoJSON o WKT del poligono.

Nota​

Per gli eventi di ingresso/uscita basati sullo stato si utilizza GPS Geofencing Events.

Esempio​

Elaborare, ad es., la telemetria solo quando un veicolo si trova all'interno di una zona definita; in caso contrario la telemetria viene scartata.


Nodi di azione​

Save Timeseries​

Categoria: Azione
Uscite: Success, Failure

Il nodo salva i dati di telemetria dal corpo del messaggio come valori di serie temporale nel database.

Configurazione​

LabelObbligatorioDescrizione
Default TTLSìDurata di vita dei punti dati salvati in secondi. 0 significa nessuna eliminazione automatica.
Enable Type CastSìConverte valori numerici o booleani da stringhe in tipi di dati nativi.

Ingresso​

Il tipo di messaggio deve essere POST_TELEMETRY_REQUEST. Il corpo del messaggio deve essere un oggetto JSON oppure contenere un array di oggetti JSON con timestamp ts.


Save Attributes​

Categoria: Azione
Uscite: Success, Failure

Il nodo salva le coppie chiave-valore dal corpo del messaggio come attributi dell'entità di origine.

Configurazione​

LabelObbligatorioDescrizione
Attribute ScopeSìScope di destinazione per gli attributi.
Enable Type CastSìConverte valori numerici o booleani da stringhe in tipi di dati nativi.
ScopeSignificato
CLIENT_SCOPEAttributi comunicati dal dispositivo, visibili al dispositivo.
SHARED_SCOPEAttributi impostati lato server, che possono essere distribuiti al dispositivo.
SERVER_SCOPEAttributi interni al server, che non vengono inviati al dispositivo.

Ingresso​

Il corpo del messaggio deve essere un oggetto JSON. Ogni chiave viene salvata come nome di attributo.


Save Alarms​

Categoria: Azione
Uscite: Activated, Deactivated, Sustained

Il nodo elabora i messaggi di tipo POST_ALARMS e salva gli stati di allarme nel database. In questo modo rappresenta i cambiamenti di stato degli allarmi.

Uscite​

UscitaSignificato
ActivatedUn nuovo allarme è stato aperto oppure un allarme eliminato è tornato attivo.
DeactivatedUn allarme attivo è stato terminato.
SustainedUn allarme già attivo rimane attivo.

Configurazione​

LabelObbligatorioDescrizione
PropagateSìIndica se gli allarmi vengono propagati alle entità sovraordinate.

Ingresso​

Il messaggio deve essere di tipo POST_ALARMS e contenere i dati dell'allarme secondo il modello di allarme della piattaforma.


Create Alarm​

Categoria: Azione
Uscite: Created, Updated, False

Il nodo crea un allarme per l'origine del messaggio oppure aggiorna un allarme già esistente dello stesso tipo. I dettagli dell'allarme vengono costruiti tramite JavaScript a partire da messaggio e metadati.

Uscite​

UscitaSignificato
CreatedÈ stato creato un nuovo allarme.
UpdatedÈ stato aggiornato un allarme esistente di questo tipo.
FalseLo script non ha generato alcun allarme.

Configurazione​

LabelObbligatorioDescrizione
Alarm Details BuilderSìFunzione JavaScript Details(msg, metadata, msgType) per i dettagli dell'allarme.
Alarm TypeSìTipo di allarme. Supporta pattern ${metadata.key}.
Alarm SeveritySìLivello di gravità: CRITICAL, MAJOR, MINOR, WARNING, INDETERMINATE.
PropagateSìPropaga l'allarme alle entità sovraordinate.

Metadati dopo l'elaborazione​

Il nodo aggiunge, tra l'altro, alarmType, alarmIsNew, alarmSeverity e alarmId.

Esempio​

Uno Script Filter a monte verifica msg.temperature > 80. Con True questo nodo crea un allarme HighTemperature con livello di gravità MAJOR. Nei dettagli potrebbe trovarsi, ad es., una funzione che registra il valore massimo di temperatura per tutto il tempo in cui un allarme è stato attivo e aggiornato

var details = {};
if (metadata.prevAlarmDetails) {
details = JSON.parse(metadata.prevAlarmDetails);
if (parseFloat(details.highestTemp) < msg.temperature){
details.highestTemp = msg.temperature;
}
}
return details;

Clear Alarm​

Categoria: Azione
Uscite: Cleared, False

Il nodo termina un allarme attivo del tipo configurato per l'origine del messaggio.

Uscite​

UscitaSignificato
ClearedÈ stato trovato e terminato un allarme attivo corrispondente.
FalseNon è stato trovato alcun allarme attivo corrispondente.

Configurazione​

LabelObbligatorioDescrizione
Alarm Details BuilderSìFunzione JavaScript per i dettagli finali dell'allarme al momento della chiusura.
Alarm TypeSìTipo di allarme, che deve corrispondere esattamente all'allarme generato in precedenza.

Metadati dopo l'elaborazione​

Il nodo aggiunge alarmType e alarmId.

Esempio​

Se un dispositivo comunica nuovamente temperature < 70, Clear Alarm può terminare l'allarme HighTemperature creato in precedenza.

informazioni

Il tipo di allarme è case-sensitive! Se con un nodo Create Alarm è stato creato un allarme di tipo HighTemperature, nel nodo Clear Alarm deve essere inserito esattamente questo tipo di allarme HighTemperature, affinché possa essere cancellato.


Alarm Counter​

Categoria: Azione
Uscite: Success, Failure

Il nodo conta gli allarmi secondo i criteri configurati all'interno di una finestra temporale e salva i risultati come attributi server sull'origine del messaggio.

Configurazione​

Il nodo contiene un elenco di definizioni di contatori.

LabelObbligatorioDescrizione
Find by Field NameSìCampo dell'allarme in base al quale si filtra, ad es. severity o type.
With Field ValueSìValore che il campo deve avere, ad es. CRITICAL.
Save in Server AttributeSìNome dell'attributo server in cui viene salvato il contatore.
Time Period Alarm ConsideredSìFinestra temporale considerata in secondi. 0 significa senza limitazione temporale.

Esempio​

Con

  • fieldName = severity
  • fieldValue = CRITICAL
  • attributeName = criticalAlarms24h
  • periodInSeconds = 86400

viene contato il numero di allarmi critici delle ultime 24 ore e salvato nell'attributo server criticalAlarms24h.


Log​

Categoria: Azione
Uscite: Success, Failure

Il nodo scrive nel log del server un testo generato tramite JavaScript e inoltra il messaggio originale invariato.

Configurazione​

LabelObbligatorioDescrizione
Log FunctionSìFunzione JavaScript ToString(msg, metadata, msgType), che restituisce il testo del log.

Note​

  • Il nodo è pensato soprattutto per sviluppo, analisi e risoluzione degli errori.
  • Dovrebbe essere utilizzato con parsimonia e preferibilmente solo dopo aver consultato OptiMEAS, poiché un nodo Log ha sostanzialmente senso solo se in precedenza si sono verificati errori che eventualmente l'utente non può risolvere autonomamente.

Generator​

Categoria: Azione
Uscite: Success, Failure

Il nodo genera messaggi periodicamente tramite JavaScript e li immette nella RuleChain. Può essere utilizzato per test, simulazioni o flussi temporizzati.

Configurazione​

LabelObbligatorioDescrizione
Message CountSìNumero di messaggi da generare. 0 significa illimitato.
Period in SecondsSìIntervallo tra i messaggi generati in secondi.
OriginatorSìDispositivo di origine per i messaggi generati.
Generator FunctionSìFunzione JavaScript Generate(prevMsg, prevMetadata, prevMsgType).

La funzione deve restituire msg, metadata e msgType.

Esempio​

Se, ad es., si vuole creare e testare una RuleChain ma al momento non si ha a disposizione un dispositivo reale, oppure ne è disponibile uno che proprio in quel momento non invia dati live, con il nodo Generator è possibile generare messaggi artificiali. Per un test adeguato, questi messaggi generati artificialmente dovrebbero riflettere nel modo migliore i messaggi previsti di un dispositivo reale.

Il seguente esempio genera messaggi con:

Canali di telemetria: {"temperature": 42} e {"humidity": 77}

Metadati: {"data": 40}

Tipo: POST_TELEMETRY_REQUEST

var msg = { temperature: 42, humidity: 77 };
var metadata = { data: 40 };
var msgType = "POST_TELEMETRY_REQUEST";

return { msg: msg, metadata: metadata, msgType: msgType };

Nell'esempio precedente si tratta di messaggi statici con sempre gli stessi valori (42,77,40). Un Generator può però generare anche dati variabili, ad es. tramite:

var temp = Math.floor(Math.random() * max);
var hum = Math.floor(Math.random() * max);
var meta = Math.floor(Math.random() * max);

var msg = { temperature: temp, humidity: hum };
var metadata = { data: meta };
var msgType = "POST_TELEMETRY_REQUEST";

return { msg: msg, metadata: metadata, msgType: msgType };

Nota​

Negli ambienti di produzione il periodo dovrebbe essere scelto con attenzione, in modo da non generare un carico di messaggi inutilmente elevato.


Message Count​

Categoria: Azione
Uscite: Success, Failure

Il nodo conta i messaggi all'interno di un intervallo di tempo e pubblica il valore del contatore come telemetria.

Configurazione​

LabelObbligatorioDescrizione
Interval in SecondsSìDurata della finestra di conteggio in secondi.
Output Timeseries Key PrefixSìChiave di telemetria per il valore del contatore.

Output​

Al termine di ogni intervallo viene generato un messaggio POST_TELEMETRY_REQUEST, ad es.:

{
"messageCount": 42
}

I messaggi in ingresso vengono inoltre inoltrati invariati tramite Success.


Delay​

Categoria: Azione
Uscite: Success, Failure

Il nodo trattiene i messaggi per una durata configurata e li inoltra successivamente. Il ritardo può essere determinato in modo statico o tramite i metadati.

Configurazione​

LabelObbligatorioDescrizione
Use Metadata Period PatternSìAttiva un ritardo dinamico tramite i metadati.
Period in SecondsSì, se staticoRitardo statico in secondi.
Period in Seconds PatternSì, se dinamicoCampo dei metadati o espressione ${...} per il ritardo.
Max Pending MessagesSìNumero massimo di messaggi memorizzati temporaneamente.

Note​

  • In caso di riavvio del server i messaggi in attesa vanno persi, poiché non vengono salvati in modo persistente
  • Se si raggiunge il numero massimo di messaggi, i nuovi messaggi proseguono tramite Failure.

Aggregate OSF File​

Categoria: Azione
Uscite: Success, Failure

Il nodo carica un file OSF referenziato da un BLOB_STORE_REQUEST e lo elabora.

Ingresso e output​

  • Ingresso: BLOB_STORE_REQUEST con metodo GET.
  • I metadati devono contenere il riferimento al file salvato.
  • Per ogni intervallo di tempo riconosciuto il nodo genera un messaggio POST_TELEMETRY_REQUEST con i valori di misura.

Catena di elaborazione​

File Type Switch [OSF]
-> Aggregate OSF File [Success]
-> Save Timeseries

Aggregate JSONL File​

Categoria: Azione
Uscite: Success, Failure

Il nodo carica un file JSONL da un BLOB_STORE_REQUEST e lo elabora.

Ingresso e output​

  • Ingresso: BLOB_STORE_REQUEST con metodo GET.
  • Il file deve contenere JSONL valido.
  • Ogni riga genera un messaggio POST_TELEMETRY_REQUEST tramite Success.

Catena di elaborazione​

File Type Switch [JSONL]
-> Aggregate JSONL File [Success]
-> Save Timeseries

Process Raw Data File​

Categoria: Azione
Uscite: Download, Upload, Delete, Other

Il nodo classifica i messaggi BLOB_STORE_REQUEST in base all'operazione sul file e li inoltra all'uscita appropriata.

Configurazione​

LabelObbligatorioDescrizione
Selected ScopesSìScope degli attributi che devono essere elaborati.
Selected MethodsSìMetodi HTTP o operazioni sui file che devono essere inoltrati.
MetodoUscitaSignificato
PUTUploadIl file è stato caricato.
GETDownloadIl file deve essere scaricato.
DELETEDeleteIl file è stato eliminato.
altriOtherOperazione sconosciuta o non configurata.

Esempio​

Upload può essere collegato a File Type Switch per distinguere ulteriormente i file OSF e JSONL.


Generate Report​

Categoria: Azione
Uscite: Success, Failure

Il nodo genera un rapporto per l'origine del messaggio su una finestra temporale configurata.

Configurazione​

AreaCampi
Tipo di rapportoreportType con valori come DEVICE_ACTIVITY, TELEMETRY, DEVICE_STATISTIC, ALARM, OSF_DATA, JASPER_TEMPLATE.
Campi condizionalialarmSearchStatus, templateId, keys, sources, a seconda del tipo di rapporto.
Finestra temporaleuseMetadataIntervalPatterns, startInterval, startIntervalTimeUnit, endInterval, endIntervalTimeUnit, startIntervalPattern, endIntervalPattern.

Esempio​

Per un'esportazione giornaliera della telemetria è possibile configurare reportType = TELEMETRY con una finestra temporale di un giorno e le chiavi di telemetria desiderate.


Device System​

Categoria: Azione
Uscite: Success, Failure

Il nodo elabora dati provenienti da un Device System. In questo modo i dati di più dispositivi correlati vengono aggregati o correlati tra loro.

Configurazione​

Il nodo non ha opzioni UI configurabili. La versione interna viene impostata dalla piattaforma.

Note​

  • L'origine deve appartenere a un Device System configurato.
  • La struttura del Device System viene letta dal database.
  • Il nodo è rilevante solo se viene utilizzata la funzione Device System.

GPS Geofencing Events​

Categoria: Azione
Uscite: Entered, Left, Inside, Outside

Il nodo tiene traccia dello stato del geofence per ogni dispositivo e genera eventi all'ingresso o all'uscita da un'area. A differenza del GPS Geofencing Filter, questo nodo è dotato di stato.

Configurazione​

I campi delle coordinate e del geofence corrispondono a quelli del GPS Geofencing Filter. Inoltre vengono configurate durate minime:

LabelDescrizione
Minimal Inside DurationDurata per cui un dispositivo deve trovarsi all'interno dell'area prima che venga generato Entered.
Inside Duration UnitUnità di tempo per minInsideDuration.
Minimal Outside DurationDurata all'esterno dell'area prima che venga generato Left.
Outside Duration UnitUnità di tempo per minOutsideDuration.

Uscite​

UscitaSignificato
EnteredIl dispositivo è rimasto all'interno dell'area abbastanza a lungo e prima si trovava all'esterno.
LeftIl dispositivo è rimasto all'esterno dell'area abbastanza a lungo e prima si trovava all'interno.
InsideIl dispositivo è all'interno, ma la durata minima non è ancora stata raggiunta.
OutsideIl dispositivo è all'esterno, ma la durata minima non è ancora stata raggiunta.

RPC Call Request​

Categoria: Azione
Uscite: Success, Failure, Timeout

Il nodo invia una chiamata RPC dal server a un dispositivo e attende la risposta.

Configurazione​

LabelObbligatorioDescrizione
TimeoutSìTempo di attesa in secondi, trascorso il quale il messaggio prosegue tramite Timeout.

Ingresso e output​

Il corpo del messaggio deve contenere method e params. L'origine deve essere un dispositivo. In caso di Success la risposta del dispositivo sostituisce il corpo del messaggio.

Esempio​

{
"method": "emergencyShutdown",
"params": { "reason": "HighTemperature" }
}
informazioni

Il dispositivo deve essere configurato in modo corrispondente per poter eseguire effettivamente le Remote Procedure Call specifiche.


RPC Call Reply​

Categoria: Azione
Uscite: Success, Failure

Il nodo invia una risposta a una richiesta RPC proveniente dal dispositivo. Il contenuto della risposta viene costruito a partire dal corpo del messaggio corrente.

Configurazione​

LabelObbligatorioDescrizione
Request ID Metadata AttributeNoCampo dei metadati con l'ID della richiesta RPC.

Ingresso​

Il messaggio deve essere di tipo TO_SERVER_RPC_REQUEST. serviceId, sessionId e requestId vengono di norma impostati dalla piattaforma.


Nodi di arricchimento​

Originator Attributes​

Categoria: Arricchimento
Uscite: Success, Failure

Il nodo legge dal database gli attributi e gli ultimi valori di telemetria dell'origine e li scrive nei metadati del messaggio.

Prefissi dei metadati​

OriginePrefisso nei metadati
Attributi clientcs_
Attributi sharedshared_
Attributi serverss_
Ultima telemetrianessun prefisso

Configurazione​

LabelObbligatorioDescrizione
Client AttributesNoAttributi client che vengono aggiunti come cs_<name>.
Shared AttributesNoAttributi shared che vengono aggiunti come shared_<name>.
Server AttributesNoAttributi server che vengono aggiunti come ss_<name>.
Latest TimeseriesNoUltimi valori di telemetria che vengono aggiunti senza prefisso.
Tell FailureSìAttivato: i valori mancanti portano a Failure. Disattivato: i valori mancanti vengono ignorati.

Deve essere inserita almeno una chiave di attributo o di telemetria.

Esempio​

Se, ad es., si desidera definire manualmente un valore di offset per un canale di temperatura, si potrebbe creare un attributo server nella forma offset : 5. Tramite questo nodo è quindi possibile leggere questo valore e arricchire i metadati per continuare a lavorare con tale valore, selezionando il canale offset in Server Attributes. Nel nodo Script successivo è possibile accedere a questo valore tramite:

var offset = metadata.ss_offset;
var correctedTemperature = msg.temperature + offset;
return {
msg: msg,
metadata: metadata,
msgType: msgType
};

Originator Telemetry​

Categoria: Arricchimento
Uscite: Success, Failure

Il nodo legge i valori di telemetria storici dell'origine da una finestra temporale e li aggiunge ai metadati.

Configurazione​

AreaCampi
Selezione dei datilatestTsKeyNames, fetchMode con FIRST, LAST o ALL.
Campi aggiuntivi con ALLaggregation, orderBy, limit.
Finestra temporaleuseMetadataIntervalPatterns, startInterval, startIntervalTimeUnit, endInterval, endIntervalTimeUnit, startIntervalPattern, endIntervalPattern.

Note​

  • Con FIRST o LAST viene aggiunto un singolo valore per chiave.
  • Con ALL i valori vengono memorizzati nei metadati come array JSON.

Esempio​

Per un confronto con la media degli ultimi cinque minuti è possibile caricare temperature con fetchMode = ALL e successivamente valutarla in uno script Transform.

*Nodo Script


var temperatureArray = metadata.temperatureArray;
var total = 0;
var avgTemp = 0;

for (var i = 0; i < temperatureArray.length; i++) {
total += temperatureArray[i];
}

if (temperatureArray.length > 0) {
avgTemp = total / temperatureArray.length;
}

msg.avgTemp = avgTemp;

return {
msg: msg,
metadata: metadata,
msgType: msgType
};

Originator Fields​

Categoria: Arricchimento
Uscite: Success, Failure

Il nodo legge i campi anagrafici dell'origine, ad esempio nome o tipo, e li scrive nei metadati con nomi configurabili.

Configurazione​

LabelObbligatorioDescrizione
Fields MappingSìAssociazione tra i nomi dei campi dell'entità e le chiavi dei metadati.
Campo di origineSignificato
nameNome visualizzato del dispositivo
typeTipo di entità, DEVICE
labelEtichetta dell'entità
additionalInfoInformazioni aggiuntive come JSON
createdTimeData e ora di creazione come millisecondi Epoch

Esempio​

Con name -> deviceName un successivo nodo To Email può utilizzare ${deviceName} nell'oggetto.


Tenant Details​

Categoria: Arricchimento
Uscite: Success, Failure

Il nodo aggiunge i dati di contatto e di indirizzo del tenant al corpo del messaggio o ai metadati.

Configurazione​

LabelObbligatorioDescrizione
DetailsSìCampi del tenant selezionati. Deve essere selezionato almeno un campo.
Add Details to MetadataSìAttivato: i valori vengono scritti nei metadati. Disattivato: i valori vengono scritti nel corpo del messaggio.

I campi disponibili sono TITLE, EMAIL, PHONE, COUNTRY, CITY, STATE, ZIP, ADDRESS, ADDRESS2 e ADDITIONAL_INFO.


Nodi di trasformazione​

Script (Transform)​

Categoria: Trasformazione
Uscite: Success, Failure

Il nodo modifica il corpo del messaggio, i metadati e/o il tipo di messaggio tramite JavaScript. Il risultato dello script viene inoltrato ai nodi successivi.

Configurazione​

LabelObbligatorioDescrizione
Transform FunctionSìFunzione JavaScript Transform(msg, metadata, msgType).

Valore restituito​

Lo script deve restituire un oggetto con msg, metadata e msgType.

Esempio​

var newMsg = {};
newMsg.temperatureF = msg.temperature * 9 / 5 + 32;
newMsg.humidity = msg.humidity;

return {
msg: newMsg,
metadata: metadata,
msgType: msgType
};

To Email​

Categoria: Trasformazione
Uscite: Success, Failure

Il nodo crea un oggetto e-mail a partire dal messaggio corrente e dai relativi metadati.

Configurazione​

LabelObbligatorioDescrizione
FromSìIndirizzo del mittente.
ToSìIndirizzo del destinatario oppure più destinatari separati da virgola.
CCNoDestinatari in CC.
BCCNoDestinatari in BCC.
SubjectSìOggetto.
BodySìContenuto dell'e-mail.

Tutti i campi supportano segnaposto nel formato ${metadataKey}.

informazioni

Il nodo to Email genera solo l'e-mail. L'e-mail viene inviata con il nodo Send Email, che gestisce la comunicazione con il server SMTP.

Catena di elaborazione​


Nodi esterni​

REST API Call​

Categoria: Esterno
Uscite: Success, Failure

Il nodo invia una richiesta HTTP a un'interfaccia REST esterna. Il corpo del messaggio corrente viene utilizzato come payload della richiesta.

Configurazione​

LabelObbligatorioDescrizione
Endpoint URL PatternSìURL di destinazione. Supporta segnaposto ${metadata}.
Request MethodSìMetodo HTTP: GET, POST, PUT, DELETE.
Use Simple Client HTTP FactoryNoUtilizza un semplice client HTTP, ad es. per risposte di grandi dimensioni.
HeadersNoHeader HTTP come elenco chiave-valore.

Output​

In caso di successo status, statusCode, statusReason e headers vengono scritti nei metadati. Il response body diventa il nuovo corpo del messaggio.


MQTT​

Categoria: Esterno
Uscite: Success, Failure

Il nodo pubblica il corpo del messaggio corrente su un broker MQTT esterno. Il topic può essere costruito dinamicamente tramite i metadati.

Configurazione​

LabelObbligatorioDescrizione
Topic PatternSìTopic MQTT con eventuali segnaposto ${metadata}.
HostSìNome host o indirizzo IP del broker.
PortSìPorta del broker, ad es. 1883 o 8883.
Connection TimeoutSìTimeout di connessione in secondi.
Client IDNoID client MQTT.
Clean SessionNoControlla se i dati di sessione del broker vengono scartati.
Enable SSLNoAttiva TLS/SSL.

Credenziali​

Sono supportati anonymous, basic con nome utente/password e cert.PEM per mTLS con certificati PEM.


Kafka​

Categoria: Esterno
Uscite: Success, Failure

Il nodo pubblica il corpo del messaggio corrente come record in un topic Kafka.

Configurazione​

LabelObbligatorioDescrizione
Topic PatternSìTopic Kafka, eventualmente con segnaposto dei metadati.
Bootstrap ServersSìElenco di broker separati da virgola.
Auto Retry TimesNoNumero di nuovi tentativi di invio.
Batch SizeNoDimensione del batch in byte.
Time to BufferNoTempo di attesa per raccogliere i record in millisecondi.
Buffer Max SizeNoBuffer massimo del producer.
AcksSìComportamento di conferma del broker.
SerializerSìClassi di serializzazione.
Other PropertiesNoUlteriori proprietà del producer Kafka.

Output​

In caso di successo offset, partition e topic vengono scritti nei metadati.


RabbitMQ​

Categoria: Esterno
Uscite: Success, Failure

Il nodo pubblica il corpo del messaggio su un exchange RabbitMQ. Exchange e routing key possono essere costruiti dai metadati.

Configurazione​

LabelObbligatorioDescrizione
Exchange Name PatternNoNome dell'exchange. Vuoto significa Default Exchange.
Routing Key PatternNoRouting key.
Message PropertiesNoProprietà del messaggio AMQP.
HostSìHost RabbitMQ.
PortSìPorta AMQP.
Virtual HostNoVirtual host RabbitMQ.
CredenzialiNoAutenticazione.
Automatic RecoveryNoRiconnessione automatica.
TimeoutsNoTimeout di connessione e di handshake.
Client PropertiesNoUlteriori proprietà del client.

AWS SQS​

Categoria: Esterno
Uscite: Success, Failure

Il nodo invia il corpo del messaggio corrente a una coda AWS SQS. Sono supportate code Standard e FIFO.

Configurazione​

LabelObbligatorioDescrizione
Queue TypeSìCoda Standard o FIFO.
Queue URL PatternSìURL della coda SQS. Supporta segnaposto dei metadati.
Delay SecondsNoRitardo per le code Standard.
Message AttributesNoUlteriori attributi SQS.
Credenziali AWSSìCredenziali IAM.
AWS RegionSìRegione AWS della coda.

Output​

In caso di successo vengono aggiunti, tra l'altro, messageId, requestId, messageBodyMd5, messageAttributesMd5 e, per le code FIFO, sequenceNumber.


AWS SNS​

Categoria: Esterno
Uscite: Success, Failure

Il nodo pubblica il corpo del messaggio corrente su un topic AWS SNS.

Configurazione​

LabelObbligatorioDescrizione
Topic ARN PatternSìARN del topic SNS. Supporta segnaposto dei metadati.
Credenziali AWSSìCredenziali IAM.
AWS RegionSìRegione AWS del topic.

Output​

In caso di successo messageId e requestId vengono scritti nei metadati.


GCP Pub/Sub​

Categoria: Esterno
Uscite: Success, Failure

Il nodo pubblica il corpo del messaggio corrente in un topic Google Cloud Pub/Sub.

Configurazione​

LabelObbligatorioDescrizione
GCP Project IDSìID del progetto Google Cloud.
Topic NameSìNome del topic Pub/Sub.
GCP Service Account KeySìUpload di un file JSON con le credenziali del service account.
Message AttributesNoUlteriori attributi Pub/Sub.

Nota​

Il service account richiede l'autorizzazione roles/pubsub.publisher per il topic di destinazione.

Output​

In caso di successo messageId viene scritto nei metadati.


Send Email​

Categoria: Esterno
Uscite: Success, Failure

Il nodo invia un oggetto e-mail tramite SMTP. L'oggetto e-mail deve essere stato generato in precedenza tramite il nodo To Email.

Configurazione​

LabelObbligatorioDescrizione
Use General SMTP SettingsSìAttiva le impostazioni SMTP a livello di sistema.

Se le impostazioni SMTP a livello di sistema vengono disattivate, è possibile configurare smtpProtocol, smtpHost, smtpPort, username, password, timeout, enableTls, requireTls, checkServerIdentity e sslTrustHost.

Nota​

Se il messaggio in ingresso non è un oggetto e-mail valido, prosegue tramite Failure.


Nodi scheduler​

Create Scheduled Task​

Categoria: Scheduler
Uscite: Success, Failure

Il nodo pianifica un'attività singola per un momento successivo. L'attività può generare un rapporto o attivare una RuleChain.

Configurazione​

LabelObbligatorioDescrizione
Job NameSìNome univoco dell'attività pianificata.
Delay Before StartSìRitardo fino all'esecuzione.
TypeSìREPORT o RULE_CHAIN.
Rule ChainSì, con RULE_CHAINRuleChain da eseguire.
Campi Reporta seconda del tipo di rapportoConfigurazione per i rapporti pianificati.

Note​

  • Un'attività con lo stesso jobName per la stessa entità viene sovrascritta.

Clear Scheduled Task​

Categoria: Scheduler
Uscite: Success, Failure

Il nodo elimina un'attività pianificata in precedenza prima che venga eseguita.

Configurazione​

LabelObbligatorioDescrizione
Job NameSìNome esatto dell'attività da eliminare.

Note​

  • Il nome deve corrispondere al nome utilizzato in Create Scheduled Task.
  • L'associazione avviene per entità di origine.
  • Se non esiste alcuna attività corrispondente, il messaggio prosegue tramite Failure.

Nodi di eventi e allarmi​

Complex Alarm​

Categoria: Regola di evento
Uscite: Success, Created, Cleared

Il nodo genera o termina allarmi in base a una regola di evento per la telemetria in tempo reale. È adatto a schemi che non possono essere rappresentati con una semplice verifica di un singolo valore.

Configurazione​

LabelObbligatorioDescrizione
Event RuleSìSelezione di una regola di evento esistente.

Note​

  • La regola di evento deve essere stata creata prima dell'utilizzo del nodo. Vedere Event Processing
  • Created significa che è stato aperto un nuovo allarme.
  • Cleared significa che un allarme esistente è stato terminato.
  • Success significa che non si è verificata alcuna modifica dello stato dell'allarme.

Complex Event Processing​

Categoria: Regola di evento
Uscite: Success, Created, Cleared

Il nodo applica il Complex Event Processing ai dati di file OSF già caricati. È la variante basata su file di Complex Alarm.

Configurazione​

LabelObbligatorioDescrizione
Event RuleSìSelezione della regola di evento per la valutazione CEP.

Note​

  • Il nodo viene posizionato dopo Aggregate OSF File.
  • La regola di evento deve essere stata creata in anticipo nella piattaforma. Vedere Event Processing

Enrich Alarm​

Categoria: Regola di evento
Uscite: Success, Failure

Il nodo arricchisce un allarme esistente con informazioni aggiuntive provenienti da una regola di evento basata su Excel.

Configurazione​

LabelObbligatorioDescrizione
Event RuleSìSelezione di una regola di evento con il relativo file Excel per l'arricchimento.

Note​

  • La regola di evento deve essere stata creata in anticipo nella piattaforma. Vedere Event Processing
  • La regola di evento deve avere un file Excel con le associazioni per tipi di allarme o condizioni.
  • Il nodo viene impiegato dopo Create Alarm o Complex Alarm.
  • I dettagli aggiunti vengono riscritti nel record dell'allarme.