Accès à toutes les valeurs d'un capteur dans le temps

Message mis à jour @pierre-gilles, avec plus de détails sur le fonctionnement attendu côté utilisateur et la gestion dans Gladys.

Je ne vois pas encore d’autres cas particuliers à gérer, voyons ce à quoi chacun pense pour améliorer tout ça :slight_smile:

Ok ( mais trop tard j’ai lu déjà :smiley: )

Trigger:

Motion détecté

Condition: ( Continuer seulement si )

Time range ( on défini une plage d’action )
1. Sélection directe sur un slider double
ou
2. En fonction de sunset / sunrise ( avec un offset car généralement on allume ses lumières avant que le soleil ne se couche )
Petit bonus si on peut choisir aussi quel jour de la semaine la scène est active

Action:

=> Allumer une pièce ou certaine lampes
Le petit plus à apporter pour faciliter la vie et éviter trop de scènes. Laisser la possibilité à l’utilisateur ( checkbox ? ) de choisir si Gladys doit éteindre ces lampes au bout d’un certain temps sans mouvement détecté ( genre 2 minutes )


Quelques screenshot de HA , c’est moche et on peut vraiment faire mieux en terme d’UX

Condition ( Sunset / Sunrise avec offset de 10 minutes )

Extinction au bout de 2 minutes
image
image

Tu penses quoi de ma proposition (modifiée entre temps) plus haut ?
Qu’est-ce qu’il faudrait modifier, ajouter, préciser pour toi ?

@VonOx et @pierre-gilles, comment je dois avancer sur la fonctionnalité côté spécification ?
Quels sont vos (nouveaux) retours ? :innocent:

Je suis pas entièrement d’accord avec ta proposition de mon côté, je pense qu’il faut vraiment penser plus à l’utilisateur final et à tous les cas d’usages qui vont découler de cette fonctionnalité.

J’ai pas de réponses précises à te donner sans travailler moi même sur le sujet à temps plein, je pense qu’il faut que je passe une paire d’heures dessus avant de pouvoir te répondre :smiley: ça sera pas avant la fin de la semaine/semaine prochaine à mon avis :slight_smile:

Hello!

Du coup j’ai travaillé toute la journée sur le sujet, et j’ai 3 propositions pour pouvoir répondre aux différentes problématiques :slight_smile:

Je répond ici car c’est un sujet où on parle de scènes, mais ça n’a rien à voir avec le titre du topic. Une fois qu’on sera d’accord on pourra renommer le développement.

La problématique

Je suis reparti des différents besoins, sans penser au produit, juste au besoin final:

  • Etre capable d’éteindre la lumière dans une pièce si il n’y a pas de mouvements pendant XX minutes
  • Etre capable de recevoir une alerte si la température du frigo passe en dessous de 10°C pendant au moins 1h.
  • Etre capable dans une scène de n’exécuter des actions que si le soleil est en état lever/coucher/avant lever moins 10 minutes, après coucher + 30 minutes, etc…
  • Etre capable d’exécuter une scène (ou parti d’une scène) selon une condition temporelle. Exemple: si il est avant 12h/après 14h/entre 12h et 14h/le mardi, mercredi et jeudi entre 7h et 8h/et plein d’autres.

A partir de ce cahier des charges, j’ai creusé un peu comment on pourrait avoir ça dans Gladys.

J’ai pas mal aimé ce que faisait home assistant sur la partie “maintenir une condition pendant XX minutes”, et je suis parti sur une solution proche de la leur pour cette partie.

Après, je me pose encore des questions (marqué sur le document), tout n’est pas encore clair sur le fonctionnel.

Les maquettes (avec explications) sont disponibles ici: New scenes triggers/conditions/actions

Et aussi dispo en export image ci-dessous:

Qu’en pensez-vous ?

