question

usernamepasswordbs avatar image
usernamepasswordbs asked

3 Phase water heating element wired as 3 separate elements to use as a 3 step variable load

I have a 3 phase water heating element which consists of 3 separate resistances which can be wired in star for 3 phase or parallel for single phase supply. I am thinking of wiring the three resistances with a series of relays to give me 3 different power setting: 800w, 1600w and 2400w, controlled by Node-red.

Has anyone ever done this?

20230329-102819.jpg


Hot 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.

9 Answers
wkirby avatar image
wkirby answered ·

Yes, I am doing something similar.
1 have two 3kW heaters (3 x 1kW elements) for my thermal store. It is possible to switch each of the three elements with a relay, but given that they will likely switch on and off frequently, it would be better to use SSR's instead. That would be three SSR's per heater, one per element.
Pay attention to your neutral current in single phase configuration because it adds for each element.

In my case, two 3kW heaters would be too much power, so I have connected two of the elements in series to make a total of 500W for those two and then the last 1kW element on its own. This allows me to switch either the 500W series elements or the 1kW element or both to give 500W, 1kW or 1.5kW options for each heater, with just two SSR's. With both heaters I get 500W to 3kW in 500W steps using four SSRs. A sum total of 3kW suits my wiring and doesn't overload my inverter, so it's perfect for me.

2 |3000

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

usernamepasswordbs avatar image
usernamepasswordbs answered ·

Thanks for that info. What control system have you got with that?

This will be for my DHW but I have a 2000l thermal store that heats via a gasifying log boiler normally but I would like to use it (the thermal store) as a last resort dump load in high summer but then what's the point in heating the thermal store in high summer? I haven't worked that out yet!

2 comments
2 |3000

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

wkirby avatar image wkirby ♦♦ commented ·
I am building my own controller for it. It'll be using its own instance of Node Red.

In addition to the electric heaters, I need to control a kerosene furnace and maybe a solid fuel furnace too, so there are lot of decisions that the system needs to make.

Thermal store is not as useful in high summer for sure, but on cool sunny days in spring and autumn a lot of PV energy can be harvested and then the PV energy in a thermal store could at least contribute to home space heating.

0 Likes 0 ·
usernamepasswordbs avatar image usernamepasswordbs wkirby ♦♦ commented ·
Can you tell me if a node red program switching 3 heating elements separately would need to be run on an external device like a rasberry pi or can the cerbo/mp2/mppt (which all have relay outputs) do all this with just the addition of external relays on the wires to the actual elements?
0 Likes 0 ·
Michelle Konzack avatar image
Michelle Konzack answered ·

Ha ha ha, - you are realy funny, but...


...you could increase your heat storrage by building an earth-underground heat storrage and heat it up in the summer and on the winter you take the heat out.


I will do such thing INSIDE my greenhouse (7x23m surface and the WET sand inside is around 1,5m thick, which give roughly 240m³.

The foundation is from 300mm FIBO blocks and is outside 100mm EPS insulated...


I have currently 1860Wp running but once the winter is over, I install additional 2460Wp but even on the Farm running an irrigation system for 10 hours a day, I can not use the energy up. Hence every unused Watt goes into my 200l Boiler (24V/2x500W) and since from time to time you can get even cold days in summer in Estonia, I heat a 500l HeatingBuffer. The rest goes to the GreenHouse.


Once the GreenHouse is completer, I will get an additional 2,4-2,8kWp solarpanel set, which is needed in October/November and February/March to grow things, but with 7kWp in the summer I get easyly 70kWh a day which have to be burned.


Oh, I am 100% Off-the-Grid, hence NO sell back possible.


Have a nice and sunny day

2 |3000

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

usernamepasswordbs avatar image
usernamepasswordbs answered ·

I would like to know more about your sand thing, how it works and see some photos if you have any.

2 |3000

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

Michelle Konzack avatar image
Michelle Konzack answered ·

We will start digging this spring, when snow and ice are gone.


The principle is simple, you have to put a HDPE pipe e.G. PN8 40x2,4mm (this is what in earth water heatpumps is used and they are cheaper as the ordinary HDPE pipes) on the bottom I suggest you to put a Geotextile and an EDPM or HDPE membrane under it and the fill it up with sand (try to avoid SHARP stones) around 1m high.


With this you can use a solar collector (I use 600m HDPE pipe of 25mm) to heat up the soil in the ground, but it should be moist and NOT wet. Best is if you have a humidity sensor in the ground, because the humidity keep realy the heat inside).

Also the EPS insulated foundation walls should have at least the drainage membrane.


