Hi everyone,
I am building a local diagnostic/blackbox recorder on a Cerbo GX MK2 for a three-phase VE.Bus system and I am trying to avoid guessing the meaning of several internal VE.Bus D-Bus fields.
System:
- Cerbo GX MK2
- Three-phase system with 3 × MultiPlus-II 48/8000/110-100
- VE.Bus service:
com.victronenergy.vebus.ttyS4 - Devices:
/Devices/0= L1 / master/Devices/1= L2/Devices/2= L3
I can see the public Modbus/GX register list and I can decode the normal fields such as:
/VebusError
/State
/Alarms/GridLost
/Alarms/L1/Ripple
/Alarms/L2/Ripple
/Alarms/L3/Ripple
/Devices/x/ExtendStatus/RelayTestOk
However, several very useful D-Bus paths are visible locally on the Cerbo, but I cannot find official documentation for their bit mapping.
The paths I am trying to decode are:
/Devices/x/ExtendStatus/RawFlags0
/Devices/x/ExtendStatus/RawFlags1
/Devices/x/ErrorAndWarningFlags/RawFlags
/Devices/x/ExtendStatus/SwitchoverInfo/Delay
/Devices/x/ExtendStatus/SwitchoverInfo/Connecting
/Devices/x/ExtendStatus/SwitchoverInfo/ErrorFlags
/Devices/x/ExtendStatus/GridRelayReport/Code
/Devices/x/ExtendStatus/GridRelayReport/Count
/Devices/x/InterfaceProtectionLog/0/ErrorFlags
/Devices/x/InterfaceProtectionLog/0/Time
/Devices/x/InterfaceProtectionLog/1..4/ErrorFlags
/Devices/x/InterfaceProtectionLog/1..4/Time
/Devices/x/ExtendStatus/WaitingForRelayTest
/Devices/x/ExtendStatus/RelayTestOk
/Devices/x/ExtendStatus/VeBusNetworkQualityCounter
/Devices/x/Diagnostics/UBatRipple
Observed values during events:
InterfaceProtectionLog/ErrorFlags = 8
InterfaceProtectionLog/ErrorFlags = 16
InterfaceProtectionLog/ErrorFlags = 64
SwitchoverInfo/ErrorFlags = 12
SwitchoverInfo/ErrorFlags = 26
RawFlags0 normal baseline example = 268697648
RawFlags0 during one relay/reconnect incident = 17039408
From testing and community snippets, it looks like the interface/switchover flags may be bitmasks, possibly something like:
1 = RoCoF
4 = FreqLow
8 = VoltageLow
16 = VoltageHigh
64 = PhaseLockLost / PLL / phase issue
But I do not want to rely on guesses. I would like to know the official meaning, especially for:
InterfaceProtectionLog/ErrorFlags
SwitchoverInfo/ErrorFlags
RawFlags0
RawFlags1
GridRelayReport/Code
Example incident:
At one point the system had victron_ac_in_rejected for about 5 minutes while AC-IN voltage was visible and apparently within normal range:
L1 = 247.8 V
L2 = 238.2 V
L3 = 252.1 V
Frequency = 50.10 Hz
VE.Bus Error = 0
The system later accepted AC-IN again after the normal reconnect interval.
In the same general period I saw values like:
L3 InterfaceProtectionLog/ErrorFlags = 64
SwitchoverInfo/ErrorFlags = 26
RelayTestOk = 0 temporarily on one device
Questions:
- Is
InterfaceProtectionLog/ErrorFlagsofficially documented anywhere? - Does
SwitchoverInfo/ErrorFlagsuse the same bit mapping asInterfaceProtectionLog/ErrorFlags? - Are the
/InterfaceProtectionLog/x/Timevalues Unix timestamps in UTC? - How should the log slots 0–4 be interpreted? Is slot 0 simply the most recent event per device?
- Should old
InterfaceProtectionLogentries be ignored as root cause if their timestamp is not close to the current incident? - What exactly does
RelayTestOk = 0mean? Is it “relay test failed”, “relay test not yet passed”, or “currently waiting/reconnecting”? - Is
RawFlags0/RawFlags1stable enough to decode, or are these internal mk2-dbus implementation details that should only be stored as diagnostic evidence? - Is there an official mapping for
GridRelayReport/Code? - For
UBatRipple, is/Devices/x/Diagnostics/UBatRipplethe actual ripple voltage RMS used for the High DC Ripple alarm?
My goal is not to bypass any grid-code or protection behavior. I only want to build a local diagnostic recorder that can explain events accurately, for example distinguishing between:
real grid outage
grid-code / loss-of-mains rejection
internal reconnect timer
relay/reconnect test still active
High DC Ripple on one VE.Bus phase
stale historical InterfaceProtectionLog entry
If anyone from Victron or someone familiar with mk2-dbus / VE.Bus internals can confirm the mapping or point me to the correct source file/documentation, that would be very helpful.
This all started after something happens and I get an e-mail saying “Grid Lost” and then “Grid Ok”, without actually telling me useful information of what actually caused this. I went through such a rabbit hole so far.
Thanks!