Zigbee2MQTT не видит донгл по /dev/serial/by-id: no such file or directory

При ошибке No such file or directory Zigbee2MQTT или Docker не находит устройство по указанному пути. У одного пользователя форума помогли полный путь к донглу в поле port секции serial и указание типа адаптера в configuration.yaml.

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

В трех ветках форума пользователи столкнулись с такими симптомами:

  • Zigbee2MQTT не стартует после того, как последовательный порт сменили на путь /dev/serial/by-id;
  • донгл не удается добавить в контейнер Zigbee2MQTT, путь к устройству не находится;
  • Zigbee2MQTT не может подключиться к координатору, /dev/ttyUSB0 пропал, и в разделе All hardware не видно ни одного устройства tty.

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

zh:ezsp:ezsp: Connection attempt 4 error: Error: Error: No such file or directory, cannot open /dev/ttyUSB0
Error: Error: No such file or directory, cannot open /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_feb48308ed12ec11a00521c7bd930c07-if00-port0
Error response from daemon: error gathering device information while adding custom device "usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_2e3c30544a4eef11a8e445b3174bec31-if00-port0": no such file or directory

Третья строка - ответ Docker при добавлении устройства в контейнер. Длинные имена Sonoff в ошибках относятся к ITead Sonoff Zigbee 3.0 USB Dongle Plus (ZBDongle-P) на чипе Texas Instruments, его тип адаптера - zstack.

Причины

В одной ветке при добавлении устройства в Docker указали неполный путь. Еще в двух, по одной на каждую версию, участники предполагали сбой конфигурации после удаления аддона из репозитория или потерю распознавания ZB-GW04 на Raspberry Pi.

ПричинаКак проверитьЧто сделать
В Docker указано только имя файла из папки by-idПосмотрите, начинается ли путь к устройству на хосте с /dev/serial/by-id/Указать полный путь при передаче устройства в контейнер
Возможный сбой конфигурации после удаления аддона Zigbee2MQTT из репозиторияПроверьте путь и тип адаптера в configuration.yamlВ этой ветке помогло указать оба значения
Возможная потеря распознавания ZB-GW04 на Raspberry PiПосмотрите, есть ли последовательные устройства tty в All hardwareВ этой ветке помогла перепрошивка ZB-GW04

Что помогло

Начните с проверки configuration.yaml. В двух ветках форума помогли разные решения - настройка пути и типа адаптера в одной и перепрошивка ZB-GW04 в другой; на каждое приходится по одному сообщению об успехе.

Полный путь и тип адаптера в configuration.yaml

После смены порта Zigbee2MQTT удалось запустить с такой секцией serial:

serial:
   port: >-
     /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_feb48308ed12ec11a00521c7bd930c07-if00-port0
   adapter: zstack

Используйте путь своего донгла. Полный путь и тип адаптера показаны и в документации по настройкам адаптера.

Перепрошивка координатора ZB-GW04

При исчезновении /dev/ttyUSB0 и отсутствии tty в All hardware помогла перепрошивка ZB-GW04. Смежная проблема с запуском Zigbee2MQTT относится к SLZB-06 после обновления прошивки.

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

При установке через Docker проверьте передачу устройства с хоста, то есть системы, где работает Docker, в контейнер. В одной ветке предложили заменить короткое имя устройства полным путем; результат остался неизвестным. Пример такой записи:

- /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_2e3c30544a4eef11a8e445b3174bec31-if00-port0:/dev/ttyUSB0

Использование полного пути на хосте подтверждает инструкция Zigbee2MQTT для Docker.

При других сообщениях в логе посмотрите смежные страницы - Failed to connect to the adapter (SRSP - SYS - ping), Failed to start EZSP layer with status=HOST_FATAL_ERROR и запуск без указанного типа адаптера. Базовая настройка донгла и Zigbee2MQTT разобрана в гайде по установке Zigbee2MQTT в Home Assistant.

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

Когда нужно вручную заполнять секцию serial?

Документация рекомендует заполнять serial, если Zigbee2MQTT не определяет адаптер автоматически. При таком сбое запуск прерывается с сообщением USB adapter discovery error (No valid USB adapter found). Specify valid 'adapter' and 'port' in your configuration. Оно прямо просит задать adapter и port в конфигурации. Для этого сообщения есть отдельный разбор ошибки no valid USB adapter found.

Какой тип адаптера указать для Sonoff ZBDongle-P?

Для Sonoff ZBDongle-P нужен zstack. Этот вариант относится к Zigbee 3.0 USB Dongle Plus на чипе Texas Instruments. В документации также перечислены ember, deconz, zigate и zboss. Это допустимые значения для разных адаптеров; выбирать нужно по конкретному устройству. Ошибка при отсутствии настройки разобрана отдельно - запуск без типа адаптера.

Как записать длинный путь, не разрывая конфиг?

Укажите путь одной строкой или используйте свернутое значение YAML с записью port: >-. Второй способ применен в рабочей конфигурации из ветки форума. Сам путь перенесен на следующую строку с отступом. Оба способа относятся к записи значения port в секции serial файла configuration.yaml.

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