Seite 1 von 2

Hilfe bei einer Rule

Verfasst: 28. Jan 2024 23:17
von Snatsch
Hallo, habe mich heute an einer Rule probiert die meine Heizungen wenn keine Telefone im Wlan sind auf 18 Grad stellen soll. Das soll aber nur passieren wenn mein Heizungsschalter auf ON steht. Vielleicht kann ja jemand drüber schauen und mir sagen wo der Fehler liegt. Die vielen Timmer sind deshalb weil wenn alle Heizungen gleich geschaltet werden, es oft nicht funktioniert. So habe ich meinen "Heizungsschalter alle Heizungen" auch Programmiert und es ist eigentlich zuverlässig.

Code: Alles auswählen

var Timer tLucaHeizung = null
var Timer tNellyHeizung = null
var Timer tSchlafzimmerHeizung = null
var Timer tBadezimmerHeizung = null
var Timer tUnteresbadetimmerHeizung = null
var Timer tPartyraumHeizung = null
var Timer tTreppenhausHeizung = null
var Timer toffline = null
rule "Solltemp abwesend"
when
    Item Heizungsschalter_Alle_Heizungen changed to ON or
    Item onlineLuca changed to ON or
    Item onlineNelly changed to ON or
    Item onlineSilvia changed to ON or
    Item onlineDaniel changed to ON or
then

    if (Heizungsschalter_Alle_Heizungen.state == ON) {
        if (onlineLuca.state == OFF && onlineNelly.state == OFF && onlineSilvia.state == OFF && onlineDaniel.state == OFF) {
        toffline = createTimer(now.plusMinutes(10) [|   
            // Alle Telefone sind offline
            // Heizungen auf 18 Grad absenken
        
        tLucaHeizung = createTimer(now.plusSeconds(10), [|
        HeizungLucaZimmer_Solltemperatur.sendCommand(18)
        HeizungLucaZimmer_Solltemperatur_Fensterkontakt.sendCommand(18)
        ])
        tNellyHeizung = createTimer(now.plusSeconds(20), [|
        HeizungNellyZimmer_Solltemperatur.sendCommand(18)
        HeizungNellyZimmer_Solltemperatur_Fensterkontakt.sendCommand(18)
        ])
        tSchlafzimmerHeizung = createTimer(now.plusSeconds(30), [|
        HeizungSchlafzimmer_Solltemperatur.sendCommand(18)
        HeizungSchlafzimmer_Solltemperatur_Fensterkontakt.sendCommand(18)
        ])
        tBadezimmerHeizung = createTimer(now.plusSeconds(40), [|
        HeizungBadezimmer_Solltemperatur.sendCommand(18)
        HeizungBadezimmer_Solltemperatur_Fensterkontakt.sendCommand(18)
        ])
        tUnteresbadetimmerHeizung = createTimer(now.plusSeconds(50), [|
        HeizungUnteresBadezimmer_Solltemperatur.sendCommand(18)
        ])
        tPartyraumHeizung = createTimer(now.plusSeconds(60), [|
        HeizungPartyraum_Solltemperatur.sendCommand(18)
        HeizungPartyraum_Solltemperatur_Fensterkontakt.sendCommand(18)
        ])
        tTreppenhausHeizung = createTimer(now.plusSeconds(70), [|
        HeizungTreppenhaus_Solltemperatur.sendCommand(18)
        HeizungTreppenhaus_Solltemperatur_Fensterkontakt.sendCommand(18)
        ])
        ])
        }
    
         
           
        } else {
            // Mindestens ein Telefon ist online
            // Heizungen auf 21 Grad setzen
        tLucaHeizung = createTimer(now.plusSeconds(10), [|
        HeizungLucaZimmer_Solltemperatur.sendCommand(21)
        HeizungLucaZimmer_Solltemperatur_Fensterkontakt.sendCommand(21)
        ])
        tNellyHeizung = createTimer(now.plusSeconds(20), [|
        HeizungNellyZimmer_Solltemperatur.sendCommand(21)
        HeizungNellyZimmer_Solltemperatur_Fensterkontakt.sendCommand(21)
        ])
        tSchlafzimmerHeizung = createTimer(now.plusSeconds(30), [|
        HeizungSchlafzimmer_Solltemperatur.sendCommand(21)
        HeizungSchlafzimmer_Solltemperatur_Fensterkontakt.sendCommand(21)
        ])
        tBadezimmerHeizung = createTimer(now.plusSeconds(40), [|
        HeizungBadezimmer_Solltemperatur.sendCommand(21)
        HeizungBadezimmer_Solltemperatur_Fensterkontakt.sendCommand(21)
        ])
        tUnteresbadetimmerHeizung = createTimer(now.plusSeconds(50), [|
        HeizungUnteresBadezimmer_Solltemperatur.sendCommand(21)
        ])
        tPartyraumHeizung = createTimer(now.plusSeconds(60), [|
        HeizungPartyraum_Solltemperatur.sendCommand(21)
         HeizungPartyraum_Solltemperatur_Fensterkontakt.sendCommand(21)
        ])
        tTreppenhausHeizung = createTimer(now.plusSeconds(70), [|
        HeizungTreppenhaus_Solltemperatur.sendCommand(21)
        HeizungTreppenhaus_Solltemperatur_Fensterkontakt.sendCommand(21)
        ])
           
        }
    }
