Hauptmenü

rr_presenceDevices

Begonnen von pjakobs, 18 Mai 2017, 13:18:08

Vorheriges Thema - Nächstes Thema

pjakobs

ich habe ein Problem mit der presence detection in roommate.
Laut commandref gilt:

rr_presenceDevices - take over presence state from any other FHEM device. Separate more than one device with comma meaning ALL of them need to be either present or absent to trigger update of this ROOMMATE device. You may optionally add a reading name separated by :, otherwise reading name presence and state will be considered.


Ich habe jeweils ein presence device für lan und bluetooth angelegt, weil beide für sich nicht hinreichend stabil sind, beide verwenden mein Telefon als "Token" und erst, wenn beide "away" sind, sollte das Roommate Device auf "away" gesetzt werden.


define Peter_bt PRESENCE lan-bluetooth 80:7a:EE:FF:AA:CC 192.168.29.25:5222
attr Peter_bt absenceThreshold 4
attr Peter_bt icon user_available
attr Peter_bt room Residents
attr Peter_bt verbose 5

define Peter_lan PRESENCE function {checkFritzMACpresentReadings("FritzBox", "80:7a:AA:BB:CC:DD")} 60 60
attr Peter_lan icon user_available
attr Peter_lan room Residents
attr Peter_lan verbose 5


beide Presence Devices tun, was sie sollen.

zudem gibt es:

define RR_Peter ROOMMATE RGR_Residents
attr RR_Peter alias Status
attr RR_Peter devStateIcon .*home:user_available:absent .*absent:user_away:home .*gone:user_ext_away:home .*gotosleep:scene_to
attr RR_Peter group RR_Peter
attr RR_Peter icon people_sensor
attr RR_Peter room Residents
attr RR_Peter rr_presenceDevices Peter_lan,Peter_bt
attr RR_Peter rr_realname group

und der schaltet offenbar immer auf den Zustand des zuletzt gelesen devices:

2017.05.18 13:11:54 5: PRESENCE (Peter_lan) - stopping timer
2017.05.18 13:11:54 5: PRESENCE (Peter_lan) - starting blocking call for mode function
2017.05.18 13:11:54 5: PRESENCE (Peter_lan) - execute perl function: Peter_lan|{checkFritzMACpresentReadings("FritzBox", "80:XX:XX:XX:XX:XX")}|0
2017.05.18 13:11:54 5: PRESENCE (Peter_lan) - function returned with: 1
2017.05.18 13:11:54 5: PRESENCE (Peter_lan) - blocking scan result: Peter_lan|0|present
2017.05.18 13:11:54 2: ROOMMATE set RR_Peter home
2017.05.18 13:11:56 4: PRESENCE (Peter_lan) - rescheduling next check in 60 seconds
2017.05.18 13:11:56 5: PRESENCE (Peter) - stopping timer
2017.05.18 13:11:56 5: PRESENCE (Peter) - starting blocking call for mode function
2017.05.18 13:11:56 5: PRESENCE (Peter) - execute perl function: Peter|{presence_combine("Peter_bt", "Peter_lan")}|0
2017.05.18 13:11:56 5: PRESENCE (Peter) - function returned with: 1
2017.05.18 13:11:56 5: PRESENCE (Peter) - blocking scan result: Peter|0|present
2017.05.18 13:11:57 4: PRESENCE (Peter) - rescheduling next check in 60 seconds
2017.05.18 13:12:11 5: PRESENCE (Peter_bt) - received data: absence
2017.05.18 13:12:11 2: ROOMMATE set RR_Peter absent
2017.05.18 13:12:56 5: PRESENCE (Peter_lan) - stopping timer
2017.05.18 13:12:56 5: PRESENCE (Peter_lan) - starting blocking call for mode function
2017.05.18 13:12:56 5: PRESENCE (Peter_lan) - execute perl function: Peter_lan|{checkFritzMACpresentReadings("FritzBox", "80:XX:XX:XX:XX:XX")}|0
2017.05.18 13:12:56 5: PRESENCE (Peter_lan) - function returned with: 1
2017.05.18 13:12:56 5: PRESENCE (Peter_lan) - blocking scan result: Peter_lan|0|present
2017.05.18 13:12:56 2: ROOMMATE set RR_Peter home
2017.05.18 13:13:00 4: PRESENCE (Peter_lan) - rescheduling next check in 60 seconds
2017.05.18 13:13:00 5: PRESENCE (Peter) - stopping timer
2017.05.18 13:13:00 5: PRESENCE (Peter) - starting blocking call for mode function
2017.05.18 13:13:00 5: PRESENCE (Peter) - execute perl function: Peter|{presence_combine("Peter_bt", "Peter_lan")}|0
2017.05.18 13:13:00 5: PRESENCE (Peter) - function returned with: 1
2017.05.18 13:13:00 5: PRESENCE (Peter) - blocking scan result: Peter|0|present
2017.05.18 13:13:00 4: PRESENCE (Peter) - rescheduling next check in 60 seconds
2017.05.18 13:13:01 5: PRESENCE (Peter_bt) - received data: absence
2017.05.18 13:13:01 2: ROOMMATE set RR_Peter absent


der Peter ohne RR_ oder _(lan|bt) ruft eine einfache Funktion auf, die die Liste der Devices durchläuft und nur dann absent zurückgibt, wenn keines der Devcies mehr present ist - dieses Verhalten hätte ich nach der commandref auch von rr_preseceDevices erwartet - das scheint aber nicht der Fall zu sein.

Wo liegt der Fehler? Zwischen den Ohren oder im Code?

pj

KernSani

Hi,

Ich würde mal den sbsenceThreshold rausnehmen. Wenn das nicht hilft, bitte mal ein "list" aller devices, während RR_Peter sich im falschen Zustand befindet.
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...