Re: Fensterkontakt zur Heitzungssteuerung
Verfasst: 15. Okt 2018 13:16
Dein 1. Fehler ist, das in einer Regel verwursten zu wollen.
Du hast hier zwei getrennte Aufgaben.
Die erste Aufgabe ist, die Heizung zeitgesteuert zu schalten, abhängig vom Fensterzustand.
Die zweite Aufgabe ist, die Heizung über den Fensterkontakt zu steuern, abhängig von der Zeit.
Man kann beides in ein Rule packen, ob das sinnvoll ist, hängt von verschiedenen Faktoren ab, aber mindestens müssen noch Time cron Trigger für die Grenzen mit in den Trigger-Teil der Rule.
Dein 2. Fehler ist die Abfrage der Zeit. Seit wann ist ein String größer oder kleiner als ein anderer String? Man kann nur Gleichheit oder Ungleichheit eines Strings feststellen. Du willst aber einen Zeitraum bestimmen, dazu musst Du mit Zahlen arbeiten. Das sähe dann so aus:
Ich habe Deine Rule als Basis genommen und nur an den fehlerhaften Stellen abgeändert. Was die Meldung über das geöffnete Fenster betrifft, kommt die ebenfalls nur tagsüber. Falls das anders sein soll, müsste man anders an das Problem heran gehen.
Du hast hier zwei getrennte Aufgaben.
Die erste Aufgabe ist, die Heizung zeitgesteuert zu schalten, abhängig vom Fensterzustand.
Die zweite Aufgabe ist, die Heizung über den Fensterkontakt zu steuern, abhängig von der Zeit.
Man kann beides in ein Rule packen, ob das sinnvoll ist, hängt von verschiedenen Faktoren ab, aber mindestens müssen noch Time cron Trigger für die Grenzen mit in den Trigger-Teil der Rule.
Dein 2. Fehler ist die Abfrage der Zeit. Seit wann ist ein String größer oder kleiner als ein anderer String? Man kann nur Gleichheit oder Ungleichheit eines Strings feststellen. Du willst aber einen Zeitraum bestimmen, dazu musst Du mit Zahlen arbeiten. Das sähe dann so aus:
Code: Alles auswählen
var Timer fenstertimer = null // Timervariable definieren
rule "Test Bad oben"
when
Time cron "0 0 5 * * ?" or // Triggere täglich um 5 Uhr
Time cron "0 0 23 * * ?" or // Triggere täglich um 23 Uhr
Item Sensor_Status_Badezimmer_oben changed // Triggere wenn der Fensterkontakt geschaltet hat
then
if(now.getHourOfDay > 4 && now.getHourOfDay < 23) { // Innerhalb des Zeitfensters?
if(Sensor_Status_Badezimmer_oben.state != CLOSED) { // Fenster offen oder nicht initialisiert?
Heizkoerper_Bad_oben_Thermostat_Mode.sendCommand(0)
logInfo("Test", "Fenster im Bad geöffnet und Heizkörper abgedreht")
fenstertimer = createTimer(now.plusMinutes(30), [| // Starte Timer für Meldung
sendPushoverMessage(pushoverBuilder("Info, Fenster Bad oben 30 Min. geöffnet").withApiKey("xxxxxxxxxx").withUser("xxxxxxxxxxxx"))
fenstertimer = null
]) // Lambda in die Funktion verschoben, Lesbarkeit des Codes
} else { // Fenster ist geschlossen!
Heizkoerper_Bad_oben_Thermostat_Mode.sendCommand(1)
logInfo("Test", "Fenster im Bad geschlossen und Heizkörper aufgedreht")
if(fenstertimer !== null) { // Timer läuft?
fenstertimer.cancel // Timer abbrechen
fenstertimer = null
}
}
}
else { // Außerhalb des Zeitfensters, Heizung aus!
Heizkoerper_Bad_oben_Thermostat_Mode.sendCommand(0)
logInfo("Test", "Nachtmodus")
if(fenstertimer !== null) { // Timer läuft?
fenstertimer.cancel // Timer abbrechen
fenstertimer = null
}
}
end