Put another HDPE pipe on top of the soil and cover it again with sand avoiding sharp stones.


Make it humid again and cover it wit a Geotextile and another HDPE or EDPM membrane.


Now it depends on what you want to do with it.


If a winter greenhouse, put a nice 20-30cm layer of soil on top of it.


If you want only to keep the space from freezing and put a chicken stall on top of it, insulate the 50cm sandlayer with 100mm thick EPS 200 and an additional (cheaper) Plastic membrane on top of it and cover it wit sand õe whatever.


While you use the first HDPE pipe for heating up the whole thing (it take realy several month and the first 1-2 years you will be not very happy, because the SolarCollector has not only to heat up the space but also the surrounding area including the space UNDER your construction where you have hopefully no water running) the second Pipe is used to get the heat out.


Will mostly require only a small circulation pump with 4-6l/min but the heat is mostly something between 40°C and 60°C and can be used directly using a thermostatic mixer valve and an Underfloor Heating System (Radiators are out of question, because the work only with 50-75°C)


If the heat goes under 36-38°C, you can use a small water-water heatpumps to get more energy out. I will use a 24V DC Danfoss Compressor with it and two heatexchanger are required.


Please note, you CAN store NOT more then 0,3kWh of energy in1m³/°K, hence IF you can heat it up to 60°C and use a Heat pump to go down to 10°C, then you have e.G.

240m³ x 0,3kW/m³/°K x 50°K = 3600 kWh


My house need at -18°C outside temperature around 1,5kW to stay above 16°C or 36kWh a day for basic heating (I use also a Woodstove) but this give a heating period of 100 days MINUS the losses over the time. Probably 40-50% depending how good you have build it.


However, I am building a rocket Heater which output more then 50kW and use two (for security) high performance Grundfoss pumps to circulate the water, because it should not exceed 70°C otherwise you loose the HDPE pipe.


The 240m³ are the only option for me, to store heating energy for at least 1 week by running the RocketHeater only 12-16 hours, hence one long working day.


Oh, I can collect in Estonia excessive Solarenergy from mid of April to end of August only. The rest of the time is much lesser, but windenergy replace it very nicely and my MultiPlus-II does now allow me, to put a singel phase Windmill with up to 3,5kW on ACout1 directly, because the physical limit for 24V DC system is more or less 2kW. The SmartSolar with 24V and 100A is realy a tough device.


Thanks to Victron!

2 |3000

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

usernamepasswordbs avatar image
usernamepasswordbs answered ·

Wow! That is very technical and impressive. I don't know if I would have enough spare PV energy to make it worth my while digging so much! My "poly tunnel" (plastic greenhouse) could benefit from the warm soil but here in France we are eating lettuce already from the poly tunnel and the early spuds might be ready for end of May.

Down with supermarkets! (and Macron)!

2 |3000

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

wkirby avatar image
wkirby answered ·

I did finish the control box which will drive my three phase elements in a single phase supply to give a selection of heating power levels.
I used SSRs for each heating element 500W or 1000W or both for 1500W. There are two of these arrangements. The SSR's are zero crossing types, so easy on the inverter. The elements can switch quite frequently on cloudy days.
The contactors provide a hard disconnect or changeover to an alternative supply if required.

pxl-20230509-142105360.jpg

I made a control PCB which controls the contactors and SSRs but also some smaller relays to control power to the circulation pumps and the kerosene furnace.
Also inputs for "Call for Heat" and DS18B20 temperature sensors.
Underneath the RaspberryPi is a microcontroller to provide PWM control signals for the pumps and also to read the PWM status signals provided by the pumps. The microcontroller provided a stable hardware PWM signal unlike a jittery software signal which the RaspberryPi would generate.
pxl-20230514-115235620.jpg

RaspberryPi is running Node-Red and reads parameters from the VenusGX over MQTT. It looks for excess PV power and monitors the inverter power. In a high load situation the elements will be shut down to prevent inverter overload.

This is the thermal store which I'm using. It's a vented (low pressure) system. Hot water for consumption does not come out of the cylinder, rather it is generated on demand by the plate heat exchanger on the side of the cylinder.
Space heating is also provided by water within the cylinder, so heating could be provided purely from solar energy at certain times of the year without needing to fire the kerosene furnace.
Lots of temperature sensors all over the thing.
pxl-20230514-150337023.jpg


1 comment
2 |3000

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

Michelle Konzack avatar image Michelle Konzack commented ·
Tough installation.


