Überschussleistung Laden

Allgemeine Fragen rund um die "Smart Home" Hardware/Komponenten

Moderatoren: seppy, udo1toni

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24

Überschussleistung Laden

Beitrag von shuo »

Hallo zusammen,
ich würde gerne eine rule erstellen, die die Überschussleistung der PV-Anlage ins Auto speißt.

Den aktuell produzierten Leistungwert der PV Anlage habe in einem Item zur Verfügung. Genauso kann ich den Strom den die Wallbox liefern soll über ein Item regeln.

Da die produzierte Leistung sehr schwanken kann, soll der Ladestrom "geglättet" regelen. Das heißt es kann auch mal kurzfristig Strom aus dem Netz bezogen werden.
Ein weiteres Problem ist das, dass die Ladeleistung auch abhängig vom aktuellen Verbrauch geregelt werden muss. Dieser Wert steht auch in einem item zur Verfügung.

Hat jemand eine Idee wie ich das umsetzen könnte, bzw sowas ähnliche schonmal gemacht? ich habe leider nichts im Forum gefunden.

Vielen Dank und Grüße

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Überschussleistung Laden

Beitrag von udo1toni »

Also, Du hast zwei Messwerte und ein Regelelement.Grob sieht die passende Rule dann so aus:

Code: Alles auswählen

rule "Ladestrom einstellen"
when
    Item PVLeistung changed or
    Item StromBedarf changed
then
    val Number nPV   = if(PVLeistung.state instanceof Number) (PVLeistung.state as Number).floatValue else 0
    val Number nHaus = if(StromBedarf.state instanceof Number) (StromBedarf.state as Number).floatValue else 2000 // zu erwartender Spitzenbedarf als Default Wert
    val Number nDiff = nPV - nHaus
    var Number nStufe = 0
    if(nDiff < 0) nStufe = 0
    else if(nDiff < 1000) nStufe = 1
    else if(nDiff < 2000) nStufe = 2
    else if(nDiff < 3000) nStufe = 3
    else if(nDiff < 4000) nStufe = 4
    else if(nDiff < 5000) nStufe = 5
    else nStufe = 6
    Ladeleistung.sendCommand(nStufe)
end
Die Rule triggert, sobald einer der beiden Messwerte sich ändert. Es wird die Differenz gebildet.
Danach wird abhängig vom ermittelten Überschuss die Ladestufe gewählt und an die Ladeschaltung gesendet.

Die Stufen sind beliebig, wichtig ist nur, dass die Werte sortiert vorliegen. Die einzelnen if-else-Verkettungen suchen also die pasende Stufe zum Überschuss heraus.
Der erste Teil der Rule dient der Sicherheit. Wenn eines der beiden Items keine gültige Zahl liefert, wird ein Default Wert verwendet. Dabe igilt ein ungültiger Wert von der PV-Messung als 0, ein ungültiger Verbrauch als 2000 (auch dieser Wert ist natürlich beliebig).

Sollten die Werte in unterschiedlichen Einheiten rein kommen, muss natürlich umgerechnet werden.
Stufe 0 als niedrigste Ladestufe bedeutet nicht zwangläufig, dass gar nicht geladen wird, vermutlich ist es sinnvoller, zumindest in der kleinsten Stufe zu laden, damit das Auto im Zweifel trotzdem irgendwann voll ist.

Die Rule hat jetzt noch keine "Glättung" eingebaut, darüber müsste man noch mal nachdenken, vor allem, wie sich das alles genau verhalten soll. Gibt es bestimmte Vorgaben des Herstellers, was bei der Laderegelung vermieden werden soll? Dabei geht es ja schon potentiell um hohe Ströme.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24

Re: Überschussleistung Laden

Beitrag von shuo »

Hi Udo,
vielen Dank für dein Vorschlag. An sowas in der Art hatte ich auch gedacht wollte aber nicht die Ladewerte ständig ändern. Wenn es sonnig ist, ist das auch kein Problem, aber sobald ne Wolke rein kommt, dann sieht das chaotisch aus.

Grundsätzlich gibt es von der Wallbox keinerlei Einschränkungen. Ich würde nur gerne grundsätzlich "ständiges regeln" vermeiden wollen. Die PV Anlage kann nie die volle Leistung liefern, mit der die Wallbox theoretisch laden könnte.

Ggf. macht es Sinn einen Trend anhand der letzten 10 Werte zu erkennen und daran nachzuregeln? Oder ggf. einen Durchschnittswert der letzten x gelieferten Leistung von der PV Anlage.

Mal ein paar Tage wie sowas aussehen könnte. Den grünen Teil würde ich gerne so viel wie möglich ausnutzen:
1.PNG
Kann aber auch mal so aussehen:
3.PNG
oder so
4.PNG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

nojo
Beiträge: 31
Registriert: 17. Mai 2020 22:09

Re: Überschussleistung Laden

Beitrag von nojo »

Hi,

verwendest du einen SmartMeter?
wenn nicht, einfach installieren und mit dem neuem Item die Wallbox Ein- oder Ausschalten.

Danke,
Nojo

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Überschussleistung Laden

Beitrag von udo1toni »

Wie man schön an Deinen Graphen sehen kann, ist eine vorausschauende Regelung hier so gut wie unmöglich, da auch kleine Wolken schnell zu erheblichen Leistungseinbrüchen führen können. Eine Regelung über den Durschnitt der letzten Minuten ist leicht möglich, dazu muss eine geeignete Persistence eingerichtet sein. Allerdings darf man das Zeitfenster nicht zu klein wählen, da sonst evtl. kein Durchschnittswert berechnet wird. (Ich meine, gerade letztens dazu im englischen Forum was überflogen zu haben).
Wie man so eine Regelung durchführt, ist vermutlich eine Wissenschaft für sich, und ich bin kein Regelungstechniker. Vielleicht hat da jemand anderes Expertise?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24

Re: Überschussleistung Laden

Beitrag von shuo »

Scheint sich wohl niemand mit dem Thema beschäftigt zu haben. Ich starte mal einen Thread im Englischen Forum und teile hier die Erkenntnisse später.

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24

Re: Überschussleistung Laden

Beitrag von shuo »

Ich habe inzwischen Rückmeldung erhalten. Vorschlag ist die Funktion averageSince() zu benutzen:

Code: Alles auswählen

val Number nPV   = if(PVLeistung.state instanceof Number) (PVLeistung.averageSince(now.minusMinutes(1)) as Number).floatValue else 0
val Number nHaus = if(StromBedarf.state instanceof Number) (StromBedarf.averageSince(now.minusMinutes(1)) as Number).floatValue else 2000 
@grizzle hat das auch bereits simuliert. Das sieht dann folgendermaßen aus:
Clipboard01.jpg
Jetzt müsste ich nur noch einen Bereich definieren wo es geladen werden soll (Z.b. ab 3000 Watt). Außerdem eine Abschalteinrichtung. Das heißt wenn es länger als 5 Minuten aus dem Netz bezieht, dann schalte ab.

Wäre hier eine Do-while schleife sinnvoll oder habt ihr noch effizientere Vorschläge?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Überschussleistung Laden

Beitrag von udo1toni »

Bitte niemals while verwenden. openHAB ist ein eventbasiertes System.
Die korrekte Herangehensweise wäre also, bei Änderung des Überschusses nachzuschauen, ob gemeinsam mit dem Ladegerät Netzbezug stattfindet.

Ist das der Fall, startest Du einen Timer (mit 5 Minuten), natürlich nur, falls der Timer nicht schon läuft.
Wird hingegen mehr als ausreichend Strom produziert, wird ein eventuell laufender Timer gecancelt und genullt.

Läuft der Timer ab, wurde der Abschaltzeitpunkt erreicht und der Code des Timers leitet die Abschaltung ein. Der Timer löscht noch den Verweis auf sich selbst, damit die Rule weiterhin funktioniert.

also grob so:

Code: Alles auswählen

var Timer tCharge = null

rule ...
...
then
...
    if(load > prod && tCharge === null && Charge.state == ON)
        tCharge = createTimer(now.plusMinutes(5)[|
            Charge.sendCommand(OFF)
            tCharge = null
        ])
    else if (load < prod) {
        tCharge?.cancel
        tCharge = null
    }

...
load wäre der aktuelle Verbrauch, prod wäre die aktuelle Produktion, tCharge ist der Timer zum Abschalten, Charge ist das Item, welches auf ON steht, wenn geladen wird und auf OFF steht, wenn nicht geladen wird.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24

Re: Überschussleistung Laden

Beitrag von shuo »

Code: Alles auswählen

val Number nPV   = if(PVLeistung.state instanceof Number) (PVLeistung.averageSince(now.minusMinutes(1)) as Number).floatValue else 0
val Number nHaus = if(StromBedarf.state instanceof Number) (StromBedarf.averageSince(now.minusMinutes(1)) as Number).floatValue else 2000 
Ich bekomme hier immer folgende Fehlermeldung:

Code: Alles auswählen

Rule 'Ladestrom einstellen': cannot invoke method public abstract float java.lang.Number.floatValue() on null
Ich kann damit nichts anfangen. Vermutlich ein Konvertierungsfehler? eine Idee?

shuo
Beiträge: 181
Registriert: 1. Sep 2018 18:24

Re: Überschussleistung Laden

Beitrag von shuo »

gefunden, es muss heißen:

Code: Alles auswählen

val Number nPV   = if(PVLeistung.state instanceof Number) (PVLeistung.averageSince(now.minusMinutes(1), "rrd4j") as Number).floatValue else 0

Antworten