Überschuss ePatrone via Scripts / Regeln

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

iceget
Beiträge: 6
Registriert: 18. Apr 2022 13:26
Answers: 0

Überschuss ePatrone via Scripts / Regeln

Beitrag von iceget »

Hallo liebe Community,

ich habe openHAB bereits im Einsatz und habe nun meinen Fronius Wechselrichter der ins Netz einspeist auch ins System aufgenommen.
Ich habe eine ePatrone die mittels HomeMatic Aktor ein / ausgeschalten wird.

Nun meine eigentliche Frage:
Es gibt in openHAB ja Scripts und Rules. Wie würdet ihr das lösen das z.B. wenn ein Überschuss von 4000 kwh (in dem Fall bei Fronius Grid Power -4000) erzielt wird, sich der Aktor einschaltet und dann wenn mindestens trotzem der Aktor eingeschaltet ist er mindestens 1000 kwh produziert, dieser auch eingeschalten bleibt. Sinkt der Wert dann auf 0, das er diesen dann ausschaltet?

Kann man hier vielleicht auch die die letzte Minute (4 Messungen) alle 15 Sekunden durchführen, und wenn die letzten 4 Messungen mindestens einen Übschuss erzielt hat, das sich erst dann die ePatrone einschaltet?

Wie würde ihr dieses Szenario lösen? Ich hab schon gesehen das es sehr viele Logiken und auch Regeln gibt. Leider bin ich Anfänger in openHAB und würde mir gern mal eure ggf. Lösungen dazu ansehen.

Den Fronius Ohmpilot hab ich nicht gekauft deswegen auch die HomeMatic Steuerung.

Meine ePatrone hat 2.5kw, 1 phasig.

Und meine zweite Frage:
Gibt es eine "WatchDog" d.h. der überprüft ob alle "Things" einwandfrei funktionieren und wenn nicht das sich dann der Dienst neustartet? Bei HomeMatic hatte ich bereits das Problem das die Aktoren nicht mehr geschalten haben obwohl in der GUI die opeionen nicht geändert wurden.
Nach einem Neustart funktionierten diese wieder problemlos. Muss auch zugeben das hier openHAB fast einige Monate durchgelaufen ist.

Vielen dank schonmal im Vorfeld

lg iceget

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

Re: Überschuss ePatrone via Scripts / Regeln

Beitrag von udo1toni »

Ich nörgele ja immer gerne...

4000 kWh -> 4000 Kilowattstunden. (also 4 Megawattstunden). Deine PV kann Überschuss liefern, aber mutmaßlich eher 4 kW (Kilowatt, ohne Stunde) oder gerne auch 4000 Watt. Das ist die Leistung, die in diesem Moment abgegeben wird. Hält diese Leistung eine Stunde an, so wurden 4 kWh produziert.

Der Heizstab ist einphasig, im Grunde müsstest Du also schauen, dass die Phase, an der der Heizstab angeschlossen ist mindestens 2.5 kW Überschuss liefert. Das wird eher schwierig werden. Ich habe keine Ahnung, wie, bzw. ob solche Netzungleichheiten ausgeregelt werden. Aber sei's drum, grundsätzlich sollte der Zähler dennoch Ertrag messen.

Eine Rule für das Problem ist schnell erstellt:

Code: Alles auswählen

// Globale Timer zu Beginn der Datei definieren!
var Timer tHeatStart = null

rule "Überschuss verheizen"
when
    Item Fronius_Power changed
then
    if(!(Fronius_Power.state instanceof Number))                        // gültige Zahl? Falls nicht
        return;                                                         // Rule abbrechen

    val Number nPower = (Fronius_Power.state as Number).floatValue      // Messwert als Zahl ohne Einheit
    if(nPower < 4000) {                                                 // Leistung unter 4000
        tHeatStart?.cancel                                              // stoppe Timer, falls vorhanden
        tHeatStart = null                                               // entferne Timer
    }

    if(nPower < 1000 && ePatrone.state != OFF)                          // Leistung unter 1000 und Heizung an
        ePatrone.sendCommand(OFF)                                       // Beende Heizen

    if(nPower > 4000 && ePatrone.state != ON && tHeatStart === null)    // Leistung über 4000, Heizung aus und Timer läuft nicht
        tHeatStart = createTimer(now.plusMinutes(1), [|                 // Erzeuge Timer (Ausfühung in einer Minute)
            ePatrone.sendCommand(ON)                                    // Schalte Heizung ein
            tHeatStart = null
        ])
end
Die Rule wird jedes Mal ausgeführt, wenn sich der Messwert ändert.
Zunächst wird geprüft, ob ein gültiger Zahlenwert vorliegt. Ist das nicht der Fall, wird die Rule abgebrochen. An dieser Stelle könnte man auch vorsichtshalber den Heizstab abschalten, eine Warnmeldung ausgeben,... whatever.
Nun, da sichergestellt ist, dass der Item Status eine gültige Zahl enthält, wird diese Zahl in eine lokale Konstante nPower übernommen. Dabei wird gleich die Einheit entfernt, falls das Item eine hat (ist beim Fronius Binding der Fall).
Nun wird geprüft, ob der Messwert die 4000 unterschreitet. Falls ja, wird ein laufender Timer gestoppt und der Zeiger auf den Timer gelöscht.
Unterschreitet der Messwert die 1000 und der Heizstab ist an, so wird der Heizstab abgeschaltet.
Überschreitet der Messwert die 4000, der Heizstab ist aus und der Timer nicht angelegt, so wird der Timer angelegt.
Danach ist die Rule beendet.

Wohlgemerkt, entweder Bedingung 1 trifft zu, Bedingung 1 und Bedingung 2 treffen zu oder Bedingung 3 trifft zu (oder der Messwert landet tatsächlich exakt auf der 4000, was uns dann aber egal ist)
UND die Rule ist unmittelbar beendet. Nein, der Code nach createTimer wird hier nicht ausgeführt, er wird lediglich im Speicher des Schedulers notiert, sonst nichts.

Nach einer Minute läuft der Timer ab. Der hinterlegte Code wird ausgeführt, das heißt, der Heizstab wird eingeschaltet und der Timer wird gelöscht.

Wenn der Messwert innerhalb der Minute Verzögerung unter 4000 sinkt, wird der Timer gestoppt, der Heizstab wird also nicht aktiviert. erst, wenn eine Minute lang kein Messwert unter 4000 rein kommt, wird die Heizung eingeschaltet.
Sinkt der Messwert unter die 1000, so wird der Heizstab unmittelbar ausgeschaltet.

Amerkungen hierzu: Die Messfrequenz wird im Binding definiert bzw. von Fronius vorgegeben. Ich habe auch einen Fronius Wechselrichter, aber ehrlich gesagt keine Ahnung, wie hoch die zeitliche Auflösung ist.
Der Messwert muss natürlich der Überschuss sein. Ich habe bei mir keinen direkten Zähler für den Überschuss (kein Smartmeter am Fronius). Da musst Du also aufpassen, dass es tatsächlich der Überschuss ist, und nicht etwa die insgesamt abgegebene Leistung. Man kann aber sicher den Überschuss berechnen, wenn man den Wert nicht direkt ausgelesen bekommt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

julian1712
Beiträge: 11
Registriert: 22. Mai 2022 15:08
Answers: 0

Re: Überschuss ePatrone via Scripts / Regeln

Beitrag von julian1712 »

Hallo,

Sehr spannend! - Wie löst du dass wenn du keine "Sonne" hast?
Irgendwie müsste man da doch noch einen Temperatursensor mit ins spiel bringen, welcher die Patrone dann trotzdem aktivieret sollte das Warmwasser unter z.B 40 Grad kommen oder?

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

Re: Überschuss ePatrone via Scripts / Regeln

Beitrag von udo1toni »

Die Frage ist, ob Du mit Strom heizen willst, den Du normal bezahlen musst.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

iceget
Beiträge: 6
Registriert: 18. Apr 2022 13:26
Answers: 0

Re: Überschuss ePatrone via Scripts / Regeln

Beitrag von iceget »

Hallo und danke für die Antwort,

ich habe das so lösen können. Meine LWP schaltet sowieso spätestens um 09:00 Uhr ein und heizt täglich das Warmwasser auf.
Es geht mir nur um die Zeit wenn z.B. schon um 08:00 Uhr Überschuss besteht, das sich dann meine Heizpatrone zusätzlich bei Überschuss aktiviert.
Wenn diese dann spätestens bis 09:00 Uhr was Warmwasser aufgeheizt hat, braucht die LWP nicht mehr das Warmwasser aufheizen sondern kann gleich direkt in den Heizmodus gehen.

Vielen Dank lg iceget

julian1712
Beiträge: 11
Registriert: 22. Mai 2022 15:08
Answers: 0

Re: Überschuss ePatrone via Scripts / Regeln

Beitrag von julian1712 »

Das klappt bei mir so leider nicht, denn ich habe nur die Heizpatrone für Warmwasser.

Jetzt möchte ich natürlich wenn möglich auch nur mit Photovoltaik heizen - aber kaltes Wasser darf ichauch keines haben ^^ Lg

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

Re: Überschuss ePatrone via Scripts / Regeln

Beitrag von udo1toni »

Also, was mir spontan dazu einfiele: Setze die Solltemperatur in der sonnenlosen Zeit herunter.
Ansonsten ist das ganze witzlos.
"Schalte den Strom ein wenn Überschuss und Wasser zu kalt und schalte den Strom ein wenn Wasser zu kalt." -> "Schalte den Strom ein wenn Wasser zu kalt."

Und dann kommt es darauf an, wie gut die Isolierung des Warmwasserspeichers ist, ob es überhaupt sinnvoll ist, den Speicher mehr aufzuheizen als nötig. Und mit veränderter Speichertemperatur musst Du natürlich auch die Ventile anders stellen, wenn Du Wasser zapfst. (sogar Thermostatventile sind da betroffen).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

zinnik
Beiträge: 190
Registriert: 7. Sep 2021 11:28
Answers: 0

Re: Überschuss ePatrone via Scripts / Regeln

Beitrag von zinnik »

Hallo,

Ich habe ähnliches vor nur mit einem Badheizkörper der über einen Shelly an und aus geschaltet wird. Der Heizkörper hat 850W

Mein Solaredge Binding liefert die Einspeisung als Number :Power Item aber in kW Angabe, dann müsste ich in der Rule von Udo also die kW übernehmen oder ?

Code: Alles auswählen

// Globale Timer zu Beginn der Datei definieren!
var Timer tHeatStart = null

rule "Überschuss heizen Badheizkörper"
when
    Item Aktuell_Live_Export changed
then
    if(!(Aktuell_Live_Export.state instanceof Number))                        // gültige Zahl? Falls nicht
        return;                                                         // Rule abbrechen

    val Number nPower = (Aktuell_Live_Export.state as Number).floatValue      // Messwert als Zahl ohne Einheit
    if(nPower < 1.00) {                                                 // Leistung unter 1kw
        tHeatStart?.cancel                                              // stoppe Timer, falls vorhanden
        tHeatStart = null                                               // entferne Timer
    }

    if(nPower < 0.5 && shelly.state != OFF)                          // Leistung unter 0.5kw und Heizung an
        shelly.sendCommand(OFF)                                       // Beende Heizen

    if(nPower > 1.00 && shelly.state != ON && tHeatStart === null)    // Leistung über 1kw, Heizung aus und Timer läuft nicht
        tHeatStart = createTimer(now.plusMinutes(1), [|                 // Erzeuge Timer (Ausfühung in einer Minute)
            shelly.sendCommand(ON)                                    // Schalte Heizung ein
            tHeatStart = null
        ])
end
openhab 4.2.0 Docker (Qnap)
influxDB 1.8.2 Docker (Qnap)
Grafana v10.2.2 Docker (Qnap)
Deconz 2.19.03 Docker (Qnap)
Homematic (Raspberrymatic Pi 3B+)
Grafana, Phoscon, Shelly, Gardena, Tuya
Camera IP Binding mit ffmpeg
Solaredge PV Anlage mit 12kW Speicher (solaredgeBinding)
u.v.m.

Lg zinnik

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

Re: Überschuss ePatrone via Scripts / Regeln

Beitrag von udo1toni »

Ja, sieht für mich gut aus.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Selter
Beiträge: 73
Registriert: 9. Mär 2018 16:06
Answers: 0
Wohnort: Bremen

Re: Überschuss ePatrone via Scripts / Regeln

Beitrag von Selter »

Tolle Rule :)
Das will ich auch gerade umsetzen ...

Eine Frage zum Timer - now.plusMinutes(1) - was genau bewirkt der?
Funktioniert das auch mit oH3.2?
openHAB 3.2 in einer Debian-VM mit openHABian unter Proxmox 8.3.3 auf Intel NUC 5i3ryh // WiFi (UniFi-APs) + Aqara Gateway + Zigbee2MQTT@SLZB-06 + Aeon Z-Wave // viele Shellies / Sonoffs mit Tasmota / viele Aqara Sensoren über Gateway / diverse Sensoren über Z2M // Grafana (InfluxDB)

Antworten