Hello all,
I recently installed a MP-II GX I’m currently reworking some automation I had (part python services, part home assistant), to node-red and integrate it properly around the ESS.
First of all, the rerouting of excess PV power to my water heater.
My goal is for excess power to be consumed in priority by the water heater, since it’s basically a battery that doesn’t wear I cycle everyday anyway for my hot water needs.
Then, when it’s charged, I allow ESS to charge the battery.
I can’t use the grid meter in my water heater control loop because it is already in the ESS control, so using it for another load without feeding anything back to ESS would basically create a nice randomly oscillating system.
Looking at node-red victron nodes I’m quite sure there is currently no way to insert a consumer in the ESS control loop. There seems to be third party mods for Venus to have a power broker system that would allow this (a good concept indeed, hope Victron will consider this for future features), but I’d rather stick to stock firmware.
I have settled for setting the water heater power at PV production, minus MP-II output and a fixed power setting reserved for loads between grid and the MP-II (I lack another metering device to report this, and since my PV is AC-tied there, this is an unsolvable equation).
This works, but while the water heater charges, ESS also tries to hit its grid setpoint, as it’s way more reactive than my flow it ends up charging at little power that I’d rather see into the heater, and that I suspect will reset batterylife and prevent raising active soc during low PV yield times.
So, I also need a way to tell ESS “stop charging” that
1/ Is not a setting that may be written into a flash or eeprom of a microcontroller and cause wearout
2/ Does not mess with ESS native features, like batterylife
For now, I use the ESS Control Node to prevent battery charge while the water heater is preempting excess PV power :
It is satisfying, but I don’t know if it answers the criteria I mentioned just before.
I set it based on a function that prevents excessive flapping
var disable_charge = (
allowed_time &&. // static 08:00 - 18:00 time range
heater_needs_power &&. // flag set when the heater thermostat is closed
pv_power_sufficient. // threshold when I consider I start/stop producing (100W for 2700Wp)
) ? 1 : 0;
To give an overview of the flow
There are other flows it depends upon, that collect PV data from OpenDTU via MQTT, among others.
I’ll happily share any details, I’d just rather not dump the whole thing right away without discussion context.
Read you later