Блог

Использование сервиса group.set на примере доработки штатной сигнализации Home Assistant

Настало время озаботиться настройкой сигнализации в доме. Все датчики давно стоят, штатная сигнализация тоже прописана в конфиге. Но ничего не настроено и ждет своего часа. Час настал. И вот тут пришло первое разочарование. Оказывается датчики, по которым будет срабатывать сигнализация прописываются не в настройках Manual Alarm, как я глупо предполагал а прямо в автоматизации. А значит не подлежат изменению без правки кода. Так дело не пойдет. Мне хочется чтобы я сам мог обозначить те датчики, по которым будет срабатывать сигнализация. Ведь условия могут быть разные.
Спасибо сообществу, а особенно @S_p_i_r_i_t_u_s, за то, что подсказали, что есть такой сервис group.set который позволяет создавать и динамически менять группы. Таким образом триггером для сработки автоматизации (в нашем случае сигнализации) может быть не перечень датчиков и сенсоров а группа, куда эти датчики и сенсоры входят и которую можно "на лету" менять.
Второе разочарование пришло, когда я начал искать информацию по этому сервису. Нашел ровно ничего, кроме примера в службах самого Home Assistant. Я еще не достиг того уровня просветления, чтобы понять, код, который мне прислал Владислав. Пришлось доходить самому. Именно поэтому и решил написать блог.
Итак, у нас есть бинарные сенсоры, которые мы будем задействовать в автоматизации. Для того, чтобы было удобно их выбирать через дашборд, создаем для каждого сенсора свой input_boolean:

entre_motion: name: ДД вход initial: on icon: mdi:motion-sensor entre_door: name: Входная дверь initial: on icon: mdi:door-closed-lock

и т.д.... У меня их 10. Значит будет 10 input_boolean.
А вот теперь нам нужна автоматизация которая будет формировать группу, которая уже и будет триггером в автоматизации сигнализации. И вот тут небольшой нюанс. Для правильной работы нашего скрипта нам нужен бинарный сенсор "заглушка". Вы можете создать template_sensor либо использовать имеющийся, если вы уверены, что он случайно не запустит автоматизацию. К примеру я для этого использовал реальный сенсор открытия дверей, который следит, что экран для домашнего кинотеатра открыт (не буду я ставить дом на сигнализацию во время просмотра фильма всей семьей). А теперь собственно сама автоматизация (пишем в automations.yaml):

- alias: 'Alarm sensor group set' # Автоматичесое изменение группы сенсоров учавствующих в автоматизации trigger: platform: state entity_id: - input_boolean.garage_door - input_boolean.garage_motion - input_boolean.koridor_motion - input_boolean.entre_motion - input_boolean.entre_door - input_boolean.kitchen_motion - input_boolean.kitchen_door - input_boolean.zal_motion - input_boolean.zal_door - input_boolean.sovrom_door action: - service: group.set data_template: object_id: alarm_group name: Alarm sensors group all: false icon: 'mdi:alarm-light' entities: >- binary_sensor.openclose_46 {% if is_state('input_boolean.garage_motion', 'on') %} ,binary_sensor.tradfri_motion_sensor {% endif %} {% if is_state('input_boolean.koridor_motion', 'on') %} ,binary_sensor.presence_4 {% endif %} {% if is_state('input_boolean.entre_motion', 'on') %} ,binary_sensor.presence_33 {% endif %} {% if is_state('input_boolean.entre_door', 'on') %} ,binary_sensor.openclose_26 {% endif %} {% if is_state('input_boolean.kitchen_motion', 'on') %} ,binary_sensor.presence_28 {% endif %} {% if is_state('input_boolean.zal_motion', 'on') %} ,binary_sensor.presence_43 {% endif %} {% if is_state('input_boolean.garage_door', 'on') %} ,binary_sensor.openclose_22 {% endif %} {% if is_state('input_boolean.kitchen_door', 'on') %} ,binary_sensor.openclose_31 {% endif %} {% if is_state('input_boolean.zal_door', 'on') %} ,binary_sensor.openclose_34 {% endif %} {% if is_state('input_boolean.sovrom_door', 'on') %} ,binary_sensor.openclose_41 {% endif %}

Чтобы было понятно, у меня binary_sensor.openclose_46 это и есть "заглушка", поскольку в сервисе group.set entities перечисляются через запятую. Таким образом любое изменение input_boolean сразу перезаписывает группу alarm_group с учетом изменений.
Ну и сама автоматизация сигнализации уже будет выглядеть так:

- alias: 'Trigger alarm' trigger: - platform: state entity_id: group.alarm_group from: 'off' to: 'on' condition: - condition: state entity_id: alarm_control_panel.severholm_alarm state: armed_away action: - service: notify.telegram_stephan data_template: message: >- {% for entity in trigger.to_state.attributes.entity_id %} {% if states(entity) == 'on' %} Сработала сигнализация. Датчик "{{ state_attr(entity, 'friendly_name') }}" был активирован в {{ states.sensor.time.state }}. {% endif %} {% endfor %}

В телеге будет сообщение вроде "Сработала сигнализация. Датчик "Дверь в зале" был активирован в 21:02."
Пока других action нет, поскольку все в разработке. Но надеюсь сам принцип понятен и будет кому-нибудь полезен. Ну и 5 минут в гуи дало мне такую "усовершенствованную" панель Home Alarm.


Круто.... только вот похожая задача появилась - создавать изменяемую группу штор на окнах - чтобы можно было выбирать какие шторы будут автоматически откр. закр.(в одной группе) а какие не в группе - то руками ))

Небольшое, но важное изменение. 


Вернуться назад
Вернуться назад