Zigbee2MQTT — dongle USB znika po aktualizacji DSM

Notatka dla NAS DS423+ (platforma geminilake), dongle Sonoff ZBDongle-E (układ CP2102, 10c4:ea60 → sterownik cp210x).

Dlaczego to się dzieje

Synology nie dostarcza sterownika cp210x. Aktualizacja DSM zmieniająca kernel nadpisuje /lib/modules i/lub psuje dopasowanie wersji → /dev/ttyUSB0 znika i Z2M nie startuje.

Skąd sterownik

Repo: https://github.com/robertklep/dsm7-usb-serial-drivers Właściwy plik: modules/<platforma>/<wersja-dsm>/cp210x.ko (u Ciebie np. modules/geminilake/dsm-7.2/cp210x.ko).

Trzeba wybrać wersję pasującą do (a) nazwy platformy i (b) wersji DSM. Zły plik = błąd „version magic”.

  • Nazwa platformy — sprawdź poleceniem:

bash

  grep platform_name /etc/synoinfo.conf

(dla DS423+ zwróci geminilake → katalog modules/geminilake/)

  • Wersja DSM / kernela — sprawdź uname -a i wybierz podkatalog dsm-7.x odpowiadający Twojej wersji DSM.

Naprawa po aktualizacji (SSH, jako root/sudo)

# 1. Pobierz sterownik pasujący do platformy i wersji DSM
#    Podmień <platforma> i <wersja-dsm> zgodnie z sekcją "Skąd sterownik"
#    (u Ciebie: geminilake / dsm-7.2)
cd ~
wget 'https://github.com/robertklep/dsm7-usb-serial-drivers/raw/main/modules/<platforma>/<wersja-dsm>/cp210x.ko'
sudo cp cp210x.ko /lib/modules/

# 2. Załaduj moduły (usbserial musi iść pierwszy)
sudo insmod /lib/modules/usbserial.ko 2>/dev/null   # "File exists" = już załadowany, OK
sudo insmod /lib/modules/cp210x.ko                  # "File exists" = już załadowany, OK

# 3. Sprawdź, czy dongle złapał
lsusb -cui | grep -i cp210x        # powinno pokazać: ... cp210x ttyUSB0
ls -l /dev/ttyUSB0                 # węzeł powstał

# 4. Uprawnienia dla kontenera
sudo chmod 666 /dev/ttyUSB0

# 5. ODTWÓRZ kontener (sam restart NIE wystarczy!)
cd /volume2/docker/Configs/zigbee2mqtt
sudo docker compose down
sudo docker compose up -d
sudo docker exec -it zigbee2mqtt ls -l /dev/ttyUSB0   # musi być widoczny w kontenerze
sudo docker compose logs -f zigbee2mqtt               # szukaj "Zigbee2MQTT started!"

Uwagi

  • /dev/serial/by-id/ nie istnieje na Synology (okrojony udev) — to normalne, używamy /dev/ttyUSB0.
  • Kontener trzeba odtworzyć (down + up -d), bo mapowanie urządzenia zapisuje się przy tworzeniu kontenera. Jeśli powstał, gdy /dev/ttyUSB0 jeszcze nie było → w środku będzie „No such file”.
  • W configuration.yaml dla ZBDongle-E: adapter: ember (docelowo; ezsp działa, ale jest przestarzały).

Automatyzacja (żeby wstawało samo po reboocie)

Skrypt /usr/local/etc/rc.d/usb-serial-drivers.sh (chmod +x), sekcja start):

insmod /lib/modules/usbserial.ko
insmod /lib/modules/cp210x.ko
chmod 666 /dev/ttyUSB0
  • Lub zadanie w Harmonogramie zadań (użytkownik root, „przy uruchomieniu”):
insmod /lib/modules/usbserial.ko
insmod /lib/modules/cp210x.ko
chmod 666 /dev/ttyUSB0
sleep 5
docker restart zigbee2mqtt

docker restart na końcu — bo Docker startuje niezależnie i kontener bywa uruchamiany, zanim powstanie /dev/ttyUSB0.

Uwaga na DSM 7.3

Repo sygnalizuje zmiany dla DSM 7.3 — przed aktualizacją sprawdź, czy są już moduły dla geminilake/dsm-7.3, inaczej dongle nie ruszy do czasu ich publikacji.

Dodaj komentarz