@lmilcent Au final c’est très différent de ta proposition :stuck_out_tongue: Désolé, pour pas perdre de temps je suis parti sur ce que je voyais, et ensuite on peut effectivement voir qu’est ce qui répond le plus aux problématiques.

Note: Si vous avez des cas qui sont mal couvert par ma proposition, hésitez pas à rebondir dessus :slight_smile: Je parle de cas pratiques et concret chez vous, on est vraiment dans la pratique là, pas dans de la théorie.

1 « J'aime »

Je vais regarder tout ça merci pour ton temps passé dessus :slight_smile:
Ce matin justement j’y pensais en pensant à un nouveau besoin (lié) :

  • Être en mesure d’exécuter une scène en fonction de la moyenne des valeurs d’un capteur sur une période de temps
    Exemple : Si la température du frigo est en moyenne de 1°C ces 2 dernières heures, envoyer un message pour rappeler de changer le thermostat.

Je vais étudier ta proposition et te faire mes remarques dès que possible :slight_smile:

1 « J'aime »

Intéressant ce besoin, est-ce que l’histoire de la moyenne est vraiment requise, où est-ce que une comparaison marcherait aussi ? Genre si tu dis « Si la température du frigo est inférieur ou égale à 1.5°C ces deux dernières heures », ça marcherait ? )

Pour moi c’est un peu différent de cette manière. Je pourrais savoir s’il y a eu un pic (haut ou bas) mais pas si le frigo est trop froid en général.
Seule la moyenne me permettra de savoir s’il est trop froid sur 2 h par exemple.

Condition Temporelle

  • Case N°1 → OK
  • Case N°2 → Si une condition n’est pas remplie, elle est vrai par défaut.
    Dans l’exemple des condition horaires, “Après 9h00” et “Avant <vide>” sera vrai. A 8h, on ne sera pas après 9h, mais avant <vide>. La condition sera validée ou pas ?

Condition sur le soleil

C’est clair et limpide, je ne vois pas d’autres cas pour le moment.

Amélioration d’un capteur existant

C’est ce qui répond à une de mes problématiques :slight_smile:

1. Il faut désormais que les capteurs de mouvement envoient un état “pas de mouvement détecté” juste après un “mouvement détecté”.

→ D’après l’interface web du projet Zigbee2Mqtt, mes capteurs Xiaomi Aqara Zigbee renvoient bien cet état.
Mais pour ceux qui sont identifiés comme n’envoyant pas cet état, Gladys (ou le service) peut le faire pour lui au après 20 secondes comme ça semble être le cas avec mon capteur ?

4. A définir: Que se passe-t-il si la condition est valide pendant 4 heures ? […] une execution potentiellement à l’infinie de la scène?

→ J’avais justement ce besoin : limiter le nombre d’exécution d’une scène dans la journée.
Exemple concret, qui serait résolu en même temps que cette problématique : mon capteur de mouvement (dans la boite aux lettre) génère 2x événements et ma scène est exécutée deux fois.
Home Assistant propose un “bouncer” je crois, pour ne prendre en compte qu’un seul des deux événements.
Je pensais aussi proposer dans les scène, au niveau de la condition de déclenchement, une nouvelle possibilité de limiter le nombre d’exécution. 1x / heure, 1x / minute, 10x / jours, etc.

Non, « Après 9h » la condition est vrai si il est après 9h c’est tout :slight_smile:

Je voyais plus ça direct après le mouvement, en mode retour à 0 après un mouvement.

Cette question @VonOx je serais intéressé de savoir comment ça marche côté home assistant ?

Tu peux déjà le faire avec la condition « Exécuter seulement lorsque le seuil est passé ( et non pas à chaque valeur envoyée ) » sur la box « changement d’état de l’appareil ».

Cette condition fait que seule les changements de valeurs sont pris en compte, si il y a 2 fois la même valeur la scène ne sera exécutée qu’une seule fois :slight_smile:

Je suis d’accord que ça peut être pratique! Après dans ce cas là, je pense pas que ce soit la solution, je pense que la box « changement d’état de l’appareil » gère le cas toute seule

