Skalierbare high-end, cheap-tech Nulleinspeisung mit Volkszähler-Monitor und tibber-Integration

Ich kann mir nur schwer vorstellen, dass Spüler und Trockner takten. ?

Was den Überschuss angeht, solltest du es alleine über "free_power" lösen!

Je nachdem, wie groß deine PV und dein Grundverbrauch sind, solltest du die "0.5" ersetzen:

free_power = int(( bat_cont - 53.0)*10 *0.5)

Angenommen, du hast 1000 Wp PV und im eSmart 58V Lade-Endspannung eingestellt, dann wärst du bei: 58-53 = 5 V * 10 Schritte, also 50 Stufen.

Dann kommst du bei 1000 Wp (- Grundverbrauch W) / 50 Stufen auf "20" Watt/Zehntelvolt für die Formel. Auch da gilt: Herantasten. Beobachten.

Alles andere hat mit Überschuss nichts zu tun, sondern behindert nur den Laderegler bei der Arbeit!

  1. [quote data-userid="6567" data-postid="110035"]
[quote data-userid="9945" data-postid="109775"]

Denkst du es gibt eine elegantere Stelle im Script wo/wie man es lösen könnte das generell immer die PV-Leistung freigegeben wird die noch eingepeist ins Netz als Überschuss eingespeist werden könnte?

[/quote]

Ich kann mir nur schwer vorstellen, dass Spüler und Trockner takten. ?

Was den Überschuss angeht, solltest du es alleine über "free_power" lösen!

Je nachdem, wie groß deine PV und dein Grundverbrauch sind, solltest du die "0.5" ersetzen:

free_power = int(( bat_cont - 53.0)*10 *0.5)

Angenommen, du hast 1000 Wp PV und im eSmart 58V Lade-Endspannung eingestellt, dann wärst du bei: 58-53 = 5 V * 10 Schritte, also 50 Stufen.

Dann kommst du bei 1000 Wp (- Grundverbrauch W) / 50 Stufen auf "20" Watt/Zehntelvolt für die Formel. Auch da gilt: Herantasten. Beobachten.

Alles andere hat mit Überschuss nichts zu tun, sondern behindert nur den Laderegler bei der Arbeit!

[/quote]

Takten war hier das falsche Wort. Meinte eher die periodischen aufheizphasen. Da wäre es ja auch schon gut wenn man die erkennt und sozusagen vorsteuern kann :wink:

Welche taktenden geräte kamen dir denn in den Sinn :)?

Bzgl. free Power hatte ich mir jetzt meine eigene Formel gemacht die ähnlich wie deine Formel Free Power entsprechend erhöht bis zur Ladeschlussspannung. Funktionierte heute sehr sauber. Habe halt viel Rum probiert dass immer die Wechselrichter Verluste mit einberechnet werden damit man quasi am Ende konstant auf einer Spannung nahe der Ladeschlussspannung bleibt und die Batterie nur minimal geladen und entladen wird.

Ansatz ist etwas anders als deiner da ich ab einem bestimmten Punkt direkt die volle PV Leistung einspeisen möchte und der Ladestand der Batterie gleichbleiben soll. Über die Formel würde ich halt nur nach und nach etwas mehr Leistung freigeben. Klar kann ich dann gröbere Schritte wählen aber das hat mir bisher zu viel herum geschwungen. Vielleicht habe ich aber auch noch nicht genug Tuning Arbeit rein gesteckt :wink:

Wenn es fertig ist werde ich es auch Mal vorstellen :slight_smile:

[quote data-userid="9945" data-postid="110109"]
Ansatz ist etwas anders als deiner da ich ab einem bestimmten Punkt direkt die volle PV Leistung einspeisen möchte und der Ladestand der Batterie gleichbleiben soll. Über die Formel würde ich halt nur nach und nach etwas mehr Leistung freigeben. Klar kann ich dann gröbere Schritte wählen aber das hat mir bisher zu viel herum geschwungen. Vielleicht habe ich aber auch noch nicht genug Tuning Arbeit rein gesteckt :wink:

Wenn es fertig ist werde ich es auch Mal vorstellen :slight_smile: [/quote]

Selber- und Mitmachen, das ist OpenSource! Ich bin gespannt, was du dir ausgedacht hast.

