Найти тему
HASSStas: Рецепты HomeAssistant

Сложное или простое

После переезда Home Assistant с Убунты на Дебиан и почти полной перенастройки умного дома, больше всего изменений произошло в автоматизациях. Я изменил подход. Благо возможности Home Assistant в этом плане тоже довольно далеко продвинулись - появился визуальный редактор автоматизаций, встроенные условия и ветвления. Последнее и дало толчок к тому, чтобы вместо большого количества маленьких автоматизаций делать большие комбайны.

Оправдан ли такой подход? Почему нет? Я попробовал так, теперь попробую сяк. У обоих подходов есть свои преимущества и недостатки.

Преимущество простых одношаговых автоматизаций - в их простоте. Они просто что-то делают, когда что-то происходит. Легко сочинить, легко собрать, легко изменить, если поменялись вводные параметры. Минус такого решения - количество автоматизаций со временем начинает зашкаливать. Приходится придумывать всякие названия, группирующие автоматизации по смыслу, по помещению, по чему-нибудь ещё.

Промежуточным решением этой проблемы явились "проекты" (blueprints), в которых можно объединять некоторые сущности. Например, для обычной беспроводной кнопки, у которой есть три состояния - нажатие, двойное нажатие и длинное нажатие - уже нет необходимости писать три автоматизации, созданы подходящие шаблоны (о да, я представляю как пришлось сочинять автоматизации на каждое действие Aqara Cube или Ikea Styrbar). Собрал всё в одном проекте- и готово.

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

Есть ещё одно частичное решение проблемы - темплейты (они же шаблоны jinja), на основании которых можно писать один скрипт для множества однотипных сенсоров или устройств. И ключевое тут - однотипных. На основе темплейтов чаще всего строят контроли и уведомления о батарейках (поди перечисли их все, особенно когда парк устройств динамично развивается), об освещении, о персонах.

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

И вот, наконец, в Home Assistant допилили прекрасный интуитивно понятный редактор автоматизаций, с трассировкой и другими плюшками. И теперь можно не постигая азы yaml писать сложные многоуровневые автоматизации, превратив тройку-пяток одношаговых скриптов во что-то сложное и решающее многоуровневую задачу.

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

Окей, рисуем автоматизацию: после 22:00 и до 6:00, если весь свет в квартире выключается - включить фитолампу. Отлично, работает.

Но утром надо это дело как-то выключать. Рисуем следующую автоматизацию: если хотя бы один источник света в квартире включается - выключить фитолампу.

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

Следующий этап - почему бы не включать фитолампу и днём, когда никого нет дома?

Рисуем: когда никого нет дома - включить фитолампу.

Соответственно четвёртая автоматизация: когда кто-то приходит - выключить фитолампу.

Итого - четыре автоматизации для одной фитолампы. Жирновато.

Начинаем оптимизировать. Первые две автоматизации опираются на группу источников света, то есть триггер у них, по сути, один - когда группа освещения меняет своё состояние.

Рисуем триггеры:
1. Когда группа освещения переходит с "вкл" на "выкл";
2. Когда группа освещения переходит с "выкл" на "вкл";

Здесь я перечислил только основные источники света, по которым будем определять, что фитолампу надо выключать. Чтобы, например, ночной поход в уборную не дёргал триггер туда-сюда.
Здесь я перечислил только основные источники света, по которым будем определять, что фитолампу надо выключать. Чтобы, например, ночной поход в уборную не дёргал триггер туда-сюда.

Можно, в принципе, обойтись и одним триггером "кода группа освещения меняет своё состояние", но это будет триггерить когда отваливаются какие-нибудь лампочки из сети или когда перезагружается Home Assistant.

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

И остаются наши действия:

  • если свет включился - надо фитолампу выключить
-3
  • если свет выключился - надо фитолампу включить.
-4

И вот у нас уже одна общая автоматизация на фитолампу, объединяющая действия, зависимые от внешнего освещения.

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

И на этом всё, шер, лайк, подписка, телеграм.