Code: Alles auswählen
// Globale Variablen vor der ersten Rule definieren!
var Timer tSoll = null // Timer für Solltemperatur
var nSoll = 18.0 // Default Temperatur
rule "Solltemperatur setzen"
when
Item Heizungsschalter_Alle_Heizungen changed or
Member of gSPOnline changed
then
var nStart = 1
if(Heizungsschalter_Alle_Heizungen.state == OFF) { // Hauptschalter aus
nSoll = 6
} else { // Hauptschalter nicht aus
val bOnline = (gSPOnline.members.filter[i|i.state != OFF].size > 0) // true falls mindestens ein Gerät nicht OFF
nSoll = if(bOnline) 21 else 18 // Solltemperatur
if(!bOnline) nStart = 600 // Zeitverzögerung abhängig von Soll
}
gTempSoll.members.filter[i|!(i.state instanceof Number)].forEach[j| // uninitialisierte Items notfalls initialisieren
j.postUpdate(19)
]
tSoll?.cancel // laufende Timer abbrechen
tSoll = createTimer(now.plusSeconds(nStart), [| // nach nStart Sekunden
val lItems = gTempSoll.members.sortBy[name].filter[i|
(i.state as Number).floatValue != nSoll] // Liste aller Items die vom Soll abweichen
if(lItems.size == 0) // falls noch Abweichungen vom Soll bestehen
return;
tSoll.reschedule(now.plusSeconds(5)) // führe Timer erneut aus
logInfo("soll","Setze {} auf {}", lItems.head.name, nSoll)
lItems.head.sendCommand(nSoll) // Solltemperatur setzen
])
end
und diese hier wenn jemand das Fenster öffnet
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
// Timer abbrechen, falls er noch läuft
BadezimmerfensterkleinHeizungMeldung?.cancel
if (Badezimmerfensterklein_TurFensterstatus.state == OPEN) {
// Solltemperatur basierend auf dem aktuellen Zustand setzen
HeizungBadezimmer_Solltemperatur = if(HeizungBadezimmer_Solltemperatur_Fensterkontakt.state instanceof QuantityType) {
(HeizungBadezimmer_Solltemperatur_Fensterkontakt.state as QuantityType<Number>).toBigDecimal.intValue
} else {
21
}
// Timer starten, um nach 1 Minute die Heizung zu reduzieren
BadezimmerfensterkleinHeizungMeldung = createTimer(ZonedDateTime.now.plusMinutes(1), [|
HeizungBadezimmer_Solltemperatur_Fensterkontakt.sendCommand(6)
])
}
if (Badezimmerfensterklein_TurFensterstatus.state == CLOSED) {
// Heizung auf ursprüngliche Solltemperatur zurücksetzen
HeizungBadezimmer_Solltemperatur_Fensterkontakt.sendCommand(HeizungBadezimmer_Solltemperatur)
}
end
leider funktioniert es nicht das wenn das Fenster geöffnet wurden ist die Temperatur auf 6 Grad geht.
Kann es eventuell sein das die erste Regel die zweite aufhebt ?