Eine Art Netzdienliches Laden mit Victron Node Red Flow

Hallo,

Ich habe mithilfe von ChatGPT einen Flow erstellt der das Laden auf die Zeit verlegt mit hohem PV Ertrag. Also vorrangiges Laden zur Mittagszeit. Der Flow läuft bei mir zuverlässig und ich würde mich freuen wenn jemand mit testet.

in der Global Defaults muss die Site ID eingetragen werden und bei Solar_FC und Cons_FC muss der eigene Access Token für die VRM API eingetragen werden.

Hier eine kleine KI Zusammenfassung der Funktion

Was der Flow insgesamt macht

  • Alle 15 Min (06–21 Uhr) holt er vom Victron VRM:

    • die PV-Ertragsprognose (vrm_pv_inverter_yield_fc)

    • die Verbrauchsprognose (vrm_consumption_fc)

  • Speichert beide als strukturierte Arrays im global context (global.forecast.pv und global.forecast.consumption).

  • Liest Batteriewerte vom BMS (SoC, verfügbare Ah, Spannung) und hält sie in global.battery.

  • Analysiert die Prognosen (Summen/Fenster/Nettobilanz) in global.analysis.forecast.

  • Berechnet daraus einen Ladeplan (“Charge Planner”) und setzt laufend das DVCC-Ladestromlimit auf dem Venus OS:

    • Service/Path: com.victronenergy.settings /Settings/SystemSetup/MaxChargeCurrent.

Zentrale Idee des Ladeplans

  • Ziel: Ziel-SoC bis kurz vor Ende der PV-Zeit erreichen (konfigurierbarer Vorlauf targetLeadHours), dabei PV-Spitzen priorisieren und Netzbezug vermeiden.

  • Rechnet den Energiebedarf bis zum Ziel-SoC (unter Berücksichtigung von Wirkungsgrad, Spannung, Kapazität).

  • Drei Hauptfälle:

    1. Notfall/Reserve: SoC < reserveSocPercent ⇒ sofort MaxA laden.

    2. PV reicht bis Deadline nicht ⇒ sofort MaxA (um trotzdem rechtzeitig fertig zu werden).

    3. Normalfall: Verteilte Ladung über die prognostisch besten PV-Stunden bis zum Zieltermin.

      • Für die aktuelle Stunde wird ein Watt-Sollwert aus Stundenanteil + Restbedarf/Restzeit berechnet, dann in Ampere (Spannung) umgerechnet.

      • Außerhalb geplanter Stunden: je nach Option 0 A (Grid vor PV vermeiden) oder minA (oder wenn gleich PV kommt/da ist).

Wichtige Konfiguration (einmalig gesetzt)

global.chargeCfg:

  • targetSocPercent, reserveSocPercent, chargeEff

  • maxA, minA, headroomW

  • pvThresholdWh (ab wann eine Stunde als “PV-Stunde” zählt)

  • targetLeadHours (wie viel früher vor PV-Ende fertig)

  • allowGridBeforePV (ob außerhalb Plan minA erlaubt ist)

  • capacityAh (Batteriekapazität, falls BMS-“availableAh” fehlt)

global.vrm.idSite muss auf deine VRM-Site-ID gesetzt werden.

Laufende Aktualisierung & Hilfen

  • „Aktualisieren“-Inject: alle 5 Min berechnet Analyse + Plan neu.

  • Debug/Status-Meldungen** zeigen Summen, nächste Stunde, Modus und geplantes Finish-Zeitfenster.

  • Reset-Knoten zum gezielten Löschen von globalen Context-Schlüsseln (z. B. nur analysis oder hart alles).

Welche Daten landen wo?

  • global.forecast.pv / .consumption: Stundenwerte + Tages-Totals.

  • global.battery: socPercent, availableAh, voltageV.

  • global.analysis.forecast: zusammengeführte Stunden mit netWh, Fenster (next 1/3/6 h, Rest), Totals.

  • global.analysis.chargePlan: Plan, geplante Stunden, aktueller Stundenmodus, berechnete Ampere.

Version1.txt (24,7 KB)

2 „Gefällt mir“

starkes Projekt, nur verstehe ich den Sinn nicht. Warum willst du mit PV nur dann laden, wenn die PROGNOSE die Grundlage ist, anstatt jederzeit zu laden, sobald Überschuss über den momentanen Verbrauch vorhanden ist und dann, aber auch erst dann, wenn der Speicher voll ist, die Erzeugung netzdienlich abzuschalten?

fragende Grüße

mobilsolar

Ich möchte die Erzeugung nicht abschalten sondern möchte die Leistungsspitzen zum laden nutzen.

Grundüberlegung bei dieser Anlage und des Setups:

Anlage hat 25kwp und aktuell 15kwh Akku (2. Akku ist noch nicht angeschlossen)
PV Einspeisung ist auf 60% gedrosselt

Ich möchte die Erzeugung zu Beginn des Tages einspeisen und im Haushalt selbst verbrauchen.
Sobald die Spitzenzeiten erreicht sind möchte ich beginnen den Akku zu laden um zum einen den weniger einzuspeisen und zum anderen die Effizienz der Anlage zu erhöhen.
Die Prognose soll die Spitzen ausfiltern und quasi eine Kappung erzeugen.

Es gibt noch weitere Überlegung bei Konfiguration.

In naher Zukunft kommt noch ein Pufferspeicher mit Heizpatrone dazu sowie in ferner Zukunft ein E-Auto.
Im Nachgang der Akkuladung sollen dann diese Verbraucher bedient werden.

Ein weiteres Ziel war, dass der Akku nicht direkt früh voll ist und den gesamten Tag mit SOC100% “rumsteht”.

