Presence - Watchdog wird nur einmal ausgeführt

Begonnen von zap, 15 Dezember 2014, 18:53:40

Vorheriges Thema - Nächstes Thema

zap

Hallo,
ich möchte eine Anwesenheitserkennung realisieren. Leider werden die Watchdogs nur einmal ausgeführt. Ich habe folgendes PRESENCE device definiert:


define p_dbphone PRESENCE local-bluetooth BC:3B:AF:54:D6:1F 30 60
attr p_dbphone event-on-change-reading state


Das funktioniert soweit, d.h. bei jeder Statusänderung wird ein Event generiert.

Nun habe ich 2 Watchdogs definiert:


define w_absent watchdog p_dbphone.absent 00:01:30 p_dbphone.present "/opt/fhem/scripts/tracker.sh absent"
define w_present watchdog p_dbphone.present 00:01:30 p_dbphone.absent "/opt/fhem/scripts/tracker.sh absent"


Damit will ich erreichen, dass bei einem present/absent Event zunächst 1:30 gewartet wird. Wenn dann kein umgekehrter Status gemeldet wird, soll das Shellscript ausgeführt werden. Die Wartezeit benötige ich, da manchmal die Verbindung zum Handy zwischen Haustür und Wohnzimmer (Ablageplatz des Handys) manchmal kurz weg ist. Dieses "Flattern" wird damit ignoriert.

Das Script wird nun jeweils beim Kommen und Gehen genau einmal ausgeführt, nachdem die Watchdogs definiert wurden. Ein 2. Mal nicht. Ich habe dann testweise die Watchdogs um einen Träger Befehl ergänzt:


define w_absent watchdog p_dbphone.absent 00:01:30 p_dbphone.present "/opt/fhem/scripts/tracker.sh absent";; trigger w_absent .
define w_present watchdog p_dbphone.present 00:01:30 p_dbphone.absent "/opt/fhem/scripts/tracker.sh absent";; trigger w_present .


Aber auch hier werden die Watchdogs nur 1x aktiviert, dann nie wieder.

Woran könnte das liegen?
2xCCU3 mit ca. 100 Aktoren, Sensoren
Entwicklung: FHEM auf Proxmox Debian VM
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: HMCCU, (Fully, AndroidDB)

PatrickR

#1
Hi!

Probiere doch mal
setstate w_absent defined
statt
trigger w_absent .

In welchem State steht der Watchdog, wenn er ausgelöst hat?

Dass die Watchdogs nur 1x auslösen ist m. E. eine ungünstige Design-Entscheidung.

/Edit: Sorry, das "defined" hinter setstate w_absent hatte ich vergessen.

Patrick
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

devil77

Wäre es nicht einfacher das ganze mit DOIF auf die Beine zu stellen.

PatrickR


Zitat von: devil77 am 19 Dezember 2014, 07:48:34
Wäre es nicht einfacher das ganze mit DOIF auf die Beine zu stellen.

Kann ich mir auf Anhieb nicht vorstellen. Ein Beispiel wäre gut.

Patrick


Gesendet von meinem iPhone mit Tapatalk
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

devil77

Schau mal in die commandref, da stehen jede Menge Beispiele.

lukasbastelpeter

SPOILER!

So, da ich gerade genau das gleiche Problem hatte, und nach einem Blick in die comandRef hier meine Lösung:
Zitatdefine w_Sleeptimer Zuhause:gotosleep 00:30 Zuhause set Zuhause asleep; setstate w_Zuhause_Sleeptimer defined

das wichtigste hier ist das
Zitatsetstate w_Zuhause_Sleeptimer defined
am Ende...
Hoffe ich liege richtig und viel Spaß
# Raspberry Pi
# Homematic, Z-Wave
# HUE, Tradfri
# Harmony
# ESP8266  Basteleien per MQTT