Splitklima verzögert einschalten

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Scotty.de
Beiträge: 20
Registriert: 2. Sep 2023 20:53
Answers: 0

Re: Splitklima verzögert einschalten

Beitrag von Scotty.de »

Die Abschaltung sollte dann idealerweise umgekehrt laufen.

#1 item: Daikin_Onecta_AC_EG_Power OFF (wenn "itemName: SF_Power_total state" für 60 Sekunden kleiner 2500 ist)
#2 item: Daikin_Onecta_AC_1OG_Power OFF (wenn "#1 = OFF" und "itemName: SF_Power_total state" für 60 Sekunden kleiner 2000 ist)
#3 item: Daikin_Onecta_AC_DG_Power OFF (wenn "#2 = OFF" und "itemName: SF_Power_total state" für 60 Sekunden kleiner 3000 ist)

Auch hier soll "itemName: AC_AUTOMATIC_TEST = ON" sein damit mach die Automatik abschalten kann damit manuelles schalten möglich ist

Mach das so Sinn?

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

Re: Splitklima verzögert einschalten

Beitrag von udo1toni »

JA, sicher, Du musst aber daran denken, was die Aggregate "abkönnen". Wie oft darf das Aggregat in einer bestimmten Zeit ein- und ausgeschaltet werden, und wie schnell hintereinander...
Wie schaltest Du die Geräte? ist das eine eingebaute Schaltfunktion, die Du fernsteuerst, oder handelt es sich um eine externe Steuerung?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Scotty.de
Beiträge: 20
Registriert: 2. Sep 2023 20:53
Answers: 0

Re: Splitklima verzögert einschalten

Beitrag von Scotty.de »

Ich schaltest die Geräte via Daikin Binding. Funktioniert genauso wie die APP fürs smartphone oder die gute alte Fernbedienung. Also keine harte Abschaltung über ein Relais.
Die Schaltzyklen möchte ich auch auf ein Minimum reduzieren. Deswegen die 60 Sekunden Verzögerung, und ich habe auch einen relativ hohen Einschaltwert. Den Ausschaltwert werde ich eventuell um ca. 1500 reduzieren.

Macht man das mit einer neuen Regel? Wie würde die aussehen?

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

Re: Splitklima verzögert einschalten

Beitrag von udo1toni »

Eigentlich wäre es das Einfachste, das in die bestehende Regel mit einzubauen, die wird halt etwas umfangreicher...

Allerdings müssen die Schwellwerte vermutlich anders dimensioniert sein.
Bedingung Start 2. Aggregat: Wert über 2000, Aggregat 1 läuft und Aggregat 2 läuft nicht.
Bedingung Stopp 1.Aggregat: Wert unter 3000 Aggregat 1 läuft und Aggregat 2 läuft nicht.

Daraus ergibt sich, dass zwischen 2000 und 3000 das 2. Aggregat gestartet werden soll, während das 1. Aggregat gestoppt werden soll. Das wird nicht in Deinem Sinn sein...

Überhaupt... beinhaltet SF_Power_total den Verbrauch der Aggregate? Auf der einen Seite wäre das verständlich, aber dann ergäben sich definitiv andere Schaltpunkte, dann würde ich erst abschalten, wenn unterhalb (z.B.) 100 liegt, denn nach dem Ausschalten steigt dann SF_Power_total direkt um den Verbrauch des ausgeschalteten Aggregats.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Scotty.de
Beiträge: 20
Registriert: 2. Sep 2023 20:53
Answers: 0

Re: Splitklima verzögert einschalten

Beitrag von Scotty.de »

"Daraus ergibt sich, dass zwischen 2000 und 3000 das 2. Aggregat gestartet werden soll, während das 1. Aggregat gestoppt werden soll. Das wird nicht in Deinem Sinn sein.."
Das 2. Aggregat soll nur starten wenn das 1. Aggregat schon 60 Sekunden läuft.

Ja, die Abschaltwerte werden wohl am Ende viel niedriger werden.
SF_Power_total beinhaltet den Gesamtverbrauch des Hauses. Wird direkt hinter dem Zähler vom Energieversorger gemessen.

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

Re: Splitklima verzögert einschalten

Beitrag von udo1toni »

Scotty.de hat geschrieben: 12. Sep 2023 16:08 Das 2. Aggregat soll nur starten wenn das 1. Aggregat schon 60 Sekunden läuft.
Ja, das spielt aber keine Rolle, denn beide Funktionen überlappen sich. Aggregat 1 läuft und die zur Verfügung stehende Einspeisung liegt über 2000 -> Aggregat 2 einschalten. Gleichzeitig aber auch unter 3000 -> Aggregat 1 ausschalten. Die Schwellwerte müssen IMMER so bemessen sein, dass die Ausschaltschwelle unter der Einschaltschwelle liegt.
Scotty.de hat geschrieben: 12. Sep 2023 16:08 SF_Power_total beinhaltet den Gesamtverbrauch des Hauses. Wird direkt hinter dem Zähler vom Energieversorger gemessen.
Das ist ein wichtiger Punkt. In dem Moment, wo das Aggregat eingeschaltet wird, wird die Menge an eingespeistem Strom (erheblich) sinken.
Ich nehme an, die Aggregate passen dann von ihrer Leistungsaufnahme ungefähr zu den gewählten Werten? Man muss natürlich aufpassen, weil die Aggregate selbst ja eine eigene Steuerung haben, die dann mindestens mal temperaturgesteuert ist.
Was bildet das Item Daikin...Power exakt ab? ist das eine Art "Freigabe", die den Zustand erst wieder ändert, wenn man den Ausschaltbefehl sendet? Dann könnte es zu folgender Situation kommen:
1. Aggregat wird aktiviert weil Einspeisung über 3000
1. Aggregat schaltet wegen Erreichen der Solltemperatur ab. Damit steigt die Einspeisung.
2. Aggregat schaltet ein weil die Einspeisung über 2000 ist.
1. Aggregat schaltet wegen Unterschreiten der Solltemperatur ein
gemeinsame Leistungsaufnahme führt zu negativer Einspeisung (also Strombezug)
2. Aggregat wird wieder ausgeschaltet aber 1. Aggregat schaltet ebenfalls aus usw.

Die Rule sieht jetzt natürlich viel komplizierter aus.

Code: Alles auswählen

// globale Variablen müssen vor der ersten Rule in der Datei definiert werden!
var Timer tSplitstart = null                                        // Zeiger für Timer

// 1. Rule in der Datei...
rule "Starte Splitgerät falls Überschuss"
when
    Item SF_Power_total changed                                     // Leistung geändert
then
    if(AC_AUTOMATIC_TEST.state != ON) {                             // Automatik inaktiv?
        tSplitstart?.cancel                                         // dann Timer abbrechen
        tSplitstart = null                                          // Zeiger löschen
        return;                                                     // und Rule abbrechen
    }
    val nPower = if(SF_Power_total.state instanceof Number)         // falls gültiger Messwert
                    - (SF_Power_total.state as Number).floatValue   // hole Wert
                 else                                               // ansonsten 
                    0                                               // nimm 0

    var nThresholdOn  = 3000                                        // Schwellwert an  für 1. Aggregat
    var nThresholdOff = 0                                           // Dummy Schwellwert aus 
    if(Daikin_Onecta_AC_DG_Power.state == ON) {                     // falls 1. Aggregat läuft
        nThresholdOn  = 2000                                        // Schwellwert an  für 2. Aggregat
        nThresholdOff = 1000                                        // Schwellwert aus für 1. Aggregat
    }
    if(Daikin_Onecta_AC_1OG_Power.state == ON) {                    // falls 2. Aggregat läuft
        nThresholdOn  = 2500                                        // Schwellwert an  für 3. Aggregat
        nThresholdOff = 1500                                        // Schwellwert aus für 2. Aggregat
    }
    if(Daikin_Onecta_AC_EG_Power.state == ON) {                     // falls 3. Aggregat läuft
        nThresholdOn  = 10000                                       // Dumm Schwellwert an
        nThresholdOff = 2500                                        // Schwellwert aus für 3. Aggregat
    }

    if(tSplitstart !== null) {                                      // Timer aktiv
        if(nPower < nThresholdOn && nPower > nThresholdOff) {       // akt. Wert zwischen Grenzwerten
            tSplitstart.cancel                                      // Timer abbrechen
            tSplitstart = null                                      // Zeiger löschen
        }
    } else {                                                        // Timer inaktiv
        if(nPower > nThresholdOn) {                                 // oberer Grenzwert überschritten
            tSplitstart = createTimer(now.plusSeconds(60), [|       // lege Timer für nächsten Aggregatstart an
                if(Daikin_Onecta_AC_DG_Power.state != ON)           // Falls Aggregat 1 aus
                    Daikin_Onecta_AC_DG_Power.sendCommand(ON)       // schalte Aggregat 1 ein
                else if(Daikin_Onecta_AC_1OG_Power.state != ON)     // ansonsten, falls Aggregat 2 aus
                    Daikin_Onecta_AC_1OG_Power.sendCommand(ON)      // schalte Aggregat 2 ein
                else if(Daikin_Onecta_AC_EG_Power.state != ON)      // ansonsten, falls Aggregat 3 aus
                    Daikin_Onecta_AC_EG_Power.sendCommand(ON)       // schalte Aggregat 3 ein

                tSplitstart = null                                  // lösche Zeiger
            ])
        } else if(nPower < nThresholdOff) {                         // unterer Grenzwert unterschritten
            tSplitstart = createTimer(now.plusSeconds(60), [|       // lege Timer für nächsten Aggregatstop an
                if(Daikin_Onecta_AC_EG_Power.state != OFF)          // Falls Aggregat 3 nicht aus
                    Daikin_Onecta_AC_EG_Power.sendCommand(OFF)      // schalte Aggregat 3 aus
                else if(Daikin_Onecta_AC_1OG_Power.state != OFF)    // ansonsten, falls Aggregat 2 nicht aus
                    Daikin_Onecta_AC_1OG_Power.sendCommand(OFF)     // schalte Aggregat 2 aus
                else if(Daikin_Onecta_AC_DG_Power.state != OFF)     // ansonsten, falls Aggregat 1 nicht aus
                    Daikin_Onecta_AC_DG_Power.sendCommand(OFF)      // schalte Aggregat 1 aus

                tSplitstart = null                                  // lösche Zeiger
            ])
        }
    }
