Priorisation automatisations

Bonjour,

Je créé ce poste pour donner mon point de vue sur le futur des automatisations dans le plugin Light Group. Ce poste vous permet de donner votre avis afin que nous puissions construire ensemble des automatismes plus puissant.

Tout d’abord un petit état des lieux:

  1. La gestion d’instance d’automatisme en tâche

Il est possible de définir depuis le plugin des automatismes. Ces automatismes peuvent être affecté à des lumières créant ainsi des couples d’automatisme-lumière.

Lorsque toutes les conditions d’un automatisme sont positive, une instance d’automatisme est créée pour chacun des couples automatisme-lumière.
Une instance d’automatisme est donc considérée comme active lorsque toutes les conditions de déclenchement sont positives.
Une instance d’automatisme s’arrête et devient non active si elle était active et qu’au moins une des conditions de déclenchement est négative.

Un même couple d’automatisme-lumière peut créer plusieurs instances d’automatismes avec la règle que chaque nouvelle instance vient remplacée l’ancienne.

Un petit exemple:
J’ai définis un automatisme de présence lumineuse avec deux capteurs de présence. Lorsque l’automatisme s’arrête, la lumière reste allumée 30 secondes L’un des capteurs passe à 1
→ L’instance d’automatisme devient active
Le capteur auparavant à 1 passe à 0 et tous les capteurs sont donc à 0
→ la lumière reste allumée car nous restons dans le temps tampon. A la fin des 30 secondes, la lumière s’éteindra et l’automatisme deviendra inactif
Le deuxième capteur passe à 1:
→ Une nouvelle instance d’automatisme est créée et vient remplacer l’ancienne. la lumière reste allumée. L’ancienne instance d’automatisme est invalidée et n’éteindra plus la lumière passée les 30 secondes.

  1. La priorisation des couples lumière-automatisme

Il est possible d’affecter plusieurs automatismes à une même lumière créant ainsi plusieurs couples de lumière-automatismes. Nous pouvons donc nous retrouver dans le cas suivant:
→ Toutes les conditions de A sont positives
->L’instance A s’active (la lumière s’allume)
→ Toutes les conditions de B sont positives
→ L’instance B s’active (la lumière s’allume)
→ Une des conditions de B est négative
→ L’instance B se désactive (la lumière s’éteint)

Cependant nous pourrions vouloir que tant que A est actif, B ne puisse pas s’activer. Afin que la lumière ne s’éteigne pas alors que A est toujours actif.

Pour répondre à ce problème, il sera bientôt possible de prioriser les automatismes entre eux. Cette priorisation sera comprise entre 1 et 1000 et sera unique pour chaque instance.
Reprenons l’exemple ci dessus avec A une priorisation de 500 et B une priorisation de 200.
→ L’instance A s’active
→ Toutes les conditions de B sont positives
→ B possède une priorité inférieure à A
→ B ne s’active pas

Maintenant vient un autre cas toujours avec A et B, A priorisation 500, B priorisation 200.
→ L’instance B s’active
→ Toutes les conditions de A sont positives
→ A possède une priorité supérieure à B
→ A s’active et B se désactive
→ Au moins une des conditions de A est négative
→ A se désactive

Pour ce cas la, la lumière s’éteint alors que les conditions de B sont toujours positives.
Je propose que la désactivation de A entraîne la réactivation de B ce qui nous donnerais

→ L’instance B s’active
→ Toutes les conditions de A sont positives
→ A possède une priorité supérieure à B
→ A s’active et B se désactive
→ Au moins une des conditions de A est négative
→ A se désactive et réactive B
→ Au moins une des conditions de B est négative
→ B se désactive

Que pensez vous de cette gestion de priorisation des instance de couple lumière-automatismes ?
Par défaut les instances auront une priorité de 500. Si jamais deux instances s’activent avec la même priorité, la gestion sera comme avant.

1 « J'aime »

Alors moi je n’aurai pas ce cas là, je n’ai pas de cas si compliqué… Mais je pense que les priorités c’est pas mal, je ne vois pas comment faire autrement.

Pour prendre un exemple un peu plus réel:

Mes lumières sont automatisées dans mon bureau :

  • Elles s’allument lorsque je viens chercher un papier et qu’il fait trop sombre (luminosité / mouvement).
  • Elles doivent s’allumer lorsque je suis en train de travailler et qu’il fait sombre (luminosité / condition binaire ordinateur).

Mais il ne faut pas que le mouvement prennent le pas sur la condition de l’ordinateur qui est prioritaire.
Donc mon premier automatisme aura une priorité inférieure au deuxième :slight_smile:

Yes je vois ton cas, c’est une possibilité auquel je n’aurai pas pensé :slight_smile:
Cela ouvre des perspectives

Oui c’est le but :slight_smile:
Dans l’idée j’aimerais aller encore plus loin et détecter lorsqu’un changement d’état n’est pas induit par automatisme (tu allumes ton interrupteur) et pouvoir lui donner une priorité:

