First, thanks for this project — the protocol groundwork in your repo is the reason my Samsung SDI ELPM482-00005 talks to a Cerbo GX at all, and it saved me weeks of reverse-engineering.
I’m building a 10-module ELPM482-00005 off-grid system in Australia, and before commissioning I bench-tested the drivers against a live module and did a line-by-line review of both the C and Python code against the Rev 0.2 spec. That turned up some issues I’ve filed on GitHub (7 in total) — the two most significant:
The C driver reads alarm status from 0x500 byte 0, which per Table 8 is the voltage low byte; the alarm/protection bitfields live in 0x501 bytes 0–1 and 2–3. As-is it would flicker false alarms with pack voltage and miss real ones.
The Python driver’s D-Bus values freeze on CAN loss — /Connected is never cleared, so the GX keeps showing the last voltage/SOC as a live battery. I confirmed this on hardware.
Full details, spec references and suggested fixes are in the issues, and I’m happy to submit PRs for any of them if that’s useful.
One more thing, offered in the same spirit: while testing I built an alternative integration that sidesteps the D-Bus layer entirely — a small C translator that re-emits the Samsung frames as Victron’s native CAN-BMS protocol (0x351/355/356/35A) on the same interface, so Venus OS’s own driver does the D-Bus work and provides the BMS-lost watchdog. It’s bench-tested against real hardware (test report written up) and GPL-3.0. If you’d like it in your repo as a second option I’ll gladly contribute it; otherwise I’ll publish it standalone with full credit and links back here. Whichever you prefer.
Thanks again for putting this out there — happy to help however I can.
thank you @XO_Thermite for the testing. Over the next days, Ill get around to implementing.
Yes
This does sound interesting. When I originally wrote the drivers I had no idea what parts of the core os I actually could use. I based my super-b driver off of raw canbus readings that I managed to intercept then moved it to the cerbo. So when I implemented the samsung variation from the datasheet that stayed.
If you have a better way to do it I would gladly look at it, its probably also good for the super-b project. While that project is running stably on my systems Im sure it can use betterment and would quite enjoy a second pair of eyes on core failures since both projects are essentially the same.
Let me get back to you, youll see the Issues close and know.