Hallo,
dies ist sicher eher ein Thema für den Bereich “Modifications”. Da es aber nur den deutschsprachigen Bereich und da im wesentlichen Baden Württemberg betrifft schreibe ich es hier.
Transneft BW hat eine APP erstellt, die die Belastung ihres Stromnetzes veröffentlicht. Es soll vor allem dazu dienen den eigenen Stromverbrauch zu verschieben.
Den Status kann man auch per API auslesen und damit seine Anlage steuern. Das Konzept ist geeignet für Leute, die keinen Dynamischen Stromtarif möchten, sich aber gerne Netzdienlich verhalten wollen. In Süddeutschland ist ein Dynamischer Stromtarif im Winter auch nicht netzdienlich, da der Windstrom von Norden nicht durchkommt.
Ich habe ein Node Red Folge erstellt, die diese API ausliest und Venus GX / VRM Portal zu verfügung stellt.
Zum Nutzen muss man Venus Large aktivieren: https://www.victronenergy.com/live/venus-os:large
Dann über “Import” den folgenden code importieren (einfach kopieren und in das Feld kopieren) Dann auf Deploy gehen, die DEBUG Node sollte dann eine der Zahlen -1, 1, 3 oder 4 anzeigen, wahrscheinlich 1.
[
{
"id": "4ea20daa9db15081",
"type": "http request",
"z": "3a7714b5def82776",
"name": "Strom gedacht API Status",
"method": "GET",
"ret": "obj",
"paytoqs": "ignore",
"url": "https://api.stromgedacht.de/v1/now?zip=79589",
"tls": "",
"persist": false,
"proxy": "",
"insecureHTTPParser": false,
"authType": "",
"senderr": false,
"headers": [],
"x": 330,
"y": 340,
"wires": [
[
"351e8bd83d7fe189"
]
]
},
{
"id": "1624e4db7a8f84a1",
"type": "inject",
"z": "3a7714b5def82776",
"name": "",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "1800",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 130,
"y": 340,
"wires": [
[
"4ea20daa9db15081"
]
]
},
{
"id": "351e8bd83d7fe189",
"type": "json",
"z": "3a7714b5def82776",
"name": "",
"property": "payload",
"action": "obj",
"pretty": false,
"x": 530,
"y": 340,
"wires": [
[
"6a6de515f980e923",
"80804a3c06856fa0"
]
]
},
{
"id": "6a6de515f980e923",
"type": "function",
"z": "3a7714b5def82776",
"name": "Extract state",
"func": "// Extract the state from the response\nvar state = msg.payload.state;\n// Set the state as the new payload\nmsg.payload = state;\nreturn msg;",
"outputs": 1,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 150,
"y": 460,
"wires": [
[
"1d9d61ee46b2f716"
]
]
},
{
"id": "80804a3c06856fa0",
"type": "debug",
"z": "3a7714b5def82776",
"name": "debug 65",
"active": true,
"tosidebar": false,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 700,
"y": 340,
"wires": []
},
{
"id": "1d9d61ee46b2f716",
"type": "change",
"z": "3a7714b5def82776",
"name": "Store Status Strom gedacht",
"rules": [
{
"t": "set",
"p": "Status",
"pt": "flow",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 420,
"y": 460,
"wires": [
[
"ac53d622f02f504f"
]
]
},
{
"id": "ac53d622f02f504f",
"type": "debug",
"z": "3a7714b5def82776",
"name": "debug 66",
"active": true,
"tosidebar": false,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 700,
"y": 460,
"wires": []
},
{
"id": "2fe1b3fba11ccc6f",
"type": "comment",
"z": "3a7714b5def82776",
"name": "Strom gedacht Status",
"info": "supergrün := -1\ngrün := 1\norange := 3\nrot := 4",
"x": 140,
"y": 260,
"wires": []
}
]
Der Status wird ausgegeben als
-1 : “supergrün” (jetzt bevorzugt Strom verbrauchen)
1 : “grün” (normal)
3 : “orange” (Engpass wegen zu viel Wind im Norden und wenig Netzkapazität, Verbrauch reduzieren)
4 : “rot” (überlastetes Stromnetz, Verbrach reduzieren)
Ich hänge dann noch mein Beispiel an. Ich steuere nicht meine Waschmaschine, sondern möchte meine Batterie nachts von 0 bis 4 Uhr so laden, dass es für meinen Verbrauch von 6 bis etwa 9 Uhr morgens reicht. In dem Bereich sind die Strompreise meist hoch. Warnung: Die Verluste von Speichern/Ausspeichern trage ich. Es ist so eingestellt, dass ich von Montag bis Freitag etwa 3 kWh täglich lade. Das macht bei 120 Tagen von November bis Februar und 32 ct pro kWh 16.50 Euro. Das bekomme ich im Sommer sicher zuviel, ich will hier aber keine moralische Diskussion anstossen. Es muss sich jeder selber überlegen, ob es das Wert ist.
Die beiden unteren Linien:
Der maximale Ladestrom wird um 0:05 auf 20 A gestellt. Ich habe einen Multiplus II 3000, der dann mit etwa 1000 W im effektiven Bereich lädt. Das muss man natürlich auf sein System anpassen.
um 5:45 wir der Ladeflow dann wieder auf 50 A gesetzt, kann man MPII eh nicht, muss man bei grösseren Anlagen anpassen.
Die Zeiten und die SOC Ziele, über die ich steuere kann man immer in den linken “Inject” Node ändern. ungewünschte Node kann man auch erst einmal deaktivieren, oder halt löschen.
und der Code
[
{
"id": "f8778db15b190997",
"type": "switch",
"z": "3a7714b5def82776",
"name": "Status Supergrün \"-1",
"property": "Status",
"propertyType": "flow",
"rules": [
{
"t": "lte",
"v": "0",
"vt": "str"
},
{
"t": "gt",
"v": "1",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 460,
"y": 1000,
"wires": [
[
"5585af0ef74ce0da"
],
[
"5da48ddb3bb16b81"
]
]
},
{
"id": "80c6d0f724605ad8",
"type": "inject",
"z": "3a7714b5def82776",
"name": "0:00 bis 5:00 h 100% SOC",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "*/15 0-4 * * *",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "100",
"payloadType": "num",
"x": 180,
"y": 1000,
"wires": [
[
"f8778db15b190997"
]
]
},
{
"id": "5585af0ef74ce0da",
"type": "victron-output-ess",
"z": "3a7714b5def82776",
"service": "com.victronenergy.settings",
"path": "/Settings/CGwacs/BatteryLife/MinimumSocLimit",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "Venus settings"
},
"pathObj": {
"path": "/Settings/CGwacs/BatteryLife/MinimumSocLimit",
"type": "integer",
"name": "Minimum Discharge SOC (%)",
"writable": true
},
"name": "Laden auf SOC ",
"onlyChanges": false,
"x": 840,
"y": 1100,
"wires": []
},
{
"id": "27628cd2b640ce89",
"type": "inject",
"z": "3a7714b5def82776",
"name": "6:00 h 40% SOC",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "00 06 * * *",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "40",
"payloadType": "num",
"x": 150,
"y": 1160,
"wires": [
[
"5585af0ef74ce0da"
]
]
},
{
"id": "ccd7b191f2f65fae",
"type": "switch",
"z": "3a7714b5def82776",
"name": "Status Grün \"1\"",
"property": "Status",
"propertyType": "flow",
"rules": [
{
"t": "eq",
"v": "1",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 440,
"y": 940,
"wires": [
[
"5585af0ef74ce0da"
]
]
},
{
"id": "3332f690949a54c7",
"type": "inject",
"z": "3a7714b5def82776",
"name": "0:00 bis 4:00 70%SOC",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "*/15 0-3 * * 1,2,3,4,5",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "70",
"payloadType": "num",
"x": 170,
"y": 940,
"wires": [
[
"ccd7b191f2f65fae"
]
]
},
{
"id": "0a6cc644d1c3e7e0",
"type": "change",
"z": "3a7714b5def82776",
"name": "Store SOC",
"rules": [
{
"t": "set",
"p": "SOC",
"pt": "flow",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 470,
"y": 860,
"wires": [
[
"d150e3302475b712"
]
]
},
{
"id": "5c3ba7f1acf26fad",
"type": "victron-input-battery",
"z": "3a7714b5def82776",
"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": "",
"onlyChanges": false,
"roundValues": "1",
"x": 190,
"y": 860,
"wires": [
[
"0a6cc644d1c3e7e0"
]
]
},
{
"id": "d150e3302475b712",
"type": "debug",
"z": "3a7714b5def82776",
"name": "SOC",
"active": false,
"tosidebar": false,
"console": false,
"tostatus": true,
"complete": "payload",
"targetType": "msg",
"statusVal": "payload",
"statusType": "auto",
"x": 690,
"y": 860,
"wires": []
},
{
"id": "5da48ddb3bb16b81",
"type": "change",
"z": "3a7714b5def82776",
"name": "Bei orange oder rot laden stoppen",
"rules": [
{
"t": "set",
"p": "payload",
"pt": "msg",
"to": "SOC",
"tot": "flow"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 500,
"y": 1060,
"wires": [
[
"5585af0ef74ce0da"
]
]
},
{
"id": "e0109c084e5baf71",
"type": "switch",
"z": "3a7714b5def82776",
"name": "Status rot \"4\"",
"property": "Status",
"propertyType": "flow",
"rules": [
{
"t": "gt",
"v": "3",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 440,
"y": 1200,
"wires": [
[
"5585af0ef74ce0da"
]
]
},
{
"id": "14977e43130dab66",
"type": "inject",
"z": "3a7714b5def82776",
"name": "Prüfen auf Strommangel \"rot\"",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "1800",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "25",
"payloadType": "num",
"x": 190,
"y": 1200,
"wires": [
[
"e0109c084e5baf71"
]
]
},
{
"id": "d871233c1b7754ea",
"type": "victron-output-ess",
"z": "3a7714b5def82776",
"service": "com.victronenergy.settings",
"path": "/Settings/SystemSetup/MaxChargeCurrent",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "Venus settings"
},
"pathObj": {
"path": "/Settings/SystemSetup/MaxChargeCurrent",
"type": "float",
"name": "Charge current limit (A)",
"writable": true
},
"name": "",
"onlyChanges": false,
"x": 680,
"y": 1300,
"wires": []
},
{
"id": "ebaedabe8ba2e85a",
"type": "inject",
"z": "3a7714b5def82776",
"name": "0:05 h Max charge 20 A",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"v": "",
"vt": "num"
}
],
"repeat": "",
"crontab": "05 00 * * 1,2,3,4,5,0",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "20",
"payloadType": "num",
"x": 190,
"y": 1300,
"wires": [
[
"d871233c1b7754ea"
]
]
},
{
"id": "3b2c3bead45ce6fb",
"type": "inject",
"z": "3a7714b5def82776",
"name": "5:45 h Max charge 50 A",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"v": "",
"vt": "num"
}
],
"repeat": "",
"crontab": "45 05 * * *",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "50",
"payloadType": "num",
"x": 190,
"y": 1380,
"wires": [
[
"3f342b865febc7d7"
]
]
},
{
"id": "3f342b865febc7d7",
"type": "victron-output-ess",
"z": "3a7714b5def82776",
"service": "com.victronenergy.settings",
"path": "/Settings/SystemSetup/MaxChargeCurrent",
"serviceObj": {
"service": "com.victronenergy.settings",
"name": "Venus settings"
},
"pathObj": {
"path": "/Settings/SystemSetup/MaxChargeCurrent",
"type": "float",
"name": "Charge current limit (A)",
"writable": true
},
"name": "",
"onlyChanges": false,
"x": 680,
"y": 1380,
"wires": []
},
{
"id": "1d8d0306e277a4db",
"type": "inject",
"z": "3a7714b5def82776",
"name": "5:30 h check orange -> 40",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "",
"crontab": "30 05 * * *",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "40",
"payloadType": "num",
"x": 180,
"y": 1100,
"wires": [
[
"fb2c190151933df0"
]
]
},
{
"id": "fb2c190151933df0",
"type": "switch",
"z": "3a7714b5def82776",
"name": "Status Strom Gedacht ",
"property": "Status",
"propertyType": "flow",
"rules": [
{
"t": "lte",
"v": "0",
"vt": "str"
},
{
"t": "gt",
"v": "1",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 460,
"y": 1100,
"wires": [
[],
[
"5585af0ef74ce0da"
]
]
}
]
Ich habe selber wenig Ahnung vom Programmieren und AI musste mir etwas helfen (Ich habe mir nicht den Code ausgeben lassen, sondern die Schritte, welche Node ich zusammenstellen muss für das API lesen. Ich hätte lieber etwas wie dieses gefunden und hoffe, das es jemand gebrauchen kann. Wenn Suedlink dann mal fertig ist, oder es zwei sTrompreiszonen gibt, kann ich auch das DESS ausprobieren. Schreib doch einen kurzen Kommentar, wenn du es nutzt.