exemple: si jamais je modifie manuellement l’état des lumières de mon salon, je ne souhaites pas qu’un automatisme prennent le dessus et éteigne la lumière lorsqu’il ne détecte plus de présence.

La priorisation permettra d’ouvrir une porte vers des automatismes plus poussés :slight_smile:

J’avais testé un autre plugin moins abouti où ils avaient ce système que si tu faisais une action manuelle cela empêchait les actions automatiques pendant un certain temps

Oui je suis assez d’accord sur le fait que la priorisation apportera une gestion plus poussée des automatismes.
À mon sens, il faut même que ce soit une condition qui ai une priorité, car on peut avoir besoin de garder l’automatisme lorsqu’on allume la lumière, mais de vouloir éteindre la lumière avant d’attendre la fin de conditions, du coup c’est la condition #bouton-manuel# == « 0 » qui doit avoir une priorité sur les conditions d’automatisme (le cas typique d’une porte qui reste ouverte, je veux pouvoir éteindre la lumière manuellement même si la porte reste ouverte, mais que la lumière s’éteigne après X minutes si j’oublie de l’éteindre manuellement).

Il faut aussi réfléchir à comment activer et désactiver cette commande manuelle pour que les automatismes puissent reprendre le dessus.
Il faut que l’action manuelle ait un début et une fin.
Donc soit l’action manuelle:

  • est conditionnée par une condition de début et condition de fin.
  • est conditionnée par une condition de début et un temps maximum.

Car dans ton cas @Alpine_Z, à partir de quand l’automatisme sait qu’il peut reprendre la main lorsque tu éteins manuellement la lumière ?

L’autre solution que je vois est de proposer des priorisations pour l’ensemble des interactions d’un automatisme et que cette condition si saisit prennent le pas sur la priorisation de l’automatisme vis à vis de la lumière.

Je pense que la reprise en main par l’automatisme doit se faire sur un délai

Je suis d’accord, la priorisation regèlera le problème. Mais dans ma conception de l’automatisme, un bouton physique n’aura pas spécialement la même priorité si j’allume ou j’éteins la lumière.
L’automatisme complet (détecteur de mouvement, porte ouverte, etc) peut être complètement arrêté par un mode qui conditionne l’activation de l’automatisme.

Mais bon je reconnais que ce n’est pas simple a concevoir, et pourtant c’est simple on veut allumer la lumière automatique, l’éteindre automatiquement, et pourvoir intervenir manuellement via le bouton physique.

En termes de debbug, j’utilise un scénario qui met à jour un évent du dernier déclencheur, ça me permet de déboguer, mais aussi de conditionner mon scénario. Si action OFF du bouton physique je force l’extinction de la lumière et reset mes déclencheurs a 0.

Bon j’essaye de synthétiser tout cela.

1) ajout d’interaction manuelle au niveau de la lumière

Il faudrait pouvoir rajouter au niveau de la lumière une interaction manuelle à l’endroit ou l’on affecte les automatismes:

Cette interaction manuelle sera associée à une priorisation de 800 par défaut mais il sera possible de l’ajuster. Cette interaction manuelle sera définit par:

  • soit une condition de début et une condition de fin
  • soit une condition de début et un temps maximum

2) possibilité de prioriser les interactions d’un automatisme

Maintenant, pensez vous qu’il fasse également ajouter le mécanisme suivant:
Pour chaque automatismes, lorsque l’on définit les interactions, il sera possible de définir une priorisation pour chaque interaction:


Si jamais une priorité est définie pour une interaction de l’automatisme, elle prendra le pas sur la priorité définit à l’affectation de l’automatisme.

@sebfar, @Alpine_Z, dites moi ce que vous pensez de cela. Je pense que cela devrait résoudre les différents problèmes.
A voir si je rajoute en plus la deuxième partie.

Le fait d’ajouter une interaction manuelle au niveau de la lumière devrait suffire pour mon exemple, mais compléter la priorisation sur les interactions permettrais un automatisme plus poussé mais également plus complexe.

A toi de voir, la solution 1 semble me convenir personnellement.

1 « J'aime »

Ok très bien, je vais partir sur cette solution dans un premier temps

@hbe Tu t’es lancé dans un beau chantier avec ce plugin :+1:
Attention à l’usine à gaz ! :wink:

Si une lampe peut être allumée et éteinte par 2 instances, c’est le bazar.

Le plus simple pour gérer les états binaires comme les lumières, c’est d’avoir 2 scénarios :

  • 1 unique scénario pour allumer
  • 1 unique scénario pour éteindre

Ces 2 scénarios vérifient toutes les conditions (mouvement, présence, soleil, volet, luminosité, sommeil, alarme, tv, ordinateur, eau chaude …) pour allumer ou éteindre. Ainsi, il n’y a jamais de conflit. Pour le debug, c’est royal !