Trotzdem glaube ich, das in deinem Fall die günstigste Option diese ist:

eine powercurve wie in der Variante B bei der Leistungsanpassung: z.B. [ 20,30,50,70,100,90,...] in % PV Peak

aber diesmal eben für die Überschussregelung. Dann kommst du dem Laderegler nicht in die Quere und kannst die Ladepunkte beliebig hin- und herschieben.

Hallo zusammen,

erstmal ein großes Lob an dich E-t0m, deine Umsetzung incl. Dokumentation ist große Klasse. Du hast mich sogar soweit überzeugt, dass ich jetzt in der Vorbereitung bin, das ganze auch bei mir Umzusetzen.

Vorab: ich habe seit ca. einem Jahr eine Balkon-PV und erweitere diese gerade.

- 2x 405W Longi Solar

- 1x Growatt MIC 600TL-X

- Ausrichtung 5° S

In den nächsten Tagen werde ich den Growatt WR durch einen Hoymiles HM-1500 ersetzen und zwei weitere Module mit je 420 Watt aufhängen.

Bislang versuche ich durch "intelligente" Regelungen per HomeAssistant die Eigennutzung der PV-Leistung zu maximieren. Trotzdem geht einiges ungenutzt zum Netzbetreiber.

Daher habe ich anhand deiner Doku überlegt wie ich dies am besten bei mir umsetzen kann und habe mir folgendes Schema (quick&dirty zusammengemalt) erstellt:

[spoiler title="Schema"]

[/spoiler]

Folgendes steht auf meiner Einkaufsliste:

- 8x 280Ah LiFePO4 EVE -> wird zu einem LiFePo4 8S 24V anhand <a href=" Link entfernt " target="_blank" rel="noopener">dieses Videos umgebaut

- 1x Daly BMS 8S 24V 200A BT

- 1x Esmart3 60A

- Kleinkram wie z.B. Kabel, Isolierplatten etc.

Bin ich mit meinem Schema auf dem richtigen Weg? Ich verstehe es so:

1. PV-Module werden je 2 in Reihe und dann parallel an den Esmart3 Laderegler angeschlossen um unter den max. 150V PV Eingang zu bleiben

2. Esmart3 entscheidet anhand der Info vom Shelly 3EM ob Leistung im Hausnetz benötigt wird und speist ein. Falls nicht, wird der Akku geladen

3. Besteht bedarf an Strom im Hausnetz, aber es kommt nicht von den PV-Modulen, speist er aus dem Akku in den WR ein. Die Verbindung Esmart3 zum WR muss ich 4x parallel aufteilen um unter den max. 60V Eingangsspannung zu bleiben

4. Die Leistung des WR kann ich über OpenDTU anhand Bedarf im Hausnetz steuern

5. Der "Rest" wird im Esmart3 (was hat Prio? Netz oder Akku?) bzw. im BMS (wie weit soll der Akku geladen werden?, Ladespannung, etc.) konfiguriert, richtig?

6. Für den Start möchte ich versuchen auf die fertigen Scripte aus der Community zu setzen und das dann Schritt für Schritt in meine HomeAssistant Umgebung importieren. Neben deinem Script möchte ich noch dieses einsetzen <a href=" Link entfernt " target="_blank" rel="noopener">Link

Noch kurz zum Abschluss:

Natürlich ergibt das Vorhaben wirtschaftlich erstmal keinen Sinn, mir geht es vor allem darum Erfahrung zu sammeln um später, irgendwann, im Eigenheim (danke Zinsen) das ganz mitnehmen und erweitern zu können.

Danke für eure und deine Hilfe! :slight_smile:

[quote data-userid="15019" data-postid="111734"]
Hallo zusammen,

erstmal ein großes Lob an dich E-t0m, deine Umsetzung incl. Dokumentation ist große Klasse. Du hast mich sogar soweit überzeugt, dass ich jetzt in der Vorbereitung bin, das ganze auch bei mir Umzusetzen.[/quote]

Hallo Lukas89,

danke für das Lob. Ich frage mich aber, ob ich mich klar genug gefasst habe,

denn meine hier vorgestellte Lösung hat mit deinem Konzept nur wenig zu tun.

Hier geht es um: Esmart3, Soyosource WR, Smartmeter, volkszähler.

