Heizungs/Fenster Steuerungs Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
SIDE22
Beiträge: 153
Registriert: 4. Mai 2020 01:31
Answers: 0
Wohnort: Hagen a.T.W.

Heizungs/Fenster Steuerungs Rule

Beitrag von SIDE22 »

Hallo zusammen,

ich bin momenten dabei Test weise in einem Zimmer die eine HeizungsSteuerung zusammen.
Im zimmer sind 2 Fenster kontakte und 1 Heizungs Thermostat
wenn eines der beiden Fenster aufgemacht wird soll die Heizung ausgehen den einige sind immer so faul und Lüften dann das zimmer nur machen sie die Heizung nicht aus ^^

So nun habe ich schon meine eine Rule angelegt nur geht die heizung nur bei einem der 2 Fenster aus. Soll abver bei jedem ausgehen und weiß nicht wie ich die Rule demnach anpassen muss

Code: Alles auswählen

rule "Fenster Florian Zimmer"
when
    Item FZimmer_Fenster_State changed or
    Item FZimmer_DachFenster_State changed
then
    if(FZimmer_Fenster_State.state == OPEN)
        {
            FZimmer_Heizung_SetTemp.persist
            FZimmer_Heizung_SetTemp.sendCommand(4,5)
        }
    else if(FZimmer_Fenster_State.state == CLOSED)
        {
            FZimmer_Heizung_SetTemp.sendCommand(FZimmer_Heizung_SetTemp.previousState.state as Number)
        }
end
Hoffe das mir da einer Helfen kann.

LG
von udo1toni » 19. Mai 2020 00:18
Na ja, Du prüfst innerhalb der Rule ja auch nur das eine Fenster...

Code: Alles auswählen

rule "Fenster Florian Zimmer"
when
    Item FZimmer_Fenster_State changed or
    Item FZimmer_DachFenster_State changed
then
    if(FZimmer_Fenster_State.state == OPEN  || FZimmer_DachFenster_State.state == OPEN)
        {
            FZimmer_Heizung_SetTemp.persist
            FZimmer_Heizung_SetTemp.sendCommand(4.5)   // Achtung! amerikaisches Komma!
        }
    else if(FZimmer_Fenster_State.state == CLOSED && FZimmer_DachFenster_State.state == CLOSED)
        {
            FZimmer_Heizung_SetTemp.sendCommand(FZimmer_Heizung_SetTemp.previousState.state as Number)
        }
end
Allerdings ginge das Ganze auch etwas eleganter über eine Gruppe:

Code: Alles auswählen

Group:Contact:OR(OPEN,CLOSED) gFZimmer "FZimmer Fenster offen: [%s]" 
Contact FZimmer_Fenster_State "FZimmer Fenster" (gFZimmer) 
Contact FZimmer_DachFenster_State "FZimmer Dachfenster" (gFZimmer)
mit der passenden Rule:

Code: Alles auswählen

rule "Fenster Florian Zimmer"
when
    Item gFenster changed
then
    if(gFenster.state == OPEN)
        {
            FZimmer_Heizung_SetTemp.persist
            FZimmer_Heizung_SetTemp.sendCommand(4.5)   // Achtung! amerikaisches Komma!
        }
    else if(gFenster.state == CLOSED)
        {
            FZimmer_Heizung_SetTemp.sendCommand(FZimmer_Heizung_SetTemp.previousState.state as Number)
        }
end
Die Gruppe geht auf Status OPEN, sobald eines der zugehörigen Items auf Status OPEN ist.

Eine alternative Rule sähe etwas komplexer aus:

Code: Alles auswählen

rule "Fenster Florian Zimmer"
when
    Member of gFenster changed
then
    if(gFenster.members.filter[i | i.state == OPEN].size > 0)
        {
            FZimmer_Heizung_SetTemp.persist
            FZimmer_Heizung_SetTemp.sendCommand(4.5)   // Achtung! amerikaisches Komma!
        }
    else if(gFenster.members.size == gFenster.members.filter[i|i.state == CLOSED].size)
        {
            FZimmer_Heizung_SetTemp.sendCommand(FZimmer_Heizung_SetTemp.previousState.state as Number)
        }
end
Im Grunde kann man natürlich auf die zweite Bedingung verzichten, da sie ja das Gegenteil der ersten Bedingung darstellt. Der Vorteil der zweiten Variante liegt darin, dass die Gruppe nicht zwingend mit der OR-Funktion arbeiten muss.
Gehe zur vollständigen Antwort
openHAB 3.1.0M5 als Debian-Container in Proxmox
Bindings (HomeMatic, Shelly, Phillips Hue, HTTP, MQTT, Spotify, Telegram)
rund 90 HomeMatic komponenten dazu 21 Shelly und ca. 126 Phillips Hue Leuchten im einsatz.
MQTT bindung für openWB (WallBox) abfrage, HTTP für DoorPi (IP Türsprechstelle)

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

Re: Heizungs/Fenster Steuerungs Rule

Beitrag von udo1toni »

Na ja, Du prüfst innerhalb der Rule ja auch nur das eine Fenster...

Code: Alles auswählen

rule "Fenster Florian Zimmer"
when
    Item FZimmer_Fenster_State changed or
    Item FZimmer_DachFenster_State changed
then
    if(FZimmer_Fenster_State.state == OPEN  || FZimmer_DachFenster_State.state == OPEN)
        {
            FZimmer_Heizung_SetTemp.persist
            FZimmer_Heizung_SetTemp.sendCommand(4.5)   // Achtung! amerikaisches Komma!
        }
    else if(FZimmer_Fenster_State.state == CLOSED && FZimmer_DachFenster_State.state == CLOSED)
        {
            FZimmer_Heizung_SetTemp.sendCommand(FZimmer_Heizung_SetTemp.previousState.state as Number)
        }
end
Allerdings ginge das Ganze auch etwas eleganter über eine Gruppe:

Code: Alles auswählen

Group:Contact:OR(OPEN,CLOSED) gFZimmer "FZimmer Fenster offen: [%s]" 
Contact FZimmer_Fenster_State "FZimmer Fenster" (gFZimmer) 
Contact FZimmer_DachFenster_State "FZimmer Dachfenster" (gFZimmer)
mit der passenden Rule:

Code: Alles auswählen

rule "Fenster Florian Zimmer"
when
    Item gFenster changed
then
    if(gFenster.state == OPEN)
        {
            FZimmer_Heizung_SetTemp.persist
            FZimmer_Heizung_SetTemp.sendCommand(4.5)   // Achtung! amerikaisches Komma!
        }
    else if(gFenster.state == CLOSED)
        {
            FZimmer_Heizung_SetTemp.sendCommand(FZimmer_Heizung_SetTemp.previousState.state as Number)
        }
end
Die Gruppe geht auf Status OPEN, sobald eines der zugehörigen Items auf Status OPEN ist.

Eine alternative Rule sähe etwas komplexer aus:

Code: Alles auswählen

rule "Fenster Florian Zimmer"
when
    Member of gFenster changed
then
    if(gFenster.members.filter[i | i.state == OPEN].size > 0)
        {
            FZimmer_Heizung_SetTemp.persist
            FZimmer_Heizung_SetTemp.sendCommand(4.5)   // Achtung! amerikaisches Komma!
        }
    else if(gFenster.members.size == gFenster.members.filter[i|i.state == CLOSED].size)
        {
            FZimmer_Heizung_SetTemp.sendCommand(FZimmer_Heizung_SetTemp.previousState.state as Number)
        }
end
Im Grunde kann man natürlich auf die zweite Bedingung verzichten, da sie ja das Gegenteil der ersten Bedingung darstellt. Der Vorteil der zweiten Variante liegt darin, dass die Gruppe nicht zwingend mit der OR-Funktion arbeiten muss.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

SIDE22
Beiträge: 153
Registriert: 4. Mai 2020 01:31
Answers: 0
Wohnort: Hagen a.T.W.

Re: Heizungs/Fenster Steuerungs Rule

Beitrag von SIDE22 »

Hallo udo1toni,
Ich danke dir ja klar hätte ich auch drauf kommen können und mit der Gruppe ist natürlich auch sinnvoll da das ganze ja aktuell auch nur in einem Zimmer ist geht es noch spätestens im wohnzimmer mit 10 Fenstern und 3 Heizungen wäre glaube ich die 2te Variante ganz nett
Danke dir :)

Lg
openHAB 3.1.0M5 als Debian-Container in Proxmox
Bindings (HomeMatic, Shelly, Phillips Hue, HTTP, MQTT, Spotify, Telegram)
rund 90 HomeMatic komponenten dazu 21 Shelly und ca. 126 Phillips Hue Leuchten im einsatz.
MQTT bindung für openWB (WallBox) abfrage, HTTP für DoorPi (IP Türsprechstelle)

Antworten