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 -ai wybierz podkatalogdsm-7.xodpowiadają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/ttyUSB0jeszcze nie było → w środku będzie „No such file”. - W
configuration.yamldla ZBDongle-E:adapter: ember(docelowo;ezspdział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.