Wenn der Taupunktvergleich ergibt, dass Lüften jetzt Sinn macht (Und die relative Luftfeuchtigkeit Innen unter sagen wir mal 60% liegt, darüber bei entsprechenden Werten Dauerlüftung), dann Beginne am Lüfter folgenden Ablauf
Code: Alles auswählen
1:
- 30 min Lüfter an
- 30 min Lüfter aus
- Überprüfe, ob die Rahmenbedingungen noch fürs Lüften sprechen
ja? -gehe zu 1
nein? Ende
Zu Timern in JS habe ich folgende Variante gefunden:
Code: Alles auswählen
var ScriptExecution = Java.type("org.openhab.core.model.script.actions.ScriptExecution");
var runme = function(){ logger.info("Timer expired!"); }
var ZonedDateTime = Java.type("java.time.ZonedDateTime");
var now = ZonedDateTime.now();
var timer = SE.createTimer(now.plusSeconds(1), runme);
Wird eine erneute Aktivi3erung durch die Laufzeit verhindert, oder müsste ich irgendwie den Timerstate abfragen?
Müsste ich dann den Timerstate nach Ablauf von Hand auf Null (oder undefined?) stellen, oder wird der nach Ablauf automatisch geleert?
Für meine Funktion bräuchte ich dann ja schon 2 Timer und kann die expire-Variante des Items nicht benutzen.
Wäre hier nicht ein fall, in dem ein klassisches, unelegantes thread.sleep() nicht einfach nur Vorteile bringt, weil ich ja genau die "Nachteile" wie blockieren der Rule haben möchte? Oder würde mir die Laufzeit einfach x Instanzen nebeneinander setzen? Soweit ich das verstanden habe, läuft in OH3 jede Rule in einem eigenen Thread. Ab welcher Anzahl würden blockierende Threads kritisch fürs System? 3? 100? 58764?
Also, spricht etwas gegen folgenden Pseudocode-Ablauf:
Code: Alles auswählen
if (hum_rel < 60%){
while (Alle Randbedingungen(über Items) = True)
fan_on;
thread.sleep(30min)
fan_off;
thread.sleep(30min)
end while
}else{
fan_on
}