Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix: Solar powered inverters are stuck at low limits #1756

Draft
wants to merge 3 commits into
base: development
Choose a base branch
from

Conversation

AndreasBoehm
Copy link
Member

@AndreasBoehm AndreasBoehm commented Mar 23, 2025

We now report that the limit can be increased when the current production of the inverter matches the current limit with a margin of 1,5% of its max power.

For a HMS-2000 with a limit of 200W and a production of 180W, we consider that the inverter is able to produce more power,

The previous method required 97% or 194W to be produced, which is a margin of only 6W!

Note: This change will ignore 'overscaling' for solar inverters for now as I first want to verify that the changes work for simpler non-overscaling setups.

ToDo:

  • re-enable overscaling
  • adjust overscaling logic to work in a similar fashion

Test Build:

https://github.com/hoylabs/OpenDTU-OnBattery/actions/runs/14030542692

@AndreasBoehm AndreasBoehm marked this pull request as draft March 23, 2025 16:20
@AndreasBoehm AndreasBoehm force-pushed the andreasboehm/fix-solar-inverter-low-limit branch 2 times, most recently from 937521a to 992ad81 Compare March 23, 2025 16:28
@spcqike
Copy link

spcqike commented Mar 24, 2025

Moin,

erstes kurzes Feedback:

er scheint nicht hoch zu gehen

08:45:08.069 > Fetch inverter: 114183722749
08:45:08.161 > Queue size - NRF: 1 CMT: 0
08:45:08.648 > Middle missing
08:45:08.655 > Request retransmit: 1
08:45:08.745 > [DPL] targeting -20 W, base load is 800 W, power meter reads 55.3 W (valid)
08:45:08.752 > [DPL] requesting 288 W from 1 solar-powered inverter currently producing 213 W (diff 75 W, hysteresis 25 W)
08:45:08.756 > [DPL] will cover 213 W using 1 solar-powered inverter
08:45:08.847 > [DPL] battery allowance is 0/0 W DC/AC, solar power is 0/0 W DC/AC, requested are 75 W AC
08:45:08.853 > [DPL inverter 116492305207]:
08:45:08.858 >     solar-powered, producing 213 W, output included in power meter reading
08:45:08.862 >     lower/current/upper limit: 50/238/1000 W, output capability: 2000 W
08:45:08.868 >     sending commands enabled, reachable, eligible
08:45:08.873 >     max reduction production/standby: 163/163 W, max increase: 0 W
08:45:08.974 >     target limit/output/state: -1 W (unchanged)/213 W/unchanged, 0 update timeouts
08:45:08.981 >     MPPTs AC power: a: 53 W b: 53 W c: 54 W d: 54 W
08:45:08.986 > Success
08:45:09.078 > [PowerMeters::Json::Http] New total: 51.68

grafik
grafik

Wie ich lese, hast du eine Abweichung von 20W hinterlegt.

das scheint hier für den HMS-2000 halt nicht zu reichen :) ist ja nur 1% seines Maximums.

meinst du es macht Sinn, die Differenz einfach prozentual zum Invertermaximum zu berechnen? so wie ``wenn das aktuelle Limit < 15%, dann grenzwert = 1.5% von Invertermax, sonst 6W" oder so?

feste 20W sind bei einem HM-800 eben auch was anderes, als beim HMS-2000 :) der HM-800 kann bei 100W statt 120W (15% Limit) vielleicht verschattet sein, der HMS-2000 ist bei 280W von 300W (ebenfalls 15% limit) wahrscheinlich nicht so verschattet.

nachtrag:
hab das Limit mal manuell erhöht, danach ging er natürlich wieder runter
grafik

an der "Sonne" liegt es nicht :)

@AndreasBoehm
Copy link
Member Author

Danke für dein Feedback.

Ich hab das in einem Spreadsheet 'simuliert' und bin dabei auf 20W gekommen, sieht in der realität wohl anders aus.

Wenn wir die zwei extreme nehmen, HMS-2000 und HM-350 erlauben wir mit einer prozentualen Berechnung und 1,5% nur 5,25 W 'fehler' für den kleinen WR, das erscheint mir zu wenig.

Sag mal, hast du nicht mal eine Tabelle erstellt in der die Abweichung zwischen Limit und Output für den HMS-2000 für verschiedene Limits zu sehen war?

@AndreasBoehm AndreasBoehm force-pushed the andreasboehm/fix-solar-inverter-low-limit branch 2 times, most recently from ccb1bce to 215a81e Compare March 24, 2025 08:26
@spcqike
Copy link

spcqike commented Mar 24, 2025

Ja

#1087 (comment)

@AndreasBoehm
Copy link
Member Author

Vielen Dank dafür!

Ich hab deinen Vorschlag mit der 1,5% Regel umgesetzt und oben ein neues Test-Build verlinkt, sieht sinnvoll und gut aus.
Das müssen wir nur auch mit kleineren WRs testen um es zu bestätigen.

@spcqike
Copy link

spcqike commented Mar 24, 2025

ich installiere es mal und berichte :)

als Alternative kann man die Berechnung ja als X W + Y %, also bspw die ehemaligen 6W + 1% des Invertermaximums. bzw, wo ich es so schreibe, den Schwellwert fest bei 6W und wenn das aktuelle Limit < 15%, dann eben +1% des Maximums, oder so :)

bzw für meinen HMS-2000 bräuchte es fast 15W+1%, liegt die maximale Abweichung doch bei 31/33W beim Limit von 14% bzw 15%
grafik

Das sieht man auch in Grafana, die Sprünge kurz vor und nach 09:01
grafik

für die aktive Überskalierung gibt es ja den selbst wählbaren Grenzwert. aktuell habe ich da 98% drin.

da könnte man im Kleinlastbereich (also < 15% Limit) ebenfalls sagen 98% - 1% bzw Uservorgabe -1%

man bräuchte es da zwar nicht, da man ja die Schwelle selbst vorgeben kann, aber eine generell zu geringe Schwelle kann halt dann doch in der richtigen Funktion (also bei > 15% Limit) Probleme machen und unsauber regeln.

@spcqike
Copy link

spcqike commented Mar 24, 2025

aktuell läuft die brauchwasserwärmepumpe, da ist schlecht mit niedrigem Verbrauch :D ich hab es einfach mal getestet und manuell 14% Limit (280W) übertragen.
Der WR liefert da nur 251W, wird aber anstandslos hoch geregelt

11:10:16.438 > [PowerMeters::Json::Http] New total: 415.06
11:10:16.441 > [DPL] targeting -20 W, base load is 800 W, power meter reads 415.1 W (valid)
11:10:16.444 > [DPL] requesting 686 W from 1 solar-powered inverter currently producing 251 W (diff 435 W, hysteresis 25 W)
11:10:16.446 > [DPL] will cover 686 W using 1 solar-powered inverter
11:10:16.449 > [DPL] battery allowance is 0/0 W DC/AC, solar power is 0/0 W DC/AC, requested are 0 W AC
11:10:16.452 > [DPL inverter 116492305207]:
11:10:16.454 >     solar-powered, producing 251 W, output included in power meter reading
11:10:16.458 >     lower/current/upper limit: 50/280/1000 W, output capability: 2000 W
11:10:16.461 >     sending commands enabled, reachable, eligible
11:10:16.463 >     max reduction production/standby: 201/201 W, max increase: 720 W
11:10:16.466 >     target limit/output/state: 686 W (update)/686 W/production, 0 update timeouts
11:10:16.469 >     MPPTs AC power: a: 62 W b: 63 W c: 63 W d: 63 W
11:10:16.472 > [DPL inverter 116492305207]: sending limit of 34.3 % (686 W respectively), max output is 2000 W
11:10:16.479 > Fetch inverter: 116492305207
11:10:16.481 > Queue size - NRF: 0 CMT: 2
11:10:16.484 > [DPL] waiting for a start/stop/restart/limit command to complete
11:10:17.495 > Fetch inverter: 114183722749
11:10:17.498 > Queue size - NRF: 1 CMT: 2
11:10:18.005 > Success
11:10:18.488 > Success
11:10:18.490 > [DPL inverter 116492305207]: limit update succeeded, actual limit is 34.3 % (686 W respectively), effective 2043 ms after update started, requested were 34.3 %

