Hallo,
gibt es eine Möglichkeit, dass PRESENCE nach einer Statusänderung eine gewisse Zeit weitere Statusabfragen unterdrückt, so dass bestimmte Bedingungen kein ,,wildes Hin- und Herspringen" auslösen (vermutlich nur relevant bei kurzen Abfrageintervallen von 1 oder wenigen Sekunden)?
Also z.B.: PRESENCE fragt den Status jede Sekunde ab, wenn aber ein Statuswechsel von present auf absent (oder umgekehrt) stattfand, wartet das Modul 5 Sekunden bis zur nächsten Abfrage.
Hintergrund meiner Frage:
Ich nutze PRESENCE zur Statusabfrage von Computern (Schlafen/Wachen) mit lan-ping; PRESENCE ist dabei mit einem FHEM-Gerät zum Aufwecken und Schlafenlegen gekoppelt und setzt dessen Status. Wenn ich nun z.B. den Computer via FHEM-Gerät schlafenlege, schaltet das FHEM-Gerät sofort auf Status aus. Da der Computer de facto aber einige Sekunden benötigt, bis er tatsächlich schläft (vorher schreibt er seinen Zustand noch auf die Festplatte), stellt PRESENCE bei der nächsten Statusabfrage fest, dass der Computer noch läuft, setzt den Status folglich wieder auf Ein und bewirkt damit ein Aufwecken des Computers, also einen Abbruch des Schlafengehens.
Dieses Problem dürfte strukturell für alle Dinge gelten, deren Statuswechsel von Anwesenheit auf Abwesenheit und umgekehrt eine gewisse (was den Status betrifft ,,chaotische") Zeitspanne benötigt.
Wenn man PRESENCE für diese Zeitspanne stillstellen könnte, käme es in der Übergangsphase nicht zu undefiniertem Hin und Her.
Du kannst es per notify disablen oder modifizieren (per modify das Intervall ändern).
Die Frage ist, wofür sekündliche PRESENCE Abfragen gut sind. Der Sinn erschließt sich mir nicht.
Man könnte einen dummy Zwischenschalten, dem man etwas zeitversetzt (per watchdog, DOIF, at) den Status des PRESENCE Devices gibt (eben nur dann, wenn der Status auch gilt). Dann müsste man mit weiteren Aktionen auf Events dieses dummys reagieren.
PRESENCE hat ein Attribut "disabledForIntervals".
Zitat von: marvin78 am 06 Juli 2016, 07:53:31
Du kannst es per notify disablen oder modifizieren (per modify das Intervall ändern).
Das ist aber oft nicht der Weg, den man gehen möchte, da wir hier dann eine sekündliche Änderung der Config vorliegen hätten und das kann auf Dauer nicht die sinnigste Lösung sein.
Gib dem PRESENCE Device das Attribut "absenceThreshold" mit, dann werden genau so viel Prüfzirklen abgewartet bis der Status auf absent geht!
Zwischenzeitlich geht der Status auf "maybe absent".
Gruß
Dan
Danke für Eure Antworten!
Zitat von: marvin78 am 06 Juli 2016, 07:53:31
Du kannst es per notify disablen
Gut, das könnte ich bei jeder Statusänderung von
present auf
absent oder umgekehrt machen, und dann müsste ich mit
at gleichzeitig veranlassen, dass das z.B. 7 Sekunden später wieder zurückgenommen wird. Das könnte ich heute Abend probieren. Ich befürchte, das wird die Konfiguration recht kompliziert machen.
ZitatDie Frage ist, wofür sekündliche PRESENCE Abfragen gut sind. Der Sinn erschließt sich mir nicht.
Ich fände es komplett unintuitiv, wenn z.B. mein Rechner aus ist, während meine Fernbedienung noch eine halbe Minute behauptet, er sei an.
Zitat von: marvin78 am 06 Juli 2016, 08:50:29
Das ist aber oft nicht der Weg, den man gehen möchte, da wir hier dann eine sekündliche Änderung der Config vorliegen hätten und das kann auf Dauer nicht die sinnigste Lösung sein.
Ich hatte gehofft, es gäbe für PRESENCE einfach ein Attribut für den zeitlichen Mindestabstand zwischen zwei Statusänderungen, und ich finde es nur nicht. Das ist aber offenbar nicht der Fall.
Zitat von: Ellert am 06 Juli 2016, 08:38:58
PRESENCE hat ein Attribut "disabledForIntervals".
Leider lösen die Intervalle nicht nach Sekunden auf, so dass es für den hiesigen Zweck nutzlos ist.
Zitat von: DeeSPe am 06 Juli 2016, 09:24:10
Gib dem PRESENCE Device das Attribut "absenceThreshold" mit, dann werden genau so viel Prüfzirklen abgewartet bis der Status auf absent geht!
Zwischenzeitlich geht der Status auf "maybe absent".
Es gibt nur leider kein
presenceThreshold-Pendant.
Und die anderen Tipps hast du ignoriert!?
Zitat von: marvin78 am 06 Juli 2016, 09:57:40
Und die anderen Tipps hast du ignoriert!?
Welche anderen Tipps?
Deinen zweiten mit dem Dummy? Der erschien mir komplizierter, ich wollte daher zunächst einmal Deinen anderen ausprobieren, wenn ich dazukomme.
Du könntest zwei Watchdogs anlegen. Einen um Absent und den anderen um Present zu verzögern.
Zitat von: Uli Zappe am 06 Juli 2016, 09:55:46
Es gibt nur leider kein presenceThreshold-Pendant.
Gibts aber ab morgen via update.
Gruß
Markus
Zitat von: Markus Bloch am 06 Juli 2016, 18:20:18
Gibts aber ab morgen via update.
Ah, na dann warte ich doch glatt mal einen Tag! ;D
Zitat von: Markus Bloch am 06 Juli 2016, 18:20:18
Gibts aber ab morgen via update.
Funktioniert prima. Herzlichen Dank, Markus! :D