Найти в Дзене
Home Assistant Club

Автоматизации в Home Assistant: полное практическое руководство

Автоматизация — это основной функционал, который превращает набор разрозненных умных устройств в единую, слаженно работающую систему. Эта статья — подробное руководство по созданию автоматизаций в Home Assistant, от базовых понятий до продвинутых практик организации кода. Любая автоматизация состоит из трёх фундаментальных частей: Эту логику можно выразить так: Когда [Триггер] → И если [Условия] истинны → Тогда выполнить [Действия]. В Home Assistant существует два основных подхода: через графический интерфейс и через YAML-конфигурации. Интерфейс идеален для новичков и простых сценариев. Находится в Настройки → Автоматизации и сцены. Он интуитивно понятен: вы добавляете триггеры, условия и действия, выбирая сущности и сервисы из выпадающих списков. Для сложных, массовых или легко переносимых автоматизаций предпочтительнее использовать YAML. Это текстовый формат, который даёт полный контроль над логикой. Автоматизации на YAML можно описывать: Пример структуры в configuration.yam
Оглавление

Автоматизация — это основной функционал, который превращает набор разрозненных умных устройств в единую, слаженно работающую систему. Эта статья — подробное руководство по созданию автоматизаций в Home Assistant, от базовых понятий до продвинутых практик организации кода.

Основные компоненты автоматизации

Любая автоматизация состоит из трёх фундаментальных частей:

  1. Триггер (Trigger) — событие, запускающее автоматизацию. Примеры: срабатывание датчика, изменение состояния устройства, наступление определённого времени.
  2. Условие (Condition) — проверки, которые должны быть истинны для выполнения действий. Условия делают автоматизацию контекстно-зависимой. Пример: "и если сейчас ночь", "и если никого нет дома".
  3. Действие (Action) — конкретные операции, которые выполняет система. Пример: включить свет, отправить уведомление, установить температуру.

Эту логику можно выразить так: Когда [Триггер] → И если [Условия] истинны → Тогда выполнить [Действия].

Способы создания автоматизаций

В Home Assistant существует два основных подхода: через графический интерфейс и через YAML-конфигурации.

  • Графический интерфейс (UI)

Интерфейс идеален для новичков и простых сценариев. Находится в Настройки → Автоматизации и сцены. Он интуитивно понятен: вы добавляете триггеры, условия и действия, выбирая сущности и сервисы из выпадающих списков.

  • YAML-конфигурация

Для сложных, массовых или легко переносимых автоматизаций предпочтительнее использовать YAML. Это текстовый формат, который даёт полный контроль над логикой.

Автоматизации на YAML можно описывать:

  • В одном файле automations.yaml с последующим включением его в configuration.yaml.
  • В отдельных файлах .yaml внутри папки package/ (рекомендуемый способ для организации сложных конфигураций).

Пример структуры в configuration.yaml для использования отдельного файла:

automation: !include automations.yaml

Детальный разбор компонентов автоматизации

Триггеры: больше, чем просто датчик движения

Помимо базовых триггеров состояния (state) и времени (time), полезно знать о других типах:

Триггер по шаблону (pattern):

trigger:
- platform: pattern
pattern: "binary_sensor.(.*)_motion" # Сработает для ЛЮБОГО датчика движения
to: "on"

Триггер по событию (event):

trigger:
- platform: event
event_type: mobile_app_notification_action
event_data:
action: "TURN_ON_LIVING_ROOM"
# Позволяет запускать автоматизации из мобильного приложения

Триггер по геолакации (zone) :

trigger:
- platform: zone
entity_id: person.user_1
zone: zone.home
event: enter # Или "leave"

Триггер по MQTT:

trigger:
- platform: mqtt
topic: "home/bedroom/light/state"
payload: "on"

Условия: тонкая настройка логики

Условия могут проверять не только состояния, но и шаблоны, время и даже выполнять шаблонные выражения.

Проверка нескольких состояний через И/ИЛИ:

condition:
 - condition: or # Хотя бы одно из условий должно быть истинно
  conditions:
   - condition: state
    entity_id: input_boolean.guest_mode
    state: "on"
   - condition: state
    entity_id: input_boolean.vacation_mode
    state: "on"

Условие на основе шаблона (template):

condition:
 - condition: template
  value_template: >-
   {{ states('sensor.temperature') | float > 25 
   and states('binary_sensor.window') == 'on' 
   and states('climate.ac') == 'off' }}
# Проверяет сложное условие: жарко, окно открыто, но кондиционер выключен

