RuleNodes
RuleNodes
Les RuleNodes sont les éléments fonctionnels d'une RuleChain dans optiCLOUD. Ils déterminent comment les messages entrants sont filtrés, enrichis, transformés, enregistrés ou transmis à d'autres systèmes.
Cette page offre une orientation pratique sur les nœuds disponibles et leurs domaines d'application :
- Quels nœuds existe-t-il ?
- À quoi servent-ils ?
- Quelles sorties ou relations possèdent-ils ?
Aperçu par catégories
Nœuds de filtre
| RuleNode | Objet |
|---|---|
| Message Type Filter | Ne laisse passer que certains types de messages |
| Message Type Switch | Répartit les messages sur différents chemins selon le type de message |
| File Type Switch | Aiguille les messages de fichiers selon le type de fichier |
| File Names Filter | Filtre les noms de fichiers par préfixes |
| Device Filter | Limite le traitement à certains appareils |
| Script (Filter) | Exécute une logique de filtrage librement définie en JavaScript |
| Switch | Transmet les messages par script vers des sorties dynamiques |
| Check Existence Fields | Vérifie si des champs sont présents dans le message ou les métadonnées |
| GPS Geofencing Filter | Ne laisse passer que les messages situés à l'intérieur d'un geofence |
Nœuds d'action
| RuleNode | Objet |
|---|---|
| Save Timeseries | Enregistre la télémétrie sous forme de série temporelle |
| Save Attributes | Enregistre des attributs dans un scope choisi |
| Save Alarms | Enregistre les états d'alarme à partir de messages d'alarme |
| Create Alarm | Crée ou met à jour une alarme |
| Clear Alarm | Met fin à une alarme existante |
| Alarm Counter | Compte les alarmes dans une fenêtre temporelle |
| Log | Écrit des sorties de débogage ou de journal |
| Generator | Génère des messages de façon périodique |
| Message Count | Compte les messages entrants et publie le compteur |
| Delay | Retarde la transmission d'un message |
| Aggregate OSF File | Lit des fichiers OSF et en génère de la télémétrie |
| Aggregate JSONL File | Lit des fichiers JSONL et en génère de la télémétrie |
| Process Raw Data File | Traite les opérations sur fichiers dans le stockage blob |
| Generate Report | Crée des rapports sur une période définie |
| Device System | Agrège des données de plusieurs appareils |
| GPS Geofencing Events | Génère des événements à l'entrée ou à la sortie d'un geofence |
| RPC Call Request | Envoie un appel RPC à un appareil |
| RPC Call Reply | Répond à un appel RPC entrant |
Nœuds d'enrichissement
| RuleNode | Objet |
|---|---|
| Originator Attributes | Charge les attributs de l'élément d'origine dans les métadonnées |
| Originator Telemetry | Charge la télémétrie de l'élément d'origine dans les métadonnées |
| Originator Fields | Complète avec les données de base de l'élément d'origine |
| Tenant Details | Complète avec les informations du tenant |
Nœuds de transformation
| RuleNode | Objet |
|---|---|
| Script (Transform) | Modifie le message, les métadonnées ou le type de message en JavaScript |
| To Email | Construit un objet e-mail à partir d'un message |
Nœuds externes
| RuleNode | Objet |
|---|---|
| REST API Call | Envoie des données à une interface REST externe |
| MQTT | Publie des messages vers un broker MQTT |
| Kafka | Publie des messages dans un topic Kafka |
| RabbitMQ | Envoie des messages à RabbitMQ |
| AWS SQS | Envoie des messages à une queue SQS |
| AWS SNS | Publie des messages vers un topic SNS |
| GCP Pub/Sub | Publie des messages vers Google Pub/Sub |
| Send Email | Envoie un e-mail via SMTP |
Nœuds de planification (Scheduler)
| RuleNode | Objet |
|---|---|
| Create Scheduled Task | Planifie une exécution unique différée |
| Clear Scheduled Task | Supprime une tâche planifiée précédemment |
Nœuds d'événements et d'alarmes
| RuleNode | Objet |
|---|---|
| Complex Alarm | Crée des alarmes à partir de motifs complexes en temps réel |
| Complex Event Processing | Évalue des données de fichiers avec des règles d'événements |
| Enrich Alarm | Complète des alarmes existantes avec des informations supplémentaires |
Aperçu détaillé
Nœuds de filtre
Message Type Filter
Catégorie : Filtre
Sorties : True, False
Le nœud vérifie si le type de message du message entrant figure dans une liste configurée. En cas de correspondance, le message poursuit via True, sinon via False.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Message Types Filter | Oui | Liste des types de messages autorisés. Au moins un type doit être renseigné. |
Les valeurs prises en charge comprennent notamment 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 et POST_ALARMS.
Exemple
Utilisez ce nœud lorsque, par exemple, seules les données de télémétrie doivent être traitées. Dans ce cas, POST_TELEMETRY_REQUEST est configuré et relié via la sortie TRUE à un autre nœud, qui ne recevra alors à coup sûr que des messages de type POST_TELEMETRY_REQUEST.
Message Type Switch
Catégorie : Filtre
Sorties : une par type de message, plus Other
Le nœud répartit les messages sur des sorties fixes d'après leur type de message. Il convient comme répartiteur en début de RuleChain lorsque différents types de messages doivent être traités dans des branches séparées.
Configuration
Ce nœud ne possède aucune option configurable. Les sorties sont définies de manière fixe.
| Sortie | Condition |
|---|---|
POST_ATTRIBUTES | Le type de message est POST_ATTRIBUTES_REQUEST |
POST_TELEMETRY | Le type de message est POST_TELEMETRY_REQUEST |
POST_ALARMS | Le type de message est POST_ALARMS |
BLOB_STORE_REQUEST | Le type de message est BLOB_STORE_REQUEST |
RPC_REQUEST_FROM_DEVICE | Le type de message est TO_SERVER_RPC_REQUEST |
RPC_REQUEST_TO_DEVICE | Le type de message est TO_DEVICE_RPC_REQUEST |
ACTIVITY_EVENT | Le type de message est ACTIVITY_EVENT |
INACTIVITY_EVENT | Le type de message est INACTIVITY_EVENT |
CONNECT_EVENT | Le type de message est CONNECT_EVENT |
DISCONNECT_EVENT | Le type de message est DISCONNECT_EVENT |
Other | Tous les autres types de messages |
Exemple
Dans une Root RuleChain, ce nœud peut se trouver directement après l'entrée pour répartir la télémétrie, les attributs, les alarmes, les messages RPC et les opérations sur fichiers dans des branches de traitement séparées.
File Type Switch
Catégorie : Filtre
Sorties : OSF, JSONL, Other
Le nœud aiguille les messages de fichiers d'après l'extension du fichier. Il est utilisé dans les pipelines de fichiers, une fois qu'une opération sur fichier a été reconnue comme BLOB_STORE_REQUEST.
Configuration
Ce nœud ne possède aucune option configurable. La détection s'effectue d'après l'extension du fichier dans les métadonnées.
| Sortie | Extensions de fichier reconnues |
|---|---|
OSF | .osf, .osfz |
JSONL | .log, .log.gz |
Other | Toutes les autres extensions de fichier |
Exemple
Transmettez p. ex. les fichiers .osf à Aggregate OSF File.
File Names Filter
Catégorie : Filtre
Sorties : True, False
Le nœud ne laisse poursuivre les messages de fichiers via True que si le nom du fichier commence par l'un des préfixes configurés.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| File Prefixes | Oui | Liste de préfixes de noms de fichiers. La vérification est sensible à la casse. |
Remarques
- Une liste de préfixes vide a pour effet que tous les messages passent par
False. - Le nom du fichier est lu dans les métadonnées du message, en règle générale dans
fileName.
Exemple
Si un appareil téléverse des fichiers avec data_ et config_, deux File Names Filter peuvent être utilisés pour traiter séparément les deux groupes de fichiers.
Device Filter
Catégorie : Filtre
Sorties : True, False
Le nœud limite le traitement à certains appareils. Selon le réglage, la liste d'appareils peut être utilisée comme liste d'autorisation ou liste de blocage.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Devices | Oui | Sélection d'appareils par sélection multiple. |
| Allow selected devices | Oui | Activé : seuls les appareils sélectionnés passent par True. Désactivé : les appareils sélectionnés sont bloqués. |
Sorties
| Sortie | Condition |
|---|---|
True | L'appareil est autorisé ou n'est pas bloqué |
False | L'appareil n'est pas autorisé ou est explicitement bloqué |
Exemple
Si une règle ne doit être exécutée que pour certains appareils, le Device Filter peut être placé avant la règle et ne transmettre à la règle suivante qu'une sélection d'appareils.
Script (Filter)
Catégorie : Filtre
Sorties : True, False
Le nœud exécute une fonction JavaScript. Si le script renvoie true, le message poursuit via True. En cas de false ou d'erreur de script, il passe par False.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Filter Function | Oui | Fonction JavaScript avec la signature Filter(msg, metadata, msgType). |
Contexte du script
| Variable | Description |
|---|---|
msg | Corps du message JSON |
metadata | Métadonnées du message |
msgType | Type de message |
Exemple
var threshold = parseFloat(metadata.tempThreshold) || 50;
return msg.temperature > threshold;
Switch
Catégorie : Filtre
Sorties : dynamiques par script
Le nœud transmet un message vers une ou plusieurs sorties nommées. Les noms des sorties sont renvoyés sous forme de tableau par une fonction JavaScript.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Switch Function | Oui | Fonction JavaScript avec la signature Switch(msg, metadata, msgType). |
Le script doit renvoyer un tableau de chaînes. Chaque chaîne correspond à un nom de sortie.
Remarques
- Les noms de sortie non connectés sont ignorés.
- Un tableau vide rejette le message.
- Pour toutes les valeurs de retour possibles, il convient de créer des connexions appropriées dans la RuleChain.
Exemple
La fonction suivante permet par exemple de vérifier la valeur de température d'un message et de transmettre les messages différemment selon cette valeur.
- La connexion « highTemp » pourrait par exemple être reliée à un nœud d'alarme qui crée une alarme « High Temperature »
- La connexion « lowTemp » pourrait par exemple être reliée à un nœud d'alarme qui crée une alarme « Low Temperature »
- La connexion « normalTemp » pourrait par exemple être reliée à un nœud qui définit un attribut « 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
Catégorie : Filtre
Sorties : True, False
Le nœud vérifie si certains champs sont présents dans le corps du message et/ou dans les métadonnées. Les nœuds suivants peuvent ainsi être protégés contre les messages incomplets.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Message Data | Non | Noms de champs qui doivent être présents dans le corps du message. |
| Message Metadata | Non | Noms de champs qui doivent être présents dans les métadonnées. |
| Check All Keys Present | Oui | Activé : tous les champs indiqués doivent être présents. Désactivé : au moins un champ doit être présent. |
Au moins l'un des deux champs messageNames ou metadataNames doit contenir des entrées.
Exemple
Avant un nœud Script, il est possible de vérifier, par exemple, que tous les canaux utilisés dans le script sont bien présents dans le message. Cela évite que le script échoue et réduit sa complexité, car il faudrait sinon prendre des précautions au moyen de conditions if/else pour vérifier la présence des canaux. Lorsque ce nœud est placé avant un nœud Script, on peut partir du principe, dans le nœud Script, que les canaux sont présents dans le message.
GPS Geofencing Filter
Catégorie : Filtre
Sorties : True, False
Le nœud vérifie si des coordonnées GPS se situent à l'intérieur d'un geofence défini. La vérification est sans état et évalue à chaque fois le message courant.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Latitude Key Name | Oui | Nom du champ de la latitude dans le corps du message. |
| Longitude Key Name | Oui | Nom du champ de la longitude dans le corps du message. |
| Fetch Perimeter Info from Metadata | Oui | Activé : la définition du geofence est lue dans les métadonnées. Désactivé : le geofence est configuré statiquement dans le nœud. |
| Perimeter Type | Oui, en configuration statique | Circle ou Polygon. |
| Champs du cercle | Oui, pour un cercle | Centre, rayon et unité du cercle. |
| Polygon Definition | Oui, pour un polygone | Définition GeoJSON ou WKT du polygone. |
Remarque
Pour les événements d'entrée/de sortie basés sur l'état, GPS Geofencing Events est utilisé.
Exemple
Ne traitez p. ex. la télémétrie que lorsqu'un véhicule se trouve dans une zone définie ; sinon la télémétrie est rejetée.
Nœuds d'action
Save Timeseries
Catégorie : Action
Sorties : Success, Failure
Le nœud enregistre dans la base de données les données de télémétrie du corps du message sous forme de valeurs de série temporelle.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Default TTL | Oui | Durée de vie des points de données enregistrés en secondes. 0 signifie aucune suppression automatique. |
| Enable Type Cast | Oui | Convertit les valeurs numériques ou booléennes issues de chaînes en types de données natifs. |
Entrée
Le type de message doit être POST_TELEMETRY_REQUEST. Le corps du message doit être un objet JSON ou contenir un tableau d'objets JSON avec un horodatage ts.
Save Attributes
Catégorie : Action
Sorties : Success, Failure
Le nœud enregistre les paires clé-valeur du corps du message comme attributs de l'entité d'origine.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Attribute Scope | Oui | Scope cible pour les attributs. |
| Enable Type Cast | Oui | Convertit les valeurs numériques ou booléennes issues de chaînes en types de données natifs. |
| Scope | Signification |
|---|---|
CLIENT_SCOPE | Attributs signalés par l'appareil, visibles pour l'appareil. |
SHARED_SCOPE | Attributs définis côté serveur, pouvant être distribués à l'appareil. |
SERVER_SCOPE | Attributs internes au serveur, non envoyés à l'appareil. |
Entrée
Le corps du message doit être un objet JSON. Chaque clé est enregistrée comme nom d'attribut.
Save Alarms
Catégorie : Action
Sorties : Activated, Deactivated, Sustained
Le nœud traite les messages de type POST_ALARMS et enregistre les états d'alarme dans la base de données. Il reproduit ainsi les changements d'état des alarmes.
Sorties
| Sortie | Signification |
|---|---|
Activated | Une nouvelle alarme a été ouverte ou une alarme supprimée est de nouveau active. |
Deactivated | Une alarme active a pris fin. |
Sustained | Une alarme déjà active reste active. |
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Propagate | Oui | Indique si les alarmes sont propagées aux entités parentes. |
Entrée
Le message doit être de type POST_ALARMS et contenir des données d'alarme conformes au modèle d'alarme de la plateforme.
Create Alarm
Catégorie : Action
Sorties : Created, Updated, False
Le nœud crée une alarme pour l'origine du message ou met à jour une alarme existante du même type. Les détails de l'alarme sont construits en JavaScript à partir du message et des métadonnées.
Sorties
| Sortie | Signification |
|---|---|
Created | Une nouvelle alarme a été créée. |
Updated | Une alarme existante de ce type a été mise à jour. |
False | Le script n'a pas généré d'alarme. |
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Alarm Details Builder | Oui | Fonction JavaScript Details(msg, metadata, msgType) pour les détails de l'alarme. |
| Alarm Type | Oui | Type d'alarme. Prend en charge les motifs ${metadata.key}. |
| Alarm Severity | Oui | Niveau de gravité : CRITICAL, MAJOR, MINOR, WARNING, INDETERMINATE. |
| Propagate | Oui | Propage l'alarme aux entités parentes. |
Métadonnées après traitement
Le nœud ajoute notamment alarmType, alarmIsNew, alarmSeverity et alarmId.
Exemple
Un Script Filter placé en amont vérifie msg.temperature > 80. Dans le cas True, ce nœud crée une alarme HighTemperature avec le niveau de gravité MAJOR.
Les détails pourraient contenir par exemple une fonction qui conserve la température maximale atteinte tant qu'une alarme était active et mise à jour
var details = {};
if (metadata.prevAlarmDetails) {
details = JSON.parse(metadata.prevAlarmDetails);
if (parseFloat(details.highestTemp) < msg.temperature){
details.highestTemp = msg.temperature;
}
}
return details;
Clear Alarm
Catégorie : Action
Sorties : Cleared, False
Le nœud met fin à une alarme active du type configuré pour l'origine du message.
Sorties
| Sortie | Signification |
|---|---|
Cleared | Une alarme active correspondante a été trouvée et clôturée. |
False | Aucune alarme active correspondante n'a été trouvée. |
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Alarm Details Builder | Oui | Fonction JavaScript pour les détails finaux de l'alarme lors de sa clôture. |
| Alarm Type | Oui | Type d'alarme, qui doit correspondre exactement à l'alarme créée précédemment. |
Métadonnées après traitement
Le nœud ajoute alarmType et alarmId.
Exemple
Lorsqu'un appareil signale de nouveau temperature < 70, Clear Alarm peut clôturer l'alarme HighTemperature créée précédemment.
Le type d'alarme est sensible à la casse. Si une alarme de type HighTemperature a été créée avec un nœud Create Alarm, ce même type d'alarme HighTemperature doit être saisi exactement dans le nœud Clear Alarm pour que l'alarme puisse être supprimée.
Alarm Counter
Catégorie : Action
Sorties : Success, Failure
Le nœud compte les alarmes selon des critères configurés dans une fenêtre temporelle et enregistre les résultats sous forme d'attributs serveur sur l'origine du message.
Configuration
Le nœud contient une liste de définitions de compteurs.
| Label | Champ obligatoire | Description |
|---|---|---|
| Find by Field Name | Oui | Champ d'alarme sur lequel on filtre, p. ex. severity ou type. |
| With Field Value | Oui | Valeur que le champ doit avoir, p. ex. CRITICAL. |
| Save in Server Attribute | Oui | Nom de l'attribut serveur dans lequel le compteur est enregistré. |
| Time Period Alarm Considered | Oui | Fenêtre temporelle considérée en secondes. 0 signifie sans limite de temps. |
Exemple
Avec
fieldName = severityfieldValue = CRITICALattributeName = criticalAlarms24hperiodInSeconds = 86400
le nombre d'alarmes critiques des dernières 24 heures est compté et enregistré sous l'attribut serveur criticalAlarms24h.
Log
Catégorie : Action
Sorties : Success, Failure
Le nœud écrit dans le journal du serveur un texte généré en JavaScript et transmet le message d'origine sans le modifier.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Log Function | Oui | Fonction JavaScript ToString(msg, metadata, msgType) qui renvoie le texte du journal. |
Remarques
- Le nœud est avant tout destiné au développement, à l'analyse et au dépannage.
- Il doit être utilisé avec parcimonie et, de préférence, seulement après concertation avec Optimeas, car un nœud Log n'a en réalité de sens que lorsque des erreurs se sont produites au préalable et que l'utilisateur ne peut éventuellement pas les corriger lui-même.
Generator
Catégorie : Action
Sorties : Success, Failure
Le nœud génère périodiquement des messages en JavaScript et les injecte dans la RuleChain. Il peut être utilisé pour des tests, des simulations ou des processus planifiés.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Message Count | Oui | Nombre de messages à générer. 0 signifie illimité. |
| Period in Seconds | Oui | Intervalle entre les messages générés, en secondes. |
| Originator | Oui | Appareil d'origine des messages générés. |
| Generator Function | Oui | Fonction JavaScript Generate(prevMsg, prevMetadata, prevMsgType). |
La fonction doit renvoyer msg, metadata et msgType.
Exemple
Si l'on souhaite par exemple créer et tester une RuleChain mais que l'on n'a pas d'appareil réel sous la main, ou que celui-ci n'envoie pas de données en direct à ce moment précis, on peut générer des messages artificiels avec le nœud Generator. Pour un test pertinent, ces messages générés artificiellement devraient idéalement refléter les messages attendus d'un appareil réel.
L'exemple suivant génère des messages avec :
Canaux de télémétrie : {"temperature": 42} et {"humidity": 77}
Métadonnées : {"data": 40}
Type : 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 };
Dans l'exemple ci-dessus, il s'agit de messages statiques avec toujours les mêmes valeurs (42, 77, 40). Un générateur peut toutefois aussi produire des données variables, p. ex. via :
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 };
Remarque
En environnement de production, la période doit être choisie avec soin afin de ne pas générer une charge de messages inutilement élevée.
Message Count
Catégorie : Action
Sorties : Success, Failure
Le nœud compte les messages dans un intervalle de temps et publie la valeur du compteur sous forme de télémétrie.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Interval in Seconds | Oui | Durée de la fenêtre de comptage en secondes. |
| Output Timeseries Key Prefix | Oui | Clé de télémétrie pour la valeur du compteur. |
Sortie
À la fin de chaque intervalle, un message POST_TELEMETRY_REQUEST est généré, p. ex. :
{
"messageCount": 42
}
Les messages entrants sont en outre transmis sans modification via Success.
Delay
Catégorie : Action
Sorties : Success, Failure
Le nœud retient les messages pendant une durée configurée, puis les transmet. Le retard peut être statique ou déterminé via les métadonnées.
Configuration
| Label | Champ obligatoire | Description |
|---|---|---|
| Use Metadata Period Pattern | Oui | Active un retard dynamique via les métadonnées. |
| Period in Seconds | Oui, si statique | Retard statique en secondes. |
| Period in Seconds Pattern | Oui, si dynamique | Champ de métadonnées ou expression ${...} pour le retard. |
| Max Pending Messages | Oui | Nombre maximal de messages mis en mémoire tampon. |
Remarques
- En cas de redémarrage du serveur, les messages en attente sont perdus, car ils ne sont pas enregistrés de façon persistante.
- Lorsque le nombre maximal de messages est atteint, les nouveaux messages passent par
Failure.
Aggregate OSF File
Catégorie : Action
Sorties : Success, Failure
Le nœud charge un fichier OSF référencé dans un BLOB_STORE_REQUEST et le traite.
Entrée et sortie
- Entrée :
BLOB_STORE_REQUESTavec la méthodeGET. - Les métadonnées doivent contenir la référence au fichier enregistré.
- Pour chaque intervalle de temps détecté, le nœud génère un message
POST_TELEMETRY_REQUESTcontenant les valeurs mesurées.