Solved: ROOMMATE aktualisiert Anwesenheit nicht

Begonnen von Grinsekatze, 11 Februar 2017, 18:35:17

Vorheriges Thema - Nächstes Thema

Grinsekatze

Hallo,

ich habe ein Problem mit dem Modul ROOMMATE und der PRESENCE-Funktionalität.
Ich habe zwei Geräte mit einer Definition verknüpft, doch egal ob diese present werden oder nicht, ROOMMATE bleibt absent bzw. gone.

So sieht die Dezinition aus:

fhem.cfg:
define Familie RESIDENTS
attr Familie alias Familie
attr Familie devStateIcon .*home:status_available:absent .*absent:status_away_1:home .*gone:status_standby:home .*none:control_building_empty .*gotosleep:status_night:asleep .*asleep:status_night:awoken .*awoken:status_available:home .*:user_unknown:home
attr Familie group Bewohner
attr Familie icon control_building_filled
attr Familie room Anwesenheit
attr Familie webCmd state

define rr_John ROOMMATE Familie
attr rr_John alias John
attr rr_John devStateIcon .*home:user_available:absent .*absent:user_away:home .*gone:user_ext_away:home .*gotosleep:scene_toilet:asleep .*asleep:scene_sleeping:awoken .*awoken:scene_sleeping_alternat:home .*:user_unknown:home
attr rr_John group Bewohner
attr rr_John icon people_sensor
attr rr_John room Anwesenheit
attr rr_John rr_presenceDevices SmartphoneWLAN,SmartphoneBluetooth
attr rr_John rr_realname alias
attr rr_John sortby 1
attr rr_John webCmd state

define SmartphoneBluetooth PRESENCE local-bluetooth 00:00:00:00:00:00
attr SmartphoneBluetooth alias Smartphone Bluetooth
attr SmartphoneBluetooth event-on-change-reading state
attr SmartphoneBluetooth group Anwesenheit

define SmartphoneWLAN dummy
attr SmartphoneWLAN alias Smartphone WLAN
attr SmartphoneWLAN event-on-change-reading state
attr SmartphoneWLAN group Anwesenheit

define Notify_SmartphoneWLAN notify Fritzbox:mac_11_11_11_11_11_11:.* {\
if (ReadingsVal("Fritzbox", "mac_11_11_11_11_11_11", "inactive") eq "inactive") {\
fhem("set SmartphoneWLAN absent");;\
} else {\
fhem("set SmartphoneWLAN present");;\
}\
}

define Fritzbox FRITZBOX 192.168.0.1
attr Fritzbox INTERVAL 300
attr Fritzbox allowTR064Command 1
attr Fritzbox event-on-change-reading mac_11_11_11_11_11_11
attr Fritzbox forceTelnetConnection 0
attr Fritzbox icon it_router


Hat vielleicht Jemand eine Idee, warum ROOMMATE den Anwesenheitsstatus nicht aktualisiert?

Loredo

du verhinderst mit event-on-change-reading das dafür notwendige Event.


Gruß

Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Grinsekatze

Das leuchtet mir zwar nicht recht ein warum, da so ja nur unnötige Events vermieden werden, aber ich habe es einmal entfernt im WLAN-Dummy und Bluetooth-Presence. Jedoch hat das keine Verbesserung gebracht. Bluetooth ist absend - weil nicht in Reichweite, WLAN ist present und doch ist ROOMMATE absent.

Liegt es eventuell daran, dass ich mit dem ROOMMATE-Attribut rr_presenceDevices nur Devices verknüpfen darf, die vom Typ PRESENCE sind? Mein WLAN-Device ist ja ein Dummy, der je nach Notify-Rückmeldung present oder absent als STATE hat.

KernSani

meines Wissens fragt ROOMMATE das "presence" reading ab, nicht den State... Loredo kann das aber sicher besser beantworten...
Gib deinem Dummy mal ein presence reading (über userReadings Attribut).

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Loredo