end

Re: Hilfe bei einer Rule

Verfasst: 29. Jan 2024 00:54
von Snatsch
Habe die Rule nochmal abgeändert und es kommen keine Fehlermeldungen mehr.

Code: Alles auswählen

var Timer tLucaHeizung = null
var Timer tNellyHeizung = null
var Timer tSchlafzimmerHeizung = null
var Timer tBadezimmerHeizung = null
var Timer tUnteresbadetimmerHeizung = null
var Timer tPartyraumHeizung = null
var Timer tTreppenhausHeizung = null
var Timer toffline = null
rule "Solltemp abwesend"
when
    Item Heizungsschalter_Alle_Heizungen changed to ON or
    Item onlineLuca changed to ON or
    Item onlineNelly changed to ON or
    Item onlineSilvia changed to ON or
    Item onlineDaniel changed to ON or
    Time cron "0 */10 * ? * *" // Alle 10 Minuten 
then
    if(Heizungsschalter_Alle_Heizungen.state == OFF) return;
    if(Heizungsschalter_Alle_Heizungen.state == ON) 
    
        if (onlineLuca.state == OFF && onlineNelly.state == OFF && onlineSilvia.state == OFF && onlineDaniel.state == OFF) {
        toffline = createTimer(now.plusMinutes(10) [|   
            // Alle Telefone sind offline
            // Heizungen auf 18 Grad absenken
        
        tLucaHeizung = createTimer(now.plusSeconds(10), [|
        HeizungLucaZimmer_Solltemperatur.sendCommand(18)
        HeizungLucaZimmer_Solltemperatur_Fensterkontakt.sendCommand(18)
        ])
        tNellyHeizung = createTimer(now.plusSeconds(20), [|
        HeizungNellyZimmer_Solltemperatur.sendCommand(18)
        HeizungNellyZimmer_Solltemperatur_Fensterkontakt.sendCommand(18)
        ])
        tSchlafzimmerHeizung = createTimer(now.plusSeconds(30), [|
        HeizungSchlafzimmer_Solltemperatur.sendCommand(18)
        HeizungSchlafzimmer_Solltemperatur_Fensterkontakt.sendCommand(18)
        ])
        tBadezimmerHeizung = createTimer(now.plusSeconds(40), [|
        HeizungBadezimmer_Solltemperatur.sendCommand(18)
        HeizungBadezimmer_Solltemperatur_Fensterkontakt.sendCommand(18)
        ])
        tUnteresbadetimmerHeizung = createTimer(now.plusSeconds(50), [|
        HeizungUnteresBadezimmer_Solltemperatur.sendCommand(18)
        ])
        tPartyraumHeizung = createTimer(now.plusSeconds(60), [|
        HeizungPartyraum_Solltemperatur.sendCommand(18)
        HeizungPartyraum_Solltemperatur_Fensterkontakt.sendCommand(18)
        ])
        tTreppenhausHeizung = createTimer(now.plusSeconds(70), [|
        HeizungTreppenhaus_Solltemperatur.sendCommand(18)
        HeizungTreppenhaus_Solltemperatur_Fensterkontakt.sendCommand(18)
        ])
        ])
        }
    
        else {
            // Mindestens ein Telefon ist online
            // Heizungen auf 21 Grad setzen
        tLucaHeizung = createTimer(now.plusSeconds(10), [|
        HeizungLucaZimmer_Solltemperatur.sendCommand(21)
        HeizungLucaZimmer_Solltemperatur_Fensterkontakt.sendCommand(21)
        ])
        tNellyHeizung = createTimer(now.plusSeconds(20), [|
        HeizungNellyZimmer_Solltemperatur.sendCommand(21)
        HeizungNellyZimmer_Solltemperatur_Fensterkontakt.sendCommand(21)
        ])
        tSchlafzimmerHeizung = createTimer(now.plusSeconds(30), [|
        HeizungSchlafzimmer_Solltemperatur.sendCommand(21)
        HeizungSchlafzimmer_Solltemperatur_Fensterkontakt.sendCommand(21)
        ])
        tBadezimmerHeizung = createTimer(now.plusSeconds(40), [|
        HeizungBadezimmer_Solltemperatur.sendCommand(21)
        HeizungBadezimmer_Solltemperatur_Fensterkontakt.sendCommand(21)
        ])
        tUnteresbadetimmerHeizung = createTimer(now.plusSeconds(50), [|
        HeizungUnteresBadezimmer_Solltemperatur.sendCommand(21)
        ])
        tPartyraumHeizung = createTimer(now.plusSeconds(60), [|
        HeizungPartyraum_Solltemperatur.sendCommand(21)
         HeizungPartyraum_Solltemperatur_Fensterkontakt.sendCommand(21)
        ])
        tTreppenhausHeizung = createTimer(now.plusSeconds(70), [|
        HeizungTreppenhaus_Solltemperatur.sendCommand(21)
        HeizungTreppenhaus_Solltemperatur_Fensterkontakt.sendCommand(21)
        ])
}
    end

