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 10% 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')) | map(attribute='state') | map('int') | select("lessthan", 10) | list }}
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 < 10 %} {{ 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')) | map(attribute='state') | map('int') | select("lessthan", 10) | list }}' 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 < 10 %}\n\ \ {{ item.name }} ({{item.state}}%)\n {% endif %}\n{%- endfor %} Regards\ \ - Your Homie\n" service: notify.homiemail