Автоматизация — это основной функционал, который превращает набор разрозненных умных устройств в единую, слаженно работающую систему. Эта статья — подробное руководство по созданию автоматизаций в Home Assistant, от базовых понятий до продвинутых практик организации кода.
Основные компоненты автоматизации
Любая автоматизация состоит из трёх фундаментальных частей:
- Триггер (Trigger) — событие, запускающее автоматизацию. Примеры: срабатывание датчика, изменение состояния устройства, наступление определённого времени.
- Условие (Condition) — проверки, которые должны быть истинны для выполнения действий. Условия делают автоматизацию контекстно-зависимой. Пример: "и если сейчас ночь", "и если никого нет дома".
- Действие (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.