Und nicht: Growatt, Shelly, OpenDTU.

Am besten machst du dir eine schöne Tasse Kaffee und liest zuerst einmal das hier: Saldierte Nulleinspeisung mit dem Haus-Stromzähler

Das habe ich natürlich getan, sogar mit Kaffee :wink:

Mir ging es jetzt im Kern darum, ob ich die Funktionsweise des Esmart3 richtig verstanden habe. D.h. ob dieser wirklich anhand meiner Konfiguration entscheidet, ob er die Leistung der PV-Module mit Prio 1 an den WR weiterleitet. Erst wenn dieser nicht die gesamte zur Verfügung stehende Leistung benötigt, wird mit Prio 2 der Akku geladen?

Stelle dir vor, aus der PV kommen 200W.

Wenn du nun 100W davon nimmst, gehen die anderen 100W automatisch in den Akku.

Nimmst du 200W, geht nichts in den Akku.

Wieviel "genommen" wird, ist durch die Einspeiseleistung des Netzwechselrichters bestimmt,

der Rest geht immer in den Akku, solange er nicht voll ist.

Aktiv geregelt wird der (Soyosource) Netzwechselrichter, nicht der (Esmart3) Laderegler.

Heute gab es mal wieder ein größeres Update im Script.

Die live Daten von mehreren parallel gesteuerten Invertern werden jetzt besser ermittelt.

Es werden die Werte des Last-Anschlusses auf die Anzahl der Geräte hochgerechnet, die direkt mit dem Akku verbunden sind.

Es gibt in der Regelung jetzt einen "Ramp Mode" der hohe Sprünge im Verbrauch erkennt und der Problematik der Regelverzögerung (ramp speed) entgegen wirkt.

Damit wird "Übersteuerung", wie sie alle Nulleinspeisungen haben, sehr effektiv vermieden.

Dies gilt sowohl für Verbrauch, als auch Bezug.

Hier ist ein Beispiel:

grün: Regelleistung

schwarz: 16.7 - "saldierte Gesamtleistung"

Moin zusammen,

ich habe mal eine Frage bzgl. des Regelverhaltens des eSmart3 Ladereglers.

Wenn meine Batterie Richtung bzw. über "Saturation Charging Voltage" geht, dann fängt der Laderegler an die PV Leistung bzw. Ladeleistung runter zu fahren was ja auch gewünscht ist. Danach wird die PV Leistung dann wieder rauf gerampt. So wird halt noch das letzte bisschen Energie in die Batterie rein gequetscht. Etwas irritierend finde ich hier aber dass das prozedere quasi dauerhaft durchgeführt wird und das wahrscheinlich auch nicht so gut für die Batterie ist.

Gibt es keinen Punkt wo der Laderegler sagt, dass die Batterie jetzt einfach voll ist und dann bleibt die Ladeleistung einfach auf 0? Kann man das irgendwie einstellen? Habe ich generell vielleicht die Einstellungen falsch wenn man ein solches Verhalten sieht? Siehe unten noch als Beispiel ein Bild wo man das Verhalten erkennen kann.

Generell wäre auch noch die Frage ob ich sowieso überlegen sollte aus Gründen der Batterielebensdauer die Werte weiter runter zu setzen sodass die Batterie nur maximal zu 90% voll wird. Dann müsste ich entsprechend die Ladeschlussspannung auf einen Wert stellen der Ungefähr den 90% SOC bei maximaler Ladeleistung entspricht, korrekt?

Welche Werte hast du denn eingestellt?

Ich kann mir das Verhalten nur so erklären, das die Akku-Spannung ohne Ladestrom abfällt, bis der Regler meint, es geht wieder los.

Nachtrag: Es könnte auch einfach ein MPPT Tracker Neustart sein, weil zu wenig Leistung umgesetzt wird.

Kannst du mal 2-3 Zacken so herausschneiden, dass man die Skalen besser erkennt - und unnötige Kurven weglassen?

Mein Akku ist nur äußerst selten randvoll, ich habe leider weder Daten (hallo mariadb) noch Erinnerung an das Verhalten bei vollem Akku.

Optimal wohl nicht, aber alternativlos, mutmaße ich mal.

Solange die Ladeschlussspannung korrekt eingestellt ist (oder etwas niedriger) ist das schon gut so.

