Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save glebsterx/bab2e6b2b1aea54828c617c0aadb84e9 to your computer and use it in GitHub Desktop.
Save glebsterx/bab2e6b2b1aea54828c617c0aadb84e9 to your computer and use it in GitHub Desktop.
Home Assistant Blueprint: Low battery level detection & notification for all battery sensors
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