I do mostly the same, with the exception, that I run 24V DC Heating Elements and my circulation pumps (GreenPro and Grundfoss) run over a seperate Phoenix 24/375. Hence if my Main System and MultiPlus-II shoot down, the Heating System can still continue circulating.


0 Likes 0 ·
usernamepasswordbs avatar image
usernamepasswordbs answered ·

I like your set-up.

I have got a log boiler (gasifying) which does space and DHW nicely.

But since the solar installation the DHW will be solar only at least throughout the spring summer. So, I bought myself a Dingtian relay box as per this thread:

https://community.victronenergy.com/questions/166784/solution-adding-external-relays-to-cerbo-gx-using.html

to run my 3 element unit automatically depending on available/excess solar, although now, when you mention zero-crossing relays I wonder if I have expected too much of the relatively cheap relay box....

Maybe all the magic smoke will escape within the first few minutes....

2 |3000

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

usernamepasswordbs avatar image
usernamepasswordbs answered ·

Finally got the Dingtian relays working with help from @fguiot.

This Node-red flow is to control the 3 heater elements depending on SoC and charge current available. There are many additions I would like to make like adding in a time-of-day factor, maybe a meteo forecast etc. but if anyone else has the time and/or the inclination...

With lots of help from the Node-Red forum and in particular one of the members there called Frida who programmed a Function node for me which switches the 3 elements in sequence and turns them off in the same sequence so they should be subject to the same number of switching cycles/run time roughly speaking.

1690113041666.png