Die Spannung im Akku fällt nun mal ab, wenn er nicht mehr geladen wird.

Hallo @lupenrainer, könntest du mal deine - jetzt stabile? - Umsetzung mit dem Shelly dokumentieren?

Jo gerne. Ist zwar leider noch nicht sauber programmiert und viel zu komplex gemacht aber es funktioniert. Muss es wenn ich Zeit habe mal aufräumen und weniger komplex machen. Sind viele redundante Abfragen drin und auch die Parameter sind teilweise "Magic Numbers" und nicht in Variablen drin. Also bitte nicht auf die Form des Codes im aktuellen Zustand schauen sondern auf die Funktion die dahinter liegt.

Folgende Schritte sind zu machen:

  1. ShellyPy in Python mit hinzufügen: pip install ShellyPy (ShellyPy · PyPI)

  2. Das Shelly Gerät / die Shelly Geräte im Python Script anlegen (Beim mir sind es die zwei Shelly Plug S Schaltsteckdosen an denen die Ladegeräte angeklemmt sind:

import ShellyPy
device = ShellyPy.Shelly("192.168.2.145")
device2 = ShellyPy.Shelly("192.168.2.147")
  1. Dann kommt die eigentliche Logik. Für ein Netzteil sieht es wie folgt aus:

Einschalten wenn:

  • PV-Überschuss größer ist als das was das Netzteil braucht UND

  • aktueller Ladestrom der Batterie gerade kleiner ist als der Maximale Ladestrom + das was das Netzteil brauchen würde (Wie unten z.b. battery_current + 4 A die das 240W Netzteil braucht)

  • Die aktuelle Batteriespannung kleiner ist als ein bestimmter Wert der nahe an der Saturation Charging Voltage liegt -> Um dem Laderegler am Ende nicht in die Quere zu kommen

  • das Gerät mindestens schon z.B. 10s lang ausgeschaltet war (Um ständiges Ein- und Ausschalten zu vermeiden - Rudimentäre Hysterese)

  • Send_power <= 0 (Also Wechselrichter Sollwert = 0) -> Damit die NEtzteile nicht anbleiben wenn der Regler auf 0 Zähler regelt

(Sofort) Ausschalten wenn:

  • Zählerleistung größer ist als ein bestimmter Schwellwert ( >0 wäre die logische Wahl aber ich möchte da etwas "Puffer" haben damit er nicht direkt ausschaltet wenn es mal etwas über 0 geht)

  • Ladestrom des Ladereglers + Netzteilstrom (fester Wert, wird nicht gemessen) größer ist als der maximal zulässige Ladestrom

  • Batteriespannung größer ist als ein bestimmter Wert

  • Send_power >= 0 (Also Wechselrichter Sollwert = 0) -> Damit die NEtzteile nicht anbleiben wenn der Regler auf 0 Zähler regelt

  1. (Optional): Bei zwei oder mehr Netzteilen kann man dann noch verschiedene Stufen einstellen. Mein Beispiel unten ist für ein Netzteil mit 240W und ein Netzteil mit 600W (Ausgangsleistung)
  • Nur Kleines 240W Netzteil einschalten wenn Zählerleistung < -280W

  • Nur Großes Netzteil einschalten wenn Zählerleistung < -680W

  • Beide Netzteile einschalten wenn Leistung < -960W und kleines Netzteil bereits mindestens 5s an ist (damit das BMS nicht direkt einen großen Strompeak beider Netzteile beim einschalten sieht)

if Relay2_Status == 1:
battery_cur += 10
if ((Ls_read < -280 and Ls_read > -580) or Ls_read < -860) and (battery_cur + 4) < max_bat_charge_cur and bat_cont < 54.5 and send_power <= 0: #Check if overfeed is higher than charger power (with offset) and if actual charging current is below maximum charge current
Relay_Time_Off = time()
if (Relay_Time_Off - Relay_Time_Off_Start) > 10:
if Relay_Status == 0:
device.relay(0, turn=True )
Relay_Status = 1
Relay_Time_Off = 0
Relay_Time_Off_Start = 0
Relay_Time_On = time()
else:
if (Relay_Status == 1 and Ls_read > 30) or (battery_cur + 4) > max_bat_charge_cur or bat_cont > 54.5 or send_power >= 0:
device.relay(0, turn=False )
Relay_Status = 0
if Relay_Time_Off_Start == 0:
Relay_Time_Off_Start = time()
if Relay2_Status == 1:
battery_cur -= 10
if Relay_Status == 1:
battery_cur += 4
if Ls_read < -580 and (battery_cur + 10) < max_bat_charge_cur and bat_cont < 54.5 and send_power <= 0: #Check if overfeed is higher than charger power (with offset) and if actual charging current is below maximum charge current
Relay2_Time_Off = time()
if (Relay2_Time_Off - Relay2_Time_Off_Start) > 10 and (time() - Relay_Time_On) > 5:
if Relay2_Status == 0:
device2.relay(0, turn=True )
Relay2_Status = 1
Relay2_Time_Off = 0
Relay2_Time_Off_Start = 0
Relay_Time_On = 0
else:
if (Relay2_Status == 1 and Ls_read > 130) or (battery_cur + 10) > max_bat_charge_cur or bat_cont > 54.5 or send_power >= 0:
device2.relay(0, turn=False )
Relay2_Status = 0
if Relay2_Time_Off_Start == 0:
Relay2_Time_Off_Start = time()
if Relay2_Status == 1:
battery_cur += 10
if verbose:
print("Battery_Current = ", battery_cur )
print("Relay_Status = ", Relay_Status)
print("Relay2_Status = ", Relay2_Status)

Update: Viele Änderungen da ich es erst heute richtig mit zwei Netzteilen testen konnte. Ganz schön gefrickelt aber das hatte ich ja oben schon erwähnt.

Hier an der "violetten" Kennlinie sieht man wie das Netzteil fröhlich an- und aus geht je nachdem wie viel Überschuss ich gerade habe:

Nachtrag: Damit die Leistung der Shelly Schaltsteckdose auch im Vzlogger angezeigt wird habe ich sie entsprechend so in vzlogger.conf hinzugefügt:

{
"enabled": true,
"allowskip": true,
"interval": 1,
"protocol": "exec",
"command": "curl -s http://192.168.2.145/meter/0 | jq -c '.power' | awk '{ print \"power = \" $1}'",
"format": "$i = $v",
"channels": [
{
"api": "volkszaehler",
"uuid": "27061820-adc4-11ed-b2f1-73d2368b8451",
"middleware": "192.168.2.125:8080",
"identifier": "power"
}
]
},
2 „Gefällt mir“

Vielen Dank! Ich verstehe den Zweck aber nicht ganz - ein Auto laden?

Kannst du nicht ein regelbares Netzteil nehmen? @joehuebner macht z.B. sowas.

Eigentlich hatte ich an deine Lösung für das Einbinden des shelly EM, anstatt des Lesekopfs gedacht. ?

@e-t0m :

Achso :smiley: :smiley: Sorry. Ich war gerade in der anderen Implementierung unterwegs mit meinen Schaltsteckdosen.

Es geht hier darum auch den Überschuss meiner großen PV-Anlage in die Batterie laden zu können. Dazu habe ich zwei 48V Netzteile von Aliexpress die bei Überschuss über die Shelly Plug S Stecker mit dem Script variabel an- und ausgeschaltet werden. Mit einem regelbaren Netzteil wäre es natürlich noch schöner aber so funktioniert es auch schon echt gut. Aber danke für den Hinweis dass @joehuebner sowas hat.

Mit dem Shelly 3EM kann ich am Wochenende hier rein packen da das Script bei meinem Vater läuft. Ist aber super easy und funktioniert genauso wie bei den Schaltsteckdosen von Shelly über die Rest-Api und kann auch genauso in die Vzlogger.conf eingetragen werden. Nur dass der identifier glaube ich total_power heist und nicht unter ../meter/0 zu finden ist sondern woanders. Aber das schaue ich wie gesagt nach.

In deinem Script musste ich dann auch nur die Zeile wo er nach "1-0:16.7.0" sucht dann durch den identifier ersetzen wie er vom vzlogger für den Shelly 3EM geschrieben wird. (Also "total_power" glaube ich)

1 „Gefällt mir“

Du glaubst gar nicht, wie lange ich das Internet nach dieser Antwort abgesucht habe.. Falls man über Google überhaupt mal was findet, dann nur zu 2-3kW Wandlern mit noch höherem Peak und der Begründung, dass da die Ströme nicht mehr vom LC gehandelt werden können. Kleine 600W Wechselrichter - die bei 48V ja nur ca. 13A ziehen und selbst bei 24V noch vom kleinsten esmart3 ausgelastet werden können, werden nie besprochen. Bei einem 48V-Setup könnte man sogar noch den kleinsten Victron (SmartSolar 100/20) als Laderegler nutzen. Hat das zufällig schonmal jemand probiert?

Die Erklärung mit der Notabschaltung (bei Überhitzung) macht hier natürlich deutlich mehr Sinn. Auch die Unterscheidung von Netz-Wechselrichtern und Insellösungen scheint mir hier absolut notwendig zu sein, um ein (dein) Setup sauber zu argumentieren.

Allgemein kann man daraus doch ableiten, dass man dann jeden Micro-Inverter für ein BKW an den Last-Ausgang eines LCs schalten kann (solange die Spezifikationen eingehalten werden), oder?
Das erscheint mir sowieso als einzig wirklich sinnvolle Lösung. Andernfalls müsste ich bei kritischem SOC der Batterie den Inverter mittels zusätzlicher Schaltung von der Batterie trennen. Darüber hinaus wird bei niedriger Grundlast und voller Batterie diese doch auch ständig im obersten Spannungsbereich Be- und entladen. Das sind irgendwann auch viele Zyklen und höher wird der Wirkungsgrad dadurch doch auch nicht. Also warum machen das so wenige? Übersehe ich was?

[quote data-userid="15692" data-postid="115440"] Allgemein kann man daraus doch ableiten, dass man dann jeden Micro-Inverter für ein BKW an den Last-Ausgang eines LCs schalten kann (solange die Spezifikationen eingehalten werden), oder?
Das erscheint mir sowieso als einzig wirklich sinnvolle Lösung. ... Übersehe ich was?[/quote]

Micro/Modulwechselrichter kommen in meinem Beitrag nicht vor! Das ist eine ganz eigene Gattung.

Man kann sicherlich Last im Rahmen der Spezifikation der Geräte am Laderegler schalten lassen, aber:

Modulwechselrichter sind nicht dafür gemacht, an einem geschalteten Akku zu hängen!

Ich halte es für die schlechteste Lösung, einen Wechselrichter überhaupt "schalten" zu wollen!

In dem zitierten Beitrag sind Maßnahmen skizziert, die genau das verhindern sollen.

Meine hier gezeigte Lösung für eine kleine, günstige PV mit Akku dürfte im Funktionsumfang schon sehr nahe am Optimum sein.

Kernpunkte sind:

Nulleinspeisung

Leistungsanpassung an den Akku

Direktes einspeisen von PV-Leistung (ohne Verwendung vom Akku)

Monitoring

Eine detaillierte Überwachung einer Selbstbau-Anlage ist Pflicht!

Wer nur bei Gelegenheit irgendwelche Displays abliest, hat keine Ahnung was die Anlage macht.

Der Volkszähler drängt sich da geradezu auf.

Wer das Monitoring nicht selbst hinbekommt, sollte sich besser eine Anlage bauen lassen!

Deswegen wollte ich das Thema gerne noch anreißen, denn (Stand 23.03.23) sind mir keine WR bekannt, die auf 600W Dauerleistung limitiert sind und gleichzeitig keine Modul-WRs sind. Kennst Du einen?
Das Problem, solche WRs hinter einem Akku (oder auch am Lastausgang) zu betreiben ist ja meistens der verbaute MPPT.

Da stimme ich dir vollkommen zu. Habe bisher nichts vergleichbares als DIY gefunden.

Du suchst also einen (nicht Micro-) WR den man beim deutschen VNB vereinfacht anmelden und aber auch regeln kann?

Ich kenne keinen. ?

Allerdings dürfte der (halbwegs?) regelbare HM-600 nicht so viel Eigenverbrauch im Leerlauf haben, so das man ihn gar nicht hart an- und abschalten müsste. Fragt sich nur wie das mit der Regelung und dem Akku läuft. Dafür gibt es hier im Forum einige Themen!