Unifi - Presence und Residents -> Status wechselt ständig von home zu absent

Begonnen von hoppel118, 21 Oktober 2020, 11:30:49

Vorheriges Thema - Nächstes Thema

sTaN

Zitat von: hoppel118 am 24 Januar 2021, 09:09:41
Moinsen,

doppelte Macs über das Unifi Controller WebInterface entfernen, Clear all im Unifi Modul und Unifi Clients neu anlegen, hatte ich damals auch alles gemacht.

Das Problem besteht weiterhin. Habe aber momentan keine Zeit mich damit auseinander zu setzen.

Dem kann ich mich anschließen. Hatte diese Schritte auch bereits auf Basis diverser Beiträge durchgeführt und habe mittlerweile Controller Version 6.0.43 drauf und immer noch keine Besserung. Mir fehlt auch leider die Zeit dran zu bleiben, aber würde es natürlich auch gern lösen, da ich einige Ideen bzgl. Anwesenheitserkennung umsetzen würde.

Aktuell meldet er mir lediglich per Pushover Fenster offen Meldungen, die aber auch gerne mal ausbleiben, wenn man genau in dem Moment kurz disconnected ist.
Notfalls muss ich dann doch auf Geofency und Bluetooth umsteigen. Schade.

Gruß sTaN
Raspberry Pi 3
2 x CUL CC1101-USB-Lite 868MHz
FS20 Komponenten, Philips HUE, Alexa-Fhem, MAX! Geräte, homebridge, harmony, Unifi, FirtzBox, MQTT, Aurora, Denon, Sonos, TabletUI, CALENDAR, EGPM2LAN, Pushover

obelix221

So....auch bei mir wechselt der Status - ja nach Tagesform - hochzyklisch zwischen absent und present her.

Werde nun meine verstaubten Shell-Kenntnisse auspacken und versuchen ein Script zu schreiben, dass dann erst nach dem 2. gleichen Event in Folge den Status setzt. Damit müsste ich die Reaktion auf den oszillierenden Statuswechsel ausschalten können.

VG
Obelix
RPi3 als FHEM-Server, 868 MHz CUL, 433 MHz Transmitter, Homematic Aktoren und Sensoren, Yamaha AVR, Logitech Harmony, Fritzbox, Logitech SB, 433 MHz Steckdosen, HUE, EnOcean

justme1968

es reicht völlig absenceThreshold im PRESENCE modul zu verwenden.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Frank_Huber

Ich hab mir Unifi Client Geräte angelegt und da drin ein presence Userreading.
Klappt 1a ohne "flattern"

defmod Presence_Frank_UniFi UnifiClient Frank-Handy-S88
attr Presence_Frank_UniFi event-on-change-reading .*
attr Presence_Frank_UniFi stateFormat {ReadingsVal($name,"presence","absent") eq "absent" ? "absent since ".ReadingsVal($name,"_f_last_seen","") : "present since ".ReadingsVal($name,"_f_uptime","")}
attr Presence_Frank_UniFi userReadings presence:fhem_state.* {(ReadingsVal($name,'fhem_state','disconnected') eq 'disconnected' ? 'absent' : 'present') }

obelix221

Hallo Justme,

an den Thresholds habe ich mich auch schon versucht.
Ich habe verstanden, dass es für ein eventbasierendes Presencemodul den Timeout-Threshold gibt.
Den Absence- und Presence-Timout habe ich jeweils auf 60 (sek) gestellt.

Internals:
   DEF        event Smartphone_Matthias:fhem_state:.disconnected Smartphone_Matthias:fhem_state:.connected
   EVENT_ABSENT Smartphone_Matthias:fhem_state:.disconnected
   EVENT_PRESENT Smartphone_Matthias:fhem_state:.connected
   FUUID      5e103a95-f33f-f80f-6862-0b53e51cfe9e54fc
   MODE       event
   NAME       Matthias_iPhone_priv
   NOTIFYDEV  Smartphone_Matthias,global
   NR         519
   NTFY_ORDER 50-Matthias_iPhone_priv
   STATE      present
   TYPE       PRESENCE
   READINGS:
     2021-04-04 08:34:32   model           event
     2021-04-04 08:40:50   presence        present
     2021-04-04 08:40:50   state           present
   helper:
     CURRENT_STATE present
