Events auslösen, wenn mindestens 5min lang niemand zu Hause ist

Begonnen von dantist, 07 Juli 2015, 23:04:06

Vorheriges Thema - Nächstes Thema

dantist

Hallo zusammen,

ich habe momentan einen Dummy, der anzeigt, ob jemand zu Hause ist oder nicht. Er wird auf "false" gesetzt, wenn mehrere presence-devices auf "absent" stehen.

Nun möchte ich bestimmte Events nur dann ausführen, wenn der Dummy seit fünf Minuten auf false steht. Heißt, wenn alle Handys seit fünf Minuten abgemeldet sind. Man könnte natürlich sagen, dass ein Event fünf Minuten nachdem der Dummy auf false gesetzt wurde ausgeführt wird. Das berücksichtigt aber nicht, dass er dieser Zeit wieder auf true springen könnte.

Gibt es einen eleganten Weg, das zu bewerkstelligen?

Gruß
Daniel

viegener

Das klingt nach einem Fall für einen Watchdog. Also genau dann wenn nicht in den 5 min der dummy device wieder auf true springt.

Weiteres siehe commandref für watchdog

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

dantist

Funktioniert, danke :)

Falls es jemand gebrauchen kann:


define WatchdogNiemandZuHause watchdog JemandZuHause:false 00:05 JemandZuHause:true {
  fhem("set HUEDevice.* off");
}
attr WatchdogNiemandZuHause regexp1WontReactivate 1


Wenn ein Handy erkannt wird, folgendes ausführen:

setstate WatchdogNiemandZuHause defined

Wuppi68

hmmmm, wie erkennt man denn sicher innerhalb von 5 Minuten das ein Handy nicht mehr da ...

LAN Ping --> geht nicht, da Energiesparmodi
ARP Table --> default expire 300 Sekunden bei den meisten Routern

unter diesen Bedingungen sollte es doch reichen auf den Event von alle Abwesend zu Trägern, oder?
FHEM unter Proxmox als VM

dantist

Das lässt sich kaum verallgemeinern. Bei uns sind z.B. zwei Android-Handys im Einsatz, bei denen der WLAN Energiesparmodus deaktiviert ist. Dadurch funktioniert der presence-Status zuverlässig. Beide Geräte werden alle 20 Sekunden abgefragt.

Die 5 Minuten-Regel funktioniert prima, um kurze Abwesenheit zu überbrücken, z.B. wenn nur eine Person zu Hause ist und diese den Müll rausbringt.

dantist

#5
Jetzt habe ich doch noch ein Problem mit dem Watchdog: Wenn die Bedingung, auf die er innerhalb der festgelegten Zeitspanne wartet, zu schnell erfüllt wird, wird der state des Watchdogs zwar auf "defined" zurückgesetzt, die Befehle werden aber trotzdem nach Ablauf der Zeitspanne ausgeführt.

Ist das ein bekanntes Problem, und lässt sich das umgehen?

budy

Wenn du ganz sicher gehen willst, dann kannst du ja per watchdog ein at definieren, welches nach 5 Minuten ein notify feuert, welches dann schlussendlich noch mal prüft, ob sich der presence status nicht doch noch mal geändert hat. Das würde ich eh' immer noch mal machen...

Ich mache das bei mir so ähnlich. Wenn alle Handys aus dem Haus sind, wird nach 10 Minuten die Haustür über die Keymatic verriegelt. Bei mir reagiert ein notify auf den Presence-Status und checkt dann noch diverse andere Stati: Fenster zu usw. um dann ggf. noch per Pushover die eine oder andere Nachricht zu generieren, bevor die Tür abgeschlossen wird.
Debian stretch, FHEM 5.9.
HM-CC-RT-DN, HM-ES-PMSw1-Pl, HM-LC-Dim1TPBU-FM, HMUARTLGW, HMLAN, HM-SEC-KEY, HM-SEC-RHS, HM-SEC-SC-2, HM-SEC-SCo, HM-SEC-SD-2, HM-OU-CFM-TW, div. HUEs, Wifilight, Ring Video Pro

Hollo

Zitat von: dantist am 25 Juli 2015, 00:13:33
...Ist das ein bekanntes Problem, und lässt sich das umgehen?

Zu "Anwesenheit watchdog" gibt es hier ja nun schon reichlich Beiträge und Codeschnipsel.
Dementsprechend wird das kein "bekanntes Problem" sein.

Hast Du mal in der commandref geschaut, was Du mit dem "regexp1WontReactivate 1" definiert hast?
ZitatWhen a watchdog is active, a second event matching regexp1 will normally reset the timeout. Set this attribute to prevents this.

Heisst im Umkehrschluss; ein einmal gestarteter Timer läuft ab und löst Dein Event aus.
Du willst doch nur was machen, wenn Du wirklich weg bist. Doch da oder watchdog ausgelöst, setzt den watchdog zurück.

Gegenvorschlag:
define w_Bewohner watchdog Bewohner:abwesend 00:10:00 Bewohner:anwesend set HomeStatus away ;; trigger w_Bewohner .
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"