die 1.5% scheinen da gereicht zu haben :) lag die Differenz doch bei 1.45% :D (29W bei bis 30W Unterschreitung)

nach meinem letzten Post (Abweichung von 31/33W), denke ich, dass eine Mischung aus festem und prozentualem Anteil, wie die 15W + 1% oder so, wohl allgemein doch besser wär. wie du sagst, bei der Bandbreite an Wechselrichtern und Leistungen. Fest 30W sind für den HM-300 sicher zu viel des Guten. beim HMS-2000 aber hier und da vielleicht doch mal zu wenig.

@AndreasBoehm AndreasBoehm force-pushed the andreasboehm/fix-solar-inverter-low-limit branch from 215a81e to 9b7d958 Compare March 25, 2025 12:54
@AndreasBoehm
Copy link
Member Author

Habe als Basis einen HMS-2000 genommen.

Der erlaubte Fehler errechnet sich aus einem Base Value (5 W), einem Anteil des Limits und einem Anteil der Maximalen Leistung.

Die Werte hab ich angepasst bis sie zu deiner Tabelle (#1087 (comment)) gepasst haben.

Ich hab das auch für andere WRs vorbereitet, also eine Auswertung mit den gleichen Parametern für alle WRs, wollte aber erstmal deine Meinung zu dieser Formel hören.

5 + (LimitW * -1%) + (Max Power W * 1,75%)

Description Value
Max Power Missing Base W 5
% of Limit -1%
% of Inverter max Power 1,75%
Limit W Limit Limit Corrected Max Power Missing W Min Accepted Output %
60 3% 39,4 37,33
100 5% 39 62,40
200 10% 38 81,20
220 11% 37,8 82,91
240 12% 37,6 84,33
260 13% 37,4 85,54
280 14% 37,2 86,57
300 15% 37 87,47
320 16% 36,8 88,25
340 17% 36,6 88,94
360 18% 36,4 89,56
380 19% 36,2 90,11
400 20% 36 90,60
500 25% 35 92,48
600 30% 34 93,73
800 40% 32 95,30
1.000 50% 30 96,24
1.200 60% 28 96,87
1.400 70% 26 97,31
1.600 80% 24 97,65
1.800 90% 22 97,91
1.980 99% 20,2 98,10

@spcqike
Copy link

spcqike commented Mar 25, 2025

was meinst du mit LimitW -1%? das kann ich grad nicht greifen und damit die Rechnung nicht ganz nachvollziehen.

und ich denke, über 15% Limit braucht es keinen zusätzlichen Puffer mehr. Zumindest konnte ich noch nie feststellen, dass der WR > 15% nicht "sauber" ausgeregelt hat. Im Gegenteil, da liefert er immer ein paar Watt mehr (vielleicht mal 2-3W weniger, aber die Werte schwanken und liegen in der Regel über dem Soll)
grafik

Im Gegenteil, ich denke es wäre schlecht für die Regelung, zumindest wenn das Überskalieren wieder rein kommt, wenn 10% "unterperformance" (bei 400W) als "nicht verschattet" gelten. Denn dann würde er die fehlenden 36W ja nicht versuchen auszugleichen ,oder?

Ich kann leider keine Messungen für andere Hoymiles machen (wobei, doch für den HM-600 auf einem Kanal), denke aber dass die Formel so zu viel des Guten ist :)

1,75% sind beim HMS-2000 bereits 35W, also mehr als das Maximum, was ich als Abweichung festgestellen konnte.

die maximale Abweichung lag bei 33W

Limit % Limit absolut DC Eingang AC Ausgang Abweichung
5 100 88 - 101 83 - 95 17
10 200 191 - 201 181 - 192 19
11 220 224 213 7
12 240 224 213 27
13 260 262 249 11
14 280 262-272 249-259 31
15 300 283-322 267-306 33
16 320 343-354 326-336 -6
17 340 354-364 336-347 4
18 360 375-386 357-367 3
19 380 408-418 388-397 -8
20 400 418-429 398-408 2
25 500 526-536 500-510 0
30 600 626-644 598-612 2

