NEWS
Mehrere Fenster - Check, ob länger als 15min geöffnet
-
Hallo zusammen,
Iobroker ist echt genial. Bin seit 2 Wochen dabei. Sehr genial.
Ich möchte gerne folgendes umsetzen.
Alle Fenster sollen bei Statusänderungen überprüft werden. Das bekomme ich hin.
Wenn festgestellt wurde, dass ein Fenster geöffnet ist, soll nach 15 Minuten wieder überprüft werden, ob es immer noch geöffnet ist. Wenn ja, soll eine Benachrichtigung versendet werden.Ich könnte jetzt für jedes Fenster und für jede Tür ein Script schreiben und mit Intervall 15 Minuten dies realisieren.
Frage: Kann man das auch in einem Script bewerkstelligen?
Idee: Ein Script mit Threads damit die Überprüfung bei STATE Änderung weiter läuft. Aber wie geht das? Geht das überhaupt?
Oder muss ich wirklich für jedes ein eigenes Script haben?Danke im Voraus.
Sven -
@piro sagte:
muss ich wirklich für jedes ein eigenes Script haben?
Nein, aber für jedes Fenster einen eigenen Trigger und eine eigene Verzögerung (timeout) bzw. eigenes Intervall.
-
@piro
Das Script macht das was du möchtest.var idFensterAuf = "hm-rpc.0.NEQ1158xxx.1.STATE"; var timer = null; subscribe(idFensterAuf, function (obj) { if (obj.newState.val) { // Starte timer für 60 Minuten if (!timer) { timer = setTimeout(function () { timer = null; //log("Fenster länger als 60 Minuten auf", 'warn'); }, 60*60000); } } else { // Fenster zugemacht. Falls timer läuft = stopp //log('Fenster geschlossen!', 'warn'); if (timer) { clearTimeout(timer); timer = null; } } });
-
@htrecksler mit deinem Script würde ich es aber für jedes Fenster bzw. Tür erstellen müssen, oder?
@paul53 Ok, es wäre dann ein Script aber ganz viele Trigger. Da geht auch die Übersichtlichkeit verloren.
Aktuell arbeite ich mit dem Selector, um zu schauen, ob sich ein Zustand ändert.
Ich versuche einfach mal ein Script und berücksichtige eure Hinweise.
Trotzdem bin ich dankbar für weitere Hilfestellung
-
@piro sagte:
ganz viele Trigger. Da geht auch die Übersichtlichkeit verloren.
Alternative: Ein Array mit IDs und dazu ein Array mit Timer-Variablen.
-
oh, dass ist Neuland für mich. Ich versuche heute Abend mal mein Glück und werde es euch wissen lassen.
-
-
@piro sagte:
Aktuell arbeite ich mit dem Selector
@paul53 sagte:
Array mit IDs und dazu ein Array mit Timer-Variablen.
Etwa so:
const STATEs = $('*.STATE'); const ids = []; const timers = []; STATEs.each(function(id, i) { ids[i] = id; }); on(ids, function(dp) { let idx = ids.indexOf(dp.id); if(dp.state.val) { timers[idx] = setInterval(function() { sendTo('telegram.0', 'Fenster ' + dp.common.name + ' ist mind. 15 Minuten offen'); }, 900000); // 15 Minuten } else if(timers[idx]) clearInterval(timers[idx]); });