Кнопки и пульты пропали из автоматизаций после Zigbee2MQTT 2.0

После обновления Zigbee2MQTT до версии 2.0 кнопки и пульты нередко выпадают из автоматизаций: сенсоры вида sensor.*_action исчезают, и у устройства в Home Assistant остаются только уровень батареи и качество связи. Причина обычно в том, что Zigbee2MQTT 2.0 заменил старые action-сенсоры на сущности-события (event entities), и прежние триггеры перестают срабатывать. Обычно помогает переписать автоматизацию на новую event-сущность или триггер устройства, а возврат старых сенсоров через опцию legacy_action_sensor - только временный обходной путь.

Как выглядит проблема

Автоматизации на кнопки перестают срабатывать после обновления Zigbee2MQTT (чаще всего до 2.0, реже до 2.6.0) или Home Assistant 2025.1. Варианты симптома:

  • у пульта IKEA TRADFRI 5-button remote нет сенсора _action, автоматизация падает;
  • кнопка IKEA Rodret показывает 0 сущностей, нажатие нельзя выбрать триггером;
  • нажатия видны во фронтенде Zigbee2MQTT, но не доходят до автоматизаций Home Assistant;
  • кнопки Aqara и Xiaomi публикуют ACTION в Zigbee2MQTT, а в Home Assistant после обновления до Z2M 2.0.0 виден только уровень батареи;
  • автоматизации, собранные на blueprint-шаблонах, перестают работать, кнопки в них не находятся;
  • после Zigbee2MQTT 2.6.0 старые потоки Node-RED на Hue dimmer перестают срабатывать;
  • у переключателей нет switch-сущности, длинное нажатие недоступно в редакторе автоматизаций;
  • у переключателей EnOcean PTM 215z нет action-сущности.

Проблема встречается на пультах и кнопках IKEA TRADFRI, Styrbar, Rodret и SYMFONISK, Hue dimmer v1 и v2, Aqara и Xiaomi, SONOFF SNZB-01 и SNZB-01P, SmartThings IM6001-BTP01, EnOcean PTM 215z, Linkoze LKWSZ211.

В ветках форума при этом встречаются такие сообщения об ошибках:

Error in describing trigger: e is undefined
extension with name HommeAssistant already present
Extension with name HomeAssistant already present.

Причины

Главная причина - Zigbee2MQTT 2.0 заменил сенсоры sensor.*_action на сущности-события и новые события действий. Остальные варианты - частные случаи и предположения участников форума.

ПричинаКак проверитьЧто сделать
Zigbee2MQTT 2.0 заменил сенсоры sensor.*_action на сущности-события и новые события действий (5 веток, прямо названа в 2)У устройства нет сенсора sensor.*_action, видны только батарея и качество связиПереписать автоматизацию на event-сущность или временно включить legacy-опцию
Опция legacy action sensor выключена или отсутствует в настройках Home Assistant в Zigbee2MQTT (2 ветки, прямо названа в одной)Проверить секцию homeassistant в configuration.yamlВключить legacy_action_sensor: true (опция устарела, это временная мера)
Действия устройства появляются в Home Assistant только после первого срабатывания каждого из них (1 ветка)Нажать каждую кнопку и обновить список сущностейНайти устройство на вкладке By type и нажать каждое действие один раз
Предположение: обновление Home Assistant 2025.1 изменило способ создания action-сенсоров (без подтверждения)Действия пропали именно после обновления Home Assistant до 2025.1Перейти на blueprint с legacy-действиями (он опирается на устаревшую опцию) или фильтровать пустые action
Предположение: Zigbee2MQTT 2.6.0 заменил события действий на press или hold с именем кнопки (без подтверждения)Посмотреть атрибуты события: event_type и buttonПерестроить логику на два уровня: сначала event_type, затем кнопка

Решения

Основной способ, который описывает документация Zigbee2MQTT, - перейти на сущности-события. Устаревшая опция legacy_action_sensor возвращает старые сенсоры, но она помечена как deprecated, поэтому используйте ее как временную меру. Как устроен configuration.yaml и остальные настройки Zigbee2MQTT, подробно разобрано в руководстве по установке и настройке Zigbee2MQTT.

Переписать автоматизацию на сущность-событие

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

triggers:
  - trigger: state
    entity_id: event.0_living_light_button_plastic_action
    to: null

Конкретное действие отбирают условием value_template: "{{ trigger.to_state.attributes.event_type == 'toggle' }}".

Собрать автоматизацию на триггере устройства

Помогло в 1 ветке из 2, где его пробовали. По документации Zigbee2MQTT действия обнаруживаются Home Assistant как MQTT-триггеры устройства только после того, как устройство сгенерировало их хотя бы один раз. Пример триггера из форума:

domain: mqtt
device_id: (the id is selected automatically when the switch is chosen through visual mode, before chosing to "modify in yaml", using the three dots)
type: action
subtype: single
trigger: device

