Forked from sbyx/low-battery-level-detection-notification-for-all-battery-sensors.yaml
Last active
May 1, 2023 22:15
-
-
Save glebsterx/bab2e6b2b1aea54828c617c0aadb84e9 to your computer and use it in GitHub Desktop.
Home Assistant Blueprint: Low battery level detection & notification for all battery sensors
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
blueprint: | |
name: Мониторинг заряда батарей датчиков | |
description: Регулярно проверять все датчики с классом устройства 'battery' на пересечение | |
границы уровня заряда и выполнять действие. | |
domain: automation | |
input: | |
threshold: | |
name: Пороговое значение уровня предупреждения батареи | |
description: Показания датчика батареи ниже порогового значения считаются низким зарядом | |
батареи (т.к. а также бинарные датчики батареи со значением «включено»). | |
default: 20 | |
selector: | |
number: | |
min: 5.0 | |
max: 100.0 | |
unit_of_measurement: '%' | |
mode: slider | |
step: 5.0 | |
time: | |
name: Время проверки | |
description: Проверка запускается в заданное время | |
default: '10:00:00' | |
selector: | |
time: {} | |
day: | |
name: День недели проверки | |
description: 'Проверка запускается в заданное время каждый день (0) или в заданный | |
день недели (1: Понедельник ... 7: Воскресенье)' | |
default: 0 | |
selector: | |
number: | |
min: 0.0 | |
max: 7.0 | |
mode: slider | |
step: 1.0 | |
exclude: | |
name: Исключенные датчики | |
description: Датчики батареи (например, смартфона) которые нужно исключить из | |
обнаружения. Поддерживаются только сущности, устройства должны быть раскрыты! | |
default: | |
entity_id: [] | |
selector: | |
target: | |
entity: | |
device_class: battery | |
actions: | |
name: Actions | |
description: Уведомления или аналогичные действия для запуска.<hr /> | |
{{sensors}} заменяется на полный список названий датчиков с низким зарядом батареи, а также недоступных.<hr /> | |
{{available_sensors}} заменяется на список названий датчиков с низким зарядом батареи.<hr /> | |
{{unavailable_sensors}} заменяется на список названий недоступных датчиков. | |
selector: | |
action: {} | |
source_url: https://gist.github.com/glebsterx/bab2e6b2b1aea54828c617c0aadb84e9 | |
variables: | |
day: !input 'day' | |
threshold: !input 'threshold' | |
exclude: !input 'exclude' | |
available_sensors: ' | |
{% set result = namespace(sensors=[]) %} | |
{% for sensor in states.sensor | selectattr(''attributes.device_class'', ''defined'') | selectattr(''attributes.device_class'', ''=='', ''battery'') | list %} | |
{% set excluded = (sensor.entity_id in exclude.entity_id) | bool %} | |
{% set available = (not sensor.state in [''unavailable'', ''unknown'']) | bool %} | |
{% if available and not sensor.state | int == 0 and sensor.state | int < threshold and not excluded %} | |
{% set result.sensors = result.sensors + [sensor.name ~ '' ('' ~ sensor.state | int ~ ''%)''] %} | |
{% endif %} | |
{% endfor %} | |
{% for sensor in states.binary_sensor | selectattr(''attributes.device_class'', ''defined'') | selectattr(''attributes.device_class'', ''=='', ''battery'') | list %} | |
{% set excluded = (sensor.entity_id in exclude.entity_id) | bool %} | |
{% set available = (not sensor.state in [''unavailable'', ''unknown'']) | bool %} | |
{% if available and sensor.state == ''on'' and not excluded %} | |
{% set result.sensors = result.sensors + [sensor.name] %} | |
{% endif %} | |
{% endfor %} | |
{% for sensor in states.binary_sensor | selectattr(''attributes.device_class'', ''defined'') | list %} | |
{% set excluded = (sensor.entity_id in exclude.entity_id) | bool %} | |
{% set available = (not sensor.state in [''unavailable'', ''unknown'']) | bool %} | |
{% if ''battery_level'' in sensor.attributes and not excluded %} | |
{% if available and state_attr(sensor.entity_id, ''battery_level'') < threshold %} | |
{% set result.sensors = result.sensors + [sensor.name ~ '' ('' ~ state_attr(sensor.entity_id, ''battery_level'') ~ ''%)''] %} | |
{% endif %} | |
{% endif %} | |
{% endfor %} | |
{% for sensor in states.camera | selectattr(''attributes.device_class'', ''defined'') | list %} | |
{% set excluded = (sensor.entity_id in exclude.entity_id) | bool %} | |
{% set available = (not sensor.state in [''unavailable'', ''unknown'']) | bool %} | |
{% if ''battery_level'' in sensor.attributes and not excluded %} | |
{% if available and state_attr(sensor.entity_id, ''battery_level'') | int < threshold %} | |
{% set result.sensors = result.sensors + [sensor.name ~ '' ('' ~ state_attr(sensor.entity_id, ''battery_level'')~ ''%)''] %} | |
{% endif %} | |
{% endif %} | |
{% endfor %} | |
{{ result.sensors|join(''\n'') }}' | |
unavailable_sensors: ' | |
{% set result = namespace(sensors=[]) %} | |
{% for sensor in states.sensor | selectattr(''attributes.device_class'', ''defined'') | selectattr(''attributes.device_class'', ''=='', ''battery'') | list %} | |
{% set excluded = (sensor.entity_id in exclude.entity_id) | bool %} | |
{% set available = (not sensor.state in [''unavailable'', ''unknown'']) | bool %} | |
{% if (not available or sensor.state | int == 0) and not excluded %} | |
{% set result.sensors = result.sensors + [sensor.name] %} | |
{% endif %} | |
{% endfor %} | |
{% for sensor in states.binary_sensor | selectattr(''attributes.device_class'', ''defined'') | selectattr(''attributes.device_class'', ''=='', ''battery'') | list %} | |
{% set excluded = (sensor.entity_id in exclude.entity_id) | bool %} | |
{% set available = (not sensor.state in [''unavailable'', ''unknown'']) | bool %} | |
{% if not available and not excluded %} | |
{% set result.sensors = result.sensors + [sensor.name] %} | |
{% endif %} | |
{% endfor %} | |
{% for sensor in states.binary_sensor | selectattr(''attributes.device_class'', ''defined'') | list %} | |
{% set excluded = (sensor.entity_id in exclude.entity_id) | bool %} | |
{% set available = (not sensor.state in [''unavailable'', ''unknown'']) | bool %} | |
{% if ''battery_level'' in sensor.attributes and not excluded %} | |
{% if not available or sensor.state | int == 0 %} | |
{% set result.sensors = result.sensors + [sensor.name] %} | |
{% endif %} | |
{% endif %} | |
{% endfor %} | |
{% for sensor in states.camera | selectattr(''attributes.device_class'', ''defined'') | list %} | |
{% set excluded = (sensor.entity_id in exclude.entity_id) | bool %} | |
{% set available = (not sensor.state in [''unavailable'', ''unknown'']) | bool %} | |
{% if ''battery_level'' in sensor.attributes and not excluded %} | |
{% if not available or sensor.state | int == 0 %} | |
{% set result.sensors = result.sensors + [sensor.name] %} | |
{% endif %} | |
{% endif %} | |
{% endfor %} | |
{{ result.sensors|join(''\n'') }}' | |
sensors: ' | |
{% set sensors = available_sensors ~ ''\n\nДанные недоступны\n'' ~ unavailable_sensors %} | |
{{ sensors }}' | |
trigger: | |
- platform: time | |
at: !input 'time' | |
condition: | |
- '{{ sensors != '''' and (day | int == 0 or day | int == now().isoweekday()) }}' | |
action: | |
- choose: [] | |
default: !input 'actions' | |
mode: single |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment