Ich habe in meinem Haus recht viele batteriebetriebene Sensoren von Xiaomi verbaut:
- Fenster- und Türsensoren
- Luftfeuchtigkeitssensoren
- Bewegungsmelder
Eine Problematik, die alle batteriebetriebenen Geräte gemein haben ist, irgendwann sind sie eben leer. Damit mir nun nicht die Batterie des Bewegungssensor an der Eingangstüre genau dann leer geht, wenn keiner zuhause ist und jemand einbricht, habe ich eine Automation erstellt die jede Nacht um 0 Uhr den Zustand aller batteriebetriebenen Geräte in meiner Home-Assistant Installation prüft.
Dazu pflege ich eine Gruppe eben all dieser Devices:
battery_entities:
entities:
- sensor.battery_xiaomi_attic
- sensor.battery_xiaomi_bathroom
- sensor.battery_xiaomi_bedroom
- sensor.battery_xiaomi_hwr
- sensor.battery_xiaomi_kitchen
- sensor.battery_xiaomi_living
- sensor.battery_xiaomi_maindoor
- sensor.battery_xiaomi_office
- sensor.battery_xiaomi_toilet
- sensor.battery_xiaomi_fitness
- sensor.battery_xiaomi_storage
- sensor.battery_xiaomi_window_living_big
- sensor.battery_xiaomi_window_living_small
- sensor.battery_xiaomi_window_dining
- sensor.battery_xiaomi_window_kitchen_side
- sensor.battery_xiaomi_window_kitchen_front
- sensor.battery_xiaomi_window_guest
- sensor.battery_xiaomi_window_hwr
- sensor.battery_xiaomi_window_bathroom_side
- sensor.battery_xiaomi_window_bedroom_side
- sensor.battery_xiaomi_window_bedroom_garden
- sensor.battery_xiaomi_window_office_garden
- sensor.battery_xiaomi_glasbs_living_big_right
- sensor.battery_xiaomi_changing
- sensor.battery_xiaomi_motion_bathroom
Zum Zugriff auf die Batterie-Informationen, benötigt es jedoch die Konfiguration eines Template-Sensors im Home-Assistant:
sensor:
- platform: template
sensors:
battery_xiaomi_attic:
friendly_name: 'Xiaomi Feuchtigkeitssensor - Spitzboden'
value_template: "{{ states.sensor.humidity_158d0002fb487a.attributes.battery_level|default(-1)|int if states.sensor.humidity_158d0002fb487a is not none }}"
unit_of_measurement: '%'
Ich bastel mir also für jedes Batterie-Device einen Sensor, packe den in die Gruppe und die Gruppe nutze ich wiederum zur Iteration in der Automatisierung.
Die Grundidee meiner Regel ist dabei die folgende:
Prüfe jede Nacht um 0 Uhr ob irgendein Gerät aus der Gruppe „battery_entities“, einen Ladestand von unter 20% hat. Sollte dieser der Fall sein, wird die Regel ausgeführt und ich suche mir in der „Action“ alle Geräte zusammen auf die diese „Condition“ zutrifft und packe diese in eine Mail an mich.
Die „Condition“ die ich dafür nutze sieht so aus:
condition: template
value_template: >-
{{ states | selectattr('entity_id', 'in', state_attr('group.battery_entities', 'entity_id')) | selectattr('state', 'lt', '20') | list | length > 0 }}
Die „Action“, so:
data_template:
message: >
The following devices reporting a low battery status: {% for item in
expand('group.battery_entities') %}
{%- if item.state | int < 20 %}
{{ item.name }} ({{item.state}}%)
{% endif %}
{%- endfor %} Regards - Your Homie
title: Homie - Report of battery devices with low energy
service: notify.homiemail
Alles zusammen gebracht, sieht dann so aus:
- id: CheckBatteryFromDevices
alias: Check battery level of battery devices
trigger:
- platform: time
at: 00:00:00
condition:
- condition: template
value_template: '{{ states | selectattr(''entity_id'', ''in'', state_attr(''group.battery_entities'',
''entity_id'')) | selectattr(''state'', ''lt'', ''20'') | list | length > 0
}}'
action:
- data_template:
title: Homie - Report of battery devices with low energy
message: "The following devices reporting a low battery status: {% for item\
\ in expand('group.battery_entities') %}\n {%- if item.state | int < 20 %}\n\
\ {{ item.name }} ({{item.state}}%)\n {% endif %}\n{%- endfor %} Regards\
\ - Your Homie\n"
service: notify.homiemail