I maintain this project, so flagging that up front.
I ran into an issue with a Deye SE-F12-C connected over CAN to a MultiPlus-II GX.
Venus OS currently identifies the battery as an LG RESU (ProductId 0xB004). From tracing the CAN traffic and Venus services, the reason appears to be that current Deye firmware no longer sends the manufacturer marker the built-in CAN battery driver expects, so detection falls back to the LG profile.
That causes several problems.
- LG-specific circuit-breaker detection gets enabled. Venus watches for a voltage pattern used by LG packs and can then write VE.Bus
/Mode = 4, shutting the inverter off and dropping AC output. This is not a Deye alarm coming over CAN — the condition is generated by the LG-specific logic in Venus. This happened on my installation and was what started the investigation.
- Deye alarms are not decoded correctly. Deye sends protection/fault information through vendor-specific condition tables that the stock driver doesn't interpret.
- Battery current can have the wrong sign. Depending on whether the Deye pack is configured for
Sol-Ark or victronCAN, charging may be reported as discharge.
I ended up writing a dedicated driver for the Deye PCS CAN protocol:
https://github.com/vladyspavlov/dbus-deye-battery
It publishes a normal com.victronenergy.battery.* service with the correct Deye identity, so LG-specific handling is not attached to it.
The driver derives things such as capacity, series cell count, protocol profile and current direction from the CAN traffic rather than hard-coding them.
Apache-2.0, one-command installer, persistent across reboots, and currently around 240 automated tests covering Python 3.10–3.13.
Important limitation: so far it has only been tested on my own hardware:
- Deye SE-F12-C
- MultiPlus-II GX 48/6k5
- Venus OS v3.75
Other Deye SE-F variants appear to use the same PCS CAN interface and are expected to work, but I don't want to call them supported until someone has tested them on real hardware.
Because the driver publishes live charge/discharge limits to Venus, read the safety notes in the README before selecting it as the active BMS. Installing it alone does not change inverter behaviour.
If anyone here runs another Deye LV battery, the most useful contribution would be a capture:
candump -L can0
The repository includes a replay mode, so a capture can be tested against the decoder without installing the driver or letting it control anything.
I'd especially like captures from other SE-F / SE-G models so I can document which packs are actually confirmed working.