end
Aber eigentlich hat sich nichts großartig verändert. Es gibt lediglich zwei unterschiedliche Codeblöcke für den Timer, einmal zum Einschalten, einmal zum Ausschalten, außerdem eine zweite Variable für den Grenzwert zum Ausschalten (und entsprechend eine Namenserweiterung der vorhandenen Variablen)

Ich habe die Schwellwerte mal so definiert, wie ich denke, dass es sein muss. Die Größen werden aber entscheidend auch von der Leistungsaufnahme der drei Aggregate abhängen, das muss gut zueinander passen. Letztlich muss die Einschaltschwelle über der Leistungsaufnahme liegen, die Ausschaltschwelle dann aber so niedrig, dass die Einspeisung auch mit der Leistungsaufnahme des Aggregats über der Ausschaltschwelle liegt (sonst Taktung)

Warum nur eine Rule?
Es gibt im Grunde nur eine Eingangsgröße, das ist die Einspeisung. Die Rule muss jedes Mal triggern, wenn sich die Einspeisung ändert. Man könnte nun also viele kleine Rules bauen, die aber alle auf den gleichen (nein, sogar den selben) Trigger auslösen müssen.
Weiterhin steuert diese eine Rule drei Geräte, aber in Abhängigkeit genau dieser drei Geräte. Würde ich nun die Funktion auf mehrere Rules aufteilen, dann müsste ich mich zusätzlich versichern, dass nicht evtl. eine der anderen Rules gerade an den verwendeten Items rumdoktort...

Man könnte auch eine State Machine programmieren, ich fürchte aber, dass der Code dadurch weder kürzer noch verständlicher wird. :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Scotty.de
Beiträge: 20
Registriert: 2. Sep 2023 20:53
Answers: 0

Re: Splitklima verzögert einschalten

Beitrag von Scotty.de »

Das Item "Daikin...Power" ist vergleichbar mit der ON/OFF Taste der Fernbedienung.
Wenn ON, dann startet das Gerät die Regelung.
Die Aggregate sind modulierend, Leistungsaufnahme während der Kompressor läuft variert:
DG: 320W - 2400W
1OG: 290W - 1300W
EG: 320W - 2400W
Bei Überschreitung der eingestellten Temperatur geht das Aggregat in standby und moduliert bei unterschreitung wieder weiter.
udo1toni hat geschrieben: 12. Sep 2023 18:22
Scotty.de hat geschrieben: 12. Sep 2023 16:08 Das 2. Aggregat soll nur starten wenn das 1. Aggregat schon 60 Sekunden läuft.
Ja, das spielt aber keine Rolle, denn beide Funktionen überlappen sich. Aggregat 1 läuft und die zur Verfügung stehende Einspeisung liegt über 2000 -> Aggregat 2 einschalten. Gleichzeitig aber auch unter 3000 -> Aggregat 1 ausschalten. Die Schwellwerte müssen IMMER so bemessen sein, dass die Ausschaltschwelle unter der Einschaltschwelle liegt.
Bemessung Ausschaltschwelle unter der Einschaltschwelle = Aggregatbezogen? Z.B.:
DG: Einschaltschwelle= 3000 Ausschaltschwelle=2500
1OG: Einschaltschwelle= 2000 Ausschaltschwelle=1500
EG: Einschaltschwelle= 3000 Ausschaltschwelle=2500