Zitat von: Grinsekatze am 12 Februar 2017, 17:26:32
Das leuchtet mir zwar nicht recht ein warum, da so ja nur unnötige Events vermieden werden, aber ich habe es einmal entfernt im WLAN-Dummy und Bluetooth-Presence.


Ich habe ja nicht gesagt, dass du es nicht verwenden kannst. Aber du musst dann wissen, welche Events zu behalten musst. Um Fehler dieser Art auszuschließen, ist es einfacher das Attribut einfach zunächst wegzulassen.


Zitat von: Grinsekatze am 12 Februar 2017, 17:26:32
Bluetooth ist absend - weil nicht in Reichweite, WLAN ist present und doch ist ROOMMATE absent.


Das funktioniert nicht, denn es ist keine oder-, sondern eine und-Verknüpfung. Erst wenn alle Geräte den selben presence-Status haben, wird der ROOMMATE-Status entsprechend geändert. Für eine oder-Verknüpfung kannst du ein DOIF verwenden.


Zitat von: Grinsekatze am 12 Februar 2017, 17:26:32
Liegt es eventuell daran, dass ich mit dem ROOMMATE-Attribut rr_presenceDevices nur Devices verknüpfen darf, die vom Typ PRESENCE sind?


Der Device-Typ spielt keine Rolle.
Sofern vorhanden, wird das Reading "presence" verwendet, ansonsten "state".
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Grinsekatze

#5
Danke. Ich ging davon aus, dass für present eine ODER- und für absent eine UND-Bedingung verwendet wird.

Ich habe mal ein Doif gebastelt und das rr_presenceDevices Attribut gelöscht:
define JohnDoif DOIF ([SmartphoneWLAN] eq "present" or [SmartphoneBluetooth] eq "present") (set rr_John present)\
DOELSEIF ([SmartphoneWLAN] eq "absent" and [SmartphoneBluetooth] eq "absent") (set rr_John absent)


Edit:
Ok, SO einfach ist es dann doch nicht, da ROMMATE "set rr_John present" oder "set rr_John presence present" nicht versteht. Also komme ich wohl nicht an einem Dummy vorbei, den ich Mittels des obigen Doif schalte und diesen Dummy dann als rr_presenceDevices eintrage.

Das sieht dann so aus:

define Familie RESIDENTS
attr Familie alias Familie
attr Familie devStateIcon .*home:status_available:absent .*absent:status_away_1:home .*gone:status_standby:home .*none:control_building_empty .*gotosleep:status_night:asleep .*asleep:status_night:awoken .*awoken:status_available:home .*:user_unknown:home
attr Familie group Bewohner
attr Familie icon control_building_filled
attr Familie room Anwesenheit
attr Familie webCmd state

define rr_John ROOMMATE Familie
attr rr_John alias John
attr rr_John devStateIcon .*home:user_available:absent .*absent:user_away:home .*gone:user_ext_away:home .*gotosleep:scene_toilet:asleep .*asleep:scene_sleeping:awoken .*awoken:scene_sleeping_alternat:home .*:user_unknown:home
attr rr_John group Bewohner
attr rr_John icon people_sensor
attr rr_John room Anwesenheit
attr rr_John rr_presenceDevices Smartphone
attr rr_John rr_realname alias
attr rr_John sortby 1
attr rr_John webCmd state

define SmartphoneBluetooth PRESENCE local-bluetooth 00:00:00:00:00:00
attr SmartphoneBluetooth alias Smartphone Bluetooth
attr SmartphoneBluetooth event-on-change-reading state
attr SmartphoneBluetooth group Anwesenheit

define SmartphoneWLAN dummy
attr SmartphoneWLAN alias Smartphone WLAN
attr SmartphoneWLAN event-on-change-reading state
attr SmartphoneWLAN group Anwesenheit

define Notify_SmartphoneWLAN notify Fritzbox:mac_11_11_11_11_11_11:.* {\
if (ReadingsVal("Fritzbox", "mac_11_11_11_11_11_11", "inactive") eq "inactive") {\
fhem("set SmartphoneWLAN absent");;\
} else {\
fhem("set SmartphoneWLAN present");;\
}\
}

define Smartphone dummy

define JohnDoif DOIF ([SmartphoneWLAN] eq "present" or [SmartphoneBluetooth] eq "present") (set Smartphone present)\
DOELSEIF ([SmartphoneWLAN] eq "absent" and [SmartphoneBluetooth] eq "absent") (set Smartphone absent)

define Fritzbox FRITZBOX 192.168.0.1
attr Fritzbox INTERVAL 300
attr Fritzbox allowTR064Command 1
attr Fritzbox event-on-change-reading mac_11_11_11_11_11_11
attr Fritzbox forceTelnetConnection 0
attr Fritzbox icon it_router

Loredo

Warum? Die Status, die du suchst, sind home und absent. Sie implizieren auch den presence Wechsel.


Gruß

Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Grinsekatze

Hehe, das habe ich auch gerade bemerkt, dass es nicht present, sondern home ist  :)

Grinsekatze

Nach ein paar Tagen der Testung habe ich mich nun doch für das Model mit dem Dummy entschieden. Grund: Wenn ROOMMATE mit einem Doif abhängig der beiden Presence-Devices absent oder home geschaltet wird, dann kann offenbar ROOMMATE keine weiteren Stati annehmen, wie z.B. gone, da dann der Doif immer interveniert und wieder absent daraus macht.

Man muss also entweder ein ne erweiterte Logik im Doif nutzen - dann macht aber ROOMMATE langsam keinen Sinn mehr, da es das selbst verwaltet, oder eben nur abhängig der Erreichbarkeit ein Dummy schalten. Dieser triggert dann ROOMMATE.

Loredo

#9
Das ist eine etwas seltsame Beobachtung.
Bei Nutzung von r*_presenceDevices wird der Status nur auf "absent" gesetzt, wenn der presence-Status "present" ist:


set $hashName:FILTER=presence=present absent


Das ist im activity-Status "gone" nicht der Fall und daher wird auch der Status "gone" nicht angefasst.

DOIF ist eine komplexe Angelegenheit und für die meisten leider undurchschaubar/unbeherrschbar geworden...
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Zitat von: Grinsekatze am 13 Februar 2017, 18:43:12
Danke. Ich ging davon aus, dass für present eine ODER- und für absent eine UND-Bedingung verwendet wird.


Ich habe das Verhalten in ROOMMATE und GUEST gerade so umgeändert.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Grinsekatze

Zitat von: Loredo am 18 Februar 2017, 22:12:24

Ich habe das Verhalten in ROOMMATE und GUEST gerade so umgeändert.

Danke.

Zu meinem obigen Einwand: Konkret hatte ich eine Structure verwendet und kein Dummy. Dadurch kann der Doif dann auch gänzlich entfallen.

Vorher hatte ich ein Doif, der prüfte, ob WLAN oder Bluetooth present (mind. 1 Gerät) oder absent (alle Geräte) sind. Davon abhängig wurde dann Roommate geschaltet - also ohne das Attribut.

kleineslichtHH

Die Änderung müsste noch in die Hilfe vom Modul eingetragen werden

Zitat...sobald ALLE Devices entweder absent oder present sind...

chq

Hallo,

kurz dazwischen gefragt:

Wie kann ich den Status, den ich via PRESENCE-Modul ermittelt habe an einen bestimmten Bewohner des Residence-Moduls übergeben?

Gruß Chris
So einfach wie möglich, so kompliziert wie nötig

CoolTux

Zitat von: chq am 07 Juni 2018, 21:12:06
Hallo,

kurz dazwischen gefragt:

Wie kann ich den Status, den ich via PRESENCE-Modul ermittelt habe an einen bestimmten Bewohner des Residence-Moduls übergeben?

Gruß Chris

Der roommate reagiert auf die Events des presence Devices. Dazu sagt man den roommate über ein Attribut auf welches presence Devices er reagieren soll.
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