Vielleicht ist der Titel nicht ganz richtig gewählt :slight_smile:

Liebe Grüße

1 „Gefällt mir“

Ich habe den Flow und die Ladelogik nochmal geändert um eine geänderte Ladekurve zu erzeugen und im Dashboard abzubilden.

  1. Dashboard

  1. Dashboard
    mit Statistik über die letzten 12 Wochen

flows.txt (74,6 KB)

In dem Flow nur die Site ID und Akkukapazität in den Default Settings ändern und in den API Key in den Victron API Nodes anpassen. In den Victron Nodes das BMS anpassen.

Der Flow passt die Ladekurve über den Tag verteilt an, sodass der Akku bis zu einer definierten Zeit voll ist. Voreingestellt ist fertig geladen bis 2h vor prognostizierter PV Verfügbarkeit.

Hier nochmal eine ChatGPT Zusammenfassung als PDF

Charge_Plan_Technische_Dokumentation.pdf (4,6 KB)

flows 1Prozent Bug.txt (81,9 KB)

Kleiner Bugfix.
Wenn SOC 1% wurde es als 100% interpretiert.
Im Dashboard ist Plan Start und Plan Ende eingefügt
Es gibt jetzt noch einen Wert minA außerhalb Plan

1 „Gefällt mir“

Hallo,

danke erstmal für die Bereitstellung des Scripts. Ich suche auch etwas um meine Batterie etwas zu schonen und netzdienlich aktiv zu sein. Ich habe Dein Script gerade installiert. Mal sehen was morgen passiert. Einige Dinge sind mir aufgefallen. Evtl. kannst Du die ja noch in einer neuen Version einarbeiten:

  • VRM Site ID ist fix hinterlegt, statt {{flow.vrm.idSite}} in solar total / grid direct use / solar to battery / solar direct use / battery direct use
  • SoC / Capacity, könnte man sinnvoll runden
  • Die Werte headroomW und pvThresholdWh müsstest Du bitte nochmal erklären. Was sollen diese bedeuten / machen?
  • Es wird noch das Dashboard 1.0 verwendet. Kannst Du das auf 2.0 updaten? Dann könnte man auch die aktualisierte Palette verwenden (@flowfuse/node-red-dashboard)
  • In Deiner Beschreibung wäre es hilfreich wenn Du die zu ladenden Paletten erwähnst: node-red-dashboard / node-red-node-ui-table sonst suchen Unerfahrene wie ich :slight_smile:
  • Beim deploy kommt der Hinweis, dass Ladeplan / Energie (ui_tab) und [Ladeplan] Plan-Status sowie [Energie] Einspeisung (ui_group) nicht verwendet werden.
  • Im Dashboard Energie ist in der Tabelle Batterieladung und Battery Verbrauch benannt. Batterieladung ist doch der Verbrauch des Tages ohne Batterie Verbrauch. Beide zusammengezählt ergeben richtigerweise den Gesamtverbrauch gemäß Dashboard im VRM. Stellt sich die Frage: Wird mit den Daten richtig gerechnet?
  • In den Settings wurde minA und minA Outside auf 0 gesetzt. Das Laden wird dann tagsüber linear durchgeführt, statt spätestmöglich. Ist das Absicht so?

Hallo,

danke erstmal für die Bereitstellung des Scripts. Ich suche auch etwas um meine Batterie etwas zu schonen und netzdienlich aktiv zu sein. Ich habe Dein Script gerade installiert. Mal sehen was morgen passiert. Einige Dinge sind mir aufgefallen. Evtl. kannst Du die ja noch in einer neuen Version einarbeiten:

  • VRM Site ID ist fix hinterlegt, statt {{flow.vrm.idSite}} in solar total / grid direct use / solar to battery / solar direct use / battery direct use
  • Bei mir ist es oft so, dass ich am Abends noch etwas das Auto lade. Ich möchte deshalb sicherstellen, dass die Batterie auf jeden Fall voll wird. Dazu stelle ich die Lead Time auf 2-3 Std. früher. Das Script beendet jedoch den Ladeplan dann auch früher und setzt ESS #6 (0A Ladung). Das ist schlecht, denn wenn die Batterie noch nicht voll wurde (Forecast trifft so nicht ein), läd sie nicht mehr weiter obwohl sie es könnte. Besser wäre es das Script, also den Ladeplan zu beenden und etwaigen anderen ESS Steuerungen wieder das Ruder zu überlassen.
  • SoC / Capacity, könnte man sinnvoll runden
  • Die Werte headroomW und pvThresholdWh müsstest Du bitte nochmal erklären. Was sollen diese bedeuten / machen?
  • Es wird noch das Dashboard 1.0 verwendet. Kannst Du das auf 2.0 updaten? Dann könnte man auch die aktualisierte Palette verwenden (@flowfuse/node-red-dashboard)
  • In Deiner Beschreibung wäre es hilfreich wenn Du die zu ladenden Paletten erwähnst: node-red-dashboard / node-red-node-ui-table sonst suchen Unerfahrene wie ich :slight_smile:
  • Beim deploy kommt der Hinweis, dass Ladeplan / Energie (ui_tab) und [Ladeplan] Plan-Status sowie [Energie] Einspeisung (ui_group) nicht verwendet werden.
  • Im Dashboard Energie ist in der Tabelle Batterieladung und Battery Verbrauch benannt. Batterieladung ist doch der Verbrauch des Tages ohne Batterie Verbrauch. Beide zusammengezählt ergeben richtigerweise den Gesamtverbrauch gemäß Dashboard im VRM. Stellt sich die Frage: Wird mit den Daten richtig gerechnet?