Re: Hilfe bei einer Rule

Verfasst: 29. Jan 2024 11:00
von Snatsch
Habe Rule heute getestet aber sie funktioniert leider nicht :cry: zumindest der erste Teil das die Heizungen auf 18 Grad (nach 10 Minuten) gehen sollen geht nicht.
Dies sind die angelegten Items für die Telefone

Code: Alles auswählen

Group Online_Telefone 

Switch onlineLuca "Luca zu Haus" <girl_3> { channel="network:pingdevice:88c07738b0:online"}
Switch onlineNelly "Nelly zu Hause" < girl_2> {channel="network:pingdevice:7e73fbb35d:online"}
Switch onlineSilvia "Silvia zu Haus" < woman_2> {channel="network:pingdevice:4b2154548b:online"}
Switch onlineDaniel "Daniel zu Hause" <man_4> {channel="network:pingdevice:d3462f161f:online"}
Vielleicht hat jemand einen Tipp für mich oder würde es ganz anders machen ;)

Re: Hilfe bei einer Rule

Verfasst: 29. Jan 2024 11:20
von udo1toni
Erscheint mir reichlich viel Code :) insbesondere denke ich, dass die ganzen Timer in dieser Form überflüssig sind.
Allerdings müssen die Items organisiert sein:

Code: Alles auswählen

Group gSPOnline     "Smartphones online"
Switch onlineLuca   "Smartphone Luca"   (gSPOnline)
Switch onlineNelly  "Smartphone Nelly"  (gSPOnline)
Switch onlineSilvia "Smartphone Silvia" (gSPOnline)
Switch onlineDaniel "Smartphone Daniel" (gSPOnline)

Group gTempSoll "Solltemperaturen"
Number HeizungLucaZimmer_Solltemperatur                  "Solltemperatur Luca"                 (gTempSoll)
Number HeizungLucaZimmer_Solltemperatur_Fensterkontakt   "Solltemperatur Luca Fenster"         (gTempSoll)
Number HeizungNellyZimmer_Solltemperatur                 "Solltemperatur Nelly"                (gTempSoll)
Number HeizungNellyZimmer_Solltemperatur_Fensterkontakt  "Solltemperatur Nelly Fenster"        (gTempSoll)
Number HeizungSchlafzimmer_Solltemperatur                "Solltemperatur Schlafzimmer"         (gTempSoll)
Number HeizungSchlafzimmer_Solltemperatur_Fensterkontakt "Solltemperatur Schlafzimmer Fenster" (gTempSoll)
Number HeizungBadezimmer_Solltemperatur                  "Solltemperatur Bad"                  (gTempSoll)
Number HeizungBadezimmer_Solltemperatur_Fensterkontakt   "Solltemperatur Bad Fenster"          (gTempSoll)
Number HeizungUnteresBadezimmer_Solltemperatur           "Solltemperatur Bad unten"            (gTempSoll)
Number HeizungPartyraum_Solltemperatur                   "Solltemperatur Partyraum"            (gTempSoll)
Number HeizungPartyraum_Solltemperatur_Fensterkontakt    "Solltemperatur Partyraum Fenster"    (gTempSoll)
Number HeizungTreppenhaus_Solltemperatur                 "Solltemperatur Treppenhaus"          (gTempSoll)
Number HeizungTreppenhaus_Solltemperatur_Fensterkontakt  "Solltemperatur Treppenhaus Fenster"  (gTempSoll)
Die Definition kann man natürlich genauso gut auch über die UI machen :)
Nun reicht eine kleine Rule:

Code: Alles auswählen

// Globale Variablen vor der ersten Rule definieren!
var Timer tSoll = null                                                   // Timer für Solltemperatur
var nSoll       = 18                                                     // Default Temperatur
var nSollCount  = 0                                                      // Zähler für Solltemperatur

rule "Solltemperatur setzen"
when
    Item Heizungsschalter_Alle_Heizungen changed to ON or
    Member of gSPOnline changed
then
    if(Heizungsschalter_Alle_Heizungen.state != ON)                      // rule inaktiv?
        return;
    val bOnline = (gSPOnline.members.filter[i|i.state != OFF].size > 0)  // mindestens ein Gerät nicht OFF
    nSoll       = if(bOnline) 21 else  18                                // Solltemperatur
    val nStart  = if(bOnline)  1 else 600                                // Zeitverzögerung abhängig von Soll

    tSoll?.cancel                                                        // laufende Timer abbrechen
    nSollCount = 0                                                       // Hilfszähler initialisieren
    tSoll = createTimer(now.plusSeconds(nStart), [|                      // nach nStart Sekunden
        nSollCount += 1                                                  // Hilfszähler erhöhen
        gTempSoll.members.sort[ name ].forEach[i,n|                      // Liste der Solltemperaturen durchgehen
            if(n == nSollCount && i.state != nSoll) {                    // falls n-tes Item und n-ter Durchlauf nicht auf Soll
                i.sendCommand(nSoll)                                     // Solltemperatur setzen
                logInfo("soll","Schalte {} auf Soll {}", i.name, nSoll)  // Meldung ausgeben
            }
        ]
        if(nSollCount < gTempSoll.members.size)                          // falls noch nicht letztes Element der Liste erreicht
            tSoll.reschedule(now.plusSeconds(5))                         // führe Timer erneut aus
    ])
end
Die Rule zählt zunächst alle Geräte, die Online sind und bestimmt darüber die Solltemperatur (ist ja ohnehin für alle Heizungen gleich).
Außerdem wird für den Fall der Absenkung ein Startwert von 600 (10 Minuten) definiert, ansonsten 1
Falls ein Timer läuft, wird dieser abgebrochen (ein extrem wichtiger Punkt wenn man mit Timern arbeitet!)
Nun wird ein Zähler initialisiert und anschließend ein Timer gestartet, der nach der gesetzten Verzögerung ausgeführt wird.
Innerhalb des Timers wird die Zählvariable erhöht. Nun wird die Gruppe der Solltemperaturen, alphabetisch nach Itemnamen sortiert durchlaufen. Handelt es sich um das aktuelle Item, so wird die Temperatur gesetzt, falls sie nicht dem Soll entspricht. Pro Timerdurchlauf wird also maximal ein Item geschaltet. Falls noch nicht das letzte Item geschaltet wurde (Zähler kleiner als Anzahl Solltemperaturen) wird der Timer erneut aufgerufen, und zwar nach 5 Sekunden. Es wird also alle 5 Sekunden ein einzelner Schaltbefehl gesendet.

Die Logzeile ist für die Testphase :) man will ja sehen, ob das Ganze so funktioniert wie gedacht.
Es kann sein, dass n (die Zählvariable innerhalb der Liste der zu schaltenden Items) 0-basiert ist, dann müsste nSollCount mit -1 initialisiert werden und die Abbruchbedingung kann auf if(nSollCount < gTempSoll.members.size - 1) geändert werden.

Es gibt noch eine andere Variante, die ich Dir nicht vorenthalten möchte ;)

Code: Alles auswählen

// Globale Variablen vor der ersten Rule definieren!
var Timer tSoll = null                                                   // Timer für Solltemperatur
var nSoll       = 18                                                     // Default Temperatur

rule "Solltemperatur setzen"
when
    Item Heizungsschalter_Alle_Heizungen changed to ON or
    Member of gSPOnline changed
then
    if(Heizungsschalter_Alle_Heizungen.state != ON)                      // rule inaktiv?
        return;
    val bOnline = (gSPOnline.members.filter[i|i.state != OFF].size > 0)  // mindestens ein Gerät nicht OFF
    nSoll       = if(!bOnline) 18 else 21                                // Solltemperatur
    val nStart  = if(bOnline)   1 else 600                               // Zeitverzögerung abhängig von Soll

    tSoll?.cancel                                                        // laufende Timer abbrechen
    tSoll = createTimer(now.plusSeconds(nStart), [|                      // nach nStart Sekunden
        gTempSoll.members.sort[ name ].filter[i|
        i.state != nSoll].head.sendCommand(nSoll)                        // Solltemperatur setzen
        if(gTempSoll.members.filter[i|i.state != nSoll].size > 0)        // falls noch Abweichungen vom Soll bestehen
            tSoll.reschedule(now.plusSeconds(5))                         // führe Timer erneut aus
    ])
end
Ein Logging wird an dieser Stelle schwieriger, dafür kommt die Rule ohne Zähler aus.
Es werden einfach alle Solltemperaturen mit der gewünschten Solltemperatur verglichen. Von der Liste der abweichenden Temperaturen wird jeweils das erste Item auf die neue Solltemperatur gesetzt. Beim nächsten Timerdurchlauf hat dieses Element die richtige Temperatur und taucht nicht mehr in der Liste auf. Ist die Liste leer, so wird kein weiterer Timerdurchlauf gestartet.
Der Timer wird also nur so oft durchlaufen, wie auch noch Elemente übrig sind, die noch zu schalten sind. Bei jedem Durchlauf wird exakt ein Item geschaltet (im Unterschied zur oberen Rule, bei der maximal ein Item geschaltet wird).
Falls die Items immer den "echten" Status innehaben (d.h. openHAB verändert den Status nicht, sondern liest ihn jeweils vom Bus -> Metadata autoupdate=false), wird die Rule so lange befehle senden, bis auch das letzte Gerät die Solltemperatur gefressen hat. Unter den richtigen Umständen ist diese Rule also sogar zuverlässiger als die erste Variante.

Eine andere Frage wäre die nach der Solltemperatur_Fensterkontakt. Alleine bei dem Namen klingeln bei mir schon die Alarmglocken :) Bist Du sicher, dass das so seine Richtigkeit hat?

Re: Hilfe bei einer Rule

Verfasst: 29. Jan 2024 11:23
von udo1toni
Ach so... handelt es sich in Wirklichkeit vielleicht um UoM Items? Number:Temperature statt Number... Das müsste im Code berücksichtigt werden, da 18 für openHAB etwas anderes ist als 18 °C

Re: Hilfe bei einer Rule

Verfasst: 29. Jan 2024 11:39
von Snatsch
Vielen Dank für deine Hilfe :) das mit den "Solltemperatur_Fensterkontakt" habe ich gemacht da diese die letzte Solltemperatur speichert wenn ein Fenster geöffnet wird. Werde mich heute Abend nach der Arbeit noch mal drann setzen :)
insbesondere denke ich, dass die ganzen Timer in dieser Form überflüssig sind.
wenn ich alle Heizungen auf 1mal mit einen Schalter schalte funktioniert es oft nicht und es werden nicht alle Heizungen geschaltet. Mit der Verzögerung von 10 Sekunden dazwischen klappt es ziemlich zuverlässig

Re: Hilfe bei einer Rule

