Automatisation si la valeur n'a pas changée depuis 10min

Bonjour à tous,

Je cherche à transformer un script lua (je viens de DZ), mais je n’arrive pas à trouver la solution dans HA.

Je souhaite déclencher une automatisation si la valeur du capteur ou compteur ou BinarySensor n’a pas changée depuis 10min.

ex : mon zone.home = 0 depuis 10 min alors j’active Alarmo.

ex2 : la valeur de mon capteur de température a pas changé depuis 2 jours alors telegram pour regarder les piles (oui oui , j’ai des sondes 433 sans niveau de batterie :))

Merci d’avance pour votre aide.

Salut,

Regarde State condition

C’est le For qui permet de faire ça.

Je ne comprends pas comment l’évènement de changement d’état peut se déclencher si justement, y’ a pas eu de changement d’état depuis x minutes :flushed:

condition:
  alias: "Paulus not home for an hour and a bit"
  condition: state
  entity_id: device_tracker.paulus
  state: "not_home"
  # optional: Evaluates to true only if state was this for last X time.
  for:
    hours: 1
    minutes: 10
    seconds: 5

Pas de changement d’état ça veut pas dire, pas d’état/mise à jour non plus :wink:
L’automatisation va surveiller l’état régulièrement, et voir les ‹ non › variations sur la durée indiquée.
Si pas de variation, ça passe à la suite, si variations, on arrête

Tu peut tester avec qq chose comme ca : ( sensor et valeur a adapter bien sur)

trigger:
  - platform: template
    value_template: >-
      {{ as_timestamp(now()) - as_timestamp(states.sensor.eau_chaude_eau_chaude_du_jour.last_updated) > 10 }} 

Comme c’est un template, le mieux est de joué avec ça dans les outils de dévelopement / modèle dans un 1er temps.

Je pige pas dsl. Je résonne encore trop comme sur DZ.

Dans Dz, y’ avait via des events de changement d’état ou de temps. Pour faire ça dans DZ, j’aurai scruter toutes les ~minutes (time event) si now - date dernier update >= 10 donc je fais le traitement.

Il faut bien un déclencheur ? tu as pas un exemple d’automatisation complète que je comprenne ?

Je comprends mieux l’exemple de roumano car c’est le trigger qui a la « formule ». Pas la condition.

oui, tu peux mettre n’importe lequel, un cron toutes les X minutes, un template comme @roumano, ou bien une entité quelconque

L’exemple de la doc est une condition MAIS ça fonctionne aussi dans le trigger

ca veut dire que ça :

- id: '1701460584448'
  alias: Methode 1
  description: ''
  trigger:
  - platform: template
    value_template: '{{ as_timestamp(now()) - as_timestamp(zone.home.last_updated)
      > 10 }}'
  condition:
  - condition: state
    entity_id: zone.home
    state: '1'
  action:
  - service: telegram_bot.send_message
    data:
      message: zone.home = 1 depuis 10 min
  mode: single

est égal à ça :

- id: '1701461230981'
  alias: Methode 2
  description: ''
  trigger:
  - platform: state
    entity_id:
    - zone.home
    to: '1'
    for:
      hours: 0
      minutes: 10
      seconds: 0
  condition: []
  action:
  - service: telegram_bot.send_message
    data:
      message: zone.home = 1 depuis 10 min
  mode: single

rq : la 2nde solution fonctionne mais pas la 1ere :sweat_smile:

Bj
ce que tu dis la est pas bon

home
not_home

la logique est :

alias: Methode 2
description: ""
trigger:
  - platform: state
    entity_id:
      - zone.home
    to: not_home
    for:
      hours: 0
      minutes: 10
      seconds: 0
    from: home
condition: []
action:
  - service: telegram_bot.send_message
    data:
      message: zone.home = Present depuis 10 min
mode: single

Zone.home renvoie le nombre de personnes dans la maison.
Ça n’est pas un device tracker.

autant pour moi je me suis focalisé sur le capture d’ecran de Pulpy :joy:

Quand je teste ceci
value_template: ‹ {{ as_timestamp(now()) - as_timestamp(zone.home.last_updated)
> 10 }} ›

avec correction la valeur est ok

value_template: "{{ (as_timestamp(now()) - as_timestamp(states.zone.home.last_updated) | int > 600) }}"

Donc methode 1 qui dois maintenant fonctionné est :

alias: Methode 1
description: ''
trigger:
  - platform: template
    value_template: "{{ (as_timestamp(now()) - as_timestamp(states.zone.home.last_updated) | int > 600) }}"
condition:
  - condition: state
    entity_id: zone.home
    state: '1'
action:
  - service: telegram_bot.send_message
    data:
      message: zone.home = 1 depuis 10 min
mode: single

Point de vue utilisateur (et aux erreurs de syntaxe près) : oui
Du point de vue système c’est pas exactement pareil.
Le cas 1 fonctionne 24/24 toutes les minutes via la création d’un thread dédié.
Le cas 2 est natif, donc potentiellement plus optimisé.
Bon dans les faits, avec 1 automatisation, c’est pas très différent, mais autant faire au mieux

Bonjour,

je sors peut etre un peu du sujet mais venant aussi de domoticz j’ai utilisé node-red.

Il existe un timer optionnel (a installer dans le menu gérer la palette) qui peut être stoppé ou reinitialisé, le neud « controltimer ». Je l’utilise pour l’éclairage .

Un flux node-red repondrait aussi assez simplement au problème.

Merci @Pulpy-Luke :+1:

On change un peu de paradigme avec HA mais on change aussi clairement de braquet.

Oui c’est difficile de comparer les deux solutions.
Le seul souci de ha c’est la prise en main en venant de jeedom. Ensuite niveau fonctions, ha est systématique meilleur

Juste pour savoir information, la méthode 2 est plus rapide pour se déclencher ?
Il y a une raison particulière ?

Plus rapide, je ne pense pas…
Et puis une poignée de millisecondes de plus ou de moins comparé aux 10min de non activités, c’est négligeable

1 « J'aime »