Seite 1 von 1

Heizungs/Fenster Steuerungs Rule

Verfasst: 18. Mai 2020 23:44
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

Re: Heizungs/Fenster Steuerungs Rule

Verfasst: 19. Mai 2020 00:18
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.

Re: Heizungs/Fenster Steuerungs Rule

Verfasst: 19. Mai 2020 01:18
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