Практичные сцены и автоматизации для Zigbee в Home Assistant
Чтобы Zigbee-управление в Home Assistant работало быстро и стабильно, держите простое правило: сцены описывают “как должно быть”, автоматизации решают “когда срабатывать”, скрипты хранят переиспользуемую логику, а для критичных кнопок света по возможности используйте Zigbee binding/группы (мгновенно и переживает падение HA).
Оглавление
Что делать сценами, а что автоматизациями
Сцена — это “снимок целевых состояний” (яркость, цвет, on/off), а не логика. Поэтому сцена идеальна для режимов вроде “Вечер/Кино/Ночь”, но не должна решать, когда включаться.
Быстрая схема ролей
| Инструмент | Отвечает за | Когда использовать |
|---|---|---|
scene | Целевые состояния | “Сделай как в режиме Кино” |
automation | Триггеры и условия | “Если нажали кнопку/есть движение/после заката” |
script | Переиспользуемые действия | Один и тот же сценарий вызывается из разных мест |
| Zigbee binding/group | Прямое управление | Настенная кнопка → свет должен работать всегда |
Если одна и та же логика дергается кнопкой, голосом и по расписанию — вынесите её в script, а в автоматизациях оставьте только триггеры/условия.
Zigbee-уровень: binding и группы без перегруза сети
Binding полезен там, где задержки недопустимы: коридор, санузел, лестница. Команда идет напрямую от кнопки к лампе/группе, и свет работает даже если Home Assistant перезапускается.
Группы Zigbee (нативные, на уровне сети) могут ускорять массовые команды, но есть компромисс: частые широковещательные изменения яркости/цвета по большой группе иногда создают “шум” в сети.
Не превращайте диммирование/эффекты в “спам”: десятки команд подряд (особенно на 10+ ламп) часто дают рассинхрон и редкие “не применилось”. Лучше сцена/группа + короткие паузы, либо binding для базовых действий.
Надежные шаблоны YAML: кнопки, движение, snapshot/restore
Ниже — минимальные, но устойчивые заготовки. Подставьте свои entity_id/device_id.
1) Статическая сцена (режим света)
scene:
- name: Вечер в гостиной
icon: mdi:weather-night
entities:
light.living_ceiling:
state: "on"
brightness: 90
light.living_lamp:
state: "on"
brightness: 60
switch.living_backlight:
state: "on"
2) Кнопка Zigbee: single/double/hold через choose
Подходит и для ZHA, и для Zigbee2MQTT (важно лишь выбрать корректный device trigger в UI, а ниже — структура действий).
automation:
- id: remote_choose_scenes
alias: "Пульт: single/double/hold → сцены"
mode: restart
trigger:
- platform: device
domain: mqtt
device_id: YOUR_DEVICE_ID
type: action
subtype: single
id: single
- platform: device
domain: mqtt
device_id: YOUR_DEVICE_ID
type: action
subtype: double
id: double
- platform: device
domain: mqtt
device_id: YOUR_DEVICE_ID
type: action
subtype: hold
id: hold
action:
- choose:
- conditions:
- condition: trigger
id: single
sequence:
- service: scene.turn_on
target:
entity_id: scene.vecher_v_gostinoy
data:
transition: 1
- conditions:
- condition: trigger
id: double
sequence:
- service: scene.turn_on
target:
entity_id: scene.kino
- conditions:
- condition: trigger
id: hold
sequence:
- service: light.toggle
target:
entity_id: light.living_ceiling
3) Snapshot/restore: “сделать подсветку и вернуть как было”
Паттерн полезен для движения ночью, дверного звонка, уведомлений цветом.
automation:
- id: motion_snapshot_restore
alias: "Движение: подсветить и восстановить"
mode: restart
trigger:
- platform: state
entity_id: binary_sensor.hall_motion
to: "on"
condition:
- condition: state
entity_id: sun.sun
state: "below_horizon"
action:
- service: scene.create
data:
scene_id: before_hall_motion
snapshot_entities:
- light.hall
- service: light.turn_on
target:
entity_id: light.hall
data:
brightness: 80
- wait_for_trigger:
- platform: state
entity_id: binary_sensor.hall_motion
to: "off"
timeout: "00:02:00"
- delay: "00:00:10"
- service: scene.turn_on
target:
entity_id: scene.before_hall_motion
Для snapshot_entities надежнее перечислять конкретные лампы. Если передать group.*, восстановление может быть “как у группы”, а не как у каждой лампы отдельно.
4) “Дожим” команды, если лампа иногда пропускает включение
script:
ensure_light_on:
alias: "Дожать включение света"
mode: restart
fields:
target_light:
description: "Сущность света (например light.kitchen)"
sequence:
- repeat:
sequence:
- service: light.turn_on
target:
entity_id: "{{ target_light }}"
- delay:
milliseconds: 200
until:
- condition: template
value_template: "{{ is_state(target_light, 'on') }}"
Частые ошибки
- Делать “логику” внутри сцен: сцена должна быть простым набором целевых состояний.
- Оставлять автоматизацию в
mode: singleдля кнопок: быстрые нажатия начнут теряться. - Слать пачки команд без пауз на большую группу ламп (яркость+цвет+вкл): сеть Zigbee и устройства могут не успевать.
- Пытаться “выключить по таймеру” без учета ручного включения: вместо этого используйте snapshot/restore или проверку текущего состояния.
- Смешивать критичное управление светом (коридор) и “умные” условия в одной цепочке: базу лучше отдать в binding, а HA — для дополнительных действий (двойной клик, ночной режим).
FAQ
Нужны ли сцены, если можно просто light.turn_on?
Сцены удобнее, когда один режим включает сразу несколько сущностей и вы хотите единый “пресет” с одинаковыми параметрами и переходом.
Что выбрать для кнопок: restart или queued?
restart — когда важнее последнее нажатие (часто для сцен). queued — когда команды должны выполниться по очереди (полезно, если устройство/сеть “задыхается” от параллельных действий).
Почему иногда свет включается не весь?
Чаще всего причина — слишком много команд подряд (особенно цвет/яркость на группе) или слабая Zigbee-сетка. Упростите действие (сцена/группа), добавьте паузы, сократите количество одновременных изменений.
Можно ли сделать “цикл сцен” одной кнопкой?
Да: используйте helper (input_select/input_number) как указатель текущего режима и переключайте его по кругу, а затем включайте сцену по выбранному значению.
Binding отменяет автоматизации Home Assistant?
Binding работает параллельно: базовые команды кнопки могут идти напрямую на лампу, а Home Assistant — слушать отдельные жесты (например double/hold) и включать сцены/скрипты поверх.