Ошибка MQTT failed to connect в Zigbee2MQTT

Ошибка MQTT failed to connect, exiting... означает, что Zigbee2MQTT не смог подключиться к MQTT-брокеру и завершил работу сразу после запуска. В ветках форума помогали правки на стороне самого Zigbee2MQTT: настройки MQTT расходились между вкладкой конфигурации аддона (дополнения Home Assistant) и configuration.yaml, либо в конфигурации стояли необязательные строки key и cert. Решения, подтвержденные документацией, - исправить настройки MQTT в configuration.yaml, удалить лишние строки key и cert или оставить в конфигурации только последовательный порт.

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

Проблема проявляется в трех вариантах:

  • аддон Zigbee2MQTT завершается при запуске с ошибкой MQTT failed to connect, exiting..., а в журнале супервизора появляется ошибка Ingress (встроенный доступ к веб-интерфейсу аддона из Home Assistant);
  • Zigbee2MQTT падает после onboarding (первичной настройки), если выбран вариант MQTT с логином и паролем без SSL: аддон ищет файл fullchain.pem;
  • Zigbee2MQTT завершается при старте с этой ошибкой, хотя брокер Mosquitto работает.

В логах при этом встречаются такие строки:

MQTT failed to connect, exiting...
error: z2m: MQTT failed to connect, exiting... (ENOENT: no such file or directory, open 'fullchain.pem')

Вариант с fullchain.pem означает, что Zigbee2MQTT не нашел файл сертификата. В журнале супервизора в одном из вариантов появляется еще и ошибка Ingress:

Ingress error: Cannot connect to host 172.30.33.1:8099 ssl:default [Connect call failed ('172.30.33.1', 8099)]

Про другие неполадки на этапе первичной настройки рассказывает страница onboarding Zigbee2MQTT с недоступными полями.

Причины

Явно названа одна причина, в 1 ветке из 3: настройки MQTT на вкладке конфигурации аддона Zigbee2MQTT не совпадали с configuration.yaml.

ПричинаКак проверитьЧто сделать
Настройки MQTT на вкладке конфигурации аддона не совпадают с configuration.yamlСравнить значения MQTT на вкладке конфигурации аддона и в configuration.yamlИсправить настройки MQTT в configuration.yaml

Что помогло

Каждое из трех решений подтверждено документацией Zigbee2MQTT. Каждое помогло в 1 ветке форума из 1, где его пробовали.

Оставить только последовательный порт

На чистой установке Home Assistant пользователь задал в конфигурации Zigbee2MQTT только последовательный порт, и аддон запустился без ошибки подключения к MQTT. Документация это подтверждает: настройки последовательного порта достаточно для запуска Zigbee2MQTT.

Удалить key и cert из секции mqtt

Пользователь прошел onboarding, выбрал MQTT с логином и паролем без SSL, и Zigbee2MQTT стал падать с ошибкой ENOENT: no such file or directory, open 'fullchain.pem'. Удаление строк key и cert из секции mqtt в configuration.yaml устранило ошибку. По документации пути к SSL/TLS-ключу и сертификату клиента - необязательные опции, по умолчанию ничего не задано (раздел MQTT).

Исправить настройки MQTT в configuration.yaml

В ветке, где причина была установлена, пользователь исправил настройки MQTT в configuration.yaml, и аддон подключился к брокеру. Документация напоминает, что для работы Zigbee2MQTT требуется соединение с MQTT-сервером (раздел MQTT в документации). Базовая настройка аддона и configuration.yaml разобрана в гайде по установке Zigbee2MQTT в Home Assistant.

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

В ветке с ошибкой Ingress пробовали и другие способы, результата они не дали:

  • Убрать подчеркивания из логина и пароля MQTT - не помогло (1 сообщение о неудаче).
  • Оставить в Mosquitto пустой список logins: [] и пускать к MQTT пользователей Home Assistant - не помогло (1 сообщение о неудаче).
  • Переписать configuration.yaml: сервер mqtt://core-mosquitto:1883, опции ca, key и cert с путями к файлам, выключенные legacy-опции homeassistant_legacy_entity_attributes, legacy_api, legacy_availability_payload - не помогло (1 сообщение о неудаче).

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

Почему Zigbee2MQTT не подключается к MQTT, если брокер Mosquitto работает?

В описанных ветках причину находили в настройках самого Zigbee2MQTT, а не в брокере. В ветке, где причина названа, значения на вкладке конфигурации аддона расходились с configuration.yaml, после исправления настроек подключение восстановилось. У другого пользователя Zigbee2MQTT при попытке старта искал файл fullchain.pem, а ошибку устранило удаление строк key и cert из секции mqtt.

Обязательны ли опции key и cert в секции mqtt?

Нет, они необязательны. В документации Zigbee2MQTT пути к SSL/TLS-ключу и сертификату клиента названы опциональными, по умолчанию ничего не задано. Удаление строк key и cert из секции mqtt помогло одному пользователю. Обратный шаг в другой ветке форума - добавление опций ca, key и cert с путями к файлам - ошибку не устранил.

Помогает ли убрать подчеркивания из логина и пароля MQTT?

Нет, в единственной ветке, где это пробовали, не помогло. Один пользователь форума убрал подчеркивания из учетных данных MQTT, но Zigbee2MQTT по-прежнему завершался с ошибкой MQTT failed to connect, exiting.... Вместо этого сверьте совпадение настроек MQTT во вкладке конфигурации аддона и в configuration.yaml, а также лишние опции сертификатов.

Хватит ли одного последовательного порта в конфигурации?

Да, настройки последовательного порта достаточно для запуска. В документации Zigbee2MQTT сказано, что такой конфигурации хватает, чтобы Zigbee2MQTT запустился. На чистой установке Home Assistant пользователь задал в конфигурации аддона только порт, и ошибка подключения к MQTT исчезла.

Что означает Ingress error с адресом 172.30.33.1:8099?

Это ошибка Ingress в журнале супервизора: Home Assistant не смог подключиться к веб-интерфейсу Zigbee2MQTT по адресу 172.30.33.1:8099. В ветке форума она появилась вместе с падением аддона после ошибки MQTT failed to connect, exiting.... Отдельного решения для строки Ingress в ветках не приводили. Искать нужно причину самого падения: настройки MQTT и необязательные строки key и cert, как описано выше.

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