Здравия всем! Чтобы наш Home Assistant смог что то делать сам нужно, его научить. Делается это через инструмент Автоматизации. Об этом я расскажу в этой статье.
Введение
Автоматизации это набор правил, которые срабатывают при том или ином условии. Вот несколько примеров:
- При открытии входной двери автоматически включается свет в прихожей.
- Свет в коридоре включается и не гаснет пока срабатывает датчик движения.
- В ночное время суток, включается освещение у входа, при срабатывании датчика движения.
- При открытии ворот, делается фотография с камеры и отправляется в Телеграм.
Создание Автоматизации
В текущей версии Home Assistant 2022.10.5 Автоматизации можно создавать как в Web интерфейсе, так и сразу править код.
Создание Автоматизации в Web интерфейсе
Для создания Автоматизации в Web интерфейсе, откроем настройки и выберем Автоматизации и сцены. В открывшемся окне, щелкнем по кнопке + Создать Автоматизацию
Попадем в мастер создания Автоматизации. Выберем пункт Начать с нуля.
Давайте для примера создадим такую Автоматизацию:
При отрывании входной двери, включается свет в прихожей. Для этого будем использовать следующие объекты, которые присутствую в моем Home Assistant:
- Входная дверь (binary_sensor.hallway_door_sensor)
- Бра над дверью (light.hallway_door_wall_lamp)
Для этого щелкнем по кнопке + Добавить триггер и выберем триггер Состояние
Выберем наш объект Входная дверь, который и есть наш датчик открытия двери.
Идем ниже и ищем поле На (необязательно) щелкаем по нему и выбираем Открыта
Теперь щелкнем по кнопке + Добавить действие и выберем Вызвать службу
Найдем в списке Освещение: Turn on
Выберем наш объект Бра над дверью
Автоматизация готова, нажимаем кнопку Сохранить. Придумываем название и сохраняем
Все наша Автоматизация создана и работает. Можно проверять.
Ручное создание Автоматизации
В стандартном конфигурации Home Assistant описывает Автоматизации в файле automations.yaml.
# Loads default set of integrations. Do not remove.
default_config:
# Text to speech
tts:
- platform: google_translate
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
При создании Автоматизации в Web интерфейсе, Home Assistant сохранит код Автоматизации в этот файл automations.yaml. Откроем его и увидим там нашу Автоматизацию:
- id: '1666696573353'
alias: Включение Бра над дверью, при открытии входной двери
description: ''
trigger:
- platform: state
entity_id:
- binary_sensor.hallway_door_sensor
to: 'on'
condition: []
action:
- service: light.turn_on
data: {}
target:
entity_id: light.hallway_door_wall_lamp
mode: single
Теперь давайте, создадим обратную Автоматизацию, которая выключает свет в прихожей через 10 минут.
Для этого в файл automations.yaml добавим следующий код
- id: 'turn_off_door_wall_lamp_for_10_minuts'
alias: Выключение Бра на дверью через 10 минут
trigger:
- platform: state
entity_id:
- light.hallway_door_wall_lamp
to: 'on'
for: "00:10:00"
action:
- service: light.turn_off
target:
entity_id: light.hallway_door_wall_lamp
Давайте его разберем. Начинать писать Автоматизацию нужно с тире — этим мы говорим Home Assistant, что у нас не одна Автоматизация, а целый список. Дальше идет идентификатор id и человеческое название автоматизации alias.
- id: 'turn_off_door_wall_lamp_for_10_minuts'
alias: Выключение Бра на дверью через 10 минут
trigger:
- platform: state
Определяем секцию триггер, помним про отступы в YAML, что каждая секция должна быть определена дополнительными пробелами. Триггер работает на платформе Состояние (state). И определяет, новое состояние включенной лампы Бра над дверью (light.hallway_door_wall_lamp), определяет параметр to и его состоянии on, но здесь есть дополнительный параметр for, который указывает 10 минут
trigger:
- platform: state
entity_id:
- light.hallway_door_wall_lamp
to: 'on'
for: "00:10:00"
В секции Действие (action) мы выключаем наш светильник
action:
- service: light.turn_off
target:
entity_id: light.hallway_door_wall_lamp
Чтобы новая Автоматизация заработала, нужно либо перезагрузить всю конфигурацию, либо только секцию Автоматизации
Условие в Автоматизации
Теперь давайте изменим нашу первую Автоматизацию и добавим условие:
- id: '1666696573353'
alias: Включение Бра над дверью, при открытии входной двери
description: ''
trigger:
- platform: state
entity_id:
- binary_sensor.hallway_door_sensor
to: 'on'
condition:
- condition: state
entity_id: light.hallway_door_wall_lamp
state: 'off'
action:
- service: light.turn_on
data: {}
target:
entity_id: light.hallway_door_wall_lamp
mode: single
В условии мы проверяем, если Бра над дверью (light.hallway_door_wall_lamp) выключена, только тогда сработает наше действие.
Структура автоматизации
Автоматизация состоит из трех параметров:
- Триггеры (trigger) — описывает условие при котором сработает Автоматизация
- Условия (condition) — описывает дополнительные условия, только при которых сработает Автоматизация
- Действие (action) — тело Автоматизации, которое выполняется, при срабатывании триггеров и условий.
Любая Автоматизация должна иметь обязательное действие, а вот триггер и условие это опциональный параметр. Но Автоматизации без триггера не имеет смысла, потому что для этого в Home Assistant есть скрипты.
Trigger
В секции trigger мы описываем условие срабатывания Автоматизации. Каким именно пользоваться триггером описывает секция platform:
trigger:
- platform: state
В зависимости от того какая платформа указана триггер запускает автоматизацию на разные действия. Вот небольшой список популярных триггеров:
- state — срабатывает при изменении статуса объекта
trigger:
- platform: state
entity_id:
- binary_sensor.hallway_door_sensor
to: 'on'
- numeric_state — срабатывает при изменении числового статуса объекта
trigger:
- platform: numeric_state
entity_id: sensor.humidity
above: 50
- event — срабатывает при возникновении события
trigger:
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.hallway
- time — срабатывает в точное время
trigger:
- platform: time
at: "10:30:00"
- sun — срабатывает в зависимости от положения солнца
trigger:
- platform: state
entity_id: sun.sun
to: below_horizon
- homeassistant — срабатывает при запуске или выключении Home Assistant
trigger:
- platform: homeassistant
event: start
Полный список Триггеров есть в официальной документации.
В секции trigger можно указывать несколько различных триггеров. Автоматизация будет запускаться при выполнении любого из них. К примеру, Автоматизация, которая сработает при открытии двери и при загрузке Home Assistant
trigger:
- platform: state
entity_id:
- binary_sensor.hallway_door_sensor
to: 'on'
- platform: homeassistant
event: start
Сondition
Если перечислить все нужные условия в триггерах, то Автоматизация сработает при выполнении любого из них. А чтобы Автоматизация сработала, только при определенных условиях, описывают эти условия в секции condition. К примеру, следующая Автоматизация сработает, только при открытии двери и если свет в прихожей не горит:
trigger:
- platform: state
entity_id:
- binary_sensor.hallway_door_sensor
to: 'on'
condition:
- condition: state
entity_id: light.hallway_light
state: 'off'
Также как и в Триггерах, в секции Сondition можно описывать несколько условий. Разница состоит в том, что в Сondition нужно описать какие логические выражения будут работать: И (AND), ИЛИ (OR), НЕ (NOT) или чередование логических выражений.
Рассмотрим пример, как использовать логическое И. Автоматизация сработает, только когда выполнится оба условия:
condition:
and:
- condition: state
entity_id: fan.bathroom
state: "off"
- condition: numeric_state
entity_id: sensor.humidity
above: 60
Рассмотрим пример, как использовать логическое ИЛИ. Автоматизация сработает, когда выполнится одно из условий условия:
condition:
or:
- condition: numeric_state
entity_id: sensor.temperature
above: 25
- condition: numeric_state
entity_id: sensor.humidity
above: 60
Рассмотрим пример, как использовать логическое И вместе с ИЛИ.
condition:
and:
- condition: state
entity_id: fan.bathroom
state: "off"
- or:
- condition: numeric_state
entity_id: sensor.temperature
above: 25
- condition: numeric_state
entity_id: sensor.humidity
below: 20
Action
В секции action описывается тело Автоматизации, которое выполняется при срабатывании триггера и выполнении всех условий. Эта секция самая влажная, по скольку ради нее и пишут саму Автоматизацию. В большинстве первых Автоматизаций здесь будет основное действие, запустить службу. К примеру, включим свет в прихожей:
- service: light.turn_on
entity_id: light.hallway_door_wall_lamp
Если у нас умный светильник, и он умеет помимо включения и выключения, к примеру, изменять яркость, то можно при включении сразу передать и его яркость:
- service: light.turn_off
data:
entity_id: light.bathroom_lamp
brightness: 70
Если нам нужно выполнить какое то действие сразу к нескольким объектам одного типа, можно сделать это в одном вызове:
- service: light.turn_on
entity_id:
- light.hallway_door_wall_lamp
- light.bathroom_lamp
- light.kitchen_lamp
Можно выполнять последовательно несколько действий. К примеру, сначала выключим свет в ванной, а потом включим вытяжку:
- service: light.turn_off:
entity_id: light.bathroom_lamp
- service: fan.turn_on
entity_id: fan.bathroom_fan
Иногда требуется между действиями сделать небольшую паузу. Возьмем предыдущий пример и добавим паузу 2 секунды:
- service: light.turn_off
entity_id: light.bathroom_lamp
- delay: 00:00:02
- service: fan.turn_on
entity_id: fan.bathroom_fan
Но в action можно также использовать условия. Лампа в прихожей выключится, только когда оба условия выполнятся:
action:
- choose:
- conditions:
and:
conditions:
- condition: state
entity_id: binary_sensor.hallway_door_sensor
state: "on"
- condition: state
entity_id: light.hallway_door_wall_lamp
state: 'off'
sequence:
- service: light.turn_off
entity_id: light.hallway_door_wall_lamp
Отслеживание ошибок
Перед перезагрузкой конфигурации, всегда проверяйте её на ошибки:
Но бывают плавающие ошибки. В последних версиях Home Assistant, если конфигуратор видит ошибку, он предпочитает её игнорировать, выключив всю секцию где допущена ошибка, но запустить Home Assistant, об этом он сообщит в журнале системы:
Заключение
Как мы все понимаем, одной статьей невозможно объять все нюансы работы Автоматизации. Я рассказал самые основы. Бывают Автоматизации с кучей условий в секции action. Если вы поймете как делать простые Автоматизации вы сможете делать очень сложные Автоматизации с кучей параметров и условий. В последних версиях Home Assistant доделали очень хороший помощник для начинающих это создание Автоматизации через Web интерфейс. С его помощью можно создавать Автоматизации, которая будет не хуже тех, что делают в ручную через конфигурационный файлы.
Хороший гайд у вас получился.
Немало в сети инструкций и роликов, но не часто бывает такая понятная и доуступная подача информации.
Хорошо бы продолжить. И о скриптах и о сценах рассказать.
Циклы, проверка условий, возврат к исходному состоянию после срабатывания какого либо скрипта или автоматизации.
В общем сложные моменты никто не разбирает а у вас думаю получится.
Михаил, спасибо за теплые слова. Изначально так и задумывалось:) Но как всегда не хватка свободного времени сказывается:) Я планирую продолжить цикл в ближайшем будущем.
Хорошее руководство. Спасибо!
Рад, что помог!
Действительно хорошая статья. Спасибо
Рад, что помог!