Chaînes de règles
Une chaîne de règles est un workflow visuel que traverse chaque relevé entrant. C'est elle qui décide si le relevé est enregistré, si une alarme est déclenchée ou résolue, et qui reçoit un message. La page se présente elle-même ainsi : « Workflows visuels pour le traitement des données capteurs » — des boîtes reliées par des lignes, évaluées une fois par relevé.
Vous les trouverez dans Gestion → Chaînes de règles.
Le parcours d'un relevé dans une chaîne
- Un relevé arrive de votre appareil (voir Connectivité des appareils).
- SensoCAN le rattache à un capteur et retient une seule chaîne : celle qui est attribuée à l'appareil de ce capteur si elle est active, sinon la Chaîne de règles par défaut de votre organisation.
- Le relevé entre par le nœud Sensor Input (l'entrée des relevés) et descend le long des connexions.
- Chaque nœud remet le relevé à l'une de ses sorties nommées, et une connexion ne transporte que les relevés dont l'étiquette de sortie lui correspond.
- Un relevé qui atteint un nœud Save to Database (l'enregistrement en base) est écrit ; un relevé qui n'en atteint jamais ne l'est pas.
Deux conséquences comptent. Une sortie laissée non reliée écarte tous les relevés qui passent par elle, sans aucun avertissement à l'exécution. Et un nœud en erreur n'interrompt que sa propre branche.
Votre appareil apprend que ses relevés ont été acceptés dès leur arrivée, avant qu'aucune chaîne ne s'exécute. Si la chaîne qui s'applique ne comporte aucun nœud Save to Database sur le trajet emprunté par le relevé, la donnée est acceptée puis jetée. Un appareil dont la chaîne est inactive, ou qui n'a aucune chaîne applicable, n'enregistre rien.
La chaîne de règles par défaut
Chaque organisation démarre avec une chaîne nommée Chaîne de règles par défaut : un nœud Sensor Input relié directement à un nœud Save to Database. Elle existe pour qu'un appareil sans chaîne propre conserve tout de même ses données.
Votre chaîne par défaut se choisit dans le champ Chaîne de règles par défaut, sous Paramètres → Organisation (Paramètres de l'organisation). Le champ est obligatoire et seule une chaîne active peut y être retenue. Cette chaîne ne peut être ni désactivée (« c'est elle qui enregistre les données des appareils qui n'ont pas de chaîne de règles propre ») ni supprimée, pas plus qu'aucune chaîne attribuée à des appareils. Si elle devient un jour inactive ou absente, les pages des appareils concernés affichent un avertissement rouge indiquant que les données ne sont pas enregistrées, et le journal des échecs consigne les relevés écartés sous Chaîne inactive.
Modifier la chaîne par défaut est normal : la plupart des organisations en font un véritable workflow. Conservez simplement un chemin vers Save to Database pour tout ce que vous voulez garder.
Attribuer des chaînes aux appareils
Ouvrez un appareil et repérez la carte Attributions de chaînes de règles. Quand rien n'est attribué, elle indique que la chaîne par défaut de l'organisation « sera appliquée automatiquement car cet appareil n'a aucune chaîne de règles attribuée ». Pour en attribuer une, choisissez-la dans Sélectionner une chaîne de règles et cliquez sur Attribuer ; seules les chaînes actives sont proposées, et une chaîne inactive est refusée avec le message « Cette chaîne de règles est inactive et ne peut pas être attribuée à des appareils. Activez-la d'abord. » Le X placé à côté d'une attribution la retire, et l'appareil revient à la chaîne par défaut. Les chaînes s'appliquent par appareil : tous les capteurs d'un même appareil partagent donc la même.

La page Chaînes de règles
La liste affiche Nom, Description, Nœuds, Échecs, Statut et Mis à jour. Échecs affiche un compteur rouge qui renvoie au journal des échecs de cette chaîne, ou un tiret. Le badge Statut indique Active ou Inactive, et un clic le fait basculer. Le menu de la ligne contient Modifier les détails, Modifier la chaîne de règles, Activer / Désactiver et Supprimer ; toute action qui casserait une chaîne protégée est désactivée et explique pourquoi en dessous : « Chaîne de règles par défaut de l'organisation » ou « Attribuée à 3 appareils ».
Créer une chaîne de règles demande des Informations générales (Nom, Description facultative) et un Modèle (optionnel) : Canevas vierge, High Temperature Alert, Humidity Range Monitor, After Hours Door Alert, Rapid Change Detection ou Temperature Alarm with Recovery. Toute nouvelle chaîne, issue d'un modèle ou vierge, arrive avec un nœud Sensor Input et un nœud Save to Database déjà en place.
Ce modèle se réduit à un test « valeur supérieure à 30 » qui alimente un e-mail. Pour un vrai travail sur la vitesse de variation, construisez plutôt avec le nœud Value Change (le changement de valeur).
L'éditeur visuel
Une barre d'outils occupe le haut de l'écran, la Node Palette (la palette de nœuds) se tient à gauche, le canevas — la surface sur laquelle vous posez les nœuds — au centre et un panneau de configuration à droite.
La palette a pour titre « Node Palette — Click to add nodes », avec un champ Search nodes... et quatre catégories dépliables affichant chacune son nombre de nœuds : Filters (Filtres), Enrichment (Enrichissement), Transform (Transformation) et Actions. Cliquez sur un nœud pour le déposer sur le canevas. Sensor Input et Save to Database n'y figurent pas, car chaque chaîne en possède déjà exactement un de chaque.
Relier les nœuds. Faites glisser depuis la poignée de sortie d'un nœud jusqu'à un autre nœud. La connexion est étiquetée automatiquement avec la première sortie du nœud source, ou Success (la réussite) pour un nœud qui n'en a qu'une. Lorsqu'un nœud a plusieurs sorties, la connexion affiche une pastille d'étiquette et un crayon ; le crayon ouvre Edit Connection (la modification de la connexion) avec une liste déroulante Route Based On (l'aiguillage) qui énumère toutes les sorties. Le X supprime une connexion. Les touches Suppr et Retour arrière retirent le nœud sélectionné, sauf Sensor Input et Save to Database : « This node cannot be deleted. It is required for the rule chain to function. », c'est-à-dire que ce nœud ne peut pas être supprimé, car il est nécessaire au fonctionnement de la chaîne.
Le panneau de configuration affiche « Select a node to configure » (sélectionner un nœud à configurer) tant que vous n'en avez pas cliqué un, et son bouton Save (enregistrer) reste désactivé tant que le panneau liste des erreurs. La barre d'outils affiche le nom de la chaîne, une mention Unsaved changes (modifications non enregistrées) et une pastille indiquant Valid (valide), ou un nombre d'erreurs en rouge ou d'avertissements en jaune : les erreurs empêchent l'enregistrement, les avertissements non. Elle contient aussi Journal des échecs avec un badge de comptage, Export (exporter), Delete (supprimer) et Save Changes (enregistrer les modifications).

Ce que dit le panneau Sensor Input
Chaque relevé entre dans la chaîne ici et passe aux nœuds reliés. Il n'y a rien à configurer. Les relevés ne sont enregistrés que par un nœud Save to Database — tout chemin dont vous voulez garder les données doit aboutir à l'un d'eux.
Où les relevés se perdent : une sortie de filtre laissée non reliée écarte tous les relevés qui passent par elle. Le filtre d'alerte envoie chaque relevé sur une seule sortie — pendant un dépassement en cours, la plupart des relevés sortent par Still Violating, qu'il est facile de laisser non reliée. Un appareil sans chaîne de règles, ou dont la chaîne est inactive, n'enregistre absolument rien.
Le « filtre d'alerte » dont il est question est le nœud nommé Consecutive Threshold Filter (le filtre de dépassements consécutifs) dans la palette.
Référence des nœuds
Tous les types de nœuds sont listés ici. Les nœuds aiguillent vers True (vrai) ou False (faux), sauf lorsque d'autres sorties sont nommées.
Sensor Input (l'entrée des relevés)
Entrée. Le point d'entrée : chaque relevé arrive ici et passe aux nœuds reliés. Aucun réglage. Ajouté automatiquement à chaque chaîne, non supprimable et absent de la palette. Il n'enregistre rien par lui-même.
Value Filter (le filtre de valeur)
Filtres. Compare le relevé à une valeur fixe. Réglages : Field Type (le type de champ) : Numeric, String ou Boolean ; Operator (l'opérateur) : Greater than, Greater than or equal, Less than, Less than or equal, Equal et Not equal pour le numérique, Equals, Not Equals, Contains, Starts With et Ends With pour le texte, Is True et Is False pour le booléen ; et Valeur, nécessaire partout sauf en booléen. Une valeur absente, ou non numérique en mode Numeric, part par False.
Time Filter (le filtre horaire)
Filtres. Donne True quand l'horodatage du relevé tombe dans une plage quotidienne. Réglages : Filter Type (le type de filtre), que vous devriez laisser sur Business Hours (les heures ouvrables) ; Use Sensor Profile Hours (utiliser les heures du profil du capteur), qui reprend la plage du profil du capteur et retombe sur les heures ci-dessous ; Heure de début et Heure de fin (09:00 et 17:00). La plage est évaluée à l'intérieur d'une même journée : 22:00 à 06:00 ne correspond donc jamais, et il n'existe aucun réglage de jour de la semaine.
Consecutive Threshold Filter (le filtre de dépassements consécutifs)
Filtres. Compte les dépassements consécutifs et monte en gravité sur trois niveaux, pour qu'un relevé isolé ne déclenche rien. Sorties : Severity 1 Alert, Severity 2 Alert, Severity 3 Alert, No Alert, Recovered et Still Violating. Réglages : Use Node Thresholds (utiliser les seuils du nœud) — activé, ce sont les valeurs de ce nœud qui s'appliquent ; désactivé, celles du profil du capteur. Puis Seuil minimum et Seuil maximum (laissés vides s'il n'y en a pas), avec Min Sensitivity et Max Sensitivity comme marges de tolérance de part et d'autre ; et toujours les nombres de dépassements consécutifs Level 1, Level 2 et Level 3 (3, 5 et 8 par défaut, chacun supérieur au précédent). Chaque niveau se déclenche une seule fois lorsqu'il est atteint pour la première fois, les dépassements suivants sortent par Still Violating, et un relevé revenu dans la plage après une alerte sort par Recovered. La gravité calculée ici est ce que Raise Alarm lit sous « From threshold ».
Sensor Type Filter (le filtre de type de capteur)
Filtres. Donne True quand le relevé provient d'un capteur du type choisi. Réglage : Type de capteur. Si aucun type n'est sélectionné, tout passe par True.
Notification Type Filter (le filtre de type de notification)
Filtres. Vérifie si les notifications par e-mail ou SMS sont activées dans le profil du capteur avant que le relevé ne poursuive sa route. Réglage : Notification Type (le type de notification), Email ou SMS. Un capteur sans profil passe par True ; un profil dont l'option est désactivée part par False.
Rate Limit (la limitation de la cadence)
Filtres. Ne laisse passer qu'un relevé par période de pause, pour qu'une chaîne ne puisse inonder personne. Sorties : Passed (« Outside the cooldown — the message continues », hors de la période de pause : le message poursuit sa route) et Suppressed (« Inside the cooldown — wire storage here », dans la période de pause : reliez l'enregistrement ici). Réglage : Cooldown (seconds) (la période de pause, en secondes), 300 par défaut, d'une seconde à 24 heures. La fenêtre est tenue par capteur et par nœud : deux chaînes qui surveillent un même capteur disposent donc de budgets séparés. Un relevé sorti par Suppressed est aiguillé, et non écarté : reliez cette sortie à l'enregistrement pour qu'une période de pause ne vous coûte jamais de données.
Value Change (le changement de valeur)
Filtres. Ne laisse passer un relevé que s'il a bougé depuis le dernier relevé passé. Sorties : Changed (changé) et Unchanged (inchangé). Réglage : Deadband (la bande morte), « le plus grand écart à ignorer, dans l'unité propre du capteur » — laissez-le à 0 pour une porte ou pour tout relevé en tout ou rien. Le premier relevé passe toujours. Contrairement à Rate Limit, un capteur immobile ne laisse rien passer, quelle que soit la durée : reliez donc Unchanged à l'enregistrement pour conserver l'historique complet.
Script Filter (le filtre par expression)
Filtres. Évalue une expression que vous écrivez et aiguille selon le résultat. Réglage : Expression (l'expression) — « Renvoyez true pour laisser passer, false pour filtrer. Variables disponibles : msg, metadata, value, type. » Un bouton Valider contrôle la syntaxe. Exemple : value > 30 and msg["status"] == "active". Une expression vide laisse tout passer par True ; une expression qui échoue à l'exécution part par False. La palette parle encore de JavaScript ; c'est le panneau qui est exact. Il s'agit d'une expression, pas d'un script : pas de return, et pas d'instructions.
Add Metadata (l'ajout de métadonnées)
Enrichissement. Attache au relevé des paires clé/valeur fixes. Réglages : Metadata Fields (les champs de métadonnées), des lignes de clé et de valeur, avec Add Field (ajouter un champ) pour en ajouter d'autres. Chaque clé devient utilisable comme variable {key} dans les messages plus loin dans la chaîne.
Fetch Attributes (la récupération d'attributs)
Enrichissement. Recherche des attributs enregistrés et les attache au relevé. Réglages : Data Source (la source de données), à savoir Sensor, Device ou Sensor Profile ; et Attributes (les attributs), les noms à récupérer. Les valeurs arrivent sous la forme {enrichment_<source>_<attribute>}, par exemple {enrichment_device_location}. Les noms d'attributs sont ceux des champs sous-jacents, pas les libellés affichés à l'écran.
Transform Value (la transformation de valeur)
Transformation. Réécrit la valeur du relevé pour tout ce qui suit dans la chaîne, Save to Database compris. Réglages : Field Type : Numeric, String ou Boolean ; Operation (l'opération) : Multiply, Divide, Add, Subtract, Round et Absolute value pour le numérique, Append, Prepend, Replace, Uppercase, Lowercase et Trim pour le texte, Negate pour le booléen ; et Operand (l'opérande) là où l'opération en demande un. Un aperçu Result (le résultat) montre l'effet obtenu, et la division par zéro est refusée. Ne placez ce nœud avant l'enregistrement que si vous voulez stocker la valeur convertie.
Send Email (l'envoi d'un e-mail)
Actions. Envoie un e-mail aux destinataires du relevé. Réglages : Use Device Recipients (utiliser les destinataires de l'appareil) — « Send to recipients configured on the device », soit un envoi aux destinataires configurés sur l'appareil ; Select Labels (le choix des étiquettes) — Défaut, Severity L1, Severity L2, Severity L3, dont au moins une lorsque vous utilisez les destinataires de l'appareil ; Additional Recipients (destinataires supplémentaires) pour des adresses en plus ; et, facultatifs, Objet et Message. S'ils sont laissés vides, l'objet devient « Rule Chain Alert » et le corps « Rule chain notification triggered ». Sans aucun destinataire, le nœud ne fait rien et le relevé poursuit sa route. Chaque tentative apparaît sur la page Envois.
Send SMS (l'envoi d'un SMS)
Actions. Les mêmes réglages que Send Email, avec des numéros de téléphone et sans objet : Use Device Recipients, Select Labels, Additional Recipients au format international, par exemple +1234567890, et un Message facultatif. Les destinataires de l'appareil sont ici les destinataires téléphoniques dont le canal SMS est coché.
Send WhatsApp (l'envoi WhatsApp)
Actions. Réglages : Use Device Recipients (« Send to WhatsApp-enabled phone numbers configured on the device », soit les numéros de téléphone configurés sur l'appareil et compatibles WhatsApp), Select Labels, Additional Recipients, et Message Type (le type de message) — Sensor Alert Template (Official), qui renseigne pour vous Sensor Name, Sensor Value et Device Name, ou Custom Free-form Text, qui ne fonctionne que dans la fenêtre conversationnelle de 24 heures. Les destinataires de l'appareil sont ici les destinataires téléphoniques dont le canal WhatsApp est coché.
Push Notification (la notification push)
Actions. Envoie une notification push aux appareils mobiles enregistrés pour votre organisation. Réglages : un titre Objet facultatif et un Message, tous deux acceptant des variables. Elle ne part que là où le push est activé pour l'organisation et où l'interrupteur Notifications push de l'appareil est activé. Un appui ouvre l'alarme si la chaîne en a déclenché une, sinon le capteur ou l'appareil. Le push ne figure pas sur la page Envois.
Raise Alarm (le déclenchement d'une alarme)
Actions. Ouvre une condition que quelqu'un devra acquitter. Sorties : Raised or escalated (« New alarm, or an existing one got worse », une alarme nouvelle ou une alarme existante qui s'est aggravée) et Already open (« An open alarm absorbed this message », une alarme ouverte a absorbé ce message). Réglages : Alarm Type (le type d'alarme), l'identité de la condition, par exemple high_temperature ; Severity (la gravité) : From threshold, Warning, Major ou Critical ; et Message, affiché sur la page Alarmes, Alarm on {sensor_name} par défaut. Déclencher le même type pour la même source alors qu'une alarme est ouverte incrémente son compteur de déclenchements au lieu de créer une deuxième alarme, et la gravité ne peut que monter. « From threshold » réutilise le niveau calculé par le Consecutive Threshold Filter, et retombe sur Warning à défaut. Reliez vos envois à la sortie Raised or escalated pour être prévenu une fois plutôt qu'à chaque relevé. Voir Alarmes.
Clear Alarm (la résolution d'une alarme)
Actions. Marque la condition comme résolue. Sorties : Cleared (résolue) et Nothing open (« Normal on every reading after the first recovery », un cas normal à chaque relevé qui suit le premier retour dans la plage). Réglage : Alarm Type, qui doit correspondre au nœud Raise Alarm ayant ouvert la condition. Résoudre n'est pas clôturer : une alarme que personne n'a acquittée reste ouverte après sa résolution.
Acknowledge Alarm (l'acquittement d'une alarme)
Actions. Permet à la chaîne de prendre en charge une condition que l'automatisation traite réellement toute seule. Sorties : Acknowledged (acquittée) et Nothing open. Réglage : Alarm Type, correspondant au nœud Raise Alarm. La page Alarmes affiche alors « par la chaîne de règles nom » au lieu d'une personne.
Save to Database (l'enregistrement en base)
Actions. Écrit le relevé. Réglages : deux cases à cocher sous Data Stores (les magasins de données) — Time Series Database (la base de séries temporelles), l'historique que lisent les graphiques, les exports et les analyses, et Latest Sensor Value (la dernière valeur du capteur), le relevé actuel sur les tableaux de bord et les mises à jour en direct que vous voyez sans actualiser. Ajouté automatiquement à chaque chaîne, non supprimable, absent de la palette. Décocher Latest Sensor Value fige les tableaux de bord tandis que l'historique, lui, continue d'enregistrer.
Les variables de modèle dans les messages
Les objets et les messages acceptent des variables entre accolades simples, {like_this}. Tout ce qui ne peut pas être résolu est retiré du message final plutôt qu'imprimé tel quel.
L'éditeur en liste six à côté de chaque champ de message : {value} (la valeur du capteur), {sensor.name}, {sensor.type}, {device.name}, {device.location} et {timestamp}. Ces six-là fonctionnent bien, et d'autres deviennent disponibles à mesure que le relevé progresse :
- Les équivalents à plat :
{sensor_name},{sensor_type},{sensor_id},{device_name},{device_location},{device_status},{device_id},{ts}. - Toute clé ajoutée avec Add Metadata, sous son propre nom.
- Tout ce qui vient de Fetch Attributes :
{enrichment_sensor_…},{enrichment_device_…},{enrichment_profile_…}. - Après un Consecutive Threshold Filter :
{thresholdSeverityLevel},{thresholdAlertType},{thresholdConsecutiveCount}. - Après un nœud Raise Alarm :
{alarm_id},{alarm_type},{alarm_severity}. - Toute clé supplémentaire que votre appareil a envoyée avec le relevé, par exemple
{battery_pct}.
La page Journal des échecs
On y accède par le bouton Journal des échecs de l'éditeur, ou par le compteur rouge de la colonne Échecs. Un échec est un relevé que la chaîne n'a pas pu finir de traiter. Les colonnes sont Type, Nœud, Occurrences, Première occurrence et Dernière occurrence.
Occurrences est le cœur de la page. Les échecs identiques ne sont pas listés deux fois : une ligne représente une combinaison de chaîne, de nœud et de type d'échec, et chaque répétition augmente le compteur et fait avancer Dernière occurrence. Un compteur à plusieurs milliers en face d'une première occurrence remontant à mardi dernier signifie que le problème est continu, et non historique.
| Type | Ce que cela signifie |
|---|---|
| Défaillance de nœud | Un nœud a arrêté sa branche — le plus souvent un réglage erroné |
| Structure invalide | La chaîne enregistrée n'est plus un graphe valide |
| Nœud d'entrée manquant | La chaîne n'a aucun nœud Sensor Input |
| Nœud d'entrée invalide | La chaîne commence par autre chose qu'un nœud d'entrée |
| Boucle détectée | Une branche est revenue sur un nœud déjà traversé |
| Chaîne inactive | La chaîne applicable était inactive : le relevé a été écarté |
| Type de nœud inconnu | Un nœud que la plateforme ne reconnaît plus |
Les quatre premiers s'affichent en rouge, car ils signifient que des données ont été perdues.
Avec la permission voulue, vous pouvez Ignorer une ligne (« Elle réapparaît si l'échec se reproduit. ») ou Tout effacer. Ignorer ne répare rien : réparez d'abord la chaîne. Quand tout va bien, la page affiche Aucun échec.

Permissions
Les chaînes de règles ont leurs propres permissions, accordées par les rôles.
| Il vous faut | Pour pouvoir |
|---|---|
| Voir des chaînes de règles | Consulter la liste et lire le journal des échecs |
| Modifier des chaînes de règles | Ouvrir l'éditeur visuel, enregistrer, renommer, activer ou désactiver |
| Ajouter des chaînes de règles | Utiliser Créer une chaîne de règles |
| Supprimer des chaînes de règles | Supprimer une chaîne, ignorer ou effacer des entrées du journal des échecs |
| Attribuer des chaînes de règles | Rattacher une chaîne à un appareil |
| Retirer l'attribution de chaînes de règles | Retirer une chaîne d'un appareil |
Ouvrir l'éditeur exige la permission modifier des chaînes de règles, et pas seulement celle de consultation. Avec la seule consultation, le nom de la chaîne est du texte simple et non un lien, et le menu de la ligne n'apparaît pas : vous obtenez une liste en lecture seule.
Par défaut, le rôle Admin détient l'ensemble, tandis que Manager et User n'en détiennent aucune et ne voient donc pas Chaînes de règles dans la barre latérale.