Вернуть старые сенсоры через legacy-опцию

В configuration.yaml Zigbee2MQTT опцию включают вручную - сработало в 3 ветках из 3, где его пробовали:

homeassistant:
  legacy_action_sensor: true

Тот же переключатель в веб-интерфейсе называется ‘Home Assistant legacy action sensors’. Он помог в 4 ветках из 7, где его пробовали, в 2 не помог. Включение через настройки иногда завершается ошибкой, а документация помечает функцию как устаревшую: “Note that this feature is deprecated and will be removed in the future.”

Включить экспериментальные сущности-события

Отдельная опция включает экспериментальную поддержку event-сущностей - помогла в 1 ветке из 2, где ее пробовали. Документация предупреждает: “Optional: Experimental support for Home Assistant event entities, may break in the future”.

experimental_event_entities: true
legacy_action_sensor: false

Единичные решения

  • Blueprint CrazyCoder zigbee2mqtt_hue_dimmer_v2.yaml с включенными legacy-действиями помог одному пользователю с Hue dimmer (способ опирается на устаревшую опцию).
  • Оставить пустые action-сообщения и отфильтровать их переключателем в автоматизации - сработало в 1 ветке; документация подтверждает, что Zigbee2MQTT отправляет пустой action после отправки действия.
  • Вариант с event-версией действия и вспомогательной сущностью (helper), которая хранит последнее действие, помог в 1 ветке.
  • Найти устройство на вкладке By type и нажать каждое действие один раз - помогло в 1 ветке.
  • В Node-RED после Zigbee2MQTT 2.6.0 один пользователь перестроил поток: первый switch проверяет event_type (press, hold), второй - кнопку (on, up, down, off).

Если не помогло

В одной ветке не сработал метод из связанной темы форума про action events - участник не расписал детали. В другой пользователю предложили прочитать обсуждение в GitHub Zigbee2MQTT, результат неизвестен. В третьей советовали перейти на сущности event._action или включить опцию, которая сохраняет старые sensor._action, но подтверждений этому нет. Частично сработал вариант из еще одной ветки (опять с устаревшей опцией): включить legacy_action_sensor: true вместе с homeassistant_legacy_triggers: true в секции advanced.

Если устройство вообще не появляется в Home Assistant, это отдельная проблема - посмотрите разбор про устройства Zigbee2MQTT, которые не появляются в Home Assistant.

Частые вопросы

Почему нажатия видны в Zigbee2MQTT, но не доходят до Home Assistant?

Чаще всего причина в том, что Zigbee2MQTT 2.0 заменил сенсоры sensor.*_action на сущности-события, и старые триггеры перестали срабатывать. Второй вариант - действия еще ни разу не срабатывали: по документации Zigbee2MQTT они обнаруживаются Home Assistant как MQTT-триггеры устройства только после первого срабатывания. Нажмите каждую кнопку и перепроверьте список сущностей и триггеров. Если само устройство в Home Assistant так и не появилось, сначала разберите проблему с обнаружением устройств.

В какой версии Zigbee2MQTT удалят legacy_action_sensor?

Точная версия в документации не названа. Опция homeassistant.legacy_action_sensor помечена как устаревшая: сказано, что функция будет удалена в будущем, но срок не указан. Поэтому относитесь к ней как к временной мере и не собирайте на ней новые автоматизации - основной путь строится на сущностях-событиях.

Настройка в веб-интерфейсе выдает ошибку - что делать?

Пропишите опцию прямо в configuration.yaml. В ветках форума включение ‘Home Assistant legacy action sensors’ через настройки Zigbee2MQTT иногда завершалось ошибкой вида Extension with name HomeAssistant already present. Вариант с секцией homeassistant и опцией legacy_action_sensor: true в configuration.yaml сработал в 3 ветках из 3 и подтвержден документацией, но опция устаревшая, это временная мера.

Как перевести потоки Node-RED на новые события?

Один пользователь разветвил поток на два уровня. Первый switch проверяет атрибут event_type со значениями press и hold, второй - кнопку: on, up, down или off. Так он перестроил поток после Zigbee2MQTT 2.6.0, и события сущности event.livingroom_dimmer_action снова стали управлять светом. Опыт описан в одной ветке форума и документацией не подтвержден.

У кнопки 0 сущностей - это та же проблема?

Возможно. Кнопка IKEA Rodret после обновления показывала 0 сущностей, и нажатия нельзя было выбрать триггером, причина в ветке не названа. По документации, триггеры устройства обнаруживаются только после первого срабатывания, поэтому нажмите каждую кнопку и обновите список. Если сущности так и не появились, посмотрите разбор случая, когда сущность устройства удалилась и не возвращается.

Андрей Ковалев, редактор. Собирает решения из веток форума Home Assistant и сверяет команды и настройки с официальной документацией.