Небольшая заметка для упрощения ваших автоматизаций. Переодически в процессе домашней автоматизации возникают нюансы и костыли, которые приходится решать. В этой мини-статье я хочу поделиться несколькими способами, как можно избежать дублирования нескольких автоматизаций с одинаковым функционалом для разных устройств.
Отлавливаем конкретный триггер, для дальнейшего использования в автоматизации используя entity_id
Не так давно я пытался сделать глупую стиральную машинку немного "умнее" и для этого мне потребовалось создать скрипт, который воспроизводит текст на яндекс станции к которой обратился пользователь.
Как это можно реализовать?
Сам пример автоматизации давно придуман и описан в документации компонента Yandex Stantion, но мне такой подход не понравился. В официальной документации компонента автор предлагает использовать отдельную автоматизацию для каждой колонки. Такой подход хорошо работает, если для каждого из устройств необходимо сделать разные действия - но это не наш случай.
Логика автоматизаций довольно простая:
- Создаем вспомогательный элемент поле для ввода (input)
- Отлавливаем атрибут alice_state, который изменяется в текущий момент времени
- записываем идентификатор сущности (entity_id) в ранее созданный вспомогательный элемент
- Используем его дальше, например для произношения текста
На скриншоте ниже показан код автоматизации из документации.
Объединяем все в одну автоматизацию
Сама логика автоматизации осталась неизменной, мы так же создаем вспомогательный элемент, в который записываем id сущности колонки, которая изменила состояние. Но! Теперь при при заполнении вспомогательного поля в действиях автоматизации - мы используем возможности встроенного шаблонизатора.
В качестве триггеров необходимо задать все ваши колонки и указать отслеживаемый атрибут. Все колонки добавляются одинаковым образом
Вся магия происходит именно в последней строке - тут мы получаем entity_id триггера, то есть нашей колонки.
{{ trigger.entity_id }}
Именно этот шаблон позволяет получить идентификатор сущности из триггера.
Полный код автоматизации показан на скриншоте ниже
Получаем название сработавшего датчика и отправляем уведомление в telegram
Задумка
У меня есть несколько датчиков протечки, для которых создана отдельная обобщенная автоматизация.
Суть автоматизации заключается в следующем - мы просто отправляем название сработавшего датчика в telegram. Кстати, буквально на днях датчик пригодился.
Логика автоматизации
Триггеры автоматизации задаются почти так же, как и в примере с колонками - наша главная цель отловить срабатывание датчика.
Вся магия снова происходит в действиях. Мы снова используем шаблон в дейтвиях автоматизации.
{{trigger.to_state.attributes.friendly_name}}
Именно этот шаблон позволяет получить имя устройства из триггера.
Полный код автоматизации на скриншоте ниже.
Вот и все, чем я хотел поделиться. Делитесь своим мнением в комментариях Большое спасибо за прочтение, обнял.