Hi everyone,
I’d like to share my current ESS setup and new power-to-heat implementation. I’m especially interested in feedback from others running large-scale PV with dynamic load control.
I’m currently running a fairly large ESS setup that is designed to operate mostly in island mode. The grid is essentially just a fallback for longer periods of bad weather. My main goal is to avoid both unnecessary import and unnecessary export on the controlled part of the system and instead use surplus energy productively — in my case, converting it into heat.
The system is built around a single Victron MultiPlus II 5000 with a 15 kWh LiFePO₄ battery, managed by a Cerbo GX. Night loads are normally fairly covered by the battery, and daily base consumption sits somewhere around 45–50 kWh (without heating). Under normal conditions the system behaves like a small off-grid installation that just happens to have a grid connection in the background.
On the PV side things are a bit more serious. In total I have around 72 kWp of PV that is actively regulated within the ESS context, plus an additional 10 kWp that runs independently and feeds directly into the grid for sale. The regulated portion includes DC-coupled PV via a Victron SmartSolar RS 450/200 and several AC-coupled Fronius Symo 15 and Fronius Symo 8.2 units. The idea is that the controlled PV follows the ESS logic, while the separate 10 kWp installation simply produces revenue, being part of the regulation loop only in winter (actively managing GridSetpoint to achive that via Node Red).
With this level of PV power, simple on/off load control doesn’t work anymore. Export can jump very quickly when clouds move, and the system needs a fast and continuous sink for excess energy. That’s why I implemented a dynamic power-to-heat solution.
The heat sink is a 9 kW three-phase immersion heater installed in a 2000-liter buffer tank (wood central heating system). Instead of using relay stages, I’m controlling it via a three-phase SCR (thyristor) controller. It’s a Chinese unit sourced via AliExpress, intentionally oversized so it runs well below its nominal rating. It sits in a ventilated cabinet with thermostat-controlled forced cooling. Power is modulated via a 0–10 V signal coming from a Industrial Controller PUSR USR-M300 (AliExpress) wich also runs NodeRed and communicates via MQTT with the GX.
Alongside the modulating 9 kW element, there’s also a fixed 4.5 kW heater mounted higher that can be enabled when it makes sense. It’s not primarily about reducing SCR stress — it’s more about having an additional heating stage to support stratification in the buffer tank and, if desired, implement a DHW-first priority. It boosts the max output of the System to nealy 14 kW. It would be no problem to scale the system up. The M300 has free Outputs and offers a lot of possibilities for further improvement.
For measurement, heater power is captured via a Carlo Gavazzi EM24 (my old grid-meter, changed that to Victron) connected over RS485 (Modbus RTU) to the M300 controller. Control logic runs locally in Node-RED on the Cerbo GX and M300. I’m reading values from the ESS, pulling in EM24 and Grid measurements, calculating the effective deviation from the grid setpoint and translating that into a heater power request. The output is then scaled to the 0–10 V analog signal for the SCR.
One thing that took some care was sign convention. The GX device values and the raw meter data need to be interpreted consistently, otherwise the controller reacts in the wrong direction. After correcting that, the system became very stable. With phase-angle control, the heater reacts quickly enough to smooth out rapid PV fluctuations without visible grid oscillation. Because it’s phase-angle control, I added a proper three-phase EMI filter on the supply side to keep conducted emissions under control. With that in place, there are no noticeable disturbances on the rest of the installation or the grid connection.
In daily operation the system keeps grid exchange very close to zero on the regulated part, while surplus energy is pushed into the thermal store. The buffer tank provides enough inertia to make this worthwhile, and the SCR modulation avoids the harsh cycling you would get with staged contactors.
Looking ahead, the current 15 kWh battery is only the first step. The plan is to significantly increase storage capacity and eventually move to a three-phase setup with three 15 kVA MultiPlus units. That will better match the PV scale and reduce dependency on the grid even further during high-load scenarios. Looking ahead, with a larger battery and a solid production forecast for the day, it should also be possible to support space heating in the early morning hours without relying on the grid.
I’d be interested to hear from others running large ESS systems with dynamic load control, especially regarding long-term SCR reliability, ramp limiting strategies inside ESS environments, and experiences integrating additional Modbus meters into Node-RED on the Cerbo.
Happy to share more technical details if useful.
