Je cherche à faire une automatisation pour être notifié (via pushbullet par exemple) pour savoir quand un de mes capteurs voit sa batterie passer sous le seuil des 3.7v.
J’ai créé cette automatisation avec l’aide de @Clemalex :
Je n’arrive pas à trouver le code (dans la partie data_template) pour faire en sorte de n’alerter qu’avec un message contenant le ou les capteurs qui sont passés sous le seuil de 3.7v.
Parce que tu devrais utiliser des elif (faire une recherche sur le forum pour l’utilisation).
Tu devrais être notifié que sur un déclencheur et donc un dépassement de seuil de l’un de test capteurs. Si tu es notifié plusieurs fois pour le même capteur, c’est que le celui ci oscille et donc oui, il faut rajouter des conditions.
en utilisant trigger.to_state.name ? Par contre cela veut dire que je vais avoir une notification par sensor ? Bon ca me gene pas c’est juste pour savoir
Mais si tu veux garder ton code tu peux, mais c’est plus un message de synthèse à mon sens.
Et je ferais plus une autre automatisation qui vérifierai un booléen (mis à vrai par l’automation que je t’ai fournie) tous les soirs à 21H par exemple avec comme message, tous les capteurs dont la batterie est vide.
Il faut essayer de ne pas tout mélanger et de faire une automatisation par fonction.
Pour ceux qui souhaiteraient passer par un template plus générique (sans nommer chaque batterie à surveiller)
ce qui donne pour moi
automation:
# # https://community.home-assistant.io/t/battery-alert-automation-stuck-with-syntax/141216
- alias: 'Battery alert'
trigger:
- platform: time
at: '07:03:00'
condition:
- condition: template
value_template: >-
{%- set threshold = 40 -%}
{%- for item in states
if (item.attributes.battery_level is defined and
item.attributes.battery_level | int < threshold) or
("battery" in item.name | lower and
((item.state | int < threshold and item.state|int != 0) or
item.state | lower == "low" or
item.state | lower == "unknown"))-%}
{%- if loop.first -%} {{ true }} {%- endif -%}
{%- endfor -%}
action:
- service: notify.HA
data_template:
title: '{{ as_timestamp(now()) | timestamp_custom("%d-%m-%Y, %H:%M:%S",True) }}'
message: >-
{%- set threshold = 40 -%}
Les appareils suivants ont un niveau de batterie faible :
{%- for item in states -%}
{% if item.attributes.battery_level is defined and
item.attributes.battery_level | int < threshold %}
{{ item.name }} ({{ item.attributes.battery_level }}),
{% elif "battery" in item.name | lower and
((item.state | int < threshold and item.state|int != 0) or
item.state | lower == "low" or
item.state | lower == "unknown") %}
{{ item.name }} ({{ item.state }}),
{%- endif -%}
{%- endfor -%}
Tu pourrais en plus utiliser un input_datetime pour contrôler le déclencheur et un input_number pour contrôler le seuil d’alerte
Il faut tout de même préciser que l’alerte concernant ton automatisation se déclenche à heure fixe et non pas dès que le seuil est dépassé par un capteur, à la différence du premier post. Certaines personnes préfèreront être prévenu tout de suite, d’autre à heure fixe
on est d’accord, c’est mon utilisation, pour connaitre les périphériques qui risquent me lâcher dans la journée,
mais c’était surtout pour l’exemple de template, car cela peut très vite devenir difficile à maintenir une liste exhaustive de périphériques sur batterie
Après, pour les autres, il faut bien construire l’exemple donné avec ses propres appareils.
Car pour prendre un exemple, j’ai des appareils qui ont pour attributs battery et non battery_level et donc, ceux si ne ressortiront pas sans ajouter la vérification de cet attribut dans le code.
Pour donner un peu de contexte, si mes sondes de T°/H% ont leur batterie qui descendent sous le seuil des 3,7V je ne peux plus faire confiance aux mesures réalisées ce qui est « dangereux/peut être couteux » si ces mesures servent à asservir des fonctionnements (gestion de chauffage/clim…etc). C’est pour cela que je préfère être notifié immédiatement.
Pour ce qui est de la soluce de @Clemalex, elle me va bien, mieux vaut faire qlqchose de générique et simple plutôt (donc facile à maintenir) que de partir sur un code complexe, à devoir changer des qu’il faut ajouter/supprimer une sonde.
On peux très bien adapter le code de @papoo pour être notifié instantanément.
Il suffit de passer par un template sensor, qui utilise le code de la condition en remplaçant {{true}} par {{loop.length}}.
Ensuite, utiliser cette nouvelle entité comme déclencheur avec la plateforme state avec comme condition que cette même entité ne soit pas à 0. Pour la partie action, aucun changement… c’est juste pour ceux qui voudrait les deux