Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save dpolyakov/2049a6a3553ec4d7aa242fd2fc6efdec to your computer and use it in GitHub Desktop.
Save dpolyakov/2049a6a3553ec4d7aa242fd2fc6efdec to your computer and use it in GitHub Desktop.
low-level-detection-notification-for-consumables.yaml
blueprint:
name: Мониторинг расходных материалов
description: Регулярно проверять все датчики расходных материалов на пересечение
границы уровня и выполнять действие.
domain: automation
input:
sensor_list:
name: Датчики
description: Датчики которые нужно отслеживать.
Поддерживаются только сущности!
default:
entity_id: []
selector:
target:
#device: []
entity:
domain:
- sensor
- binary_sensor
threshold:
name: Пороговое значение уровня предупреждения
description: Показания датчика ниже порогового значения считаются низким уровнем
(т.к. а также бинарные датчики проблем со значением «включено»).
default: 10
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:
#device: []
entity:
domain:
- sensor
- binary_sensor
actions:
name: Actions
description: Уведомления или аналогичные действия для запуска.<hr />
{{sensors}} заменяется на полный список названий датчиков с низким уровнем, а также недоступных.<hr />
{{available_sensors}} заменяется на список названий датчиков с низким уровнем.<hr />
{{unavailable_sensors}} заменяется на список названий недоступных датчиков.
selector:
action: {}
source_url: https://gist.github.com/glebsterx/45c52dbd0a7a8e878d8d3fe35f4dbe84
variables:
sensor_list: !input 'sensor_list'
day: !input 'day'
threshold: !input 'threshold'
exclude: !input 'exclude'
available_sensors: '
{% set result = namespace(sensors=[]) %}
{% for sensor in states.sensor | selectattr(''entity_id'', ''in'', sensor_list.entity_id) | list %}
{% set available = (not sensor.state in [''unavailable'', ''unknown'']) | bool %}
{% if available and sensor.state | int < threshold %}
{% set result.sensors = result.sensors + [sensor.name ~ '' (*'' ~ sensor.state | int ~ ''%*) \[_'' ~ device_attr(sensor.entity_id, ''name'') ~'', '' ~ area_name(sensor.entity_id) ~ ''_]''] %}
{% endif %}
{% endfor %}
{% for sensor in states.binary_sensor | selectattr(''entity_id'', ''in'', sensor_list.entity_id) | list %}
{% set available = (not sensor.state in [''unavailable'', ''unknown'']) | bool %}
{% if available and sensor.state == ''on'' %}
{% set result.sensors = result.sensors + [sensor.name ~ '' \[_'' ~ device_attr(sensor.entity_id, ''name'') ~'', '' ~ area_name(sensor.entity_id) ~ ''_]''] %}
{% endif %}
{% endfor %}
{{ result.sensors | join(''\n'') }}'
unavailable_sensors: '
{% set result = namespace(sensors=[]) %}
{% for sensor in states.sensor | selectattr(''entity_id'', ''in'', sensor_list.entity_id) | list %}
{% set available = (not sensor.state in [''unavailable'', ''unknown'']) | bool %}
{% if not available %}
{% set result.sensors = result.sensors + [sensor.name ~ '' \[_'' ~ device_attr(sensor.entity_id, ''name'') ~'', '' ~ area_name(sensor.entity_id) ~ ''_]''] %}
{% endif %}
{% endfor %}
{% for sensor in states.binary_sensor | selectattr(''entity_id'', ''in'', sensor_list.entity_id) | list %}
{% set available = (not sensor.state in [''unavailable'', ''unknown'']) | bool %}
{% if not available %}
{% set result.sensors = result.sensors + [sensor.name ~ '' \[_'' ~ device_attr(sensor.entity_id, ''name'') ~'', '' ~ area_name(sensor.entity_id) ~ ''_]''] %}
{% endif %}
{% endfor %}
{{ result.sensors | join(''\n'') }}'
sensors: '
{% set sensors = available_sensors %}
{% if unavailable_sensors %}
{% set sensors = sensors ~ ''\n\n*Данные недоступны:*\n'' ~ unavailable_sensors %}
{% endif %}
{{ sensors }}'
trigger:
- platform: time
at: !input 'time'
condition:
- '{{ 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