Es scheint auch nicht so, als würde die Abweichung am unteren Ende größer werden. die größte Abweichung hatte ich bei 14% und 15%, also kurz vor der Grenze zur funktionierenden Regelung. Dort waren auch die Schwinger am größten.

ich denke ein einfacher und fester Wert wie 15W +1% sollte ausreichen.
das ergibt ne maximale Abweichung je nach Modell von 18W bis 35W, Je nachdem, wie die unterschiedlichen Modelle performen, kann man es auch variieren zu 10W+1.5% oder so

Hoymiles 15 +1% 10+1.5% 15+1.5%
300 18 14,5 19,5
600 21 19 24
700 22 20,5 25,5
800 23 22 27
1000 25 25 30
1500 30 32,5 37,5
1600 31 34 39
2000 35 40 45

Ich werde die Tage mal ne Tabelle für den HM-600 machen. der hat zwar nur 1 Paneel am 2. Eingang, aber ... naja, mal gucken.
wenn ich den jetzt auf 5% (30W insg., 15W pro Eingang) liefert er mir zwischen 13.7W und 15.2W. wäre er voll belegt und würde genauso regeln, hätte man also 27.4-30.4W, läge im Maximum also nur 2.6W unter dem Limit. (oder 0.4333% seines Maximums. das wäre bereits besser als mein HMS-2000, der bei 5% mit absoluten 17W drunter lag, also 0.85%)

@AndreasBoehm
Copy link
Member Author

LimitW * -1% bedeutet das wir 1% des Limits subtrahieren, also je höher das Limit, je geringer ist der erlaubte Fehler.

Mit der Überskalierungs-Problematik hast du natürlich recht, ich kann ja mal versuchen ob der DPL recht zappelt wenn diese Sonderregelung nur bis inklusive 15% Limit greift. Oberhalb von den 15% gehe ich dann wieder auf 98% Threshold.

Hier gabs nen User dem 42W fehlten bei nem HMS-2000 und 13% Limit: #1675 (comment)

Das wäre natürlich genial wenn du das auch mit dem HM-600 ausprobieren könntest.

@spcqike
Copy link

spcqike commented Mar 25, 2025

(oder 0.4333% seines Maximums. das wäre bereits besser als mein HMS-2000, der bei 5% mit absoluten 17W drunter lag, also 0.85%)

wo ich da grad nochmal drüber lese ... vielleicht sollte man die Abweichung < 15% Wechselrichter Limit einfach als Abweichung des gesetzten Limits betrachten?

beim HMS-2000 und seinen sieht es so als, als wären "bis 20%" Abweichung zu erwarten. Ich hab auch deine angemerkten 42W bei 13% Limit mal mit in meine Tabelle aufgenommen

Limit % Limit absolut DC Eingang AC Ausgang Abweichung Abweichung zum Limit absolut
5 100 88 - 101 83 - 95 17 17,00%
10 200 191 - 201 181 - 192 19 9,50%
11 220 224 213 7 3,18%
12 240 224 213 27 11,25%
13 260 262 249 11 4,23%
13 260   218 42 16,15%
14 280 262-272 249-259 31 11,07%
15 300 283-322 267-306 33 11,00%
16 320 343-354 326-336 -6 -1,88%
17 340 354-364 336-347 4 1,18%
18 360 375-386 357-367 3 0,83%
19 380 408-418 388-397 -8 -2,11%
20 400 418-429 398-408 2 0,50%
25 500 526-536 500-510 0 0,00%
30 600 626-644 598-612 2 0,33%

Das wäre natürlich genial wenn du das auch mit dem HM-600 ausprobieren könntest.

ich werde berichten :) wie gesagt, leider nur mit einem Eingang, in der Hoffnung dass das skaliert und reproduzierbar ist.