Attributes:
   absenceTimeout 60
   presenceTimeout 60
   room       Abwesenheit



Ich hätte dann eigentlich erwartet, dass es diese Phänomen nicht gibt:

2021.04.04 08:22:10.501 2: ROOMMATE set rr_Matthias home
2021.04.04 08:22:11.185 2: ROOMMATE set rr_Matthias absent
2021.04.04 08:22:46.513 2: ROOMMATE set rr_Matthias home
2021.04.04 08:22:47.199 2: ROOMMATE set rr_Matthias absent
2021.04.04 08:23:22.253 2: ROOMMATE set rr_Matthias home
2021.04.04 08:23:22.939 2: ROOMMATE set rr_Matthias absent


Hätte eigentlich erwartet, dass der Status nicht umgeschaltet wird, wenn das Antagonist-Event innerhalb der Timeout-Spanne kommt.

Um den absenceThreshold im PresenceModul zu verwenden, werde ich dann wohl auf eine function-/script-basierte PRESENCE-Lösung wechseln.
Danke für den Hinweis, durch den Threshold sollte ich mir dann das Persistieren des Vorgänger-Events sparen können.
RPi3 als FHEM-Server, 868 MHz CUL, 433 MHz Transmitter, Homematic Aktoren und Sensoren, Yamaha AVR, Logitech Harmony, Fritzbox, Logitech SB, 433 MHz Steckdosen, HUE, EnOcean

obelix221

Hallo Frank,

Die Unify Clients habe ich auch angelegt. Auch das hat leider nicht geholfen.
Auffällig ist, dass dieses Flattern wohl hauptsächlich bei iOS Geräten in Verbindung mit dem Unifis entsteht.

VG
obelix
RPi3 als FHEM-Server, 868 MHz CUL, 433 MHz Transmitter, Homematic Aktoren und Sensoren, Yamaha AVR, Logitech Harmony, Fritzbox, Logitech SB, 433 MHz Steckdosen, HUE, EnOcean

Frank_Huber


justme1968

absenceThreshold und presenceThreshold ist etwas anderes als absenceTimeout und presenceTimeout.

ansonsten bei iOS: es ist wichtig auf dem device in den wlan einstellungen die private wlan adresse auszuschalten.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

WhyTea

Hallo

Ich nutze fast ausschließlich Apple Geräte und habe natürlich auch das Problem das die Geräte immer mal wieder flattern, vor allem wenn sich die Geräte im Haus bewegen und die Clients den AP wechseln.

Ich habe das auf eine recht simple Weise gelöst.

Zunächst nutze ich das Presence Modul mit dem Attribut absenceTimeout 00:02:00 das verhindert das der Status ständig auf "absent" springt sondern zunächst auf "maybe absent".
defmod Handy_Daniel PRESENCE event unifi_controller:Apparat:.disconnected unifi_controller:Apparat:.connected
attr Handy_Daniel DbLogExclude .*
attr Handy_Daniel absenceTimeout 00:02:00


Der Status des Moduls wird von einem DOIF überwacht was dann in einen dummy schreibt.
defmod di.Handy_Daniel_present DOIF ([Handy_Daniel] eq "absent") (\
set Anwesend_Daniel:FILTER=STATE!=off off)\
DOELSE (set Anwesend_Daniel:FILTER=STATE!=on on)
attr di.Handy_Daniel_present DbLogExclude .*


defmod Anwesend_Daniel dummy
attr Anwesend_Daniel event-on-change-reading state
attr Anwesend_Daniel setList on off
attr Anwesend_Daniel webCmd on:off


Den Wert des dummies nutze ich dann für meine Abfragen oder die Statusanzeige auf meinen TabletUI.

Vielleicht hilft es jemanden.

Gruß
Daniel

obelix221

Hallo WhyTea,

danke für Deine Lösung.
Ich habe mich jetzt aber für die folgende Lösung entschieden, in der ich dann auch mit dem von justme erwähnten absenceThreshold arbeite:

ein Presence Device mit folgenden Parametern angelegt:
Internals:
   CFGFN     
   DEF        shellscript /opt/fhem/helper/smartphone_status.pl Smartphone_Matthias 120
   FUUID      606acb00-f33f-f80f-e4c9-0848122e526a14ae
   INTERVAL_NORMAL 120
   INTERVAL_PRESENT 120
   MODE       shellscript
   NAME       Matthias_iPhone_priv
   NOTIFYDEV  global
   NR         4111
   NTFY_ORDER 50-Matthias_iPhone_priv
   STATE      present
   TYPE       PRESENCE
   READINGS:
     2021-04-10 07:05:14   model           shellscript
     2021-04-10 07:56:57   presence        present
     2021-04-10 07:56:57   state           present
   helper:
     CURRENT_STATE present
     DISABLED   0
     call       /opt/fhem/helper/smartphone_status.pl Smartphone_Matthias
Attributes:
   absenceThreshold 2
   room       Abwesenheit


und das zugehörige Perl-Script:
#!/usr/bin/perl

$| = 1;

my ($id) = @ARGV;

my $RC=0;

$connection=`/opt/fhem/fhem.pl 7072 "XXXXXXX" "{InternalVal('$id','STATE','')}"`;

if ($connection =~ m/^connected/){
         $RC=1;
};

if ($connection =~ m/^disconnected/){
        $RC=0;
};

print "$RC";



Damit sollte das Thema jetzt hoffentlich behoben sein.

VG
obelix
RPi3 als FHEM-Server, 868 MHz CUL, 433 MHz Transmitter, Homematic Aktoren und Sensoren, Yamaha AVR, Logitech Harmony, Fritzbox, Logitech SB, 433 MHz Steckdosen, HUE, EnOcean

justme1968

der umweg über ein externes shellscript das doch wieder fhem abfragt ist unnötig. einfach die function variante verwenden und den externen umweg sparen. ein reading auszuwerten ist in der regel auch besser als ein internal zu verwenden.

also etwa so: define <name> PRESENCE function {ReadingsVal('unifi','iPhone-andre','') eq "connected" ? 1 : 0} 60 60

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

obelix221

RPi3 als FHEM-Server, 868 MHz CUL, 433 MHz Transmitter, Homematic Aktoren und Sensoren, Yamaha AVR, Logitech Harmony, Fritzbox, Logitech SB, 433 MHz Steckdosen, HUE, EnOcean

WhyTea

Ja das sieht wirklich interessant aus!  :D

Inder Commandref steht das so: define <name> PRESENCE function {...} [ <check-interval> [ <present-check-interval> ] ]

Mir ist der Unterschied zwischen <check-interval> und <present-check-interval> gerade nicht ganz klar.

Würdest Du mir kurz das Verhalten beschreiben wenn man 60 60 setzt?

justme1968

das ist doch in der commandref beschrieben:
Zitat
check-interval - The interval in seconds between each presence check. Default value: 30 seconds
present-check-interval - The interval in seconds between each presence check in case the device is present. Otherwise the normal check-interval will be used.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

WhyTea

Sorry, dass habe ich tatsächlich überlesen.

Darüber hinaus habe ich aber dennoch eine Frage. Nur um sicher zu gehen. ;-)
So wie ich das Verhalten jetzt beobachtet habe geht das Device, ohne zusätzliche Attribute, auf den Status "maybe absent" wenn beim check einmal das zu prüfende Gerät nicht "connected" ist. Und beim zweiten mal in folge auf "absent".

Habe ich das so richtig beobachtet oder habe ich wieder was übersehen?