Verfasst: 29. Jan 2024 11:56
von udo1toni
Wie gesagt, es geht nicht um den Timer an sich, sondern um die Anzahl der Timer. Schau Dir meine letzte Rule an, die sendet alle 5 Sekunden exakt einen Schaltbefehl, bis alle Solltemperaturen gesetzt sind. Trotzdem reicht dafür ein Timer.

Re: Hilfe bei einer Rule

Verfasst: 29. Jan 2024 23:41
von Snatsch
Guten Abend, habe jetzt die 2 Rules probiert aber keine bringt den erwünschten Erfolg :cry: Die Items habe ich so angelegt

Code: Alles auswählen

Group gTempSoll "Solltemperaturen"

Number HeizungLucaZimmer_Solltemperatur                  "Solltemperatur Luca"                 (gTempSoll)
Number HeizungLucaZimmer_Solltemperatur_Fensterkontakt   "Solltemperatur Luca Fenster"         (gTempSoll)
Number HeizungNellyZimmer_Solltemperatur                 "Solltemperatur Nelly"                (gTempSoll)
Number HeizungNellyZimmer_Solltemperatur_Fensterkontakt  "Solltemperatur Nelly Fenster"        (gTempSoll)
Number HeizungSchlafzimmer_Solltemperatur                "Solltemperatur Schlafzimmer"         (gTempSoll)
Number HeizungSchlafzimmer_Solltemperatur_Fensterkontakt "Solltemperatur Schlafzimmer Fenster" (gTempSoll)
Number HeizungBadezimmer_Solltemperatur                  "Solltemperatur Bad"                  (gTempSoll)
Number HeizungBadezimmer_Solltemperatur_Fensterkontakt   "Solltemperatur Bad Fenster"          (gTempSoll)
Number HeizungUnteresBadezimmer_Solltemperatur           "Solltemperatur Bad unten"            (gTempSoll)
Number HeizungPartyraum_Solltemperatur                   "Solltemperatur Partyraum"            (gTempSoll)
Number HeizungPartyraum_Solltemperatur_Fensterkontakt    "Solltemperatur Partyraum Fenster"    (gTempSoll)
Number HeizungTreppenhaus_Solltemperatur                 "Solltemperatur Treppenhaus"          (gTempSoll)
Number HeizungTreppenhaus_Solltemperatur_Fensterkontakt  "Solltemperatur Treppenhaus Fenster"  (gTempSoll)

Code: Alles auswählen

Group gSPOnline     "Smartphones online"

Switch onlineLuca   "Smartphone Luca"   (gSPOnline) 
Switch onlineNelly  "Smartphone Nelly"  (gSPOnline) 
Switch onlineSilvia "Smartphone Silvia" (gSPOnline) 
Switch onlineDaniel "Smartphone Daniel" (gSPOnline) 
es kommt keine Fehlermeldung aber wenn wir in unserer Familie alle unser Wlan ausschalten werden die Heizungen nach 10 Minuten nicht geschaltet. Obwohl der Heizungsschalter auf ON steht. Muss ich eventuell noch etwas beachten oder ändern ?

das ist ein der Items in der Gruppe
Screenshot (14).png

Re: Hilfe bei einer Rule

Verfasst: 30. Jan 2024 00:15
von udo1toni
Die Items in der Liste müssen natürlich noch mit den entsprechenden Channeln verlinkt werden. Wichtiger ist aber, dass das gezeigte Item nicht den Wert 21 liefert, sondern 21.0 °C. Wie sieht der Channel aus?

Re: Hilfe bei einer Rule

Verfasst: 30. Jan 2024 00:55
von Snatsch
habe jetzt die Items mit dem Channel versehen

Code: Alles auswählen

Group gTempSoll "Solltemperaturen"