Côté HA c’est un des premiers paramètres de la scène, son mode

Mmm pas sûr que ça réponde à ma question, là c’est juste pour savoir si une scène peut être démarrée 2 fois en même temps. Je parle d’un autre cas.

Imaginons que tu ai un déclencheur « Si un capteur de mouvement ne détecte pas de mouvements pendant 30 minutes », et qu’on ait la réception d’évènements suivante:

  • 12:01: réception d’un mouvement
  • 12:03: pas de mouvement
  • 12:05: pas de mouvement
  • 12:07: pas de mouvement
  • […]
  • 12:19: pas de mouvement
  • 12:32: pas de mouvement
  • 12:33: pas de mouvement
  • 12:35: pas de mouvement
    […]
  • 13:01: pas de mouvement
  • 13:03: pas de mouvement

Quand va s’exécuter la scène ?

En soit, la théorie voudrait que la condition soit validée à 12:31 (exactement 30 minutes après le premier mouvement), sauf qu’à 12:33, la condition est encore valide (il n’y a effectivement pas eu de mouvement depuis), et de même à 12:34, et de même à 12:35…, et de même à 13:03

Donc la scène s’exécuterait un nombre infini de fois tant qu’il n’y a pas de mouvements?

Parce qu’en soit, moi je vois cette histoire de « 30 minutes sans mouvements » comme une fenêtre glissante… Je sais pas si c’est très clair :smiley:

Hello @pierre-gilles,

Mon avis sur la question, ayant de nombreux besoin sur ce point :
Habituellement tu cherches à développer dans le contexte “équipement”. Un device pour toi (et pour tout le monde ici je pense) à toujours été un équipement “physique” avec ce qui le compose.
Un détecteur de mouvement en tant qu’équipement physique est un appareil composé d’un détecteur de mouvement, d’une tempo et souvent, mais pas obligatoirement, d’un détecteur de luminosité (mais la question de ce dernier n’est pas là).

En domotique donc, le but est justement de pouvoir régler la tempo dans l’interface. AMHA, cette option devrait donc être réglée dans la fiche du device. Ensuite cette tempo devrait, comme pour les équipements physique, remettre à zéro (donc pas de mouvement détecté) la value du device si aucun autre mouvement détecté dans ce laps de temps.

Ensuite dans les scènes tout est possible :
Device : détecteur cuisine - tempo : 30 min
Exemple n°1 = 2 scènes
Détecteur cuisine passe à 1
Scene 1 / Trigger1 : 12:01 : Détection cuisine (Front montant = à la montée à 1)
Action : Allumer Lumière
Fin
30 minutes après, si pas de mouvement détecté entre temps, Détecteur cuisine passe à 0
Scene 2 / Trigger1 : 12:31 : Pas de détection cuisine (front descendant = à la descente à 0)
Action : Eteindre Lumière
Fin

Exemple n°2 = 2 scènes idem Exemple n°1
Détecteur cuisine passe à 1
Scene 1 / Trigger1 : 12:01 : Détection cuisine (Front montant = à la montée à 1)
Action : Allumer Lumière
Fin
Derniere détection de mouvement à 12h25, Détecteur cuisine passe à 0 à 12h55
Scene 2 / Trigger1 : 12:55 : Pas de détection cuisine (front descendant = à la descente à 0)
Action : Eteindre Lumière
Fin

Device : détecteur barrière - tempo : 5 min
Exemple n°3 = 1 scène - on souhaite que l’action fasse l’effet inverse à une durée fixe
Détecteur barriere passe à 1
Scene 1/ Trigger1 : 12:01 : Détection barriere (Front montant = à la montée à 1)
Action : ouvrir la barriere
Action : Attendre 10 min
Action : Fermer la barrière (même si une autre détection est apparue et peu importe si le détecteur est repassé à 0)
Fin
Remarque : Dans cet exemple, si la barrière a été refermée entre temps et qu’un autre mouvement est détecté avant les 10 min, la barrière s’ouvre de nouveau. Cette scène doit obligatoirement arrêter la scène précédemment lancée.

Device : détecteur chambre Bébé - tempo : 30min
Exemple n°4 - reprenant ton exemple précédent :
Détecteur chambre passe à 1 au couché
Scene 1 / Trigger1 : Toutes les 30 minutes
Condition1 : entre 10h et 12h et entre 14h et 16h
Condition2 : si pas de mouvement détecté dans la chambre de bébé
Action : Envoyer un message : “Attention, aucun mouvement détecté depuis 30 minutes”
Fin

Avec cette méthode, tout deviens possible avec le détecteur de mouvement. Je reste persuadé qu’une tempo devrait être adressage directement au device. Aucun ajout ne serait nécessaire dans les scènes pour la détection de mouvement mise à part une option en plus de la case a cocher “exécuter 1 seul fois” qui pourrait être “A chaque nouvelle exécution arrêter la scène en instance”.

En espérant que ça pourra aider.

Pour information, j’ai commencé à travailler sur la box “condition temporelle” ( vu qu’il n’y a pas de débat sur celle là)

Par exemple:

La suite de la scène s’exécutera uniquement le week-end entre 11:45 et 12:50.

1 « J'aime »

Je suis d’accord avec @Terdious , c’est ce que je voudrais mettre en place dans mes pièces.

@Terdious à répondu avant mais effectivement sur ces capteurs c’est un temps glissant. La condition est aussi vrai une fois le temps passé mais ça on s’en fou faut declencher une seule fois.

Pour le coup ce type de scène est vraiment simple à faire dans HA

La PR pour la condition temporelle est dispo sur GitHub:

Ok, merci pour le feedback :slight_smile: Du coup pour vous ma proposition semble bonne ? Il va falloir réfléchir à l’implémentation ensuite, pas simple sur ce trigger :stuck_out_tongue:

Salut @pierre-gilles,

Cet après midi je voulais créer un scénario :
“Si personne n’est à la maison, qu’il fait sombre et que quelqu’un rentre, alors j’allume la lumière de l’entrée”.

MAIS :

  • Je ne peux pas détecter la présence de chaque personne du foyer (aucun moyen de le faire)
  • Cela implique de savoir quand il n’y a plus personne à la maison et que la porte d’entrée s’ouvre

En réfléchissant, je pensais créer un utilisateur Gladys “Occupants” pour lequel je pourrais gérer la présence en fonction de mes capteurs à la maison, à savoir des capteurs de présence et d’ouverture des portes.
Sauf que pour que ça soit efficace et réactif, je voyais les choses comme ça :

  1. En cas de mouvement à la maison ou d’ouverture de la porte d’entrée (si présence précédente) => Présence
  2. (Vérifier toutes les minutes) Si dans les 15 dernières minutes il n’y a aucun mouvement de porte ou de présence => Absence

Pour cela on voit bien qu’il est nécessaire de consulter l’historique des valeurs sur une période définie, comme le bloc “Vérifier la présence” le fait.

:arrow_forward: Aux vues des nouveautés depuis la demande de cette fonctionnalité, qu’est-ce qu’il faudrait retravailler avant de te permettre de te lancer dans le dev de cette fonctionnalité (toi ou quelqu’un d’autre d’ailleurs) ?
Ou quelle est ta vision des choses si elle a évolué à ce sujet ?

Autre remarque (rien à voir) :

→ Il faudrait rajouter une description du fonctionnement de la brique “Contrôler un appareil” , je ne suis pas certain de comprendre ce que ça fait.

C’est déjà possible, tu as du louper le trigger « La maison n’est plus vide »:

La documentation:

En couplant ça avec un bloc « continuer seulement si » tu peux faire la scène que tu décris :slight_smile: