Optimale Parabelkurve aus Logwerten berechnen

Begonnen von rellla, 13 August 2018, 16:54:58

Vorheriges Thema - Nächstes Thema

rellla

Hallo zusammen,

ich möchte folgende Aufgabe lösen:
Meine PVA-Leistung wird bei 50% abgeregelt, wodurch mir immer ein Stück Leistung/Energie verloren geht, die ich nicht einspeisen kann/ darf. Diesen Wert möchte ich nun ermitteln. (Über die Werte, die ich an der PVA auslesen kann, lässt sich der Verlust nicht abgreifen)

Im Bild sieht man mal einen "relativ" optimalen Tag.

Ich hätte jetzt folgende Idee - ohne dass ich mir sicher bin, ob das überhaupt umsetzbar ist...
Da die Kurve "PVA-Erzeugung" wohl ziemlich genau eine Parabel beschreibt, wäre mein Ansatz zu versuchen, aus den Messwerten die "vollständige" Parabel zu ermitteln. Dann könnte man die Menge herausfinden, die erzeugt werden hätte können und hätte mit der Differenz zur tatsächlichen Menge den Verlust. Die Parabelfunktion könnte man über 3 Punkte ermitteln.
Das erste Problem ist, dass die geloggten Werte natürlich nicht exakt auf der Parabel liegen und man sich daher erst 3 Punkte "mitteln" müsste.
Das zweite Problem ist, dass ja nicht immer die Sonne scheint und man so eine schöne Ausgangskurve zur Verfügung hat.
Drittens muss man noch prüfen, ob die Spitze dadurch gekappt ist, dass die Sonne nicht scheint, oder aber von der PVA abgeregelt wurde.

M.E. wären die beiden wichtigsten Punkte die Schnittpunkte mit der X-Achse. Diese könnte man entweder über Erfahrungswerte vergangener Tage oder aber über Sonnenauf- und -untergangszeit ermitteln. Bliebe noch der 3. Punkt, der im Optimalfall der Scheitel ist. Den habe ich allerdings nicht (immer). Somit muss man da irgendwie tricksen.
Möglicherweise kann man eine Parabel definieren, die erstmal "größer" ist, als die im Plot. Dann könnte man die Steigung schrittweise so ändern, dass die Parabel sich der Kurve annähert.
Man könnte dann damit aufhören, sobald das erste Mal Werte getroffen werden, die auf der Parabel liegen. Oder aber man macht weiter und versucht die Kurve mit der größtmöglichen Übereinstimmung bzw. mit den geringsten Abweichungen zu finden.

Würde mich über Meinungen freuen, ob ich mit meiner Idee auf dem Holzweg bin oder der Ansatz überhaupt Sinn macht, wie beschrieben.

Gruß
Andreas

rellla

#1
So. Fortschritt.
Nachdem ich ein bißchen in die Mathematik eingetaucht bin, ist wohl die Ausgleichsrechnung der richtige Ansatz.
Die Methode der kleinsten Quadrate habe ich schon mal mit C umgesetzt (https://github.com/rellla/snippets/blob/master/leastsquares/lsq.c) und kann erfolgreich eine Parabelfunktion aus Messwerten reproduzieren.
Wenn man sich Werte schnappt, die einigermaßen auf der Optimal-Kurve liegen, funktioniert das auch ganz gut.

Als nächstes müsste ich das Problem lösen, wie ich die "besten" Werte als Input für meine Berechnung finde und Ausreißer ausschließe...
.. und dann natürlich noch, wie ich das mit FHEM umgesetzt bekomme.

Gruß
Andreas

frank

das hört sich alles sehr "umständlich" und "unnötig" an.

1. ich habe noch nicht ganz verstanden, was genau dein ziel ist, falls du die parabel hast? wenn du die energie suchst, die nicht eingespeist wurde, dann ist dieses verfahren doch eher spekulation, wegen dem unbekannten wetter.
wie wird denn die eingespeiste energie gedrosselt? kann man da nicht etwas ableiten?

2. ich denke, dass deine "ideale parabel" unabhängig von den messwerten ist. die kurve müsste doch "nur" von deinen festen systemdaten (pv- leistung, wirkungsgrad, ausrichtung, ...etc) und dem sonnenstand abhängig sein.
vermutlich findet man im internet solch eine funktion. den aktuellen sonnenstand liefert entweder das astro- oder twilightmodul.

du müsstest dann eventuel noch an einem idealen tag, die theoretische kurve "justieren", damit sie deinem realen system angeglichen wird.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

rellla

Zitat von: frank am 16 August 2018, 10:19:37
das hört sich alles sehr "umständlich" und "unnötig" an.
Ja, ist es :)
Zitat
1. ich habe noch nicht ganz verstanden, was genau dein ziel ist, falls du die parabel hast? wenn du die energie suchst, die nicht eingespeist wurde, dann ist dieses verfahren doch eher spekulation, wegen dem unbekannten wetter.
wie wird denn die eingespeiste energie gedrosselt? kann man da nicht etwas ableiten?
Ich bin mir selbst nicht sicher, ob ich mit dem Ergebnis zufrieden bin, wenn ich dann mal einen Wert habe... da das alles relativ spekulativ ist, wie du sagtest.

