question

tridex avatar image
tridex asked

Integrate a 0-10v or 4-20mA controlled water heater

Our system is going to get extended with some Victron components that connect a second PV installation:

Fronius PV Inverter (on AC-IN) -> this is already installed and connected

EM24 grid meter
MultiPlus II (everything is on AC-IN, except during outages I can manually switch critical loads to AC-OUT)
MPPT charger
10kwh Lifepo4 battery (CAN-Bus)
Cerbo-S GX

There is a water heater that is wattage limited which can be controlled using either a 0-10v signal or using a 4-20mA current sink signal - currently this is connected to a VoltoPlus excess regulator that includes its own grid meter and if it detects a surplus it gradually powers on the water heater.

I would like integrate this control to make use of the data that the Victron system has so that I can use the surplus PV power most efficiently. The current setup with the VoltoPlus has some issues:

  • The VoltoPlus can't detect if the battery is full or not - I would prefer to heat the water only once the battery is mostly full
  • The VoltoPlus is quite slow in its reaction time and thus I'd like to replace it.

The main question is, what would be the recommended / most reliable way? I'm a software engineer, so doing things in software is easy for me, but hardware wise it's more challenging - things I have considered:

* Using a Raspberry PI that runs e.g. NodeRED (or a custom PID controller written in python?) and a shield that can output the required control signal (0-10v or 4-20mA) -> I fear that the solution is slow because it will need to query the Cerbo-S GX via the network for the current grid meter power.

* Using a Venus OS large and run NodeRED (or can I run a custom script again?) directly on the Cerbo-S GX - but I would still need to find a way to actually output the control signal (maybe a USB dongle could be found, or maybe an Arduino could be connected via USB / Serial interface).

Unfortunately, I haven't yet come across a cheap enough shield / USB dongle that can output the required signal, so a custom design might be required (e.g. using a PWM signal with RC filter to get the 0-10v signal, but so far I'm missing something that would boost the voltage from the 0-3.3v of the µC to the 0-10v range, but I will probably be able to figure that part out).

What would be the recommended Victron way to interface with the ESS part of the system so that I can:

  • Start heating the water once the battery is full
  • Use the excess PV power from both the Fronius Inverter and the MPPT
  • Be fast enough in response time, so that if loads change / PV power drops, the battery is not drained because the water heater is still running
  • Be able to view the status of the system in the VRM (e.g. if power is diverted to the water heater)

Thanks for your input!


ESSHot Water Diversion
2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

2 Answers
matt1309 avatar image
matt1309 answered ·

HI @tridex

I do something similar but way more basic and without monitoring, my water heater is just fixed load immersion heater. I turn it on and off using node red, with a smart shelly switch (with local HTTP api that can be activated via the HTTP node in node red). Similar to your setup but without the complication of variable load water heat and no monitoring.


I would do as you suggest and have criteria for on/off/amount to turn on be controlled by node red running on cerbo and send the load you want turned on to an arduino or similar which outputs the variable voltage to get the various heater power. And have the calculations for how much to turn on/off be done on node red which has access to victron data, and send to the arduino by some form of local API.

This gives most flexibility in terms of data you can use and criteria to base it on.


In terms of monitoring power usage in victron, you could spoof it. Make a virtual energy meter using custom driver (there's some examples on Victron's github page). And calculate the power being used by the water heater?

ie if node red has told arduino to turn on 50% heating power based on the criteria you define and you know what 50% heating power is equal to in terms of watts. Then have node red update the virtual energy meter to show 600w. This is less accurate than real world consumption but probably easiest especially if software is your area!


I think in VRM the water heat usage wouldn't appear on main dashboard (i don't think ac load energy meters do) but the data will be accessible in advanced page of VRM.


You could try installing an actual energy meter (et112) in between the water heater Controller and the resistive water heater to get the real usage data to monitor the load (assuming it's AC power form controller to the resistive heater). This seems more destructive/risky to me.


This might be obvious to you but a mistake i made with my more simple setup:

With regards to speed of turning on and off the heater is make sure you add in some buffers to the turn on/off criteria (i didnt do this originally). You can end up in a loop of the water heater turning on and off if there's not a large enough buffer on the on/off criteria.

ie excess power => turn on water heater => load turns so now there's no excess power

=> load turns off as no excess power

and loop repeats.

just make sure your on/off criteria has some buffers in to prevent it constantly turning itself on and off.



EDIT: All the above is just my best guess at a solution, I'm far from a pro so pleases ignore if not useful.

2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

Mike Dorsett avatar image
Mike Dorsett answered ·

Whilst the variable load is a nice idea, It's not really necessary, as the hot water heater /tank has a relatively large 'inertia'. Best way to control this would be to relay switch the heater in 10 minute intervals, commencing once the SOC is >95%, and from about 12:00 to 14:00 or peak solar hours. Whilst this may cause a little more battery cycling at the top end, if the solar system power is greater than the heater power plus other loads, this will be minimal.

2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

Related Resources

What is ESS training video

ESS Quick Installation Guide

ESS design and installation manual

Additional resources still need to be added for this topic