PRESENCE: Kurzzeitiges Innehalten nach Statusänderung?

Begonnen von Uli Zappe, 06 Juli 2016, 06:03:22

Vorheriges Thema - Nächstes Thema

Uli Zappe

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.

marvin78

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.

Ellert

PRESENCE hat ein Attribut "disabledForIntervals".

marvin78

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.

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Uli Zappe

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.

marvin78


Uli Zappe

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.

CoolTux

Du könntest zwei Watchdogs anlegen. Einen um Absent und den anderen um Present zu verzögern.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Markus Bloch

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
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Uli Zappe

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

Uli Zappe