Pour les priorités, ça reviendrait à choisir l’ordre de cette liste : mouvement, présence, soleil, volet, luminosité, sommeil, réveil, alarme, tv, ordinateur…
C’est ce qu tu proposes dans ta solution 2 ?

En fonction du type de condition, je pense que certaines priorités pourraient même être fixées en dur. Exemple, si c’est lumineux à l’intérieur, alors il fait jour dehors et le volet est ouvert et on peut ignorer le soleil et le volet. S’il fait nuit dehors, alors il fait nuit à l’intérieur et on peut ignorer le volet et la luminosité.

Pour avoir déjà bien étudié ce sujet de la gestion des lumières, je reste persuadé qu’on doit pouvoir obtenir 2 règles « universelles » qui dépendent d’une dizaine de paramètres (minuterie, mouvement, présence, soleil, volet, luminosité, sommeil, réveil, alarme, tv, ordinateur…).

Aujourd’hui sur le plugin tu as un automatisme pour allumer / éteindre la lumière et un automatisme de gestion de luminosité.

Pour avoir déjà bien étudié ce sujet de la gestion des lumières, je reste persuadé qu’on doit pouvoir obtenir 2 règles « universelles » qui dépendent d’une dizaine de paramètres (minuterie, mouvement, présence, soleil, volet, luminosité, sommeil, réveil, alarme, tv, ordinateur…).

Pour l’automatisme allumer / éteindre, voila comment j’ai pensé les choses:

  • tu peux définir des indicateurs de présences et des indicateurs de luminosité.
  • Si au moins un des indicateurs de présence est validé ET qu’un des indicateurs de luminosité est validé, la lumière s’allume
  • Si aucun indicateurs n’est validé la lumière s’éteint
  • Chaque indicateur peut être restrictif. Si jamais il est restrictif, il doit alors être validé pour que la lumière s’allume.

L’intérêt est qu’a chaque indicateur validé, le plugin reçoit une nouvelle information et la lumière reste allumé ou éteinte.

En fonction du type de condition, je pense que certaines priorités pourraient même être fixées en dur. Exemple, si c’est lumineux à l’intérieur, alors il fait jour dehors et le volet est ouvert et on peut ignorer le soleil et le volet. S’il fait nuit dehors, alors il fait nuit à l’intérieur et on peut ignorer le volet et la luminosité.

Du coup de mon côté je vois les choses comme cela, sur le plugin tu vas définir plusieurs indicateurs:

  • position du soleil
  • luminosité intérieure
  • position des volets roulants

Il suffit que le soleil soit couché, ou que tes volets soient baissés ou que la luminosité intérieure soit inférieure à un certain seuil pour considérer que la luminosité est faible.

Sur le plugin les automatismes se gèrent par tâches.
Chaque lumière à une queue d’automatismes en cours et à chaque fois qu’un indicateur est validé, chaque lumières affectée à l’automatisme reçoit une indication (tu dois t’allumer ou tu dois t’éteindre).
L’intérêt derrière cette queue d’automatisme est de pouvoir combiner des automatismes simples pour créer des automatismes compliqués. Cela évite notamment de créer une usine à gaz non maintenable.

Je pense que tu peux entièrement automatiser tes lumières en combinant du coup plusieurs automatismes:

  • un automatisme qui allume et éteint la lumière en fonction des conditions citées plus haut
  • des automatismes gérant la luminosité

L’idée derrière l’ajout des priorités est de pouvoir gérer 2 cas particuliers:

  • Une interaction manuelle pour allumer / éteindre la lumière
  • Une combinaison d’automatisme

Et au final mon exemple de l’ordinateur est résolu en un seul automatisme:


L’ordinateur allumé est considéré comme une présence pendant 300 minutes (tant qu’il est allumé bien sûr)

bonjour, je n’ai pas eu le courage de lire tous les posts, mais je pense que je vais me pencher sur le plugin très prochainement pour la lumière, mais pas que …

Je pense essayer de détourner éventuellement le plugin pour remplacer mon scenario de mise en route automatique de mon alarme nocturne qui est assez similaire.

Pour le reste, tu me connais maintenant, je trouverais bien des truc non anticipé :stuck_out_tongue:

1 « J'aime »

Perso je détourne le plugin pour des prises :slight_smile:

mon scenario est vraiment proche du plugin :

( ( 0 < #time# ET #time# < 500 ) OU (600 < #time# ET #time# < 700 ) OU ( 2000 < #time# ET #time# < 2400 ) ) ET ( #[Maison][Système d alarme][Etat Alarme]# != "alarm1_armed" ET #[Alexa][Canapé][Etat]# == 0 ET #[Alexa][Table][Etat]# == 0 ET #[Entrée][mouvZ entree][Présence]# == 0 ET #[Salon][Mouv salon][Détection]# == 0 ET #[Salon][Les Pieds du canapé][Etat]# == 0 ET #[Maison][Présence][Présence]# > 0 ET (#[Salon][Télé][Etat]# == 0 OU #[Salon][Télé][Etat]# == 'OFF' ) )