Hallo Zusammen,
da ich hier schon Wochen verbracht habe um mir das Wissen für dieses Projekt anzueignen, möchte ich auch etwas zurück geben und das ganze Projekt mit euch teilen:
Es geht darum den Überschussstrom in einen Heizstab/Heizpatrone zu schicken, bevor die MPPTs die Leistung runter regeln und dies ohne Unsummen auszugeben.
Der Heizstab hat jeweils 1KW an L1/2/3 und an jedem hängt ein Shelly 1pluspm.
Das ganze wird nicht mit dem genauen Überschuss gespeist sonder, bei einem Akku Stand von 100%(>99.9) geht Shelly L1 an und löst für Shelly L2 eine Wartezeit von 5 Minuten aus. Nach diesen 5 Minuten schaut Shelly L2 ob der Akku immer noch auf 100% ist und schaltet dann den Shelly L2 ein. Dies löst wiederum 5 Minuten Wartezeit für Shelly L3 aus. Dieser schaut dann wieder nach ob der Akku immer noch 100% hat und geht dann an.
So ist gewährleistet, das der Akku nicht unnötig leergesaugt wird. Sollte Shelly L2 bei der Prüfung nach 5 Minuten feststellen das der Akku keine 100% mehr hat, geht er erst gar nicht an.
Nun zum Abschalten:
Shelly L3 geht bei <99.8 aus
Shelly L2 geht bei <99.6 aus
Shelly L1 und falls noch einer manuell an sein sollte, gehen alle spätestens bei <99.1 aus.
Der Heizstab/Heizpatrone ist ein (weil kein anderer in meinen Tank passte)
Elektro-Heizpatrone Triatherm 3.0 kW 1 1/2" AG 230/400V
und natürlich Node Red über meinem Cerbo GX
Die Steuerung mit Node Red:
Hier findet ihr den passenden Flow zum Import: (die IPs von den Shellys müsst ihr natürlich noch ändern)
[
{
"id": "c81232e966713e6f",
"type": "tab",
"label": "Flow 1",
"disabled": false,
"info": "",
"env": []
},
{
"id": "1559ad8c8e9f96c0",
"type": "victron-input-battery",
"z": "c81232e966713e6f",
"service": "com.victronenergy.battery/277",
"path": "/Soc",
"serviceObj": {
"service": "com.victronenergy.battery/277",
"name": "Batterie"
},
"pathObj": {
"path": "/Soc",
"type": "float",
"name": "State of charge (%)"
},
"initial": "",
"name": "",
"onlyChanges": true,
"roundValues": "2",
"x": 240,
"y": 40,
"wires": [
[
"5828d9f2b01e198d",
"dac2235f8e5a0ba4",
"234e4f489368fab0",
"17640f671806d38b",
"9ca6066b4571bc07"
]
]
},
{
"id": "e05ab10f5e055738",
"type": "shelly-gen2",
"z": "c81232e966713e6f",
"hostname": "192.168.178.x",
"description": "Heizpatrone L1 192.168.178.x",
"mode": "polling",
"server": "",
"outputmode": "event",
"uploadretryinterval": 5000,
"pollinginterval": 5000,
"pollstatus": true,
"getstatusoncommand": true,
"devicetype": "Relay",
"outputs": 1,
"credentials": {
"password": ""
},
"x": 730,
"y": 300,
"wires": [
[
"cb0dabf15d65b04c",
"37b3cea6c9ca6c4b",
"9a6d5fc9be32674c"
]
]
},
{
"id": "f2d9bc63c69d0c5c",
"type": "inject",
"z": "c81232e966713e6f",
"d": true,
"name": "An/Aus",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 640,
"y": 220,
"wires": [
[
"21f9786961cb2fcf"
]
]
},
{
"id": "21f9786961cb2fcf",
"type": "function",
"z": "c81232e966713e6f",
"d": true,
"name": "0 toggle",
"func": "msg.payload = {\n method: \"Switch.Toggle\",\n parameters : {\n id : 0,\n }\n};\nreturn msg;\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 770,
"y": 220,
"wires": [
[
"e05ab10f5e055738"
]
]
},
{
"id": "5828d9f2b01e198d",
"type": "function",
"z": "c81232e966713e6f",
"name": "SOC ueber 99.9 an",
"func": "if(msg.payload > 99.9) \nmsg.payload = {\n method: \"Switch.Set\",\n parameters : {\n id : 0,\n on : true,\n }\n};\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 480,
"y": 300,
"wires": [
[
"8be1886439da1b25",
"e05ab10f5e055738"
]
]
},
{
"id": "dac2235f8e5a0ba4",
"type": "function",
"z": "c81232e966713e6f",
"name": "SOC unter 99.1 aus",
"func": "if(msg.payload < 99.1) \nmsg.payload = {\n method: \"Switch.Set\",\n parameters : {\n id : 0,\n on : false,\n }\n};\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 220,
"y": 140,
"wires": [
[
"e05ab10f5e055738",
"aa0d0dc467d23f0b",
"577b791f6994a584"
]
]
},
{
"id": "aa0d0dc467d23f0b",
"type": "shelly-gen2",
"z": "c81232e966713e6f",
"hostname": "192.168.178.x",
"description": "Heizpatrone L2 192.168.178.x",
"mode": "polling",
"server": "",
"outputmode": "event",
"uploadretryinterval": 5000,
"pollinginterval": 5000,
"pollstatus": true,
"getstatusoncommand": true,
"devicetype": "Relay",
"outputs": 1,
"credentials": {
"password": ""
},
"x": 730,
"y": 420,
"wires": [
[
"41c21769c4958ef2",
"08c1b0665d2e5716",
"1b68cbc942f80e75"
]
]
},
{
"id": "577b791f6994a584",
"type": "shelly-gen2",
"z": "c81232e966713e6f",
"hostname": "192.168.178.x",
"description": "Heizpatrone L3 192.168.178.x",
"mode": "polling",
"server": "",
"outputmode": "event",
"uploadretryinterval": 5000,
"pollinginterval": 5000,
"pollstatus": true,
"getstatusoncommand": true,
"devicetype": "Relay",
"outputs": 1,
"credentials": {
"password": ""
},
"x": 730,
"y": 560,
"wires": [
[
"ff25626930298154",
"f5bd91519ac11eef",
"7ad20a85b9ead491"
]
]
},
{
"id": "8be1886439da1b25",
"type": "delay",
"z": "c81232e966713e6f",
"name": "Verzögerung 5 Minuten",
"pauseType": "delay",
"timeout": "5",
"timeoutUnits": "minutes",
"rate": "1",
"nbRateUnits": "1",
"rateUnits": "second",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": false,
"allowrate": false,
"outputs": 1,
"x": 230,
"y": 420,
"wires": [
[
"f2b1be58bc1499ad",
"5565c21418edd772"
]
]
},
{
"id": "f2b1be58bc1499ad",
"type": "function",
"z": "c81232e966713e6f",
"name": "SOC ueber 99.9 an",
"func": "if(msg.payload > 99.9) \nmsg.payload = {\n method: \"Switch.Set\",\n parameters : {\n id : 0,\n on : true,\n }\n};\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 480,
"y": 420,
"wires": [
[
"aa0d0dc467d23f0b"
]
]
},
{
"id": "5565c21418edd772",
"type": "delay",
"z": "c81232e966713e6f",
"name": "Verzögerung 5 Minuten",
"pauseType": "delay",
"timeout": "5",
"timeoutUnits": "minutes",
"rate": "1",
"nbRateUnits": "1",
"rateUnits": "second",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": false,
"allowrate": false,
"outputs": 1,
"x": 230,
"y": 560,
"wires": [
[
"46fee130a9cae3f7"
]
]
},
{
"id": "46fee130a9cae3f7",
"type": "function",
"z": "c81232e966713e6f",
"name": "SOC ueber 99.9 an",
"func": "if(msg.payload > 99.9) \nmsg.payload = {\n method: \"Switch.Set\",\n parameters : {\n id : 0,\n on : true,\n }\n};\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 480,
"y": 560,
"wires": [
[
"577b791f6994a584"
]
]
},
{
"id": "234e4f489368fab0",
"type": "debug",
"z": "c81232e966713e6f",
"d": true,
"name": "Batterie",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 930,
"y": 40,
"wires": []
},
{
"id": "08c1b0665d2e5716",
"type": "debug",
"z": "c81232e966713e6f",
"d": true,
"name": "L2",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload.switch0.apower",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1120,
"y": 400,
"wires": []
},
{
"id": "ff25626930298154",
"type": "debug",
"z": "c81232e966713e6f",
"d": true,
"name": "L3",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload.switch0.apower",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1120,
"y": 540,
"wires": []
},
{
"id": "cb0dabf15d65b04c",
"type": "ui_text",
"z": "c81232e966713e6f",
"group": "c3b48c626f49884a",
"order": 1,
"width": 0,
"height": 0,
"name": "",
"label": "L1",
"format": "{{msg.payload.switch0.apower}}",
"layout": "row-spread",
"className": "",
"x": 1120,
"y": 320,
"wires": []
},
{
"id": "41c21769c4958ef2",
"type": "ui_text",
"z": "c81232e966713e6f",
"group": "c3b48c626f49884a",
"order": 3,
"width": 0,
"height": 0,
"name": "",
"label": "L2",
"format": "{{msg.payload.switch0.apower}}",
"layout": "row-spread",
"className": "",
"x": 1120,
"y": 440,
"wires": []
},
{
"id": "f5bd91519ac11eef",
"type": "ui_text",
"z": "c81232e966713e6f",
"group": "c3b48c626f49884a",
"order": 5,
"width": 0,
"height": 0,
"name": "",
"label": "L3",
"format": "{{msg.payload.switch0.apower}}",
"layout": "row-spread",
"className": "",
"x": 1120,
"y": 580,
"wires": []
},
{
"id": "37b3cea6c9ca6c4b",
"type": "debug",
"z": "c81232e966713e6f",
"d": true,
"name": "L1",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload.switch0.apower",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1120,
"y": 280,
"wires": []
},
{
"id": "9a6d5fc9be32674c",
"type": "ui_text",
"z": "c81232e966713e6f",
"group": "c3b48c626f49884a",
"order": 2,
"width": 0,
"height": 0,
"name": "",
"label": "Shelly Temp",
"format": "{{msg.payload.switch0.temperature.tC}} C",
"layout": "row-spread",
"className": "",
"x": 1140,
"y": 360,
"wires": []
},
{
"id": "1b68cbc942f80e75",
"type": "ui_text",
"z": "c81232e966713e6f",
"group": "c3b48c626f49884a",
"order": 4,
"width": 0,
"height": 0,
"name": "",
"label": "Shelly Temp",
"format": "{{msg.payload.switch0.temperature.tC}} C",
"layout": "row-spread",
"className": "",
"x": 1140,
"y": 480,
"wires": []
},
{
"id": "7ad20a85b9ead491",
"type": "ui_text",
"z": "c81232e966713e6f",
"group": "c3b48c626f49884a",
"order": 6,
"width": 0,
"height": 0,
"name": "",
"label": "Shelly Temp",
"format": "{{msg.payload.switch0.temperature.tC}} C",
"layout": "row-spread",
"className": "",
"x": 1140,
"y": 620,
"wires": []
},
{
"id": "9ca6066b4571bc07",
"type": "function",
"z": "c81232e966713e6f",
"name": "SOC unter 99.6 aus",
"func": "if(msg.payload < 99.6) \nmsg.payload = {\n method: \"Switch.Set\",\n parameters : {\n id : 0,\n on : false,\n }\n};\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 360,
"y": 360,
"wires": [
[
"aa0d0dc467d23f0b"
]
]
},
{
"id": "17640f671806d38b",
"type": "function",
"z": "c81232e966713e6f",
"name": "SOC unter 99.8 aus",
"func": "if(msg.payload < 99.8) \nmsg.payload = {\n method: \"Switch.Set\",\n parameters : {\n id : 0,\n on : false,\n }\n};\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 360,
"y": 500,
"wires": [
[
"577b791f6994a584"
]
]
},
{
"id": "c3b48c626f49884a",
"type": "ui_group",
"name": "Warmwasser",
"tab": "c2f603e5.e52fe",
"order": 4,
"disp": true,
"width": "6",
"collapse": false,
"className": ""
},
{
"id": "c2f603e5.e52fe",
"type": "ui_tab",
"name": "ESS",
"icon": "dashboard",
"order": 2,
"disabled": false,
"hidden": false
}
]
Diese Shelly Palette und diese Victron Palette muss noch installiert werden:
Ich hoffe ich habe nichts vergessen und es kann jemanden weiterhelfen.
Lieben Gruß
René




