Bonjour
J’arrive sur home assistant depuis quelques jours et je trouve que la surveillance des capteurs est quand même cruciale dans une installation domotique. Je ne comprends même pas pourquoi ce n’est pas directement intégré à HA
. Je déterre donc le sujet. J’ai regardé plusieurs articles un peu partout dont ceux déjà cités ici mais pas convaincu par le fonctionnement. En effet, surveiller quelques fois par jour me semble insuffisant. Et en plus, mon seul et unique capteur n’est pas géré avec les solutions que j’ai vu dont je me suis fortement inspirée. Alors j’ai mis les mains dans le cambouis. Je partage vu le temps que j’y ai passé. Ca peut servir à quelqu’un.
Ca vaut, ce que ça vaut, vu que pour le moment, je n’ai qu’un seul capteur. Les autres devraient arriver prochainement. Donc pas dit que la solution que je propose fonctionne pour tous les capteurs. Il faudra sûrement faire évoluer l’automatisation.
Objectif : surveiller les capteurs régulièrement. (HA 2025.12.3)
Pré-requis : activer last_seen dans zigbee2Mqtt. Créer une entrée interrupteur (input_boolean) à nommer “alerte_capteur_silencieux_envoyee” qui va éviter l’envoie de notification à répétition tant qu’un capteur est injoignable.
Explication : vous pouvez changer facilement la fréquence de surveillance en modifiant le déclencheur (heure, minute ou seconde si ça vous chante). Toutes les 5 minutes dans l’automatisation ci-dessous.
Changer le temps de silence des capteurs qui déclenche la notification en modifiant la variable minutes dans les 2 automatisations.
Mon capteur n’a pas d’attribut last_seen. En fait, dans mon cas (je ne sais pas si c’est le cas pour tous les capteurs) chaque “attribut” est considéré comme un capteur unique (sensor.capteur_th01_last_seen, sensor.capteur_th01_temperature, ...). On recherche les capteurs grâce à leur de qualité d’émission (lqi) et on change le nom de l’entité. Tordu comme solution vu sur un forum mais pas bête.
L’interrupteur “alerte_capteur_silencieux_envoyee” passe à ON si un capteur silencieux est détecté et bloquera les nouvelles détections. La 2eme automatisation permet de remettre “alerte_capteur_silencieux_envoyee” à OFF quand tous les capteurs communiquent.
Automatisation “Surveillance capteurs”
alias: Surveillance capteurs
description: >-
Surveille si les capteurs envoies au moins une information durant les 20
dernières minutes
triggers:
- trigger: time_pattern
minutes: /5
conditions:
- condition: template
value_template: "{{ sensors != ''}}"
- condition: state
entity_id: input_boolean.alerte_capteur_silencieux_envoyee
state: "off"
actions:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.alerte_capteur_silencieux_envoyee
- action: persistent_notification.create
metadata: {}
data:
title: ⚠️ Capteur(s) silencieux
message: |
Le capteur suivant n’a envoyé aucune donnée depuis plus de 20 minutes :
{{sensors}}
variables:
minutes: 20
sensors: >-
{% set result = namespace(sensors=[]) %}
{% for state in states.sensor | selectattr('attributes.unit_of_measurement', '==', 'lqi') %}
{% set src = state.entity_id %}
{% set cible = src | replace('_linkquality','_last_seen') %}
{% if states(cible) != None and (as_timestamp(now()) - as_timestamp(states(cible))) > (minutes | int)*60 %}
{% set result.sensors = result.sensors + [ cible | regex_replace(find='sensor.', replace='') | regex_replace(find='_last_seen', replace='') ~ ' (' ~ relative_time(strptime(states(cible), '%Y-%m-%dT%H:%M:%S%z')) ~ ')'] %}
{%endif %}
{% endfor %}
{{ result.sensors | join(', ') }}
mode: single
Automatisation “Réarmement alerte capteurs silencieux"
alias: Réarmement alerte capteurs silencieux
description: Test si tous les capteurs réémettent depuis les 20 dernières minutes
triggers:
- trigger: time_pattern
minutes: /5
conditions:
- condition: template
value_template: "{{ sensors == '' }}"
- condition: state
entity_id: input_boolean.alerte_capteur_silencieux_envoyee
state: "on"
actions:
- target:
entity_id: input_boolean.alerte_capteur_silencieux_envoyee
action: input_boolean.turn_off
- action: persistent_notification.create
metadata: {}
data:
title: 👍 Capteur(s) OK
message: |
Réarmement de la surveillance des capteurs
variables:
minutes: 20
sensors: >-
{% set result = namespace(sensors=[]) %} {% for state in states.sensor |
selectattr('attributes.unit_of_measurement', '==', 'lqi') %} {% set src =
state.entity_id %} {% set cible = src | replace('_linkquality',
'_last_seen') %} {% if states(cible) != None and (as_timestamp(now()) -
as_timestamp(states(cible))) > (minutes | int)*60 %} {% set
result.sensors = result.sensors + [ cible | regex_replace(find='sensor.',
replace='') | regex_replace(find='_last_seen', replace='') ~ ' (' ~
relative_time(strptime(states(cible), '%Y-%m-%dT%H:%M:%S%z')) ~ ')'] %} {%
endif %} {% endfor %} {{ result.sensors | join(', ') }}
mode: single
Voila. Ça fonctionne parfaitement avec mon capteur.
Point à améliorer : J’imagine qu’avec certains capteurs comme un bouton, le temps silencieux doit être celui entre 2 appuis. Il faudra donc gérer l’exclusion de ces capteurs.
Vérifier que ça fonctionne avec tous les types de capteurs
Kourou : Pourquoi, ne peut on pas créer des groupes. Un groupe “capteurs à surveiller” aurait été beaucoup plus facile à gérer. Un groupe de capteurs est considéré comme un capteur et je n’ai pas réussi à obtenir la liste des éléments du groupe avec un yaml. Vu les solutions complexes que j’ai trouvé, il ne doit pas y avoir de solution simple
. Si c’était le cas, pas besoin de gérer les exclusions. Pas de truc tordu pour rechercher les capteurs. Apparemment, dans les anciennes version de HA, c’était faisable. J’aimerai vos avis éclairés.