[{"id":"8443e347bccc88bc","type":"tab","label":"Victron 2","disabled":false,"info":"","env":[]},{"id":"b07c3cf69f132e2e","type":"junction","z":"8443e347bccc88bc","x":640.9999694824219,"y":387,"wires":[["00af6be591f51115"]]},{"id":"9774d3c2cb215fea","type":"junction","z":"8443e347bccc88bc","x":766.9999389648438,"y":589.0000076293945,"wires":[["69cb7482c36d3cd1","0dcaef1989cf60b0"]]},{"id":"f6c0433b9fd2f9d9","type":"junction","z":"8443e347bccc88bc","x":766.9999389648438,"y":509.00000762939453,"wires":[["432ead21be009b5f","6fb68e7b2d0811c5"]]},{"id":"986a2fc77fb5916c","type":"junction","z":"8443e347bccc88bc","x":766.9999389648438,"y":429.00000762939453,"wires":[["1fd5916cfb52a857","fdd84b3362b1187c"]]},{"id":"1f2fa2399f377717","type":"junction","z":"8443e347bccc88bc","x":793.9999694824219,"y":201,"wires":[["b2404ae3fd955f92"]]},{"id":"330566a33512316b","type":"junction","z":"8443e347bccc88bc","x":793.5043593645096,"y":113.93516516685486,"wires":[["6dd86a18f98586e1"]]},{"id":"906903ac2acc2219","type":"switch","z":"8443e347bccc88bc","name":"Amps >25 or <2","property":"payload","propertyType":"msg","rules":[{"t":"gte","v":"25","vt":"num"},{"t":"lt","v":"2","vt":"num"}],"checkall":"true","repair":false,"outputs":2,"x":240.99996948242188,"y":387,"wires":[["62302cd6e719d6d2"],["ab476ea27008db98"]]},{"id":"62302cd6e719d6d2","type":"change","z":"8443e347bccc88bc","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"num"},{"t":"set","p":"topic","pt":"msg","to":"AMP","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":460.9999694824219,"y":367,"wires":[["b07c3cf69f132e2e"]]},{"id":"ab476ea27008db98","type":"change","z":"8443e347bccc88bc","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"0","tot":"num"},{"t":"set","p":"topic","pt":"msg","to":"AMP","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":460.9999694824219,"y":407,"wires":[["b07c3cf69f132e2e"]]},{"id":"fdd84b3362b1187c","type":"debug","z":"8443e347bccc88bc","name":"debug 295","active":true,"tosidebar":false,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":876.9999389648438,"y":389.00000762939453,"wires":[]},{"id":"1fd5916cfb52a857","type":"link out","z":"8443e347bccc88bc","name":"link out 28","mode":"link","links":["8790e476a15ec5f5"],"x":931.9999389648438,"y":429.00000762939453,"wires":[]},{"id":"6fb68e7b2d0811c5","type":"debug","z":"8443e347bccc88bc","name":"debug 296","active":true,"tosidebar":false,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":876.9999389648438,"y":469.00000762939453,"wires":[]},{"id":"432ead21be009b5f","type":"link out","z":"8443e347bccc88bc","name":"link out 29","mode":"link","links":["e1397b487a729bce"],"x":931.9999389648438,"y":509.00000762939453,"wires":[]},{"id":"0dcaef1989cf60b0","type":"debug","z":"8443e347bccc88bc","name":"debug 297","active":true,"tosidebar":false,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":876.9999389648438,"y":549.0000076293945,"wires":[]},{"id":"69cb7482c36d3cd1","type":"link out","z":"8443e347bccc88bc","name":"link out 30","mode":"link","links":["16b342adf23cd288"],"x":931.9999389648438,"y":589.0000076293945,"wires":[]},{"id":"b0a2079ccf1e9507","type":"change","z":"8443e347bccc88bc","name":"80% 3 Relays Allowed","rules":[{"t":"set","p":"payload","pt":"msg","to":"3","tot":"num"},{"t":"set","p":"topic","pt":"msg","to":"SoC","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":633.9999694824219,"y":261,"wires":[["1f2fa2399f377717"]]},{"id":"196f3b64c9941690","type":"change","z":"8443e347bccc88bc","name":"70% 2 Relays Allowed","rules":[{"t":"set","p":"payload","pt":"msg","to":"2","tot":"num"},{"t":"set","p":"topic","pt":"msg","to":"SoC","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":633.9999694824219,"y":221,"wires":[["1f2fa2399f377717"]]},{"id":"6717cb9a9d61f77b","type":"change","z":"8443e347bccc88bc","name":"60% 1 Relay Allowed","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"num"},{"t":"set","p":"topic","pt":"msg","to":"SoC","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":633.9999694824219,"y":181,"wires":[["1f2fa2399f377717","330566a33512316b"]]},{"id":"444d7df9c276469c","type":"change","z":"8443e347bccc88bc","name":"Master Relay OFF","rules":[{"t":"set","p":"payload","pt":"msg","to":"0","tot":"num"},{"t":"set","p":"topic","pt":"msg","to":"SoC","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":623.9999694824219,"y":141,"wires":[["1f2fa2399f377717","330566a33512316b"]]},{"id":"2ec7a90cb6ca4f41","type":"switch","z":"8443e347bccc88bc","name":"SoC","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"60","vt":"num"},{"t":"btwn","v":"60","vt":"num","v2":"69","v2t":"num"},{"t":"btwn","v":"70","vt":"num","v2":"79","v2t":"num"},{"t":"gte","v":"80","vt":"num"}],"checkall":"true","repair":false,"outputs":4,"x":423.9999694824219,"y":201,"wires":[["444d7df9c276469c"],["6717cb9a9d61f77b"],["196f3b64c9941690"],["b0a2079ccf1e9507"]]},{"id":"6dd86a18f98586e1","type":"link out","z":"8443e347bccc88bc","name":"Stop All link out 8","mode":"link","links":["af5164fbd47a94bb"],"x":849.9999008178711,"y":142,"wires":[]},{"id":"b2404ae3fd955f92","type":"link out","z":"8443e347bccc88bc","name":"link out 31","mode":"link","links":["dda44c243164d003"],"x":848.9999694824219,"y":201,"wires":[]},{"id":"00af6be591f51115","type":"link out","z":"8443e347bccc88bc","name":"link out 32","mode":"link","links":["dda44c243164d003"],"x":695.9999694824219,"y":387,"wires":[]},{"id":"dda44c243164d003","type":"link in","z":"8443e347bccc88bc","name":"link in 14","links":["b2404ae3fd955f92","00af6be591f51115"],"x":469.9999351501465,"y":488.99999618530273,"wires":[["ed572c6c58d55a2d"]]},{"id":"ed572c6c58d55a2d","type":"function","z":"8443e347bccc88bc","name":"Sequentially 1.0","func":"// On Start\nlet msg1 = {}\nlet msg2 = {}\nlet msg3 = {}\n\nlet aSoC   = context.get('aSoC')\nlet aAMP   = context.get('aAMP')\nlet aArray = context.get('aArray')\nlet aCount = context.get('aCount')\nlet pFront = context.get('pFront')\nlet pBack  = context.get('pBack')\n\nconst invar = msg.payload\nconst topic = msg.topic\n\nfunction fUP() {\n    aCount += 1\n    pFront = (pFront += 1) % 3\n    aArray[pFront] = 1\n}\n\n\nswitch (topic) {\n    case 'AMP':\n        aAMP = invar\n        switch (invar) {\n            case 0:\n                if (aCount === 0) {\n                    //\n                } else {\n                    aCount -= 1\n                    pBack = (pBack += 1) % 3\n                    aArray[pBack] = 0\n                }\n            break\n            case 1:\n                if ((aCount >= aSoC)) {\n                    // \n                } else {\n                    fUP()\n                }   \n            break\n        } // end invar\n    break // end AMP\n\n    case 'SoC':\n        if (aAMP === 1) {\n            if (invar > aSoC) {\n                fUP()\n            }\n        }\n        if (invar === 0) {\n            aCount = 0\n            aArray = [0, 0, 0]\n        }\n        aSoC = invar\n    break // end SoC\n} // end topic\n\n\nnode.status('AMP ' + aAMP + ' SoC ' + aSoC + ' Count ' + aCount)\n\ncontext.set('aSoC'  , aSoC)\ncontext.set('aAMP'  , aAMP)\ncontext.set('aArray', aArray)\ncontext.set('aCount', aCount)\ncontext.set('pFront', pFront)\ncontext.set('pBack' , pBack)\n\nmsg1.payload = aArray[0]\nmsg2.payload = aArray[1]\nmsg3.payload = aArray[2]\n\nreturn [msg1, msg2, msg3]\n","outputs":3,"noerr":0,"initialize":"// Code added here will be run once\n// whenever the node is started.\n\nnode.status('AMP ' + 0 + ' SoC ' + 0 + ' Count ' + 0)\n\ncontext.set('aSoC', 0)\ncontext.set('aAMP', 0)\ncontext.set('aArray', [0,0,0])\ncontext.set('aCount', 0)\ncontext.set('pFront', -1)\ncontext.set('pBack', -1)\n\nlet msg1 = {payload: 0}\nlet msg2 = {payload: 0}\nlet msg3 = {payload: 0}\n\nnode.send([msg1, msg2, msg3])\n","finalize":"","libs":[],"x":601.9999313354492,"y":488.99999618530273,"wires":[["986a2fc77fb5916c"],["f6c0433b9fd2f9d9"],["9774d3c2cb215fea"]]},{"id":"1b27664c69817970","type":"throttle","z":"8443e347bccc88bc","name":"","throttleType":"time","timeLimit":"3","timeLimitType":"minutes","countLimit":0,"blockSize":0,"locked":false,"x":261.40380859375,"y":201.5807638168335,"wires":[["2ec7a90cb6ca4f41"]]},{"id":"8ab317435b4cb534","type":"throttle","z":"8443e347bccc88bc","name":"","throttleType":"time","timeLimit":"3","timeLimitType":"minutes","countLimit":0,"blockSize":0,"locked":false,"x":191.40380859375,"y":335.58078287353516,"wires":[["906903ac2acc2219"]]},{"id":"394c472dad1cb04f","type":"victron-input-battery","z":"8443e347bccc88bc","service":"com.victronenergy.battery/512","path":"/Soc","serviceObj":{"service":"com.victronenergy.battery/512","name":"Pylontech battery"},"pathObj":{"path":"/Soc","type":"float","name":"State of charge (%)"},"name":"SoC","onlyChanges":false,"roundValues":"3","x":55.999969482421875,"y":121.41923141479492,"wires":[["b2bbf9aa00b650b4"]]},{"id":"319c9b590e89cde3","type":"victron-input-battery","z":"8443e347bccc88bc","service":"com.victronenergy.battery/512","path":"/Dc/0/Current","serviceObj":{"service":"com.victronenergy.battery/512","name":"Pylontech battery"},"pathObj":{"path":"/Dc/0/Current","type":"float","name":"Current (A)"},"name":"Charge Amps","onlyChanges":false,"roundValues":"3","x":75.99996948242188,"y":267.42308616638184,"wires":[["bfe5b2c30116d7fe"]]},{"id":"b2bbf9aa00b650b4","type":"time-range-switch","z":"8443e347bccc88bc","name":"7pm to 10am OFF","lat":"","lon":"","startTime":"19:00","endTime":"10:00","startOffset":0,"endOffset":0,"x":266.3961181640625,"y":121.25769424438477,"wires":[[],["1b27664c69817970"]]},{"id":"bfe5b2c30116d7fe","type":"time-range-switch","z":"8443e347bccc88bc","name":"7pm to 10am OFF","lat":"","lon":"","startTime":"19:00","endTime":"10:00","startOffset":0,"endOffset":0,"x":274.39996337890625,"y":267.26153848876953,"wires":[[],["8ab317435b4cb534"]]}]

1690113041666.png (250.6 KiB)
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

Additional resources still need to be added for this topic