Найти тему
Мой умный дом

Как я упрощаю автоматизации в умном доме

Оглавление
Обложка статьи
Обложка статьи

Небольшая заметка для упрощения ваших автоматизаций. Переодически в процессе домашней автоматизации возникают нюансы и костыли, которые приходится решать. В этой мини-статье я хочу поделиться несколькими способами, как можно избежать дублирования нескольких автоматизаций с одинаковым функционалом для разных устройств.

Отлавливаем конкретный триггер, для дальнейшего использования в автоматизации используя entity_id

Не так давно я пытался сделать глупую стиральную машинку немного "умнее" и для этого мне потребовалось создать скрипт, который воспроизводит текст на яндекс станции к которой обратился пользователь.

Как это можно реализовать?

Сам пример автоматизации давно придуман и описан в документации компонента Yandex Stantion, но мне такой подход не понравился. В официальной документации компонента автор предлагает использовать отдельную автоматизацию для каждой колонки. Такой подход хорошо работает, если для каждого из устройств необходимо сделать разные действия - но это не наш случай.

Логика автоматизаций довольно простая:

  1. Создаем вспомогательный элемент поле для ввода (input)
  2. Отлавливаем атрибут alice_state, который изменяется в текущий момент времени
  3. записываем идентификатор сущности (entity_id) в ранее созданный вспомогательный элемент
  4. Используем его дальше, например для произношения текста

На скриншоте ниже показан код автоматизации из документации.

Скриншот из документации
Скриншот из документации

Объединяем все в одну автоматизацию

Сама логика автоматизации осталась неизменной, мы так же создаем вспомогательный элемент, в который записываем id сущности колонки, которая изменила состояние. Но! Теперь при при заполнении вспомогательного поля в действиях автоматизации - мы используем возможности встроенного шаблонизатора.

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

-3

Вся магия происходит именно в последней строке - тут мы получаем entity_id триггера, то есть нашей колонки.

Магия здесь
Магия здесь
{{ trigger.entity_id }}

Именно этот шаблон позволяет получить идентификатор сущности из триггера.

Полный код автоматизации показан на скриншоте ниже

Полный код автоматизации
Полный код автоматизации

Получаем название сработавшего датчика и отправляем уведомление в telegram

Задумка

У меня есть несколько датчиков протечки, для которых создана отдельная обобщенная автоматизация.

Датчики в ZHA
Датчики в ZHA

Суть автоматизации заключается в следующем - мы просто отправляем название сработавшего датчика в telegram. Кстати, буквально на днях датчик пригодился.

Бывает и такое
Бывает и такое

Логика автоматизации

Триггеры автоматизации задаются почти так же, как и в примере с колонками - наша главная цель отловить срабатывание датчика.

Объявляем датчики в качестве триггеров
Объявляем датчики в качестве триггеров

Вся магия снова происходит в действиях. Мы снова используем шаблон в дейтвиях автоматизации.

{{trigger.to_state.attributes.friendly_name}}

Именно этот шаблон позволяет получить имя устройства из триггера.

-9

Полный код автоматизации на скриншоте ниже.

Полный код автоматизации
Полный код автоматизации

Вот и все, чем я хотел поделиться. Делитесь своим мнением в комментариях Большое спасибо за прочтение, обнял.