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

Здравия всем! Чтобы наш 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 интерфейс. С его помощью можно создавать Автоматизации, которая будет не хуже тех, что делают в ручную через конфигурационный файлы.

6 ответов к «Home Assistant Автоматизации»

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.