Автоматизации в Home Assistant

В визуальном редакторе Home Assistant можно настроить включение света в выбранной зоне за 30 минут до заката. Для этого нужны триггер, который запускает автоматизацию, и действие, которое включает свет; условия добавляются по необходимости.

Что понадобится

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

Основные шаги

Откройте список Settings > Automations & scenes.

Шаг 1. Создайте автоматизацию

В правом нижнем углу выберите Create automation, затем Create new automation.

Шаг 2. Задайте триггер

В секции When нажмите Add trigger. Выберите триггер по цели (By target), по типу (By type) или поиском, затем настройте, за чем он следит. Несколько триггеров работают как альтернативы - автоматизацию запустит любой из них. Типы описаны в документации по триггерам.

Шаг 3. Добавьте условия

Условия необязательны и добавляются в секции And if кнопкой Add condition. Они проверяют текущую ситуацию уже после срабатывания триггера; если условие не выполнено, автоматизация останавливается. Из готовых типов доступны State, Numeric state, Time и Template.

Шаг 4. Настройте действие

Действия собираются в секции Then do. Нажмите Add action, например Turn on light, выберите, чем управлять, в блоке Targets, заполните опции и нажмите Save. Действия выполняются сверху вниз, и ошибка в одном из них обычно не дает выполниться следующим. Блоки Blocks добавляют ветвление, ожидание и повторение.

Шаг 5. Сохраните пример с закатом

Выберите триггер Sunset со смещением, как в обучающем руководстве. Заполните Offset, в Offset type выберите Before и укажите 30 минут. Действие - Turn on light, в Targets через Add target добавьте зону, где стоят лампы. Нажмите Save, введите имя и при желании описание, затем снова Save.

Шаг 6. Проверьте запуск и трассировку

Для проверки условия откройте Menu > Test, для отдельного действия - Menu > Run action.

Что произошло в запуске, показывает трассировка (журнал запуска). Откройте Traces, нажмите Select trace и выберите шаг на графике - в Step details и Changed variables видно состояние шага и изменившиеся переменные.

После правок YAML перед перезапуском Home Assistant запускайте Check configuration в разделе Settings > Tools > YAML.

Шаг 7. Проверьте шаблон отдельно

Шаблон удобнее отлаживать до вставки в автоматизацию. Откройте Settings > Tools > Template, вставьте шаблон в редактор шаблонов и следите за Result, Result type и сообщениями об ошибках - результат показывается прямо во время ввода. Если шаблон использует переменные trigger или this, задайте пробные значения через {% set %} на время проверки и удалите эти строки перед возвратом в автоматизацию.

Другие способы

YAML в интерфейсе. Откройте Menu > Edit in YAML - так редактируется вся автоматизация или отдельный триггер, условие и действие. Изменения сохраняются кнопкой Save, назад в редактор возвращает Edit in visual editor; вставленный YAML визуальный редактор умеет преобразовывать.

Файлы конфигурации. Оставьте подключение и добавляйте блоки с метками в configuration.yaml или других YAML-файлах:

automation: !include automations.yaml

После правки файлов перезагрузите автоматизации через Settings > Tools > YAML → YAML configuration reloading → Automations. У файловых автоматизаций должен быть текстовый id, иначе не будет отладочных трассировок; числовой id нужно брать в кавычки. Что можно задать через triggers, conditions, actions, variables и trace, подробно описано в документации по автоматизациям в YAML.

Blueprint (готовый шаблон автоматизации). Откройте Settings > Automations & scenes > Blueprints. Нажмите Import blueprint, вставьте адрес в Blueprint address, просмотрите Preview и завершите импорт. Затем выберите blueprint, заполните его входные параметры и нажмите Save - получится автоматизация. Набор входных параметров зависит от blueprint.

Триггер-шаблон. Триггер Template объединяет несколько сущностей или вычисления через поле Value template, при необходимости с задержкой For at least. Он срабатывает, когда результат шаблона меняется с ложного на истинный. В YAML это trigger: template с параметром value_template.

Режимы запуска. Поведение при наложении срабатываний меняется через Menu → Change mode:

РежимПоведение
singleПо умолчанию - новый запуск игнорируется, пока идет текущий
restartТекущий запуск останавливается и начинается заново, если проходят условия
queuedЗапуски выполняются в порядке старта
parallelКаждый запуск идет как независимая копия

