ESS oscillation with Shelly Pro 3EM only under a large added load

Hello,

I’m following up on this thread ( ESS Current Oscilations with Multiplus II + Shelly 3EM Pro ) as I’m experiencing a similar symptom, with one configuration detail that seems important to mention.

Setup:

  • MultiPlus-II 48/5000/70-50, Venus OS v3.79
  • DIY 16S LiFePO4 pack (340Ah), JK BMS via CAN on Venus OS
  • Shelly Pro 3EM as grid meter via the dbus-shelly-pro-3em script, polling the Shelly’s HTTP API every 500ms (confirmed by reading the .py file)
  • AC-coupled micro-inverters, connected on AC-out 1, on the same electrical bus as AC-in

Symptom:
Charge/discharge oscillation: 7 state changes logged within 15 seconds in the VRM event log. Appeared as soon as a load was added (3000W EV charging).

What my graph (attached) shows:
The data comes from VRM via MQTT, displayed in Home Assistant. The capture covers the day starting from this morning’s solar charging. It shows the orange curve (PV production) and the blue curve (battery charge). When the vehicle was plugged in and started charging, the battery stopped charging and went into a charge/discharge oscillation of roughly ±50W. I then tested switching from External meter to Inverter/Charger, which stopped the oscillation immediately, the battery resumed charging normally.

Question:
Since the 500ms polling rate is faster than the ESS control loop’s own cycle, I’m not sure the “Shelly too slow” explanation from the linked thread applies here. I’m a bit lost, thanks for any pointers!

Third party meters are still unsupported for a grid meter, there is custom code that sits between the meter and the OS as well, it doesn’t seem to be using the newer native integration for Shelly, but that is still unsupported in the grid role precisely as it is not reliable, so not much that we can do to help with that.

FYI:

For what it is worth I use other “unsupported grid meters” with polling intervals of 1,2 or 3 seconds and no issues at all.

I don’t know if you can change the polling interval of your shelly dbus-shelly-pro-3em script.

polling faster won’t help much. The shelly has a internal update frequency of 1Hz (1 second). It’ll just return 2 or 3 times the same value, when queried faster than this.

It may actually be worse to poll with 500ms when the internal measurements are only 1000ms, as this would mean the inverters will adjust their output twice based on the same (outdated) measurement value. Could quickly cause over- / understeering and therefore oscillation.

I’d change that loop to run every 1000ms and also add the dbus path /RefreshTime with a value of 1000.

Well, after a few days, everything is working without any issues, I didn’t change anything.