Heizung rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
ollis112
Beiträge: 109
Registriert: 18. Aug 2018 11:36
Answers: 0
Wohnort: Alsbach-Hähnlein

Heizung rule

Beitrag von ollis112 »

Hallo,
ich habe ein kleines Problem mit meiner Heizungs-rule.
Sobald ich meine Terrassentür schließe, sollen die zwei Heizungen eingeschaltet werden.
Aber nur wenn die Aussentemperatur unter 15° ist und das Fenster geschlossen ist.
Hier meine rule:

Code: Alles auswählen

rule"Terrassentür geht zu"
when 
Item Terassentuer changed from OPEN to CLOSED
then
if(Temperatur_aussen.state < 15)
if(WZ_Fenster_S.state == CLOSED)
if(Termostat_Wohn.state == 0) 
    Termostat_Wohn.sendCommand(1)
if(Termostat_Ess.state == 0) 
    Termostat_Ess.sendCommand(1)
end
Doch wenn ich die Tür schließe schalten sich die Heizung "Ess" auf status 1

Was mache ich falsch?

Gruß Oliver
Openhab3.3.0, openhabian auf Ubuntu, Gigabyte Brix, Z-Wave, Zigbee, Enocean

Benutzeravatar
peter-pan
Beiträge: 2767
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Heizung rule

Beitrag von peter-pan »

Hallo Oliver,

mein Vorschlag (ungetestet)

Code: Alles auswählen

rule"Terrassentür geht zu"
when 
 Item Terassentuer changed from OPEN to CLOSED
then
    if((Temperatur_aussen.state < 15) && (WZ_Fenster_S.state == CLOSED) && (Termostat_Wohn.state == 0)) {
       Termostat_Wohn.sendCommand(1)
    }
    if((Temperatur_aussen.state < 15) && (WZ_Fenster_S.state == CLOSED) && (Termostat_Ess.state == 0)) {
       Termostat_Ess.sendCommand(1)
    }
end
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

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

Re: Heizung rule

Beitrag von udo1toni »

Na ja, das geht aber besser...

Der wichtigste Punkt hierbei ist, zu verstehen, dass die bedingte Verzweigung ausschließlich auf den nachfolgenden Befehl wirkt. Es spielt keine Rolle, wie Text hierfür eingerückt ist. Um mehrere Befehle von einer Bedingung abhängig auszuführen, müssen diese Befehle als Gruppe zusammengefasst werden. Dies geschieht mit den geschweiften Klammern (die Befehle befinden sich damit in einem neuen Kontext und das if sieht nur den Kontext als einzelnen Befehl).
Sieht also besser so aus:

Code: Alles auswählen

rule"Terrassentür geht zu"
when 
    Item Terassentuer changed from OPEN to CLOSED
then
    if((Temperatur_aussen.state as Number) < 15 && WZ_Fenster_S.state == CLOSED) {
        if(Termostat_Wohn.state == 0) 
            Termostat_Wohn.sendCommand(1)
        if(Termostat_Ess.state == 0) 
            Termostat_Ess.sendCommand(1)
    }
end
Allerdings solltest Du Dir darüber im Klaren sein, dass es diverse Dinge gibt, die diese Rule nicht abdeckt. Natürlich kannst Du diese Dinge mit anderen Rules berücksichtigen, aber es wäre eleganter, wenige Rules für das konkrete Problem zu nutzen.
Hier gibt es drei Bedingungen, die dazu dienen, die Heizung zu aktivieren. Allerdings sollte die Heizung vermutlich auch wieder abschalten, wenn die Bedingungen anders aussehen. Geht mit einer einzigen Rule:

Code: Alles auswählen

rule"Heizung Ess- und Wohnzimmer"
when 
    Item Terassentuer changed or
    Item WZ_Fenster_S changed or
    Item Temperatur_aussen changed
then
    var Number soll = 0
    if((Temperatur_aussen.state as Number) < 15 && WZ_Fenster_S.state == CLOSED && Terrassentuer.state == CLOSED) 
        soll = 2
    else if((Temperatur_aussen.state as Number) > 16 || WZ_Fenster_S.state == OPEN || Terrassentuer.state == OPEN) 
        soll = 1
    if(soll > 0) {
        soll = soll -1
        if(Termostat_Wohn.state != soll) 
            Termostat_Wohn.sendCommand(soll)
        if(Termostat_Ess.state != soll) 
            Termostat_Ess.sendCommand(soll)
    } 
end
Die Rule schaltet also die Heizung ein, wenn Tür und Fenster geschlossen und die Temperatur unter 15 ist. Sie schaltet die Heizung aus, sobald die Temperatur über 16 steigt oder Fenster bzw. Tür geöffnet werden. Die Variable und deren Nutzung dienen dazu, doppelte Befehle zu vermeiden. Wenn man beide Thermostaten in eine Gruppe packt, kann man die Gruppe nutzen und den Code noch eleganter gestalten:

Code: Alles auswählen

gThermostate.members.filter[i|i.state =! soll].forEach[j|j.sendCommand(soll)]
das ersetzt dann die vier Zeilen für die Thermostaten, die beiden Thermostaten müssen dann zu der Gruppe gThermostate gehören.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

ollis112
Beiträge: 109
Registriert: 18. Aug 2018 11:36
Answers: 0
Wohnort: Alsbach-Hähnlein

Re: Heizung rule

Beitrag von ollis112 »

OH HA!
Erst mal Danke!
So weit habe ich noch gar nicht gedacht.
Das ganze hat jetzt noch ein Haken:
Die beiden Heizungen sollen beim öffnen der Tür nicht sofort ausgehen, sondern erst nach 5 Minuten.
Dafür habe ich dann tatsächlich eine eigene rule mit Timer, die auch super funktioniert.
Ich denke ich werde das mal heute Abend für mich anpassen und testen.
Werde mich dann melden.
Gruß
Oliver
Openhab3.3.0, openhabian auf Ubuntu, Gigabyte Brix, Z-Wave, Zigbee, Enocean

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

Re: Heizung rule

Beitrag von udo1toni »

Und wie sieht es mit dem Fenster aus? Grundsätzlich ist es ja kein Problem, eine Verzögerung einzubauen.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

ollis112
Beiträge: 109
Registriert: 18. Aug 2018 11:36
Answers: 0
Wohnort: Alsbach-Hähnlein

Re: Heizung rule

Beitrag von ollis112 »

Bei dem Fenster ist keine Verzögerung nötig. Nur bei der Tür. Da es hier direkt über die Terrasse in den Garten geht, und zur Mülltonne etc.
Da kann es sein, dass man hier im Winter mal kurz raus geht. Da wäre es ja nicht so gut, wenn ständig die Heizung aus und angeschaltet wird. Nur wenn die Tür länger als 5 Minuten offen ist.
Openhab3.3.0, openhabian auf Ubuntu, Gigabyte Brix, Z-Wave, Zigbee, Enocean

ollis112
Beiträge: 109
Registriert: 18. Aug 2018 11:36
Answers: 0
Wohnort: Alsbach-Hähnlein

Re: Heizung rule

Beitrag von ollis112 »

Hallo Udo,

passt perfekt und funktioniert natürlich auch. (Habe ich nicht anders erwartet) :-)
Vielen Dank dafür!

Werde am Feiertag mal versuchen die Verzögerung einzubauen.
Gruß
Oliver
Openhab3.3.0, openhabian auf Ubuntu, Gigabyte Brix, Z-Wave, Zigbee, Enocean

Antworten