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

Feature description
L’idée serait de permettre l’accès aux anciennes valeur d’un capteur dans une scène.
Exemples concrets :

  1. Si un mouvement à été détecté dans les 10 dernières minutes dans n’importe quelle de mes pièces, faire quelque chose.
  2. Si ma pièce est allumée, mais qu’il n’y a pas de mouvement depuis 15 minutes, alors éteindre la pièce.

Ces exemples ne sont pas réalisables avec un “attendre” + “récupérer la dernière valeur”, car on raterait des événements.

Enfin, cela permettrait d’ajouter des widgets au dashboard avec un historique des valeurs des capteurs :smiley:

Est-ce que tu pourrais être plus précis sur la demande de fonctionnalité? ^^

Je pense qu’on parle uniquement de scène ici, ensuite il faudrait affiner vraiment ce que veut dire cette demande de fonctionnalité, par exemple l’exemple concret 1. je ne le comprend pas.

Mode 1 : Comparer une valeur sur une période.
Exemple : mouvement détecté dans toutes les valeurs des 10 dernières minutes (temps relatif donc).

Mode 2 : Comparer une valeur sur une date donnée (ou temps relatif).
Exemple : température il y a 10 minutes de 17°C, ou il faisait 17°C à 15h30 et il fait 18°C à 16h45 (sans utiliser de bloc “attendre”).

Ok je vois

Maintenant il faut réfléchir à la forme que ça pourrait prendre fonctionnellement :slight_smile:

@lmilcent Chaud pour nous faire des petites specs fonctionnelles? une petite maquette avec une explication du fonctionnement suffit. J’utilise https://whimsical.com/ de mon côté pour les maquettes

1 Like

Qu’est-ce que tu attends comme contenu (brièvement) ?

Une description haut-niveau, un flowchart, une “fausse” interface ?

Une description purement utilisateur du fonctionnement attendu (textuel) + une maquette :slight_smile: Au niveau de la description, ça doit être vraiment concret: qu’est ce qui se passe dans l’UI ?

Un exemple de spec fonctionnelle que j’avais fais pour le multi utilisateur:

1 Like

Merci, je vais me pencher dessus !

ça va prendre un peu de temps, mais je mettrait ce sujet à jour dès que j’ai une première version :slight_smile:

1 Like

Ok cool :slight_smile: Pour moi la partie “spécification” c’est le plus gros du boulot pour un développement, donc ça aide vraiment quand il y a des specs claires de ce qu’on veut !

1 Like

Oh j’en suis bien conscient, c’est tellement plus simple et rapide de développer quelque chose de déjà précis et cadré que de partir dans tous les sens !
Malheureusement je ne compte pas les heures passés sur des projets pas cadrés avec une pseudo idée comme base de projet…

1 Like

@pierre-gilles, cette maquette est-elle parlante déjà ?

(accès public) Maquette : récupérer un état dans le temps.

Spécification fonctionnelle

  • “Récupérer le dernier état” devient “Récupérer un état”
  • L’état d’un appareil peut être récupéré suivant plusieurs possibilités :
    1. Dernière valeur
    2. Temps relatif (Il y a …)
    3. Par date
    4. Sur une période

Détail des possibilités évoquées

1. Dernière valeur

C’est exactement ce qui est fait actuellement, et assez parlant :wink:

2. Temps relatif

Ici l’idée est de pouvoir dire : je veux comparer la valeur d’il y a 10 minutes (basé sur l’heure d’exécution de la scène).

On va pouvoir comparer deux valeur à 10 minutes d’écart, sans attendre pour autant !

Si la scène s’exécute à 12h00 et que l’utilisateur à choisi “il y a 10 minutes”, la valeur sera comparée à celle de 11h50m00s (±30s pour trouver une valeur). Si aucune valeur n’est trouvé entre 11h49m30s et 11h50m30s, le test échoue.

3. Par date

C’est un peu identique au temps relatif, mais on peut préciser une date bien précise sans limite particulière. On va donc pouvoir comparer des valeurs à plusieurs jours voire mois d’écart.
On peut imaginer ici, faire une comparaison sur une “valeur de référence” à une date bien précise.

Attention ici : il faudra alerter l’utilisateur s’il choisi une date à laquelle il n’existe pas de valeur.

4. Sur une période

Il s’agit du plus intéressant je trouve : l’utilisateur va être en mesure de comparer une valeur sur toute celles récupérées pendant une certaine période de temps.

Exemples :

  • On peut vérifier si un capteur de mouvement a détecté un mouvement dans les 10 dernières minutes (basé sur l’heure d’exécution de la scène).
  • On peut vérifier si une prise a consommé un certain niveau de puissance instantané dans les 30 dernières minutes
  • etc…

Dans le cas d’un capteur (ou actionneur) dont les valeurs peuvent changer très régulièrement et ne sont pas forcément binaires (température, consommation en Watt, luminosité en Lux, etc.), la valeur de “référence” utilisée dans la scène pour le test sera comparée à toutes celles enregistrées.

Si je veux vérifier que ma prise a consommé moins de 15W dans les 30 dernières minutes, le test va s’écrire : “Ma prise” < “15W” dans les “30 dernières minutes”.
Gladys va alors vérifier dans la base de données si dans toutes les valeurs récupérées ses 30 dernières minutes ne dépassent pas les 15W.

Récupération des valeurs de test

Comme pour le bloc “récupérer la dernière valeur”, il faudrait que la valeur utilisée lors des tests soit automatiquement récupérée (temps d’enregistrement de la valeur + valeur).

Exemple :

  • Je fais un test sur l’équipement “mon-capteur” pour vérifier s’il y a eu du mouvement dans les 10 dernières minutes, donc entre 11h50 et 12h00 (heure d’exécution de la scène).
  • Si du mouvement à été enregistré disons à 11h56, deux variables sont créées dans la scène : “mon-capteur-test-1-valeur” et “mon-capteur-test-1-heure”.
  • Je suis en mesure d’envoyer un message avec ces deux variables, pour m’avertir “mouvement détecté (value = 1) à 11h56.”
1 Like

J’aime beaucoup tes propositions et je m’imagine déjà utilisé la période pour dire c’est bon j’éteins la lumière dans la pièce

Qu’est ce que ça veut dire pour toi “la valeur d’il y a 10 minutes” ?

Que se passe-il lorsqu’il y a plusieurs valeurs dans la période? Gladys prend laquelle?

Je n’ai pas l’impression que ce soit ce qu’on veut. Je vois très bien le besoin, mais sur la spec la façon dont tu répond au besoin me semble très étrange et bizarre :smiley:

@VonOx Sans lire la proposition ci-dessus pour pas t’influencer, comment tu verrais toi la mise en place de la scène dont tu me parlais avec tes capteurs de mouvements ?

J’ai rajouté quelques précision, est-ce plus compréhensible ?

Sinon, hésite pas à me dire ce qu’il manque, qui est flou ou peu donner lieu à des situations illogiques, je continuerai la réflexion !

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 ?