Проверка по времени:

condition:
 - condition: time
  after: "09:00:00"
  before: "18:00:00"
  weekday:
   - mon
   - tue
   - wed
   - thu
   - fri
# Только в рабочие часы по будням

Действия: не только включить/выключить

Вызов сервиса с динамическими данными:

action:
 - service: light.turn_on
  target:
   entity_id: light.living_room
  data:
   brightness_pct: >-
    {% if states('sensor.outside_illuminance') | int < 50 %}
     80
    {% else %}
     40
    {% endif %}
   color_temp: 370
# Яркость зависит от уличной освещённости

Условные действия (choose):

action:
 - choose:
   - conditions:
     - condition: numeric_state
      entity_id: sensor.temperature
      above: 25
    sequence:
     - service: climate.set_temperature
      target:
       entity_id: climate.ac
      data:
       temperature: 23
   - conditions:
     - condition: numeric_state
      entity_id: sensor.temperature
      below: 18
    sequence:
     - service: climate.set_temperature
      target:
       entity_id: climate.heater
      data:
       temperature: 21
  default:
   - service: climate.turn_off
    target:
     entity_id: climate.ac, climate.heater

Параллельное выполнение действий:

action:
 - parallel:
   - service: light.turn_on
    target:
     entity_id: light.kitchen
   - service: media_player.volume_set
    target:
     entity_id: media_player.kitchen_speaker
    data:
     volume_level: 0.7
   - delay: "00:00:05"
   - service: tts.speak
    target:
     entity_id: media_player.kitchen_speaker
    data:
     message: "Завтрак готов"
# Все действия выполняются одновременно, кроме задержки

Продвинутые техники автоматизации

Использование переменных (variables)

Переменные позволяют сохранять значения для повторного использования в рамках одной автоматизации.

- alias: "Умное уведомление об окнах"
 id: smart_window_notification
 variables:
  open_windows: >-
   {% set windows = namespace(list=[]) %}
   {% for state in states.binary_sensor %}
    {% if "window" in state.entity_id and state.state == "on" %}
     {% set windows.list = windows.list + [state.name] %}
    {% endif %}
   {% endfor %}
   {{ windows.list | join(", ") }}
 trigger:
  - platform: time
   at: "23:00:00"
 condition:
  - condition: template
   value_template: "{{ open_windows != '' }}"
 action:
  - service: notify.mobile_app_phone
   data:
    message: "На ночь открыты окна: {{ open_windows }}"

Режимы работы автоматизаций (mode)

Параметр mode определяет поведение автоматизации при повторном срабатывании триггера до завершения предыдущего запуска.

- alias: "Обработка множественных нажатий кнопки"
 id: button_multiple_press
 mode: queued # Выполняет действия последовательно для каждого срабатывания
 max: 10 # Ограничивает очередь до 10 выполнения
 trigger:
  - platform: event
   event_type: deconz_event
   event_data:
    id: living_room_button
    event: 1002 # Двойное нажатие
 action:
  - service: script.handle_double_press
   data:
    button_id: "{{ trigger.event.data.id }}"

Доступные режимы:

  • single (по умолчанию) — очередной запуск отменяет предыдущий
  • restart — перезапускает автоматизацию с начала
  • queued — ставит в очередь, выполняет последовательно
  • parallel — выполняет все запуски параллельно

Шаблоны (templates) в автоматизациях

Шаблоны позволяют использовать динамические значения практически в любой части автоматизации.

Динамический target в действиях:

action:
 - service: light.turn_on
  target:
   entity_id: >-
    {% if trigger.event.data.action == "bedroom" %}
     light.bedroom
    {% else %}
     light.living_room
    {% endif %}

Работа с датой и временем:

variables:
 sunset_offset: >-
  {% if now().month in [11, 12, 1, 2] %} {# Зимние месяцы #}
   "00:45:00"
  {% else %}
   "00:30:00"
  {% endif %}
trigger:
 - platform: sun
  event: sunset
  offset: "{{ sunset_offset }}"

Организация сложных конфигураций

Структура через packages

Рекомендуемая структура для проектов средней и высокой сложности:

config/

├── configuration.yaml
├── automations/
│  ├── lighting.yaml
│  ├── security.yaml
│  └── climate.yaml
├── scripts/
│  └── scripts.yaml
└── packages/
  ├── user_interface.yaml
  └── advanced_automations.yaml

В configuration.yaml:

automation: !include_dir_merge_list automations/
script: !include_dir_merge_list scripts/
homeassistant:
 packages: !include_dir_merge_named packages/

Пример пакета для управления освещением

packages/lighting.yaml:

# Пакет автоматизаций для освещения
# Автоматизации
automation:
 - alias: "Автовыключение света в пустых комнатах"
  id: light_auto_off_empty_room
  trigger:
   - platform: state
    entity_id: binary_sensor.living_room_motion
    to: "off"
    for: "00:05:00"
  condition:
   - condition: state
    entity_id: light.living_room
    state: "on"
  action:
   - service: light.turn_off
    target:
     entity_id: light.living_room
# Сценарии освещения
script:
 evening_scene:
  alias: "Вечерняя сцена"
  sequence:
   - service: light.turn_on
    target:
     entity_id: light.living_room
    data:
     brightness_pct: 60
     color_temp: 320
# Input для ручного управления
input_boolean:
 auto_lighting:
  name: "Автоматическое освещение"
  initial: on
# Группа для быстрого доступа
group:
 lighting_control:
  name: "Управление освещением"
  entities:
   - input_boolean.auto_lighting
   - script.evening_scene

Отладка и мониторинг

Расширенное логирование

logger:
 logs:
  homeassistant.components.automation: debug
  homeassistant.core: info
 default: warning

Инструменты разработчика

1. Шаблоны — в Настройки → Инструменты → Шаблоны можно тестировать шаблонные выражения

2. Состояния — в Настройки → Инструменты → Состояния можно отслеживать изменения сущностей

3. События — в Настройки → Инструменты → События можно отслеживать системные события

Сервисы для управления автоматизациями

# Включить/выключить автоматизацию
- service: automation.turn_on
 target:
  entity_id: automation.corridor_light_motion
# Перезагрузить все автоматизации
- service: automation.reload
# Включить отладку конкретной автоматизации
- service: automation.toggle
 target:
  entity_id: automation.corridor_light_motion
 data:
  stop_actions: true # Останавливает выполняющиеся действия

Производительность и оптимизация

Избегайте ресурсоёмких триггеров

Плохо:

trigger:
 - platform: state
  entity_id: sensor.weather_temperature # Меняется очень часто

Лучше:

trigger:
 - platform: numeric_state
  entity_id: sensor.weather_temperature
  above: 25
  # Срабатывает только при значительных изменениях

Оптимизация шаблонов

Плохо:

condition:
 - condition: template
  value_template: >-
   {{ states("sensor.temperature_1") | float > 20 
   or states("sensor.temperature_2") | float > 20 
   or states("sensor.temperature_3") | float > 20 }}

Лучше:

condition:
 - condition: template
  value_template: >-
   {% for sensor in [
    "sensor.temperature_1",
    "sensor.temperature_2", 
    "sensor.temperature_3"
   ] %}
    {% if states(sensor) | float > 20 %}
     {{ true }}
    {% endif %}
   {% endfor %}

Интеграция с внешним системами

Webhook-автоматизации

- alias: "Обработка webhook из IFTTT"
 id: ifttt_webhook_handler
 trigger:
  - platform: webhook
   webhook_id: "my_secret_webhook"
 action:
  - service: script.handle_external_event
   data:
    source: "ifttt"
    payload: "{{ trigger.json }}"

REST API команды

action:
 - service: rest_command.send_telegram
  data:
   message: "Автоматизация выполнена: {{ automation_name }}"
# В configuration.yaml
rest_command:
 send_telegram:
  url: "https://api.telegram.org/bot{{ token }}/sendMessage"
  method: POST
  content_type: "application/json"
  payload: '{"chat_id": "{{ chat_id }}", "text": "{{ message }}"}'

Заключение

Автоматизации в Home Assistant — это мощный инструмент, который эволюционирует вместе с вашими потребностями. Начиная с простых сценариев и постепенно осваивая продвинутые техники, вы сможете создавать сложные, взаимосвязанные системы, которые действительно упрощают жизнь.

Ключевые принципы успешной автоматизации:

  • Модульность — разбивайте сложные сценарии на простые компоненты
  • Документирование — комментарии и понятные имена экономят время при отладке
  • Оптимизация — избегайте ресурсоёмких операций в часто выполняемом коде
  • Тестирование — используйте инструменты разработчика для проверки логики
  • Организация — правильная структура файлов упрощает поддержку проекта

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

Друзья, регистрируйтесь на нашем форуме - homeassistantclub.ru Давайте вместе создавать русскоязычное сообщество Home Assistant.