Smarte PV-Regelung

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Gersti
    Dumb Home'r
    • 07.04.2022
    • 13

    #1

    Smarte PV-Regelung

    Liebes Forum,

    ich möchte euch gerne meine Smarte PV-Regelung vorstellen, die ich in den vergangen Wochen in der Loxone mittels 2 Programmen und diversen Variabeln erstellt habe. Vorweg: ich kann nicht programmieren und habe das Programm mit einer KI verfasst und mittels Try&Error getestet. Bei mir funktioniert es soweit.
    Fragen beantworte ich gerne, ich bin aber nicht jeden Tag online, also bitte nicht böse sein, wenn es mal etwas länger dauert bis ich Fragen dazu beantwortet habe.
    Ich übernehme auch keine Verantwortung für etwaige Schäden oder ähnliches durch die Nutzung dieser Programmierung.

    Zur Ausgangssituation:
    ich habe eine 12kWp PV-Anlage mit einem Fronius Wechselrichter und einer BYD 22kWh Batterie, die ich vollständig über Modbus in Loxone integriert habe und dementsprechend auch steuern kann. Zusätzlich habe ich noch eine alte, unregelbare 6kWp PV-Anlage mit einem Danfoss Wechselrichter. Ich nutze einen Stundentarif von Smart Energy sowohl für den Strombezug als auch für die Einspeisung (--> für die Einspeisung bekomme ich 80% des Bezugstarifes, zahle somit bei negativen Strompreisen "Strafe").
    Ich nutze den Loxone Energiemanager für die Ansteuerung diverser Verbraucher (Tiefkühler, Pool Umwälzpumpe, Klimaanlage, stufenlosen 3kW Heizstab usw..) jedoch habe ich die Batterie nicht in den Energiemanager eingebunden, da dadurch meine Regelstrategie gestört wurde. Für das Warmwasser (stufenloser 3kW Heizstab) habe ich ein zusätzliches Programm geschrieben, da ich an diesen spezielle Anforderungen hatte - dazu später mehr).
    Ich habe auch ein E-Auto, mit dem ich aber Montag bis Freitag unterwegs bin und somit nicht von Überschusstrom zu Mittag profitieren kann, sprich ich muss die Ladung entweder aus der Batterie machen oder zu den günstigsten Stunden in der Nacht.
    Mein Ziel war es, eine PV-Strategie zu entwickeln, die möglichst alle Einflussfaktoren berücksichtigt, eine hohe Eigenbedarfsabdeckung generiert und gleichzeitig aber auch durch einen optimierten Stromverkauf, den wirtschaftlichen Ertrag steigert.
    Darüberhinaus soll aber auch der günstige Nachtstrom im Winter genutzt werden, um die Batterie dort aufzuladen und unter Tags bei teuren Strombezugsstunden keine Energie aus dem Netz zu ziehen.

    Das System besteht aus drei eigenständigen Pico-C-Programmen:


    1. Programm: "PV-Prognose-Manager" (Batteriemanagement)
    Dieses Programm analysiert PV-Prognosen für heute und morgen und berechnet, ob und wie die Batterie geladen oder entladen werden soll, um den Tagesverbrauch optimal abzudecken.

    Eingänge (I1 - I9)
    • I1 (cap_wh): Batteriekapazität in Wh. --> kommt vom Fronius WR
    • I2 (soc_act_pct): Aktueller SoC in %. --> kommt vom Fronius WR
    • I3 (soc_min_pct): Minimaler SoC in %. --> Virtueller Eingang den ich verstellen kann, und bildet die Entladegrenze ab.
    • I4 (sol_tm): PV-Prognose morgen (kWh). --> Loxberry PV-Sol Forecast
    • I5 (verbrauch): Ø Tagesverbrauch (letzte 7 Tage in kWh). --> Mittels Analogspeicher erstellte, weitergeschriebene Tagesverbräuche der letzten 7 Tage
    • I6 (korr_tm): Wetter-Korrekturfaktor morgen. --> Loxberry Weather for Loxone, Openweather map --> für jeden Wettertyp habe ich einen Korrekturfaktor hinterlegt (z.Bsp.: klarer Himmel = 1; Nebel = 0,1,....)
    • I7 (sol_td): PV-Prognose heute (kWh).--> Loxberry PV-Sol Forecast
    • I8 (korr_td): Wetter-Korrekturfaktor heute. --> gleich wie oben
    • I9 (pv_top): PV-Leistung Ø der TOP 4 Stunden heute. --> Loxberry PV-Sol Forecast
    Ausgänge (AQ1 - AQ5)
    • AQ1 (Beladestatus): 0 = Beladung sofort, 1 = PV-Ladung intelligent.
    • AQ2 (Demand Faktor): wieviel h braucht die PV Anlage für die Batterieladung
    • AQ3 (Entlade-Status): 1=Max, 2=Optimiert, 3=Keine Entladung.
    • AQ4 (Entlade-Wert): Zielwert für Entladung (kWh / 6).
    • AQ5 (Netz-Ladewert): wieviel h braucht das Netz für die PV Ladung (kWh / 9.5).
    • AQ6 (PV-Potential morgen): wieviel kwh kann die PV morgen produzieren (korrigerter Wert)
    • AQ7 (PV-Potential heute): wieviel kwh kann die PV heute produzieren (korrigerter Wert)
    In der zweiten Grafik (Batteriemanagement 1) sieht man wie ich die Ein und Ausgänge verbunden habe. Beim Spotpreisoptimierer für die Entladung habe ich bei der Preisberechnung I1*-1, den Wirksinn des Spotpreisoptimierers umgekehrt, sodass er mir dann immer die "teuersten" Stunden auswirft.
    Der Merker Strompreis Brutto negativ, kommt von einem anderen Spotpreisoptimierer, wo ich als Preiskorrektur das Netz, die Abgaben und die Umsatzsteuer dazurechne.

    Mit den erhalten Werten gehts weiter zu 2 Status Bausteinen, welche die Entscheidung über den PV-Betriebsmodus treffen (siehe Schaltbild "Batteriemanagement2), die Bedingungen findet ihr in den Bildern 4. Status Enladeprozess und 5. Status Batterie Automatik.
    Für die Leistungsreduktion des Wechselrichters habe ich ebenfalls einen Status Baustein verwendet (6. Status Leistungsreduktion) --> wird im nächsten Post angehängt

    Dann kommen wir schon zum Programm (wird im nächsten Post mit einer bisschen detailierten Beschreibung angehängt), welches den Wechselrichter und das Batteriemanagement steuert.

    2. Programm: "Wechselrichter-Controller"
    Dieses Programm steuert aktiv den Wechselrichter über Modbus. Es enthält einen "Gummiband-Regler" (Nullpunkt-Regelung) und einen Netzschutz. Eingänge (I1 - I13)
    • I1 (Mode): Strategie-Modus (0=Entl.block bis 5=Netzladen).
    • I3 (nRed): Reduktions-Modus (0=Normal, 1=Nullpunkt, 2=Saug).
    • I4 (nMan): Manueller Modus-Override.
    • I5/I6: Manuelle Lade-/Entladebegrenzung.
    • I7 (evLaed): Wallbox aktiv?
    • I9 (gMax): Max. erlaubte Netzleistung (z.B. 6000W).
    • I10/I11: Leistungsdaten für Netzschutz.
    • I13 (pGrid): Aktuelle Netzleistung (W).
    Ausgänge (AQ1 - AQ6)
    • AQ1 (nMode): Aktiver Modus an Wechselrichter.
    • AQ2/AQ3: Lade-/Entladelimits.
    • AQ4 (WR-Limit): Leistungsbegrenzung in 0.01% (Modbus).
    • AQ5 (Limit-Aktiv): Schaltet WR-Regelung ein/aus.
    • AQ6 (Mode-Echo): Rückmeldung des aktuellen Modus.
    Warum diese Logik? (Das "Geheimnis")

    Die Kombination beider Programme löst drei Probleme:
    1. Vorausschauendes Laden: Durch den Prognose-Manager wird die Batterie nur dann mit Netzstrom geladen, wenn die PV-Prognose morgen nicht ausreicht.
    2. Stabilität durch Dämpfung: Die Regelung im Wechselrichter-Controller verwendet eine Zykluszeit von 3 Sekunden (sleep(3000)) und einen Dämpfungsfaktor (0.1), um ein Schwingen des Wechselrichters zu verhindern.
    3. Netzschutz: Der Netzschutz greift hart ein, wenn der Bezug den Schwellwert (gMax) übersteigt, um das Stromnetz und die Hardware zu schonen.
    Wichtige Hinweise für den Nachbau
    • Zykluszeit: sleep(3000) ist essenziell für die CPU-Schonung und Stabilität der Modbus-Kommunikation.
    • Dämpfung: Der Faktor 0.1 ist ein guter Startwert. Sollte der Regler zu langsam reagieren, kann er in 0.05er Schritten erhöht werden.
    • Modbus-Werte: Sicherstellen, dass die Faktoren (wie FAKTOR = 0.01) genau mit den Registern deines Wechselrichter-Typs übereinstimmen.
    Wie oben schon erwähnt, funktioniert das in meiner Programmierung sehr gut soweit. Aber es ist keine Plug&Play Version, sondern speziell auf meinen Bedarf abgestimmt. Ich wollte es aber trotzdem veröffentlichen, da ich denke, der ein oder ander hat eine ähnliche Situation und kann davon profitieren. Immerhin verfolgt diese Strategie tatsächlich mehrere Ansätze: Eigenbedarfsoptimierung, Stromnetzstabilisieren (sowohl im Winter als auch im Sommer), Erhöhung der Ökoenergie im Netz (durch Rückeinspeisung zu anderen Stunden) usw...

    Fragen oder Verbesserungen zum Programm beantworte ich gerne, aber wie gesagt, ich bin kein Programmierer noch kenn ich mich mit Modbus öder ähnlichem wirklich gut aus. ist alles Hobby...

    LG und viel Spass
    Angehängte Dateien
    Zuletzt geändert von Gersti; vor 16 Stunden.
  • Gersti
    Dumb Home'r
    • 07.04.2022
    • 13

    #2
    Exkurs Programmbeschreibung PV-Steuerung:

    Dieses Skript fungiert als aktiver Regler zwischen dem Hausnetz (Netzanschluss) und dem Wechselrichter. Ziel ist es, den Netzbezug am Zählpunkt bei 0 zu halten (Nullpunkt-Regelung) oder bei Bedarf gezielt Netzstrom in die Batterie zu ziehen (Saugfunktion), ohne die Netzanschlussgrenze zu verletzen.

    1. Die Eingangslogik (Die "Sensoren")
    • nMode & nRed: Diese definieren die Betriebsstrategie. nMode entscheidet über die erlaubte Richtung (Laden/Entladen), nRed den Regelalgorithmus.
    • pGrid: Das Herzstück. Ein negativer Wert bedeutet Einspeisung, ein positiver Wert bedeutet Netzbezug. Das Skript versucht, diesen Wert durch Anpassung der Wechselrichterleistung auf 0 zu ziehen.
    2. Sicherheits-Layer: Der Netzschutz (Netzüberlastung)
    • Was wird berechnet? Hier wird geprüft, ob der aktuelle Netzbezug pGrid die maximal erlaubte Grenze gMax (abzüglich eines Sicherheitspuffers) überschreitet.
    • Warum? Wenn im Haus große Verbraucher (Wallbox, Herd, WP) gleichzeitig laufen, darf der Wechselrichter nicht zusätzlich Netzbezug verursachen, der die Hauptsicherung auslöst.
    • Wie? Sobald pGrid den kritischen Punkt überschreitet, berechnet das Skript eine Drosselung (nCalc). Der Wert wird gespeichert (ziel_leistung_mem) und notfalls als hartes Limit an den Wechselrichter gesendet.
    3. Hauptlogik-Weichen (Die "Entscheidungsfindung")
    • Nullpunkt-Regelung (nRed = 1): "Das Gummiband"
      • Ziel: Eigenverbrauch maximieren, Einspeisung minimieren.
      • Logik: Das Skript prüft pGrid.
        • Bezug (pGrid > 0) -> Das Programm erhöht das current_limit (WR-Leistung hoch).
        • Einspeisung (pGrid < 0) -> Das Programm senkt das current_limit (WR-Leistung runter).
      • Warum Dämpfung? Durch den Multiplikator 0.1 und die Zykluszeit von 3s („Gummiband-Effekt“) reagiert der WR nicht auf jede Kaffeemaschine, die 10 Sekunden läuft. Er "mittelt" das Rauschen aus.
    • Saugfunktion (nRed = 2):
      • Ziel: Netzstrom "absaugen", wenn er sehr günstig oder negativ ist.
      • Logik: Der Wechselrichter wird angewiesen, die Batterie mit der maximal verfügbaren Leistung aus dem Netz zu laden, solange der Netzschutz (Block 2) nicht eingreift.
    • Normalbetrieb (nRed = 0):
      • Hier greifen direkte Modus-Vorgaben. Je nach nMode wird dem Wechselrichter explizit gesagt: "Jetzt darfst du PV-Strom sofort in die Batterie schicken" oder "Batterie komplett blockieren" (z.B. bei EV-Ladung oder vollem Speicher).
    4. Die mathematische "Magie" (Glättung & Begrenzung)
    • Hysterese (bei nRed = 0, Modus 5): Um ein "Springen" der Leistung zu verhindern, vergleicht das Skript den neuen Wert mit dem last_nachlade-Wert. Nur wenn die Differenz größer als 2 % ist, wird neu geregelt. Das schont die Modbus-Kommunikation massiv.
    • Type-Casting & Normierung: Die Loxone arbeitet intern oft mit 0-100%, der Modbus mit 0-10.000. Die Umrechnung über den Faktor 0.01 sorgt dafür, dass die Loxone-Oberfläche für den Nutzer intuitiv bedienbar bleibt, während der Wechselrichter die korrekten Maschinendaten erhält.
    Zusammenfassung der Regelungs-Philosophie

    Das Programm verfolgt das Prinzip der "Trägheit als Stabilitätsfaktor".Anstatt zu versuchen, den Wechselrichter in Echtzeit (Millisekunden) zu steuern (was physikalisch unmöglich ist und zu Schwingungen führt), erzwingt das Skript durch den 3-Sekunden-Takt und den Dämpfungsfaktor ein sanftes Annähern an den Zielwert. Es ist ein "langsamer, aber stetiger" Regler.

    Angehängte Dateien

    Kommentar

    • Gersti
      Dumb Home'r
      • 07.04.2022
      • 13

      #3
      Ergänzend dazu stelle ich gerne noch die Regelungsbeschreibung der Programme als word dokument (einmal einfach, einmal professionieller) zur Verfügung. Wurde auch KI generiert
      Angehängte Dateien

      Kommentar

      Lädt...