Le sujet est intéressant et je commence a avoir pas mal de devices sur pile et encore d’autre a venir. le fait de créer une automatisation qui qui remonte tous les devices qui comporte des batterie sans avoir a les lister individuelement me parait essentiel. l’idee est de recevoir l’information via telegram car je ne suis pas toujours devant mon dashborad. Vu que niveau code je suis pas au top, j’ai tenté de reprendre de YAML disponible dans le sujet pour les modifier mais sans succes. Je me suis alors dit que chat GPT pourrait peut etre m’apporter de l’aide. j’ai généré du code et je l’ai insérer mais je n’arrive pas a l’enregistrer. voici le code :
je partage mon template generic avec personnalisation des inclusion et exclusion.
Inclusion :
Regex_match #va rechercher tout les sensor qui comporte le mot "battery et battery_leve
regex_match("sensor.*_(battery|battery_level)", ignorecase=False)"
Exclusion :
and not state.entity_id | regex_match("sensor.*(power|runtime|charge|state|temperature|health|browser|cycle|redmi_note)", ignorecase=false)
-%}
alias: "[NOTIFY] Niveau de Batterie"
description: ""
trigger:
- platform: time_pattern
hours: /1
condition:
- condition: template
value_template: |2-
{% for state in states.sensor -%}
{%- if state.entity_id | regex_match("sensor.*_(battery|battery_level)", ignorecase=False)
and not state.entity_id | regex_match("sensor.*(power|runtime|charge|state|temperature|health|browser|cycle|redmi_note)", ignorecase=false)
-%}
{%- if state.state | int < 20 %}
true
{%- endif -%}
{%- endif -%}
{%- endfor %}
action:
- service: notify.notify
data:
message: |-
{% for state in states.sensor %}
{% if state.entity_id | regex_match("sensor.*_(battery|battery_level)", ignorecase=False)
and not state.entity_id | regex_match("sensor.*(power|runtime|charge|state|temperature|health|browser|cycle|redmi_note)", ignorecase=false)
and state.state | int < 20 %}
⚠️ <b>Alerte ! Batterie faible {{ state.name }} ({{ state.state }}%)</b> ⚡.
{% endif %}
{% endfor %}
mode: single
Je vais decouper le code :
Voici la condition que j’tulise :
{% for state in states.sensor -%}
{%- if state.entity_id | regex_match("sensor.*_(battery|battery_level)", ignorecase=False)
and not state.entity_id | regex_match("sensor.*(power|runtime|charge|state|temperature|health|browser|cycle|redmi_note)", ignorecase=false)
-%}
{%- if state.state | int < 20 %}
true
{%- endif -%}
{%- endif -%}
{%- endfor %}
Et voici l’action notification:
service: notify.notify
data:
message: |-
{% for state in states.sensor %}
{% if state.entity_id | regex_match("sensor.*_(battery|battery_level)", ignorecase=False)
and not state.entity_id | regex_match("sensor.*(power|runtime|charge|state|temperature|health|browser|cycle|redmi_note)", ignorecase=false)
and state.state | int < 20 %}
⚠️ <b>Alerte ! Batterie faible {{ state.name }} ({{ state.state }}%)</b> ⚡.
{% endif %}
{% endfor %}
Pour ce qui est de l’entity.id c’est le resultat de la recherche regex_match … sensor.*(…|…)
As tu des sensor avec des états qui commence par sensor.xxxx_battery ou sensor.xxx_battery_level car la réponse c’est qu’il ne trouve rien et que par conséquent il cherchent a afficher une valeur par défaut mais comme il n’en a pas dans mon code alors il affiche erreur veuillez indiquer une valeur par défaut.
Je pense avoir trouver pour tes capteurs et pour tout nommage de capteur.
{% for state in states.sensor -%}
{%- if state.entity_id | regex_match("sensor\..*_(battery|battery_level)", ignorecase=False)
and not state.entity_id | regex_match("sensor\..*(power|runtime|charge|state|temperature|health|browser|cycle|redmi_note)", ignorecase=false)
-%}
{%- if state.state | int < 20 %}
true
{%- endif -%}
{%- endif -%}
{%- endfor %}
Et pour l’action notification:
service: notify.notify
data:
message: >-
{% set default_message = "Aucune batterie faible détectée." %}
{% set battery_alerts = namespace(sensor_list=[]) %}
{% for state in states.sensor if state.entity_id |
regex_match("sensor\..*_(battery|battery_level)", ignorecase=False)
and not state.entity_id | regex_match("sensor\..*(power|runtime|charge|state|temperature|health|browser|cycle|redmi_note)", ignorecase=false)
and state.state | int < 20 %}
{% set battery_alerts.sensor_list = battery_alerts.sensor_list + [state.name ~ ': ' ~ state.state ~ '%'] %}
{% endfor %}
{% if battery_alerts.sensor_list %}
⚠️ <b>Alerte ! Batteries faibles ⚡ :</b>
{{ "\n".join(battery_alerts.sensor_list) }}
{% else %}
{{ default_message }}
{% endif %}
J’ai apporté des amélioration pour afficher les batterie sous forme de liste dans la notification