Könnt ihr solche Versuche mit den Akku betriebenen Invertern nicht zu jeder Tages- und Nachtzeit machen? :D bei mir ist die Sonne nun schon wieder weg :(

und, ich frage mich grad auch, ob die Spannung / der Strom nen Einfluss hat. also ob 54 Zellen mit 13A oder 72 Zellen mit 8A.

Ich habe 72 Zellen (bzw. 144 Halbzellen), dadurch > 40V und eben weniger Strom. Leider sehen wir in den Logs nicht, welche Paneelspannung anliegt, oder? Wollen wir das übergangsweise mit aufnehmen?

@AndreasBoehm AndreasBoehm force-pushed the andreasboehm/fix-solar-inverter-low-limit branch from 9b7d958 to c512578 Compare March 26, 2025 06:55
@AndreasBoehm AndreasBoehm force-pushed the andreasboehm/fix-solar-inverter-low-limit branch from c512578 to 9d302a3 Compare March 26, 2025 07:00
@AndreasBoehm
Copy link
Member Author

vielleicht sollte man die Abweichung < 15% Wechselrichter Limit einfach als Abweichung des gesetzten Limits betrachten?

Also im Sinne von Limit <= 15 && Output > (Limit * 0.8) um bis zu einem Limit von 15% mit 20% Abweichung (80%) zufrieden zu seiN?

Könnt ihr solche Versuche mit den Akku betriebenen Invertern nicht zu jeder Tages- und Nachtzeit machen? :D

Da hast du schon recht, ich muss mal ausprobieren wie realistisch das ist, sind ja doch ganz andere Bedingungen für den MPPT.

Ich habe 72 Zellen (bzw. 144 Halbzellen), dadurch > 40V und eben weniger Strom. Leider sehen wir in den Logs nicht, welche Paneelspannung anliegt, oder? Wollen wir das übergangsweise mit aufnehmen?

Gute Idee, ich hab die Spannung mal in die Logs mit aufgenommen.

@spcqike
Copy link

spcqike commented Mar 26, 2025

Also im Sinne von [...]

ja genau. ich denke, für das "einfache" Hochregeln könnte das ausreichen. Solange die anderen Modelle ähnliche prozentuale Abweichungen haben.
Der Test mit meinem HM-600 gestern sah ja sogar so aus, als wäre die Abweichung geringer, was gut ist.

für das Überskalieren muss man es dann ja wieder auf die Eingänge runterbrechen :) bzw, je nach FIrmware auch nicht.

Was mir noch im Kopf schwebt:
Was denkst du, wie ist das Zusammenspiel von dem Schwingen und dem DPL?
ich habe ja gezeigt, dass mein HMS-2000 bei 14% und 15% stark schwingt. bei anderen Limits tut er das auch, aber nicht so massiv.

ich vermute, da der DPL so schnell durchläuft, ist das schwingen egal. in irgendeinem Durchlauf würde die höhere Leistung erkannt werden und der Wechselrichter damit als "nicht verschattet" interpretiert, oder?

Ich würde mir mal ein Script (python) oder flow (node red) überlegen, um meine Wechselrichter mit einer Rampe (1%-20%) automatisch abfahren zu lassen. und dabei diverse Parameter protokollieren. Ist halt die Frage, ob ich die Schwankung mit betrachte oder mich auf das Max (oder Min?) konzentriere. Ich tendiere grad nur zum Maximum, aus oben genannten Grund.

Zum weiteren Zusammenspiel der WR im DPL:
Wenn die Erkennung der "nicht Verschattung" doch zu "weich" ist, was hat das für Auswirkungen?
Ich nehme an, der WR würde priorisiert (da solar only) ein höheres Limit bekommen, das dann aber nicht liefern. Damit wäre er im 2. DPL Durchlauf wahrscheinlich doch "verschattet" und ein anderer WR würde ein höheres Limit bekommen, oder?

also, wenn er bspw. 150W liefern soll, 121W liefert (weil wirklich verschattet und nicht mehr geht). nach Limit <= 15 && Output > (Limit * 0.8) wäre er "nicht verschattet" und bekäme ein neues Limit, bspw. 200W. er bleibt jedoch bei 121W stehen und wäre dann nach Limit <= 15 && Output > (Limit * 0.8) eben doch verschattet und damit "raus", oder?

@AndreasBoehm AndreasBoehm self-assigned this Mar 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants