Статья

Home Assistant, статья 5 (автоматизации)

ОГЛАВЛЕНИЕ:Cтатья 1 (установка)
Cтатья 2 (базовая настройка)
Cтатья 3 (добавляем устройства)
Cтатья 4 (интеграция с HomeKit)
Статья 5 (автоматизации)Статья 6 (GUI)Статья 7 (Z-Wave)Статья 8 (MQTT)Статья 9 (HTTPS, SSL)

Введение

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

Подключаем файл automations.yaml

Изначально все необходимые действия с настройками и добавлением устройств, автоматизаций, групп и прочего можно делать в стандартном файле конфигурации configuration.yaml, но для удобства, мы будем делать все действия с автоматизациями в файле automations.yaml. Для начала подключаемся к малине по ssh, идем в настройки HA:

bash
Копировать
cd /home/homeassistant/.homeassistant/
sudo nano configuration.yaml

Ищем в конфиге следующую строчку, написана она должна быть именно так, без знака # перед ней:

yaml
Копировать
automation: !include automations.yaml

Если строчки по какой-то причине нет - добавляем ее, но так может быть только, если вы ее зачем-то сами удалили. Сохраняем файл и выходим из редактора. После можно уже открыть файл с автоматизациями и приступить к ее наполнению:

sudo nano automations.yaml

bash
Копировать
sudo nano automations.yaml

Вернемся немного в прошлое 

Если вы читали статью 4 из оглавления в начале, то частично имеете представление об автоматизациях. Там мы рассматривали возможность отложенного запуска бриджа для интеграции в HomeKit. Рассмотрим этот пример еще раз и разберем для лучшего понимания:

yaml
Копировать
- alias: 'HomeKit Delayed Start'
  trigger:
    - platform: homeassistant
      event: start
  action:
    - delay: 00:01
    - service: homekit.start
  • alias: это название автоматизации. Отсюда HA берет entity_id для нее, кириллицу лучше не использовать
  • trigger: это условие, которое заставляет автоматизацию сработать. В данном примере это событие запуска HA
  • action: это действие, которое будет совершено автоматизацией. Тут это отложенный запуск плагина HomeKit

Более полный пример

Вообще автоматизации в основном имеют такой скелет:

  • trigger как мы ранее говорили - действе которое запускает автоматизацию
  • condition это условие, исполнение которого необходимо для автоматизации
  • action ну и действие которое выполняется автоматизацией

Например:

yaml
Копировать
- alias: Temperature heater 24 on morning
  trigger:
    platform: time
    at: '06:30:00'
  condition:
    condition: state
    entity_id: group.devices
    state: home
  action:
    - service: climate.set_temperature
      data_template:
        entity_id: climate.ariston
        temperature: "24"

Trigger. В данном примере тригером является определенное значение времени, а именно 6:30 утра. Именно во столько должна сработать автоматизацияCondition. Условием выполнения автоматизации является проверка значения группы devices. Оно может принимать значение home или not_home.Action. Ну и наконец действие - установка на термостате необходимой температуры в 24 градуса.

Пример посложнее

Вариантов, как использовать автоматизации очень и очень много и перечислить все в рамках этой статьи я не смогу, но покажу кое-что, что я использую. Вот более сложный пример:

# Включение света в ванной ночью и днем - alias: Turn on bathroom light trigger: platform: state entity_id: binary_sensor.motion_sensor_158d0001b177e8 to: 'on' action: - service: light.turn_on data_template: entity_id: light.bathroom brightness_pct: > {% if is_state('sun.sun', 'below_horizon') and is_state('light.living_room', 'off') %} 1 {% else %} 100 {% endif %}

yaml
Копировать
# Включение света в ванной ночью и днем 
- alias: Turn on bathroom light
  trigger:
    platform: state
    entity_id: binary_sensor.motion_sensor_158d0001b177e8
    to: 'on'
  action:
    - service: light.turn_on
      data_template:
        entity_id: light.bathroom
        brightness_pct: >
          {% if is_state('sun.sun', 'below_horizon') and is_state('light.living_room', 'off') %}
            1
          {% else %}
            100
          {% endif %}

Это автоматизация с условием включения света в ванной на 1 процент ночью, если выключен ночник в зале (это обычно значит, что я сплю) и на 100 процентов в остальных случаях (всегда днем или вечером, если включен ночник). Разберем подробнее:

  • platform: state это значит что в тригере мы будем отслеживать значение состояния нужного нам датчика
  • entity_id: binary_sensor.motion_sensor_158d0001b177e8 это название датчика взятое из списка всех устройств на соответствующей странице, чуть ниже покажу, где его можно взять.
  • to: 'on' задаем значение, при котором должен сработать тригер

Теперь о entity_id и где его можно посмотреть. В веб версии необходимо найти слева раздел "Инструменты разработчика" и нажать на кнопку "состояния":

Справа вы увидите таблицу со всеми вашими устройствами и не только, в первой колонке которой и будет перечень entity_id:

Далее разберем секцию action: более подробно:

  • service: light.turn_on указываем какое действие мы хотим сделать при срабатывании тригера
  • data_template: тут мы говорим, что будем использовать далее компонент HA "шаблон", что это такое можно почитать в офф документации HA тут
  • entity_id: light.bathroom поясняем каким именно устройством мы хотим управлять
  • brightness_pct: > указываем, какой параметр у устройства мы хотим изменить (Внимание! В коде вместо ">" надо писать именно знак >) в данном случае это яркость в процентах

Далее нам надо будет познать немного программирования.

Что если тогда?

Что за набор букв и символов, подумаете вы:

yaml
Копировать
{% if is_state('sun.sun', 'below_horizon') and is_state('light.living_room', 'off') %}
  1
{% else %}
  100
{% endif %}

На самом деле тут все просто. 

  • {% %} этими фигурными скобками мы обозначаем, что начинаем использовать шаблон
  • if это, как можно понять с перевода на русский язык, использование логического "если"
  • is_state('sun.sun', 'below_horizon') тут мы проверяем состояние устройства sun.sun (да есть и такое!), а точнее что оно равно below_horizon то есть "за горизонтом"
  • and а это у нас логическое "и", указывающее что должны выполняться первое условие и второе:
  • is_state('light.living_room', 'off') где мы проверяем, какое значение у устройства light.living_room и в нашем случае оно должно быть off или "выключено"

Ну ладно не просто, но и ничего сложного в этом нет.) 

1 тут мы указываем значение, которое будет задаваться в brightness_pct при выполнении нашего "если"
{% else %} тут у нас логическое "иначе" после которого:
100 указываем иное значение которое будем передавать в brightness_pct
{% endif %} и тут закрываем наш шаблон с логикой.

Проверка на вшивость

После всех правок файла с автоматизациями можно очень просто их проверить. Для начала заходим в веб морде HA в "Настройки" - "Общие" - "Проверить конфигурацию", и если ошибок в конфиге нет - жмем на кнопку "Перезагрузить автоматизации": 

Далее идем на страничку с entity_id как мы делали немного выше, находим там нашу автоматизацию в списке и жмем на кнопку слева от нее, после чего жмем на кнопку "Запуск":

Если все сделали правильно - автоматизация сработает и вы это увидите. Ура! У вас получилось!

Вместо послесловия

Мы в данной статье рассмотрели только крохотную толику разных типов автоматизаций и приводить все их мне просто не хочется, дабы не перегружать и без того сложноватую статью. Если будет интерес, я напишу отдельную, где поделюсь остальными своими примерами без такого подробного разжевывания и пояснения, но с комментариями. Спасибо всем за внимание!


Как всегда великолепнейший материал ;) твой верный подписчик очень доволен ))))

отлично

  • круто

спасибо 

статья понравилась.Все доступно описано. Спасибо)

Спасибо! Отличный материал, мотивирует настроить ХА у себя :-)

ОХОТНИК молодца! Своими статьями про Home Assistant мотивирует изучать УД с лёгким входом в тему!

Ну очень доходчиво объяснил, я аж уже захотел себе ХА поставить. Буду ждать дальнейших статей. 

Спасибо за статью Александр! По прочтению у меня появился ряд вопросов:


Устройство сценариев понятно: триггер,  условие и действие, оно довольно стандартно. Но мне не понятно, где я могу посмотреть все возможные "platform" для триггера, где посмотреть значения "to" у срабатываемых датчиков, там же может быть не "off/on" а например "true/false" или что либо еще? Вообще где можно посмотреть какие параметры есть у того или иного датчика, например, если взять ваш код, откуда вы взяли название параметра "brightness_pct"? Тот же вопрос про "- service: light.turn_on" и "- service: climate.set_temperature" откуда берутся эти обьекты? Автоматически прописываются при привязке того или иного устройства, или подобные категории устройств надо создавать самому? И где вообще посмотреть какие "service"  доступны в моем HA?


Спасибо

У существующих устройств можно посмотреть в разделе инструменты разработчика - службы и там в в выпадающем списке они будут перечисленны для всех существующих объектов, либо, если есть знания английского языка - пойти на офф сайт ХА и почитать документацию по автоматизациям и возможным состояниям датчика.

Александр, здравствуйте, у меня есть кубик от сяоми, который определился как binary_sensor.cube, но его нет в выпадающем меню. На офф сайте ХА в разделе Integrations вообще нет поддержки сяоми. Объясните, пожалуйста, как с этим работать?

Особо не пинайте, я тут новенький во всем. Вопрос вот в чем, есть HA и выключатель aqara, могу ли я задать чтобы свет загорался только на "n" процентов и можно ли это сделать с обычными лампами или нужны какие то особые?

Светильник должен быть с диммированием(регулировкой).

привет. все круто, спасибо.  автоматизация работает, если перезапустить НА. Срабатывает один раз. потом не работает, хотя датчик движение отслеживает. если на прямую запускать из списка 

entity_id , то все работает. В чем может быть проблема?

На самом деле проблема в том, что датчик движения отваливается. После перезагрузки НА датчик срабатывает один-два раза и больше не меняет значение "off" на "on". Хотя в родном приложении сценарии отрабатывает. У кого нибудь отваливались датчики от НА? не могу понять, в чем проблема!

Не пойму зачем делать всё это в линуксе, когда в HA есть раздел автоматизации?


Вернуться назад
Вернуться назад