30-40mV is pretty normal for Pylontech, I would not worry.
In fact the battery will start balancing only if the difference is bigger than 30mV.
Sometime ago I’ve saw on another forum, that Pylontech had implemented, on the new firmware, some functions for reporting on CAN bus all information that are found over RS232. More of that, on the same bus, provisions for updating the firmware were put in place..
It made me curious and I’ve reversed engineered their firmware to confirm this and found out some surprises…
Later saw some docs from Pylontech that confirmed this.
The batteries usually communicate on CAN2.0A standard, on 11 bit identifier. (0x350 - 0x380 range).
To my surprise, it also use CAN2.0B standard and responds on several 29 bit identifiers.
These are using for control, upgrade and extended commands.
For responding to your question, you need to have access to Venus OS command prompt (SSH) and use the cansend/candump utilities.
One of the extended level commands is to send an all zero frame to 0x04000000 CAN identifier.
The master will respond with the information for all modules, grouped on 0x04AABBCC identifiers, where AA is group number, BB battery number on that group and CC is the type of info. The frame bytes represent the info for that info type.
I will try to find those docs again or compile my findings for this.
I’ll be back… ![]()

