Ошибка Failed to start EZSP layer with status=HOST_FATAL_ERROR

Ошибка Error: Failed to start EZSP layer with status=HOST_FATAL_ERROR. означает, что Zigbee2MQTT не смог запустить слой EZSP - протокол, по которому он обменивается данными с координаторами на чипах Silicon Labs. Zigbee2MQTT при этом не стартует, и устройства Zigbee перестают работать. Самая частая причина - координатор занят другим приложением, обычно интеграцией ZHA (встроенной Zigbee-интеграцией Home Assistant): отключение ZHA решило проблему во всех 4 ветках форума, где это пробовали. Реже виноваты неверный порт или скорость соединения (baudrate) и несоответствие типа адаптера прошивке координатора.

Текст ошибки

Ключевая строка лога выглядит так:

Error: Failed to start EZSP layer with status=HOST_FATAL_ERROR.

Ошибка встречается и с USB-стиками (Nabu Casa SkyConnect, Sonoff Zigbee 3.0 USB Dongle Plus V2, Sonoff Zigbee Dongle-E), и с сетевыми координаторами (SMLIGHT SLZB-06M). В 16 учтенных ветках форума рядом фигурируют и такие строки лога:

  • Error: NCP EZSP protocol version of 12 does not match Host version 13 - на адаптере прошивка с версией EZSP 12, а Zigbee2MQTT ждет версию 13;
  • Error: Cannot discover TCP adapters at this time. Specify valid 'adapter' and 'port' in your configuration. - сетевой координатор не найден, Zigbee2MQTT просит проверить опции adapter и port;
  • Failed to init port with error Error: Error Resource temporarily unavailable Cannot lock port - порт уже открыт другим процессом;
  • Failed to init port with error Error: getaddrinfo ENOTFOUND slzb-06m.local - сетевой координатор не находится по имени хоста;
  • Error: ERROR_WRONG_DIRECTION;
  • taskZB | Client limit has been reached! - так SLZB-06M сообщает о достижении лимита клиентов;
  • Got unexpected response from the API: Service not enabled.

Причины

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

ПричинаВеток форумаЧто проверить
Интеграция ZHA включена и использует тот же координатор4Отключить или удалить ZHA
Порт или baudrate в конфиге не совпадают с адаптером3Путь /dev/serial/by-id и скорость для вашей модели
Тип адаптера (adapter) не совпадает с прошивкой координатора3Чип Texas Instruments (Sonoff ZBDongle-P) - zstack, чипы Silicon Labs (ZBDongle-E, SkyConnect, ZBT-1/2) - ember
Другая виртуальная машина все еще держит стик1Выключить вторую ВМ
На стике прошивка RCP (multiprotocol) вместо NCP1Прошить EmberZNet NCP
MQTT-брокер (сервер, через который Zigbee2MQTT и Home Assistant обмениваются сообщениями) не запущен к моменту старта Zigbee2MQTT1Запустить Mosquitto broker

Решения по порядку проверки

Проверяйте по порядку: сначала то, что помогало чаще всего.

1. Отключите ZHA

ZHA может держать координатор. Работать со стиком может только одно приложение, поэтому Zigbee2MQTT не получает доступ к порту. Документация Zigbee2MQTT советует отключить интеграцию ZHA и перезапустить аддон Zigbee2MQTT. Помогло в 4 ветках из 4.

2. Проверьте порт и baudrate

Сверьте значения port и baudrate с вашей моделью адаптера. Пример из ветки с Sonoff Zigbee 3.0 USB Dongle Plus V2 (в другой ветке для такого же адаптера стояла скорость 230400):

serial:
  port: >-
    /dev/serial/by-id/usb-Itead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_V2_6c8d24a3d973ef11a446dd1e313510fd-if00-port0
  adapter: ember
  baudrate: 115200

Проверка порта и скорости помогла в 4 отчетах из 5 (всего 4 ветки), в одном отчете не помогла.

Как правильно оформить секцию serial, подробно описано в гайде по установке и настройке Zigbee2MQTT в Home Assistant.

3. Прошейте координаторную прошивку

Для драйвера ember нужна прошивка EmberZNet NCP с поддерживаемой версией EZSP, документация Zigbee2MQTT требует EZSP v13. Если на стике стоит роутерная или multiprotocol (RCP) прошивка, причина может быть в ней. Документация описывает случай, когда адаптер прошит роутерной прошивкой вместо координаторной. По отчетам пользователей перепрошивка помогла в 3 случаях, в 3 - не помогла, еще в одном дала частичный результат. На форуме прошивались через сборщик прошивок silabs-firmware-builder и страницу обновления прошивки SkyConnect.

4. Укажите zstack для стиков Texas Instruments

Стикам на чипе Texas Instruments (например, Sonoff ZBDongle-P) нужен драйвер zstack. Указание правильного типа адаптера помогло во всех 3 отчетах из 2 веток:

port: /dev/ttyUSB0
adapter: zstack

5. Выключите вторую виртуальную машину

В одной ветке причиной была вторая виртуальная машина, которая все еще держала стик. После ее выключения проблема ушла.

6. Добавьте legacy-опции перед обновлением

Перед обновлением Zigbee2MQTT до версии 2.0.0 одному пользователю помогло добавление в конфиг опций, отключающих legacy-режимы:

advanced:
  homeassistant_legacy_entity_attributes: false
  homeassistant_legacy_triggers: false
  legacy_api: false
  legacy_availability_payload: false
device_options:
  legacy: false

7. Включите watchdog и расписание повторов

Когда сетевой координатор недоступен, Zigbee2MQTT после 10 неудачных попыток старта прекращает пробовать. Одному пользователю помогло включение watchdog (механизма автоперезапуска аддона) и расписание повторных запусков 1,2,3,4,5,7,10,15,20,30,45,60 в настройках аддона.

8. Переустановите аддоны с нуля

Одному пользователю помогла полная переустановка: удалить аддоны Mosquitto broker и Zigbee2MQTT, установить их заново и выбрать стик на странице первичной настройки (onboarding) Zigbee2MQTT.

Когда Zigbee2MQTT снова запустится, проверьте, что устройства вернулись. Если устройства Zigbee не появляются в Home Assistant, у этой ситуации есть отдельный разбор.

Ошибки MQTT в логе

Строки MQTT в том же логе означают, что не запущен MQTT-брокер. Ищите в логе:

MQTT error: getaddrinfo ENOTFOUND core-mosquitto
MQTT failed to connect, exiting... (getaddrinfo ENOTFOUND core-mosquitto)

В этом случае сначала установите или запустите аддон Mosquitto broker, а уже потом разбирайтесь с EZSP-ошибкой.

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

Здесь собраны приемы, которые на форуме не сработали или остались без подтверждения. Непроверенные можно пробовать после основных решений, а не сработавшие приведены для справки.

Не помогло:

  • опция adapter: ezsp - в одной ветке не помогло, в другой результат неизвестен, а сама опция устарела;
  • перестановка стика в другой USB-порт - в одной ветке не помогло, в другой помогло лишь частично;
  • шаги из связанной задачи форума по TypeError при старте - не помогло в одной ветке;
  • удаление папки zigbee2mqtt целиком, удаление записи Sonoff USB в настройках ВМ и перезагрузка - не помогло.

Результат не подтвержден:

  • установка драйвера Windows CP210x версии 6.7.0.0 для ZBDongle-E с чипом CP2102;
  • замена adapter: ezsp на adapter: ember в секции serial;
  • статические IP-адреса для координатора и Home Assistant с резервированием в роутере;
  • перезагрузка хоста и сверка адреса и порта координатора с конфигом;
  • удаление файла state.json из папки Zigbee2MQTT.

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

Можно ли оставить ZHA, если Zigbee2MQTT работает с тем же координатором?

Нет, ZHA придется отключить или удалить. Координатор обслуживает только одно приложение, и ZHA с Zigbee2MQTT не могут одновременно работать с одним стиком. Документация Zigbee2MQTT советует выключить интеграцию ZHA и перезапустить аддон Zigbee2MQTT.

Что означает строка NCP EZSP protocol version of 12 does not match Host version 13?

Прошивка адаптера работает по версии EZSP 12, а Zigbee2MQTT ждет версию 13. Для драйвера ember документация Zigbee2MQTT требует прошивку с EZSP v13 и пишет, что прошивку адаптера придется обновить. Перепрошивка на координаторную прошивку EmberZNet NCP в целом помогла в 3 отчетах форума, в 3 других не помогла.

Почему ошибка возникла после обновления до Zigbee2MQTT 2.0.0?

В двух ветках про версию 2.0.0 тип адаптера в конфиге не подходил к стику. Помогло указать adapter: zstack для стиков Texas Instruments (3 отчета из этих 2 веток). Одному пользователю помогло и добавление legacy-опций со значением false перед обновлением. Сверьте тип адаптера с чипом стика.

Поможет ли перестановка стика в другой USB-порт?

Вряд ли: в одной ветке форума перенос в другой порт не помог, в другой помог лишь частично. Эта ошибка чаще связана с занятым портом и настройками adapter, port или baudrate, поэтому сначала пройдите чек-лист причин и основные решения.

Что означает Cannot lock port в логе?

Порт координатора уже открыт другим процессом. Строка Failed to init port with error Error: Error Resource temporarily unavailable Cannot lock port встречалась в ветке про переезд на SLZB-06M с ошибкой 502 Bad Gateway, где помогло отключение ZHA. Занять адаптер может и другая виртуальная машина: в одной ветке стик заработал после ее выключения.

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