After deploying our system used for backing up the “critical loads” of my home, my next goal was to capture the power of the whole home within VRM by connecting an external grid meter to the non-critical loads panel.
I installed and configured a Carlo Gavazzi EM530 with two CTs and connected it to my Cerbo GX using the Victron RS485 USB cable. The meter was detected and displaying proper values after minimal configuration.
Days later, I went to ‘Settings > ESS’ and changed the ‘Grid metering’ setting to “External meter”. The view in VRM updated, and everything appeared to be working well. Later that day, the non-critical loads panel was under “high” loads (somewhere over 3,000 watts or so), and all of the sudden, I saw what I later described as “erratic behavior” because the numbers I was seeing in VRM where WAY out of whack.
I didn’t observe the behavior for long because I was panicked by what I saw so I went in and changed the grid meter setting back to “Inverter/Charger” and things went back to ‘normal’ again. By “erratic”, I meant that I saw the grid reading in VRM was displaying a NEGATIVE reading of over 3,000 watts! Because the system thought there was excess power feeding in to the grid, it started charging my batteries off the grid (understandable, but not wanted/expected). For reference, my “Grid Setpoint” setting was set at 400 watts at the time as I cannot export to the grid (yet) because my meter currently reads positive values.
Days later I made a post to help others with a similar home setup by explaining my experiences and lessons learned: Home ESS with US 400A (2 x 200A Panel) Service
After explaining my goal, It was recommended that I read the values from the EM530 myself so I could use a python script to adjust the values to better represent my home’s overall grid usage. I took on the challenge and recently completed it. It’s working beautifully! I’ll make a post explaining the details another day. But while I was reading in the values from the EM530, I ran in to an issue where I was getting negative values from the meter whenever it was under large loads!
After lots of research (I’ve never used the modbus protocol before), I discovered the problem and was able to fix it for my script. To try and keep it brief without getting too technical:
Many of the modbus registers for EM530 are stored using an INT32 data format. My script was pulling all the modbus registers as INT16 which worked fine as long as the values remained small enough to fit within one register. Once the values get too large, they split the data in to two registers. So If you’re only reading in one, and decode the data, its all wrong (normally negative this case).
If I’m not mistaken, I believe that the GX may be reading the proper INT32 values when grid metering is set to “Inverter/Charger”, but reading them as INT16 when grid metering is set to “External meter”.
I hope someone finds this helpful.