IHM V5 en détails : Le moteur de scenario
Niveau de mise à jour : 5.5.6 (09/11/2023)
Avant-propos
Le moteur de scénario utilise les ressources de la V5. Avant de lire cet article, je vous invite à vous familiariser avec les principes de fonctionnement des différents objets de la V5, leurs entrées et sorties, le plus souvent différenciées entre commande et retour d'état. La description et le rôle de chaque entrée ou sortie doivent être connus.
Rappel : il est essentiel de choisir des noms de variables significatifs lorsque vous renommez les ressources de la V5. Adopter une nomenclature précise vous permettra une écriture plus rapide des règles et un débogage plus facile..
Présentation
| |||
---|---|---|---|
Nom | IPX800 V5 | ||
Famille | IPX800 V5 | ||
Wiki créé le | 27/11/2023 | ||
Wiki mis à jour le | 27/11/2023 | ||
Auteur | @fgtoul |
L'automate IPX800 V5 embarque un moteur de scénario puissant et facile à appréhender, Il sera alors aisé de programmer des actions sur événements déclencheurs.
Tous les objets, variables et ressources peuvent être scénarisés, en tant que déclencheur, variable de sortie ou encore actionneur. Des tuiles préconfigurées peuvent-être glissées et déposées dans des conteneurs nommés Événement et Résultat pour constituer les règles.
Nous essaierons d'expliquer la logique de fonctionnement du Rule Engine qui semble dérouter certains utilisateurs et nous en profiterons pour étudier les différents outils mis à notre disposition.
Nous approfondirons certains sujets déjà abordés dans d'autres articles ou documentation concernant l'IPX800 V5.
Terminologie
Variable IO : information booléenne
C'est une variable booléenne prenant les états VRAI ou FAUX. Dans le langage courant, il est habituel d'utiliser également les valeurs ON, OFF ou 1 et 0.
Ces variables peuvent représenter des commandes, des actionneurs TOR (Tout Ou Rien), des retours d'état ou même des variables créées par le système ou par l'utilisateur.
Variable analogique : information numérique
Les variables analogiques peuvent contenir des nombres entiers ou réels (avec décimales), positifs ou négatifs, avec une largeur maximale de 32 bits.
Elles peuvent être représentatives des ressources comme les entrées ou sorties analogiques ou encore des variables créées par l'utilisateur pour ses besoins en programmation..
Événement
Un événement est défini par le changement d'état (pour une IO) ou de valeur (pour une ressource analogique).
Exemples :
- un capteur s'ouvre et se ferme, l'entrée digitale sur laquelle il est connecté change d'état simultanément. Ces changements d'état (passages de ON à OFF ou de OFF à ON) constituent les événement détectés par l'IPX800 V5 et pourront être utilisés comme déclencheurs d'actions définies.
- la température lue par un capteur varie. L'entrée analogique sur laquelle il est connecté varie simultanément. Cette variation est perçue par l'IPX800 et pourra être utilisée dans le moteur de scénario pour exécuter des actions définies.
- L'utilisateur crée une variable de type IO virtuelle. L'état de cette variable est modifié par un moyen quelconque (par lien, API, manuellement ou par scénario). Ce changement d'état est utilisable dans le moteur de scénario.
- L'utilisateur crée une variable analogique virtuelle dans laquelle il stocke une valeur numérique. Cette valeur est modifiée soit via un widget sur le dashboard, soit par l'API. Ces variations de valeur sont des événements qui seront perçus et utilisables dans le moteur de scénario.
- Un bouton poussoir connecté sur une entrée de l'extension X-8R est appuyé, ce qui provoque la fermeture du relais correspondant. Le changement d'état de ce relais est un événement qui pourra être utilisé pour déclencher des actions si nécessaire.
Règle
Une règle constitue une mise en relation de cause à effet déterminant les périphériques à piloter selon la survenance d'événements prédéfinis.
Une règle est constituée d'une clause Événement qui regroupe toutes les conditions essentielles à l'action, et la clause Résultat qui regroupe les actions à mener.
exemples :
- Cas 1 :
- Événement : si l'interrupteur change d'état et si la luminosité est insuffisante,
- Résultat : allumer le plafonnier
- Cas 2:
- Événement : si la température intérieure est inférieure à 18°C
- Résultat : allumer le radiateur, sinon il faut l'éteindre
- Cas 3:
- Événement : si le soleil est couché,
- Résultat : fermer les volets roulants et autoriser l'allumage de projecteurs extérieurs, sinon ouvrir les volets et inhiber l'allumage des projecteurs.
Une règle peut être activée ou désactivée. Si désactivée, elle est ignorée par le moteur de scénario.
Scène
Une scène est une enveloppe permettant de regrouper des règles ayant la même fonctionnalité.
Exemples : l'éclairage, le chauffage, l'ECS, l'armement de l'alarme, etc.
Vous pouvez regrouper les règles selon vos besoins, soit par fonction (éclairage, chauffage, ...), par localisation (salon, cuisine, ...), etc.
Avec une scène, Il est également possible de créer un groupe de règles qui pourra être activé ou désactivé sous certaines conditions.
Lorsqu'une scène est désactivée, toutes les règles qu'elle contient sont ignorées par le moteur de scénario. Exemples : - l'été, inhiber toutes les commandes concernant le chauffage : -> si la date est comprise entre le 15 avril et le 15 octobre, désactiver la scène "Chauffage". - l'hiver, si la piscine est en hivernage passif, désactiver les scènes Traitement, Filtration et Chauffage.
Il est possible de créer 64 scènes au total, chacune d'elle pouvant regrouper 32 règles.
L'interface
Pour accéder au moteur de scénario, cliquez sur le bouton du menu latéral gauche.
Gestion des scènes
Le point d'entrée du Rule Engine est la page de gestion des scènes.
Si votre système ne comporte aucune scène, cliquez sur le bouton Ajouter scène.
Nommez la scène, puis validez pour créer une scène vide.
Pour importer une scène à partir d'un fichier, sélectionnez le fichier JSON issu d'un échange avec un membre de la communauté ou d'une sauvegarde.
La scène créée apparaît sous forme de tuile-bouton. Elle comporte un bouton à glissière permettant de l'activer ou désactiver manuellement (voir plus haut).
Le menu Édition permet de renommer la scène, lui attribuer une icône, de la supprimer ainsi que toutes les règles qu'elle contient, ou encore vérifier son taux d'occupation par les règles.
Cliquez sur la tuile de la scène pour éditer les règles qu'elle contient.
Gestion des Règles
L'interface de l'éditeur de règles
Le menu supérieur permet des actions sur la scène en cours d'édition
- Retour : permet de revenir au gestionnaire de scènes
- Activé : bouton à glissière permettant d'activer ou désactiver la scène et toutes les règles
- Rafraîchir : réactualisation de l'affichage
- Ajouter : créer une nouvelle règle en dernière position
- Exporter : permet la sauvegarde de la scène et de l'ensemble de ses règles sous le format JSON. Ce fichier pourra être échangé avec d'autres utilisateurs.
- Sauvegarder : sauvegarde de toutes les règles avec application des dernières modifications.
La bibliothèque de périphériques
La bibliothèque contient les tuiles qui pourront constituer une règle. Chaque tuile est spécifique à un type de périphérique.
Les ressources sont triées par onglets :
- IPX800 : cette catégorie recense toutes les entrées/sorties présentes sur l'ipx800 elle-même, ainsi que les variables systèmes (heure de l'ipx, informations de diagnostique, ...) ou fonction de redémarrage.
- Extensions : cette catégorie contient tous les objets représentant les extensions. Pour utiliser l'une de ces tuiles, vous devrez avoir au préalable installé l'extension correspondante.
- Objets : tous les objets de la V5, comme les fonctions, les calendriers, les objets temps (tempo, pulse,...) sont regroupés dans cette catégorie.
- Variables : catégorie regroupant les variables de tous types (IO, ANA, STR, ...)
- Modules : catégorie des plugins
- Scénario : éléments du moteur de scénario
Nous analyserons ces tuiles plus bas dans cet article.
La bibliothèque d'opérateurs
Les tuiles opérateurs ET
OU
permettent de combiner 2 événements entre eux. Elles pourront être utilisées dans la clause 'Événement uniquement'.
Important : Pour conditionner une action sur 2 événements ou plus, il faut obligatoirement les séparer par un opérateurET
ouOU
Opérateur ET
Table de vérité avec Vrai=1 et Faux=0
État événement
E1 |
État événement
E2 |
État de
E1 ET E2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Opérateur OU
Table de vérité avec Vrai=1 et Faux=0
État événement
E1 |
État événement
E2 |
État de
E1 OU E2 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Fonction NON
La fonction logique NON
permet d'utiliser l'état inverse d'un événement.
Cette fonction est souvent utilisée pour exécuter une action sur changement d'état d'un capteur NF (Normalement Fermé) mais peut également être utilisée sur toute ressource de type IO physique ou virtuelle.
Table de vérité avec Vrai=1 et Faux=0
E1 | NON E1 |
---|---|
0 | 1 |
1 | 0 |
Opérateurs analogiques
Les tuiles d'opérateurs suivants sont utilisées pour faire des comparaisons sur des valeurs analogiques.
Elles peuvent être utilisées dans la construction de l'expression Événement.
< | <= | == | >= | > | != |
---|---|---|---|---|---|
strictement inférieur | inférieur ou égal | égal | supérieur ou égal | strictement supérieur | différent |
La bibliothèque d'actions
Les tuiles Action seront utilisables dans la clause Résultat uniquement.
Elles renseignent l'action à appliquer sur les ressources digitales ou analogiques énumérées dans la clause.
ON, OFF, ON/OFF et SWITCH s'appliquent à des ressources booléennes.
ON
: Si l'évaluation de l'expression logique Événement change à l'état VRAI, l'état des ressources énumérées derrière est forcé à ON. Rien ne se passe lorsque l'état Événement passe à OFF.OFF
: Si l'évaluation de l'expression logique Événement change à l'état VRAI, l'état des ressources énumérées derrière est forcé à OFF. Rien ne se passe lorsque l'état Événement passe à OFF.ON/OFF
: Si l'évaluation de l'expression logique Événement change à l'état VRAI, la commandeON
est exécutée, de même, si l'évaluation de l'expression logique Événement change à l'état FAUX, la commandeOFF
est exécutée.SWITCH
: Si l'évaluation de l'expression logique Événement change à l'état VRAI, l'état des ressources énumérées derrière est permuté quelque soit leur valeur initiale. Rien ne se passe lorsque l'état Événement passe à OFF.
SET VAL
s'applique à des ressources analogiques. Cette commande permet de forcer une valeur analogique dans une variable lorsque l'évaluation de l'expression Événement est VRAIE.
Constructeur de règle
- Vous pouvez renommer, activer ou désactiver la règle
- vous y déposez des tuiles Opérateurs, Périphériques pour assembler la clause événementielle.
- vous y glissez les tuiles Action et Périphériques pour déterminer les actions
- La suppression, le déplacement vers une autre scène et le glissement vertical (changement de l'ordre d'exécution) sont possibles.
Les principes d'une règle
Fonctionnement
➡️ La clause Événement doit contenir au moins 1 tuile périphérique. Si la clause contient plusieurs événements, ceux-ci devront être séparés par des opérateurs ET
, OU
.
➡️ La clause Résultat doit contenir au moins une tuile Action. Celle-ci sera obligatoirement en première position.
L'état logique de la clause Événement conditionne l'exécution des actions sur périphériques peuplant l'expression Résultat.
➡️ Les actions ON
, OFF
, SWITCH
, SET VAL
sont exécutées uniquement lorsque l'expression Événement passe à l'état VRAI, il faudra alors que l'évaluation de la clause Événement repasse successivement à FAUX puis VRAI pour que les actions soient à nouveau exécutées.
➡️ L'action ON/OFF
tenant compte de tout changement d'état sera exécutée une seule fois à chaque changement VRAI ou FAUX de l'expression Événement.
Important : la clause Événement ne peut pas contenir un mélange de tuiles représentant des ressources analogiques et d'autres représentant des IO (ressources ou opérateurs booléens). Si vous mixez les genres par inadvertance, le moteur de scénario vous signalera l'erreur avec le flag à gauche du constructeur de la règle. Exemple d'expression interdite:
Évaluation d'une clause Événement
Nous avons vu plus haut que la clause Événement peut être peuplée par des événements combinés par ET
, OU
.
L'expression est évaluée de gauche à droite, événement par événement.
Exemple :
Soient 4 événements E1, E2, E3, E4. Prenons l'expression logique combinant ces 4 événements :
E1 ET E2 OU E3 ET NON E4
L'évaluation par l'IPX800 de cette expression se fait en 4 étapes :
Étape 1 : évaluation de A=E1 ET E2
Étape 2 : évaluation de B=A OU E3
Étape 3 : évaluation de C=NON(E4)
Étape 4 : évaluation de R = B ET C
L'évaluation de R est faite à chaque changement d'état des événements E1, E2, E3 et E4.
Évaluation des actions à exécuter
La clause Résultat est peuplée d'une succession de tuiles Actions et Périphériques.
Plusieurs actions peuvent être définies. La tuile action est appliquée aux périphériques désignés juste derrière elle.
Voici un exemple de syntaxe correcte de chaîne Résultat comprenant plusieurs blocs d'actions :
Ce qui donne :
- ON périphérique 1 & 2,
- Switch périphériques 3 & 4,
- OFF périphérique 5
L'Action SET VAL
a une syntaxe particulière puisqu'elle nécessite 3 tuiles.
Dans cet exemple, nous appliquons la valeur ANA1 à la variable analogique ANA2.
Drag & Drop
La simplicité d'utilisation du moteur de scénario est en grande partie due au fait de pouvoir glisser les tuiles de la bibliothèque vers le constructeur de règle.
A chaque fois que l'on dépose une tuile périphérique , une fenêtre de dialogue s'ouvre et permet la sélection de la ressource dans une liste de noms.
NB : Seules les ressources compatibles sont listées.
Lors de la sélection de la ressource, vous pouvez rechercher celle-ci par tout ou partie du nom dans la zone de recherche ("Chercher dans la liste").
Il suffit de valider quelques caractères pour que la liste s'adapte automatiquement.
Si la vidéo ne démarre pas, cliquez avec le bouton droit et choisissez "ouvrir dans un nouvel onglet"
La modification d'une règle par ajout de tuiles se fait de la même façon par glisser/déposer.
Cliquez sur une tuile pour éditer ses propriétés
Options du menu contextuel :
- Liste : permet de sélectionner une nouvelle ressource dans la liste des noms,
- Aller à : raccourci permettant de se rendre sur la page Liens de la ressource sélectionnée,
- Config : permet de renommer la ressource utilisée,
- Supprimer : permet de supprimer la tuile.
Les tuiles "Périphériques" par famille
Les différentes tuiles Périphériques peuvent être insérées au besoin dans la clause Événement ou dans Résultat.
Dans le cas d'un objet ou d'une extension, les tuiles correspondantes proposeront alors souvent des ressources différentes selon l'utilisation.
Les tuiles associées à des ressources de type IO
Les tuiles associées à des ressources de type IO peuvent être utilisées seules en événement ou en Résultat.
En Événement
Leur état Vrai ou Faux sera analysé par le système et pourra être déclencheur d'une action. Ces tuiles pourront être utilisées avec les opérateurs booléen ET OU NON
En Résultat
Ces tuiles devront être placées derrière une action ON OFF ON/OFF ou SWITCH.
Les tuiles associées à des valeurs analogiques
Elles ne pourront être utilisées seules, ni en Événement, ni en Résultat.
En Événement
il faudra associer des opérateurs analogiques ( >
, >=
, ==
, !=
, <
, <=
) et une valeur de comparaison de manière à construire une expression dont la réponse sera booléenne. Dans ce cas d'utilisation, la clause Événement ne peut pas contenir des opérateurs booléens ou autres IO. La comparaison sera donc seule dans la clause.
Expressions incorrectes (mix booléen-analogique):
En Résultat
Il faudra obligatoirement utiliser ces tuiles de ressources analogiques conjointement à l'action SET VAL
comme vu plus haut.
Famille IPX800
Cette famille regroupe les entrées et sorties physiques de l'IPX800, ainsi que quelques variables systèmes comme l'horloge système ou encore des valeurs de diagnostique.
Tuile | périphérique | Type | Utilisation en événement | Utilisation en Résultat |
---|---|---|---|---|
Relais cmd | Commande des 8 sorties relais de l'IPX800 | IO | Détection du changement d'état de l'entrée cmd correspondant au relais | Changer l'état de l'entrée Cmd afin de faire basculer physiquement le relais |
État relais | État des sorties relais de l'IPX800 | IO | Détection du changement d'état du relais | Changer l'état de la sortie relais afin de faire basculer physiquement le relais |
Din | Entrées digitales | IO | Détection du changement d'état de l'entrée digitale | Changer l'état de l'entrée digitale.
Cela peut avoir un intérêt pour simuler un événement. |
Ain | Entrées analogiques | ANA | Détection d'un changement de valeur.
Ces tuiles devront être associées à des opérateurs analogiques (>,>=,==,!=,<,<=). L'action sera exécutée si la comparaison est vraie |
Forcer une valeur avec la commande SET VAL. |
Coll.ouvert | Commandes des sorties collecteur ouvert | IO | Détection du changement d'état de l'entrée cmd correspondant à la sortie | Changer l'état de l'IO cmd de la sortie afin de la faire basculer. |
Open.coll. state | État des sorties collecteur ouvert | IO | Détection du changement d'état de la sortie | Changer l' état de la sortie à collecteur ouvert. |
Entrée opto. | État des entrées opto-isolées | IO | Détection du changement d'état de l'entrée opto_isolée | Changer l'état d'une entrée opto_isolée.
Cela peut être utile pour simulation. |
Fréquence opto. | Fréquence signal appliqué sur les entrées opto-isolées | ANA | Détection d'un changement de valeur.
Ces tuiles devront être associées à des opérateurs analogiques (>,>=,==,!=,<,<=). L'action sera exécutée si la comparaison est vraie |
Forcer une valeur avec la commande SET VAL. Utile pour simulation. |
Réinit. | commande de redémarrage de l'IPX800 | IO | Sans effet | Changer l'état de l'entrée afin de faire un redémarrage de l'ipx800 (warm reboot) |
IPX800 | Contient des variables systèmes et de diagnostique | IO | Seule la variable SEL BP est de type IO. | - |
ANA | Les autres tuiles doivent être associées à un opérateur analogique.
Il est alors possible de lancer des notifications lors des dépassements de seuils par exemple. |
- |
Extensions
Tuile | périphérique | Type | Utilisation en événement | Utilisation en Résultat |
---|---|---|---|---|
X-8R (Relay) | Commandes des 8 sorties relais de l'extension | IO | Détection du changement d'état de l'entrée cmd | Changer l'état de l'entrée Cmd afin de faire basculer physiquement le relais |
X-8R (Relay State) | État des sorties relais de l'extension | IO | Détection du changement d'état du relais | Changer l'état de la sortie relais afin de faire basculer physiquement le relais. |
X-8R (LongClick) | Sorties "Appuis longs" de l'extension | IO | ||
X-8D (Din) | Entrées opto-isolées de l'extension | IO | ||
X-24D (Din) | Entrées digitales de l'extension | IO | ||
X-4VR | Entrées type IO | IO | ||
Entrées Consignes | ANA | |||
Sorties Positions | ANA | |||
X-THL | Sortie Défaut | IO | Changer l'état pour simulation. | |
Sorties Humidité/Luminosité/Température | ANA | Changer la valeur par SET VAL. Utile pour simulation | ||
Enocean | Capteurs | IO | ||
Capteurs | ANA | |||
Commandes | IO | |||
X-DMX | Consignes / vitesses de transition | ANA | ||
X-400 CT | Sorties analogiques | ANA | ||
X-400 ANA | Sorties analogiques | ANA | ||
X-200 PH | Sorties pH et ORP | ANA | ||
X-010V | Entrées consignes | ANA | ||
Sorties voltage | ANA | |||
Entrées On/Off | IO | |||
X-Dimmer | Entrées On/Off et ON/OFF ALL | IO | ||
Entrées | IO | |||
Entrées Consignes | ANA | |||
Entrée Vitesse gradation | ANA | |||
Entrées Positions | ANA | |||
X-4FP | Entrées 6 ordres sur zones | IO | ||
X-PWM | ||||
X-Display | ||||
X-GSM | ||||
X-POOL (Relay State) | IO | |||
X-POOL (Input) | IO | |||
X-POOL (Analog) | ||||
X-POOL (Notif) | IO | |||
SWITCH-EBX | ||||
X-POOL (Relay Cmd) | IO |
Objets
Tuile | périphérique | Type | Utilisation en événement | Utilisation en Résultat |
---|---|---|---|---|
Fonction | ||||
Push | ||||
Preset | ||||
Calendrier | ||||
Délai | ||||
Tempo. | ||||
Chrono. | ||||
Impulsion | ||||
Clignotant | ||||
Comparateur | ||||
Compteur | ||||
MQTT Publish | ||||
MQTT Subscribe | ||||
MQTT All | ||||
Thermostat | ||||
Télérupteur | ||||
Monostable | ||||
Appui long | ||||
Double click | ||||
Bascule RS | ||||
Fader | ||||
Ping Watchdog | ||||
Modbus lecture | ||||
Modbus écriture | ||||
Planning TOR | ||||
Planning ANA | ||||
Parser JSON | ||||
Variables
Tuile | périphérique | Type | Utilisation en événement | Utilisation en Résultat |
---|---|---|---|---|
Virtual IO | ||||
Virtual Ana 8 à 32 |
Modules
Tuile | périphérique | Type | Utilisation en événement | Utilisation en Résultat |
---|---|---|---|---|
Météo | ||||
HUE | ||||
IPX800 V4 | ||||
Player |
Scénario
Tuile | périphérique | Type | Utilisation en événement | Utilisation en Résultat |
---|---|---|---|---|
Scène | ||||
Règle | ||||
Vérification automatique
Différents messages d'erreurs retournés par la vérification automatique :
Message | Origine | Résolution |
---|---|---|