Déclenchement au premier mouvement de la journée

Bonjour à tous.

Je cherche à créer mon automatisation du matin: Je rentre pour la première fois de la journée dans la pièce de vie, et suivant le besoin, la lumière s’allume avec une transition, ou bien les volets s’ouvrent.

Comme ma question ne portera surtout que sur le trigger et les conditions, j’opterai pour le moment pour une simple notification en action afin de tester mon automatisation.

J’ai donc un binary sensor qui me permet de savoir si j’ai une présence dans ma pièce de vie :
binary_sensor.presence_zone_vie

Et je souhait créer une automation qui se lance la première fois que je rentre dans cette zone.

Mon problème est de dire: Si je rentre pour la première fois du matin dans la zone vie, et de valider que l’automation ne s’est pas déjà lancé…

Je pensai mettre une condition sur la durée à off du binary sensor. En gros, si il a été à off pendant 5h et qu’on est le matin, alors c’est que je rentre pour la première fois dans la pièce. Je pense qu’il faut jouer sur trigger.from_state.last_changed mais je ne sais pas comment l’utiliser. Auriez vous une piste ?

Réponse rapide avant une compliquée : utiliser un booléen qui se remet à zéro à minuit par exemple ferait l’affaire ?

La réponse compliquée après le réveillon :innocent:

:blush: oui, j’étais parti dessus au début. Mais j’avoue que je cherche la version exclusivement dans l’automation

Je comprends pas… :innocent:

Car pour le booléen, le principe est le suivant…

  1. Il est minuit, le booléen <premiere_fois> passe à Vrai (une automatisation est necessaire pour ce comportement)
  2. Tu arrives dans la pièce :
    2.1. Le détecteur <binary_sensor> te détecte est passe à Vrai
    2.2. Le fait de passer à Vrai declenche une automatisation
    2.2.1. L’automatisation vérifie (condition) que le booléen <premiere_fois> est à Vrai
    2.2.1.1 Il est à Faux, l’automatisation n’exécute pas l’action.
    2.2.1.2 il est à Vrai, l’automatisation exécute ses actions, dont une qui est de mettre le booléen <premiere_fois> à Faux

La version compliquée nécessite de vérifier la date/horaire du dernier changement d’état des entités…
Regarde du côté de :

states.<entity>.<entity_id>.last_changed

Fais une recherche du terme last_changed sur le forum :wink:

N’hésite pas à relire ce sujet où on avait échangé sur la notion de calcul de temps :+1:

Je pense (comme tu le dis dans ta version compliqué) que je peux faire sans input, et donc tout dans l’automation.

Pourquoi? Parce que j’aime me compliquer les choses pour en connaître plus… :grinning_face_with_smiling_eyes:

Je suis bien vers la gestion des state dans ce style :

trigger.from_state.last_updated

Mais je ne sais pas si j’ai bon:

Je te partage mon template de condition pour le moment :


{{ ((as_timestamp(now()) - as_timestamp(states.automation.auto_lumieres_le_matin.last_changed))/3600) > 12 and ((as_timestamp(now()) - as_timestamp(trigger.to_state.binary_sensor.presence_zone_vie.last_changed))/3600) > 5 }}

Je pense que le premier sur l’automation n’est pas bon étant donnée que ce n’est pas le trigger …

En fait, je pense que tu ne pourras pas tout faire depuis l’automatisation.

Tu peux certes récupérer suite au déclenchement de ton détecteur, l’avant dernière date d’un mouvement et tu peux également récupérer la dernière date de déclenchement de l’automatisation.

Mais tu ne peux pas conjuger les deux dans une même automatisation.
Car ton détecteur va déclencher l’automatisation dont tu souhaite récupérer le dernier déclenchement donc tu va toujours récupérer la date/heure actuelle car le déclencheur est ton détecteur de mouvement (le fameux trigger.from_state.last_updated) mais il n’existe pas la même chose pour l’automatisation car ce n’est pas elle le déclencheur.

Si tu veux vraiment faire ce que tu veux faire, sans créer un booléen juste pour stocker la date/heure, tu peux penser à déplacer tes actions de ton automatisation dans un script. Si tu déplace les actions dans un script, tu pourras alors récupérer la date/heure du script éxécuté.

Ce qui revient à dire :

  • SI mon détecteur de mouvement se déclenche et que cela fait plus de 5 heures qu’il ne s’est pas déclenché et que cela fait plus de 10h que le script <script.bonjour> a été éxécuté, alors j’exécute l’automatisation qui a pour action d’exécuter le script <script.bonjour>.

Je préfère quand même la méthode du booléen car tu ne crée seulement qu’un booléen et pas un script qui fera certainement appel à d’autre script (script.ouvrir_volets, script.allumer_cafetière, etc.)

Bien sûr, attends d’autre réponse.
Peut être que je fais fausse route.

Sur ceux :

Bonne Année !

Génial. Exactement le genre de réflexion que je cherchai. Évidemment un input est simple mais je sais déjà le faire. Alors que jouer avec les infos disponibles dans la bdd ça c’est pas encore fait dans ma configuration. Du coup je me crée les exemples.

J’étudierai tout ce qui se présente si c’est une nouvelle forme de réflexion.

Tu peux jouer avec un booléen qui est remis à Faux au bout de 5heures de non-activation de ton détecteur de mouvement dans une première automatisation.

Et ensuite, jouer avec une automatisation qui se déclenche à chaque mouvement mais à comme condition que le booléen soit à Faux depuis 10 heures par exemple.

Ca te fait jouer sur les déclencheurs (pour la première automatisation) et les conditions (pour la deuxième)

Mais rien de folichon si tu utilise les clés for
Pour ton expérience, fait le en modèle (template) :+1:

Personnellement j’utilise un booléen représentant le « mode dodo ».

Pour le moment il passe à « on » lorsque toutes les lumières des pièces de vie sont éteintes pendant un certain temps.

Il passe à « off » à une certaine heure pour le moment. (Mais je compte changer ça).

Ce qui permet de baser plein d’automatisation dessus, comme des alarmes ou des profiles de lumières ou…

Je penses que je vais aussi explorer le sensors basé sur les règles de probabilité Bayes https://www.home-assistant.io/integrations/bayesian/

Mais pour résumer ce que je veux dire c’est de ne pas faire un Boolean pour un automatisation mais plus général et plus réutilisable. Sans oublier de bien définir ce qu’est le réveil. Par exemple est ce que je le lance lorsque mes enfants se lèvent à 06:15, ou lorsque le premier adulte se lève ou comme dans le cas présent quelqu’un met les pieds dans une pièce de vie. Mais voilà la surprise si un invité va dans la cuisine se servir un verre d’eau la nuit.

Je n’ai pas vraiment fait comme ça. Mais peut être une autre idée serait de désactiver et activer ton automatisation. Genre activé à partir d’une certaine heure et désactiver après le premier run ? Ça te permet de ne pas déclencher en pleine nuit même si tu te couche exceptionnellement à 21:00

1 J'aime

Génial ! J’ai donc deux idées qui correspondent a ce que je cherche. Dans l’optique de creer une seule automatisation pour gerer la luminosité, je vais surement partir sur un script. Mais l’étude de la dernière automatisation qui n’est active qu’au moment voulu réponds aussi a mon problème. Je vais voir ce que je peux en tirer.