Number HeizungLucaZimmer_Solltemperatur                  "Solltemperatur Luca"                 (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:1624e16bb3374ba8937d5244df2e789e:targetTemperature"}
Number HeizungLucaZimmer_Solltemperatur_Fensterkontakt   "Solltemperatur Luca Fenster"         (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:1624e16bb3374ba8937d5244df2e789e:targetTemperature"}
Number HeizungNellyZimmer_Solltemperatur                 "Solltemperatur Nelly"                (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:ced269ec08fa447793a2b40a07d25ad5:targetTemperature"}
Number HeizungNellyZimmer_Solltemperatur_Fensterkontakt  "Solltemperatur Nelly Fenster"        (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:ced269ec08fa447793a2b40a07d25ad5:targetTemperature"}
Number HeizungSchlafzimmer_Solltemperatur                "Solltemperatur Schlafzimmer"         (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:5a5cb035986f494d8d048c582e52bc55:targetTemperature"}
Number HeizungSchlafzimmer_Solltemperatur_Fensterkontakt "Solltemperatur Schlafzimmer Fenster" (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:5a5cb035986f494d8d048c582e52bc55:targetTemperature"}
Number HeizungBadezimmer_Solltemperatur                  "Solltemperatur Bad"                  (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:f4ab49cd8ef44f85abf748fd513f6d21:targetTemperature"}
Number HeizungBadezimmer_Solltemperatur_Fensterkontakt   "Solltemperatur Bad Fenster"          (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:f4ab49cd8ef44f85abf748fd513f6d21:targetTemperature"}
Number HeizungUnteresBadezimmer_Solltemperatur           "Solltemperatur Bad unten"            (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:41297270ca984a8d8570a0030243a973:targetTemperature"}
Number HeizungPartyraum_Solltemperatur                   "Solltemperatur Partyraum"            (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:17918643887840698438d721a6e9e86d:targetTemperature"}
Number HeizungPartyraum_Solltemperatur_Fensterkontakt    "Solltemperatur Partyraum Fenster"    (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:17918643887840698438d721a6e9e86d:targetTemperature"}
Number HeizungTreppenhaus_Solltemperatur                 "Solltemperatur Treppenhaus"          (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:cba6993b2b5b4a5094d1d9df957fed58:targetTemperature"}
Number HeizungTreppenhaus_Solltemperatur_Fensterkontakt  "Solltemperatur Treppenhaus Fenster"  (gTempSoll) {channel="livisismarthome:RST2:Livisi_SmartHome_Zentrale:cba6993b2b5b4a5094d1d9df957fed58:targetTemperature"}

Code: Alles auswählen

Group gSPOnline     "Smartphones online"

Switch onlineLuca   "Smartphone Luca"   (gSPOnline) { channel="network:pingdevice:88c07738b0:online"} 
Switch onlineNelly  "Smartphone Nelly"  (gSPOnline) {channel="network:pingdevice:7e73fbb35d:online"}
Switch onlineSilvia "Smartphone Silvia" (gSPOnline) {channel="network:pingdevice:4b2154548b:online"}
Switch onlineDaniel "Smartphone Daniel" (gSPOnline) {channel="network:pingdevice:d3462f161f:online"}
ist das was du meinst ?
Screenshot (15).png
und das ist der Fensterkontakt
Screenshot (16).png
obwohl ich denke das ich den Fensterkonakt in den Items vielleicht gar nicht berücksichtigen muss da er ja an den Solltemperaturen gekoppelt ist für diese Rule z.B

Code: Alles auswählen

var HeizungBadezimmer_Solltemperatur = 6  //HeizungBadezimmer_Solltemperatur_Fensterkontakt   
var Timer BadezimmerfensterkleinHeizungMeldung = null

rule "Fenster klein Badezimmer Auf  Heizung aus"
 
when
    Item Badezimmerfensterklein_TurFensterstatus changed
then
     //cancel timer if running
    BadezimmerfensterkleinHeizungMeldung?.cancel
    
    
    if (Badezimmerfensterklein_TurFensterstatus.state == OPEN){

     HeizungBadezimmer_Solltemperatur = if(HeizungBadezimmer_Solltemperatur_Fensterkontakt.state instanceof Number) (HeizungBadezimmer_Solltemperatur_Fensterkontakt.state as Number) else 21
     BadezimmerfensterkleinHeizungMeldung = createTimer(ZonedDateTime.now.plusMinutes(1), [|
            HeizungBadezimmer_Solltemperatur_Fensterkontakt.sendCommand(6)                       
    ])
    }
    if (Badezimmerfensterklein_TurFensterstatus.state == CLOSED){                                      
        HeizungBadezimmer_Solltemperatur_Fensterkontakt.sendCommand(HeizungBadezimmer_Solltemperatur)        
    }
end