udo1toni hat geschrieben: 12. Sep 2023 18:22 Dann könnte es zu folgender Situation kommen:
1. Aggregat wird aktiviert weil Einspeisung über 3000
1. Aggregat schaltet wegen Erreichen der Solltemperatur ab. Damit steigt die Einspeisung.
2. Aggregat schaltet ein weil die Einspeisung über 2000 ist.
1. Aggregat schaltet wegen Unterschreiten der Solltemperatur ein
gemeinsame Leistungsaufnahme führt zu negativer Einspeisung (also Strombezug)
2. Aggregat wird wieder ausgeschaltet aber 1. Aggregat schaltet ebenfalls aus usw.
"1. Aggregat schaltet ebenfalls aus "
Das sollte nur ausschalten wenn:
a) 2. Aggregat=AUS
b) und erst nachdem "a)" erfüllt ist muss für 60 Sekunden die Ausschaltschwelle 1.Aggregat unterschritten sein


udo1toni hat geschrieben: 12. Sep 2023 18:22 Die Rule sieht jetzt natürlich viel komplizierter aus. .
Das ist ein Tipfehler in der Rule:?
"Schwellwert an für 3. Aggregat" = 2500
"Schwellwert aus für 3. Aggregat" = 2500

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

Re: Splitklima verzögert einschalten

Beitrag von udo1toni »

Ich denke, das Problem ist noch nicht klar..

Es kommt ein Messwert rein. Abhängig vom Messwert gibt es verschiedene Reaktionen, das sind die verzögerten Schaltvorgänge. Durch die Verzögerung muss die Bedingung für eine bestimmte Reaktion eine gewisse Zeit (eben eine Minute) ohne Unterbrechung erfüllt sein.

Ich lasse die Verzögerung hier mal außer Acht, weil das für das Problem keine Rolle spielt.

Wenn kein Aggregat läuft, gibt es nur zwei Möglichkeiten, nämlich das erste Aggregat starten oder eben nicht. Hier ist die Lösung unproblematisch.

Wenn das erste Aggregat läuft, gibt es drei Möglichkeiten, das erste Aggregat stoppen, das zweite Aggregat starten oder nichts tun.
Wenn Du nun den Grenzwert für stoppen ÜBER dem Grenzwert für STARTEN anordnest und der Messwert zwischen den beiden Zonen ist, sind die Bedingungen für beide Vorgänge gleichzeitig erfüllt. Die dritte Möglichkeit (es passiert gar nichts) kann hingegen niemals eintreten.

Deshalb muss der Stopp-Grenzwert IMMER unter dem Start-Grenzwert liegen (wobei sich die beiden Grenzwerte auf unterschiedliche Aggregate beziehen)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Scotty.de
Beiträge: 20
Registriert: 2. Sep 2023 20:53
Answers: 0

Re: Splitklima verzögert einschalten

Beitrag von Scotty.de »

Ist leider für mich immer noch nicht klar.

geht das mit der Rule wie sie jetzt ist so:
DG: Einschaltschwelle= 3000 Ausschaltschwelle=2500
1OG: Einschaltschwelle= 2000 Ausschaltschwelle=1500
EG: Einschaltschwelle= 3000 Ausschaltschwelle=2500

oder nur so:
DG: Einschaltschwelle= 3000 Ausschaltschwelle=1999
1OG: Einschaltschwelle= 2000 Ausschaltschwelle=1999
EG: Einschaltschwelle= 3000 Ausschaltschwelle=1999

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

Re: Splitklima verzögert einschalten

Beitrag von udo1toni »

Letztere Variante funktioniert, erstere wird nicht funktionieren.

Mein Tipp wäre aber, die Ausschaltschwelle noch wesentlich niedriger zu wählen.

Beispielwerte für 1. Aggregat:

Das Aggregat wird gestartet bei Überschuss 3000 W, es kann aber ab kurz nach dem Einschaltzeitpunkt durchaus 2400 W ziehen (und selbst wenn es das nicht unmittelbar tut, so ist es doch möglich, dass dies relativ schnell nach dem Anlaufen geschieht).
Wenn Du also gerade die 3000 überschreitest (total sonnig, wolkenlos...) und das Aggregat zugeschaltet wird, sinkt der Wert sofort auf 2680 (weil 320 W Verbrauch) und kann durchaus schnell auf 600 W sinken, obwohl immer noch wolkenlos und sonnig. Dieses Takten aus sich selbst heraus solltest Du versuchen zu verhindern.
Die Ausschaltschwelle sollte also eher bei, meinetwegen, 800 liegen, nicht bei 1999.
Lass eine großzügige Totzone zu (in der die Rule weder ein- noch ausschaltet).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten