Home Assistant — это совершенно отличная штука чтобы делать "Умный дом". Можно подключить в HA разные устройства и создать удобный интерфейс для управления всеми этими устройствами.
Но кроме ручного управления устройствами Home Assistant позволяет создавать "Автоматизации" — действия выполняются автоматически при выполнении определенных условий.
Несколько примеров что можно сделать с помощью автоматизаций в Home Assistant:
Но даже самое простое действие "нажали на кнопку — включили свет" в Home Assistant настраивается с помощью автоматизации.
Все устройства, которые подключены к Home Assistant могут выполнять свои действия по команде из автоматизаций.
Существует два способа как можно создать или изменить автоматизацию:
Большинство людей, которых я знаю, пишут автоматизации в текстовых файлах и не используют веб интерфейс редактирования автоматизаций. Но вы сами смотрите, какой вариант работы с автоматизациями вам будет удобнее.
Редактирование файлов и использование графического интерфейса в итоге делает одно и то же. Главное понять идею — как работают автоматизации, а способ как настраивать автоматизации не очень важен.
В этом тексте я буду показывать автоматизации с помощью редактирования текстовых файлов.
В Home Assistant есть главный файл с настройками системы — файл /config/configuration.yaml Вполне возможно записывать все настройки HA только в этот файл и не использовать другие файлы. Но файл configuration.yaml который создается при первом запуске Home Assistant предлагает создавать автоматизации в отдельном файле. В файле /config/configuration.yaml есть вот такой фрагмент:
group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml
Этот кусок конфига говорит что автоматизации нужно брать из файла /config/automations.yaml
И для начала это прекрасное решение. В рамках этого текста мы будет редактировать только один файл — /config/automations.yaml
(Вообще есть несколько разных способов как удобно разбивать конфигурационный файл на разные файлы, но этот текст не об этом, а про автоматизации)
Перед тем как продолжать, нужно выполнить одну настройку.
Нужно зайти на страницу http://IP:8123/profile и установить там галку "Advanced Mode":
Эта галка влияет на то что отображается на странице http://IP:8123/config/server_control
Если галки нет (состояние по умолчанию), то на странице есть только кнопки перезапустить и остановить:
Но если поставить галку, то на странице появятся дополнительные действия, которые упростят и ускорят работу:
Вот пример самый простой автоматизации. В файл /config/automations.yaml нужно записать:
- alias: first
trigger:
condition:
action:
После того как файл отредактирован нужно сказать HA чтобы он заново прочитал свои конфигурационные файлы и сделал все то что в них описано.
Для этого нужно зайти на страницу http://IP:8123/config/server_control и нажать на кнопку "Check Configuration". Должен появиться текст "Configuration valid!":
А после этого нужно нажать на кнопку "Reload automations":
(если на этой странице вы не видите кнопок "Check Configuration" и "Reload automations", то нужно включить "Advanced Mode" как описано в предыдущем разделе)
Поздравляю! Вы создали свою первую автоматизацию. Это исключительно простая автоматизация. И она очень скучная: она ничего не делает, но это настоящая автоматизация в HA.
Каждый раз после изменения yaml файлов в которых описаны автоматизации нужно заходить на эту страницу и нажимать кнопки "Check Configuration" и "Reload automations".
То что добавили мы в конфиг создало автоматизацию "automation.first". Можно добавить ее в интерфейс:
Переключался влияет на то включена ли эта автоматизация или выключена. Если ее выключить, то она не будет выполнять свои действия. Иногда бывает удобно вынести некоторые автоматизации в интерфейс, чтобы можно было управлять, работают ли они или нет.
Если кликнуть по названию, то становятся видно когда эта автоматизация последний раз запускалась (в нашем случае она еще ни разу не запускалась), плюс появляется кнопка Execute с помощью которой можно руками запустить эту автоматизацию (это бывает нужно достаточно редко):
На странице Developer Tools -> States http://IP:8123/developer-tools/state можно посмотреть на внутреннее представление этой сущности:
Прямо сейчас у нас есть одна корректная автоматизаци. Давайте попробуем отредактировать эту автоматизацию, написать неправильно и посмотреть что будет. Удаляем все что есть в файле /config/automations.yaml и записываем в него только одну строчку:
- alias: first
Заходим на страницу http://IP:8123/config/server_control и нажимаем на кнопку "Check Configuration". Появляется ошибка:
Configuration invalid
Invalid config for [automation]:
required key not provided @ data['action']. Got None
required key not provided @ data['trigger']. Got None.
(See /config/configuration.yaml, line 13).
Т.е. проверка конфигурации говорит нам что мы неправильно описали автоматизацию. Если внимательно прочитать текст ошибки, то видно что система ругается на две вещи:
Эта два элемента "trigger" и "action" являются обязательными. Их всегда нужно записывать в автоматизации. Но мы когда создали автоматизаци еще указывали "condition".
Возвращаем обратно правильный вариант автоматизации, нажимаем кнопки "Check Configuration" и "Reload automations".
Автоматизация состоит из трех элементов:
Чуть подробнее:
Очень часто автоматизация состоит из trigger и action. Происходит какое-то событие на которое настроен trigger и выполняется то что написано в action. Раздел "condition" тоже часто используется, но есть не всегда.
Редко, но бывают но бывают автоматизации которые состоят только из одного action (trigger и condition пустые). Автоматизация только из action бывает нужна чтобы сделать кнопку в интерфейсе по нажатию на которое выполняется все действия из автоматизации.
Дальше мы рассмотрим все эти элементы автоматизации подробно, но в другом порядке.
То что описывается в разделе "action" — это самое главное зачем вообще создается автоматизация. В этом разделе записывается какое действие нужно выполнить.
Например, это может быть:
Давайте создадим новые автоматизации, которые управляют светом.
У меня в Home Assistant заведена настолько лампа Xiaomi. В HA она называется light.lamp.
Добавляем в файл /config/automations.yaml
- alias: light_bright
trigger:
condition:
action:
- service: light.turn_on
data:
entity_id: light.lamp
brightness: 100
- alias: light_dim
trigger:
condition:
action:
- service: light.turn_on
data:
entity_id: light.lamp
brightness: 1
Добавляем автоматизации в интерфейс:
Заходим в автоматизацию automation.light_bright и нажимаем на кнопку Execute:
Результат — свет включился на полную яркость. Заходим в автоматизацию automation.light_dim, нажимаем кнопку Execute — яркость света стала минимальная.
В веб интерфейсе Home Assistant есть инструмент Developer Tools -> Services http://IP:8123/developer-tools/service.
Очень удобно сначала отработать то что хочется запустить сначала в этом инструменте, а потом перенести получившиеся настройки в конфигурационный файл с автоматизациями. То что выбрано в интерфейсе в ниспадающем списке Services нужно записать после "services:", а то что находится в "Service Data" нужно разместить после "data:". (то что записано в поле Entity никуда переносить не нужно, так как это же информация содержится в поле "Service Data").
Иногда хочется выполнить несколько действий в одной автоматизации. Вот пример. При выполнении этой автоматизации сначала включается лампа light.lamp, а после нее тут же включается light.led:
- alias: light_bright
trigger:
condition:
action:
- service: light.turn_on
data:
entity_id: light.lamp
brightness: 100
- service: light.turn_on
data:
entity_id: light.led
brightness: 100
Можно указать более чем два действия.
Иногда хочется сделать несколько действий, но с паузой между ними. Вот пример:
- alias: light_bright
trigger:
condition:
action:
- service: light.turn_on
data:
entity_id: light.lamp
brightness: 100
- delay: 00:00:05
- service: light.turn_on
data:
entity_id: light.led
brightness: 100
При выполнении этой автоматизации сначала включается light.lamp, а через 5 секунд включается light.led.
Строка "- delay: 00:00:05" говорит HA что нужно сделать паузу в 5 секунд. (Текст с рассказом про разные форматы времени в HA).
Значение action можно записывать в двух форматах. Полная форма, указывается service, а все данные указываются в data:
action:
- service: light.turn_on
data:
entity_id: light.lamp
Но когда в data есть только entity_id, то удобнее использовать сокращенную форму. В этом случае data не нужна, entity_id указывается на том же уровне что и service:
action:
- service: light.turn_on
entity_id: light.lamp
И в том случае если в action выполняется только одно действие, можно записывать без использования массива:
action:
service: light.turn_on
entity_id: light.lamp
В разделе trigger описывается что должно произойти что чтобы запустилась автоматизация.
Несколько примеров что может являться триггером:
Вот пример автоматизации которая включает свет по нажатии кнопку (свет включен — нажатие кнопки его выключит, свет выключен — включает):
- alias: turn_light_on_on_button_press
trigger:
platform: state
entity_id: sensor.0x000d6ffffe02333d_action
to: 'toggle'
action:
service: light.toggle
entity_id: light.0x086bd7fffe03d84e_light
А вот как включить вентилятор в ванной когда влажность стала больше 50%:
- alias: turn_bathroom_fan_on
trigger:
platform: numeric_state
entity_id: sensor.0x00158d0002f3cd3c_humidity
above: 50
action:
service: switch.turn_on
entity_id: switch.bathroom_fan
Это автоматизация включит вентилятор, но если оставить только одну эту автоматизацию, то вентилятор никогда не выключится. Нужно создать еще одну автоматизацию в пару к этой:
- alias: turn_bathroom_fan_off
trigger:
platform: numeric_state
entity_id: sensor.0x00158d0002f3cd3c_humidity
below: 40
action:
service: switch.turn_off
entity_id: switch.bathroom_fan
В trigger обязательно указывается platform. В зависимости от того какая платформа указана триггер запускает автоматизацию на разные действия. В предыдущих примерах мы использовали две разные platform:
Есть еще много других platform, вот некоторые из них:
Вот пример как можно автоматически включать свет когда зашло солнце:
- alias: turn_light_on_sunset
trigger:
platform: state
entity_id: sun.sun
to: below_horizon
action:
service: light.turn_on
entity_id: light.lamp
В данной автоматизации в триггере используется платформа state. Свет включается когда статус сущности "sun.sun" стал "below_horizon". Можно сделать автоматизацию которая делает то же самое с помощью платформы "sun":
- alias: turn_light_on_sunset
trigger:
platform: sun
event: sunset
action:
service: light.turn_on
entity_id: light.lamp
А можно просто сказать Home Assistant чтобы он включал свет в 7 часов вечера:
- alias: turn_light
trigger:
platform: time
at: "19:00:00"
action:
service: light.turn_on
entity_id: light.lamp
Лучше привязывать включение света не к определенному времени, а к положению солнца, так как в разные дни темно становится в разное время. Платформе sun можно указать что нужно запускать автоматизацию за какое-то количество минут до заката. Вот как включать свет за 10 минут до заката:
- alias: turn_light
trigger:
platform: sun
event: sunset
offset: "-00:10:00"
action:
service: light.turn_on
entity_id: light.lamp
Но еще лучше установить специальный датчик освещенности и включать свет по данным с него.
В разделе trigger можно указать несколько разных триггеров. Автоматизация запустится при выполнении любого из них. Вот автоматизация которая всегда включает вентилятор в ванной комнате ночью или если влажность в ванной комнате больше 50%:
- alias: turn_bathroom_fan_on
trigger:
- platform: numeric_state
entity_id: sensor.0x00158d0002f3cd3c_humidity
above: 50
- platform: time
at: "03:00:00"
action:
service: switch.turn_on
entity_id: switch.bathroom_fan
В разделе condition записываются дополнительные условия которые необходимы для запуска автоматизации.
Возникает резонный вопрос. А зачем это? Разве недостаточно одного триггера? Оказывается, в некоторых ситуациях только одним триггером не обойтись.
Вот пример автоматизации уличного света на даче. Нужно чтобы уличный свет включался когда кто-то есть на даче и на улице темно. Вот как это сделано у меня:
- alias: turn_outdoor_lights_on
trigger:
- platform: state
entity_id: binary_sensor.somebody_at_dacha
to: 'on'
- platform: time_pattern
minutes: "/5"
condition:
- condition: template
value_template: '{{ state_attr("sun.sun", "elevation") < 3 }}'
- condition: state
entity_id: switch.outdoor_lights
state: 'off'
action:
service: switch.turn_on
entity_id: switch.outdoor_lights
Эта автоматизация запускается когда кто-то приехал на дачу (сенсор binary_sensor.somebody_at_dacha переходит в статус 'on'), плюс эта автоматизация запускается каждые 5 минут.
В condition проверяем что уличный свет выключен и что солнце низко. Только если оба эти условия совпадают, то включается уличный свет.
22 апреля 2020
Кстати, у меня есть телеграм канал про Home Assistant: https://t.me/bessarabov_ha
|