37. Оптимизация автоматизаций в Home Assistant


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

Итак, в предыдущем примере (1 и 2), для решения задачи была разведена целая куча автоматизаций. Но по факту, все их можно объединить в одну. Главное не торопиться.

Для начала, подытожим все задачи которые должны выполнять автоматизации из приведённых выше примеров:

  • Бойлер должен включаться как с физической панели, так и с кнопки в интерфейсе, и выключаться через определённый промежуток времени.
  • Бойлер должен включаться в определённое время по утрам в рабочие дни, на меньший промежуток времени. При условии что на улице холодно.
Для контроля поведения устройства можно ещё добавить отправку уведомления на смартфон о каждом его включении и/или отключении.

Эти две задачи в предыдущих примерах решались с помощью трёх автоматизаций. Попытаемся сократить их количество до одной.

Для начала конечно же создадим новую пустую автоматизацию, лучше всего это делать открыв ещё одно окно или вкладку браузера, чтобы в первой смотреть на оригиналы автоматизаций.
Для начала укажем все триггеры из всех автоматизаций и соберём их в новой.

Теперь нужно каждому триггеру присвоить свой идентификатор. Это некое имя, написанное только латинскими буквами, коротко обозначающее данный триггер. Имена можно давать абсолютно произвольные, главное чтобы они не повторялись внутри одной автоматизации.


Если указывать названия длинной больше одного слова, то лучше использовать знак минус или нижнее подчёркивание вместо пробела. 

Ну и конечно же желательно давать такие идентификаторы, чтобы самому было ясно к какому триггеру он относится.

Теперь переходим к действиям, пропуская условия.
Все действия будут использовать оператор if then.


Причём, часть "если", переводя на язык предыдущих автоматизаций, будет содержать в себе и триггер и условие.

Каждый оператор действия "ЕСЛИ" будет содержать в себе условие и действие. Основным условием будут идентификаторы триггеров. Действием же будут запуски и отключения таймера и самого бойлера. Не забываем про новую вводную - отправку уведомлений на смартфон.

Важно учесть что при перечислении условий внутри оператора "ЕСЛИ", просто указанные друг за другом условия, система воспринимает как обязательное "И".
Т.е. если есть необходимость указать чтобы устройство сработало например от голоса или от нажатия кнопки выключателя, то сначала необходимо выбрать оператор "ИЛИ".

Итак, при нажатии на "если - добавить условие" получаем варианты на выбор. Но работать в данном примере будем с несколькими:

На данном этапе как раз пригодится вторая вкладка с оригинальными автоматизациями.
Копируем первую из них;


В первую очередь добавляем оператор ИЛИ, и в нём уже указываем условия.

Если: произошло отключение бойлера ИЛИ его таймер закончил отсчёт времени.
Тогда: выключить устройство,  отправить уведомление на телефон, дублирующая команда для тотального сброса таймера.

Это действие можно свернуть, чтобы не запутаться. Не забываем сохранять автоматизацию, чтобы не потерять свои труды. Чтобы исключить ложные срабатывания, всю создаваемую в данный момент автоматизацию можно деактивировать.

Добавляем следующее глобальное действие.
На секунду вернёмся к условиям задачи. Было сказано что нужно чтобы бойлер включался в определённое время по утрам если прохладно. При этом время работы будет меньше чем обычно. Но при этом стоит оставить возможность и ручного запуска при тех же условиях. 
Поэтому делаем следующее:

Если происходит одно из следующих событий: включение бойлера, смена его статуса на вкл, или наступает 6 утра, то обязательно проверить условия

Условия: определённый день недели со временем суток между 5 часов утра 59 минут 58 секунд и 6 часами 3 секундами, И температура ниже 20 градусов, то тогда перейти к действиям. (Ключевыми условиями являются день недели и температура.)

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

Итак, на данный момент покрыто две автоматизации: включение бойлера в прохладное утро, и его отключение при любых условиях. Третье действие будет отвечать за включение устройства в остальное время суток.


Добавляем последнее действие оператора "если-тогда".


Если происходит включение устройства ИЛИ смена его статуса на вкл.
При условии что время НЕ РАВНО времени из предыдущего пункта.
Выполнить: запустить устройство, включить таймер со значением нужным для этого случая, отправить уведомление на смартфон.

Данный способ по началу кажется немного запутанным. Но удобство его в том, что все автоматизации касающиеся работы одного устройства, собраны в одном месте. И, как уже было сказано в начале статьи, такой подход позволяет сократить список автоматизаций в системе, благодаря чему легче искать другие в списке 🙂 

Комментарии