Что учесть

Автоматизация стартует, когда что-то меняется. Перезапуск Home Assistant останавливает идущие автоматизации и отменяет ожидающие интервалы For at least.

Триггер Numeric state crossed threshold срабатывает в момент пересечения порога Above или Below, а не повторно, пока значение остается за порогом, и сравнивает сырые значения без перевода единиц. Его интервал for сбрасывается при перезапуске или перезагрузке автоматизации.

Триггер State changed без полей From и To реагирует и на изменения одних атрибутов. Указание фильтра состояния подавляет такие изменения; from: null и to: null означают любое состояние и по-прежнему игнорируют обновления только атрибутов. Таймер for у этого триггера тоже сбрасывается при перезапуске или перезагрузке.

Шаблоны заменяют фиксированные значения или текст уведомления результатом вычислений на данных Home Assistant.

Частые проблемы

У пользователей форума помогали решения из таблицы. Для каждой проблемы указано число веток обсуждения.

ПроблемаТекст ошибкиЧто помогалоВеток
Возвращение доступности устройства неожиданно запускает автоматизацииextra keys not allowed @ data['from']. Got None extra keys not allowed @ data['to']. Got NoneТриггеры состояния с явными from и to и совпадающими ID сущностей; для света Shelly - триггер состояния со значениями on и off в from и to2
Триггеры устройства у кнопки недоступны или не реагируют на короткое и длинное нажатие-Прослушать событие zha_event в Developer Tools, скопировать device_ieee и command и использовать эти данные в ручном триггере события. Разбор проблемы2
Шаблон в MQTT-автоматизации читает не то свойство payload (содержимого сообщения) триггераUndefinedError: 'dict object' has no attribute 'value_json'Использовать trigger.payload_json в условии; для max_soc также указать верный топик (тему сообщений MQTT)2
Кавычки в YAML ломают шаблонные данные или REST-командуError: Error rendering data template: UndefinedError: 'dict object' has no attribute 'calendar_event'Для текста MQTT взять trigger.calendar_event.summary в кавычки; для REST-команды исправить отступы и кавычки в ее конфигурации2
Действие устройства не принимает шаблонный пресет (режим) климатаError: Preset mode {{preset_mode}} is not valid. Valid preset modes are: Wake up, away, home, TOU peak, sleep, away_indefinitelyВызвать службу climate.set_preset_mode с шаблоном1
Действие в автоматизации на blueprint падает из-за невыбранного календаря праздниковErrore: Error rendering data template: TypeError: unhashable type: 'list'Выбрать входной параметр с календарем праздников1
Сохранение автоматизации в интерфейсе падает с HTTP 500OSError: [Errno 16] Resource busy: '/config/tmp0a9w5j8t' -> '/config/automations.yaml'Закомментировать отдельное монтирование automations.yaml как Docker-тома; смонтировать папку конфигурации целиком в /config, а не отдельные файлы1

Частые вопросы

Чем Run actions отличается от реального запуска?

Команда прогоняет последовательность действий, пропуская триггеры и условия верхнего уровня; условия внутри самой последовательности работают. Данные триггера Run actions не передает, как и Trigger automation, поэтому шаблоны с другими свойствами trigger при такой проверке завершатся ошибкой. Логику, зависящую от триггера, проверяйте воспроизведением реального события или имитацией подходящего изменения состояния. Значения свойств trigger, например trigger.platform, можно посмотреть в Changed variables настоящего запуска.

Как превратить автоматизацию на blueprint в обычную?

Выберите Take control в Menu, подтвердите Yes и нажмите Save. Автоматизация перестанет использовать blueprint, и появятся обычные настройки триггеров, условий и действий. Преобразование необратимо - будущие изменения blueprint к ней больше не применятся. Используйте этот способ, когда автоматизация показывает только входные параметры blueprint и не дает править логику.

Как оформить шаблон в YAML?

Однострочный шаблон берите в кавычки, а внутри него используйте противоположный тип кавычек. Для многострочного шаблона выбирайте блок по нужному результату. Блоки > и >- склеивают строки, а блоки | и |- сохраняют переводы строк. В обоих случаях соблюдайте одинаковые отступы. Эти правила оформления приведены в документации по шаблонам в YAML.

Андрей Ковалев, редактор. Собирает решения из веток форума Home Assistant и сверяет команды и настройки с официальной документацией.