Angefangen hat es eigentlich damit, dass mir meine PV-Steuerung nicht gefällt. Ich habe einen Speicher von E3DC und da hängen 6.96kWp dran. Wegen der KfW-Förderung ist nun die Einspeisung auf 50% der Leistung gedrosselt, d.h. bei ca. 3500kW geht mir die Spitze verloren. E3DC hat eine prognosebasierte Ladung eingebaut. Diese versucht nun das Wetter zu erahnen (was nicht ganz optimal funktioniert) und versucht zumindest schon mal die Batterieladung in die Spitzenzeit zu legen, falls absehbar ist, dass gedrosselt werden muss. Wo die überschüssige Energie hingeht weiß ich nicht. E3DC hat mir gesagt, die kommt beim Wechselrichter gar nicht an, taucht also an der Steuerung nicht auf und ist somit auch nicht messbar. Hm.

Die Optimal-Parabel könnte man jetzt dafür nutzen, zum einen den "Verlust" zu berechnen oder besser gesagt zu spekulieren oder man nutzt die Kurve in Kombination mit einer Wettervorhersage um die Steuerung zu optimieren. Ich könnte mir vorstellen, dass man schlechtes Wetter schon irgendwie mit einbauen könnte. Steht z.B. die Einspeisung um die Mittagszeit bei 3500kW an, kann man davon ausgehen, dass die Sonne scheint und was verloren geht. Liegt sie darunter, ist schlechtes Wetter...

Zitat
2. ich denke, dass deine "ideale parabel" unabhängig von den messwerten ist. die kurve müsste doch "nur" von deinen festen systemdaten (pv- leistung, wirkungsgrad, ausrichtung, ...etc) und dem sonnenstand abhängig sein.
vermutlich findet man im internet solch eine funktion. den aktuellen sonnenstand liefert entweder das astro- oder twilightmodul.

du müsstest dann eventuel noch an einem idealen tag, die theoretische kurve "justieren", damit sie deinem realen system angeglichen wird.
Das wäre wohl die einfachere Möglichkeit. Ausgehend von dieser Kurve könnte man dann die oben angesprochenen Dinge auch errechnen. Ich lasse mir diesen Weg mal durch den Kopf gehen...

Unabhängig davon... Gibt es eigentlich die Möglichkeit, eine Parabel zu plotten? Bzw. wie geht das?

Danke und Gruß
Andreas

frank

zum plotten der zeitabhängigen funktion:
1. userreading definieren, dass bei jedem messzeitpunkt den entsprechenden wert berechnet.
2. da die theoretische funktion eigentlich nur durch datum/zeit festgelegt wird, könnte man auch mit logproxy eine funktion erstellen. schau mal im wiki zu logproxy das beispiel zu sonnenauf- und untergang an. die entsprechende funktion müsste im quelltext vom modul existieren.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

frank

FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

rellla

Danke für den Link. Sieht auf den ersten Blick interessant aus.

Anbei ein Screenshot, wie ich mir das vorstelle. Die Formel für den Plot lautet
logProxy_Func2Plot($from,$to,'{(((($sec-SVG_time_to_sec($from))/6000)*(($sec-SVG_time_to_sec($from))/6000)*(-4.09))+((($sec-SVG_time_to_sec($from))/6000)*67.12)-223.31)*100}')
Allerdings sind die Parameter hier noch manuell ermittelt.
Ich müsste jetzt einen Algorithmus finden, der mir die 3 Parameter für den jeweiligen Tag berechnet. Das muss ich mir noch anschauen. Als Grundlage wäre wohl eine oder mehrerer "meiner" Funktionen sinnvoll, die jeweils tagweise angepasst werden.
... die Einbindung einer Wettervorhersage scheint mir derzeit relativ kompliziert...

Gruß
Andreas