No /dev/serial/by-id/ entries after latest update

After installing OS 10 and Core 4.5 I’m not seeing any of my USB devices. This is breaking my Z-Wave and Zigbee integrations. I tried reverting to backups but the problem persists even in the backed up versions. Did the latest updates change something in how USB devices are discovered on RPi? I don’t understand why it doesn’t work after the downgrade either.

As it stands now, I’ve gone back up to the newest versions and tried adding the usb: directive to my configuration, but still not seeing my devices. Anyone have any ideas? I found a couple other people who may be facing the same issue, but not seeing anything helpful to resolve the problem yet.

1 Like

I had the same problem today morning when I updated my Raspbian OS. The /dev/serial/by-id directory was gone with the entity in it with the name usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_<device_serial_number>-if00-port0

Quick solution: create a symlink from existing by-path directory entity to the original by-id directory like this:
mkdir -p /dev/serial/by-id && ln -s /dev/serial/by-path/platform-fd500000.pcie-pci-0000\:01\:00.0-usb-0\:1.4\:1.0-port0 /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_<device_serial_number>-if00-port0

Longer story: After some searching and root cause analysis I found nothing what happened exactly within the OS update. Tried different solutions what worked for others (this and this), but unfortunately not for me… So no by-id directory anymore. What I found is a /dev/serial/by-path which contains a cryptic entity, but after some lsusb and dmesg inspection, I found that this is the same Zigbee dongle what was there before in the by-id directory. So I tried to add this new path to the docker-compose.yaml (I am using a containerized version ot HA), but turned out I cannot do this because of the character in the filename ( “:” aka colon character). At the end, I found a simple workaround on a forum with the same docker issue: just create a symlink to hide the cryptic filename. Finally, simply created the missing entity in the by-id directory with a symlink, so I have to change nothing at other places (like docker-compose.yaml or HA settings) related to the dongle device path. Now it works fine again.

PS: If somebody knows what happened exactly with the OS update which changed this default behavior, please write it down.

I got this error two days ago when doing a trivial upgrade of my Debian (running HA supervised).

I found out when the package udev was upgraded to 247.3-7+deb11u2 in bullseye stable, a regression was introduced. It is already reported here:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1035094

Thus, I guess it will be resolved eventually.

I fixed it by changing the path in zigbee2mqtt configuration to /dev/ttyUSB0. It is not an optimal solution but works as long as the device number is not changed.

2 Likes

I also just ran into this after updating Debian… I found this post: Reddit - Dive into anything which helped resolve it after making the mentioned changes and rebooting my system.

1 Like

Had this exact same problems and was able to resolve it, thanks to your link!

hello having exactly same problem. I did sucesfully got back symlink by modifying /usr/lib/udev/rules.d/60-serial.rules however the Sonoff Zigbee dongle still does not work in HA - zigbee2mqtt

The error message I get is quite generic
Zigbee2MQTT:error 2023-07-17 20:43:33: Error while starting zigbee-herdsman
Zigbee2MQTT:error 2023-07-17 20:43:33: Failed to start zigbee
Zigbee2MQTT:error 2023-07-17 20:43:33: Check Zigbee2MQTT fails to start | Zigbee2MQTT for possible solutions
Zigbee2MQTT:error 2023-07-17 20:43:33: Exiting…
Zigbee2MQTT:error 2023-07-17 20:43:34: SyntaxError: Unexpected token in JSON at position 0
at JSON.parse ()
at Function.open (/app/node_modules/zigbee-herdsman/src/controller/database.ts:19:35)
at Controller.start (/app/node_modules/zigbee-herdsman/src/controller/controller.ts:125:34)
at Zigbee.start (/app/lib/zigbee.ts:58:47)
at Controller.start (/app/lib/controller.ts:101:27)
at start (/app/index.js:109:5)

This is what I have just done after the update… Any issues with it so far?