Hey everyone,
I’m having trouble with Modbus RTU on my Cerbo GX, more specifically with the Victron USB-RS485 dongle.
Here’s the story:
I’ve got a Cerbo GX connected to a Solis S5 inverter via the Victron dongle. It is all working fine on firmware 2.93, but I wanted to update to get access to newer Node-RED modules. After upgrading to 3.60, the RS485 dongle just stopped working and I couldn’t read anything in Node-RED. I had to downgrade back to 2.93, and then everything worked again.
To test this without messing with the production system, I grabbed a second Cerbo and connected a Modbus RTU temperature sensor through the dongle. I tested both firmware 2.93 and the latest 3.62, and in both cases I kept getting tons of timeouts, maybe 1 out 15-20 reads worked. The dongle showed up, but clearly something was messing with the communication. I tried tweaking all the Modbus settings, swapped between two dongles (FTDI and CH341), same result: timeouts everywhere.
Then I plugged the same dongles into an Odroid M1 running Linux, imported the same Node-RED flow, and everything worked perfectly. No timeouts at all.
I checked everything I could: USB low-level settings, dmesg logs, power, etc. Everything looks the same on both systems. So it’s not the sensor, cable, or dongle. Seems like the issue is somewhere inside the Cerbo GX itself, maybe in how it handles modbus, USB connection, buffer etc idk.
Has anyone else seen something like this?
Maybe someone had the same that after a firmware update the Victron Modbus dongle stopped responding, or maybe you got weird timeouts?
Any ideas where to look or what to try next?
A little late to the party, but exactly the same issue here using both Victron and Waveshare usbdongles. All work fine in a pi2, with same NodeRed 
Hi there @Brookydave
I found a solution to this problem but completely forgot about my post on this forum.
Basically Cerbo runs a background service called serial-starter. Every time you plug something into a usb port, this service immediately grabs it to check if it’s a Victron device. Because the system is constantly knocking on the door of that usb port it creates a conflict. When your Node-red tries to talk to the dongle at the same time, it finds the port busy or locked, which leads to those annoying timeouts (at least in my case). To fix it you basically have to tell Cerbo to ignore that specific USB ID so Node-red can have it all to itself.
To be 100% sure this is the problem, you can run a quick manual test. Ssh to your Cerbo and run this command:
/opt/victronenergy/serial-starter/stop-tty.sh /dev/ttyUSB0
just make sure to change ttyUSB0 if your dongle is on a different port. If your modbus node in Node-red suddenly turns green and starts working you’ve found the culprit.
To fix it permanently, you can add a rule to the serial-starter.rules so it ignores the dongle on every reboot. Since I use the official Victron usb-rs485 dongle my rule looks like this
ACTION==“add”, ENV{ID_BUS}==“usb”, ENV{ID_MODEL}==“FT232R_USB_UART”, ENV{VE_SERVICE}=“ignore”
If you are using a Waveshare dongle or any other brand, VenusOS might see it differently. You’ll need to check your device’s specific model name and adjust that rule so the Cerbo knows exactly which door to stop knocking on. This can help:
udevadm info --query=property --name=/dev/ttyUSB0
I hope this helps and your Cerbo+Waveshare setup starts working.