Presence mittels function unzuverlässig

Begonnen von caldir65, 15 Juli 2021, 20:10:24

Vorheriges Thema - Nächstes Thema

caldir65

Hallo,

ich habe hier eine Fritzbox und einen Repeater eingebunden mittels FRITZBOX, über welche ich letztlich mittels eine function die Anwesenheit zweier Smartphones abfragen will.

Manchmal funktioniert es gut, manchmal klappt es aber auch nicht. Wenn ich in einem Moment, in dem das Smartphone auch abwesent (weil die Mac nicht eingebucht ist im WLAN) ist, mir die entsprechenden Readings im Device anschaue, dann ist dort auch das fragliche Smartphone nicht gelistet.

Leider scheint die function in 99_MyUtils.pm das nicht so zu sehen - es wird (fast) immer eine 1 (=anwesend) zurück geliefert.

Auf den AVM-Geräten ist jeweils die aktuellste Firmware F-OS 7.27 installiert, der Repeater ist mit der FB vermesht.
fhem ist aktuell, das zugrunde liegende RaspiOS  (buster) ist auch aktuell. fhem läuft auf einem RPi4/4MB ...

Fritzbox:
Internals:
   APICHECKED 1
   DEF        192.168.1.1
   FUUID      5f43bde8-f33f-378b-f467-61ff6c4f381e2f36
   FVERSION   72_FRITZBOX.pm:0.221250/2020-06-06
   HOST       192.168.1.1
   INTERVAL   60
   LUAQUERY   1
   M3U_LOCAL  ./www/images/Fritzbox.m3u
   M3U_URL    unknown
   MODEL      FRITZ!Box 7590
   NAME       Fritzbox
   NR         62
   REMOTE     1
   SECPORT    49443
   STATE      WLAN: on gWLAN: off
   TELNET     0
   TR064      1
   TYPE       FRITZBOX
   WEBCM      0
   READINGS:
...
fhem:
     LOCAL      0
     definedHost 192.168.1.1
     is_double_wlan 1
     lastHour   0
     modulVersion $Date: 2020-06-06 13:11:54 +0200 (Sat, 06 Jun 2020) $
     radioCount 40
     sid        bb8a0151cb056c75
     sidTime    1626370936.88986
     610:
       brand      AVM
       id         1
       model      C4
       userId     1
     613:
       brand      AVM
       id         4
       model      C4
       userId     2
     landevice:
                  dLan2fritz
...
helper:
     TimerCmd   Fritzbox.Cmd
     TimerReadout Fritzbox.Readout
Attributes:
   DbLogExclude .*
   INTERVAL   60
   allowTR064Command 1
   boxUser    fhem
   devStateIcon devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off
   event-on-change-reading .*
   group      FritzBox
   icon       it_router
   room       System->Geräte
   sortby     01
   verbose    2

(ich habe einmal die meisten Readings weg gelassen, um das hier etwas zu vereinfachen)

der Repeater:Internals:
   APICHECKED 1
   DEF        192.168.1.102
   FUUID      6065d75d-f33f-378b-d14f-6c35518b1809bee3
   FVERSION   72_FRITZBOX.pm:0.221250/2020-06-06
   HOST       192.168.1.102
   INTERVAL   300
   LUAQUERY   1
   M3U_LOCAL  ./www/images/FritzRepeater_1750E.m3u
   M3U_URL    unknown
   MODEL      FRITZ!WLAN Repeater 1750E
   NAME       FritzRepeater_1750E
   NR         1620
   REMOTE     1
   SECPORT    49443
   STATE      WLAN: on gWLAN: off
   TELNET     0
   TR064      1
   TYPE       FRITZBOX
   WEBCM      0
   READINGS:
     2021-07-15 19:46:23   box_connect     5
     2021-07-15 19:46:23   box_cpuTemp     0
     2021-07-15 19:46:23   box_fwVersion   134.07.27
     2021-07-15 19:46:23   box_guestWlan   off
     2021-07-15 19:46:23   box_guestWlanCount 0
     2021-07-15 19:46:23   box_guestWlanRemain 0
     2021-07-15 19:46:23   box_ipExtern    192.168.1.102
     2021-07-12 09:06:13   box_model       FRITZ!WLAN Repeater 1750E [avm]
     2021-07-15 19:46:23   box_powerRate   76
     2021-07-15 19:46:23   box_tr064       on
     2021-07-15 19:46:23   box_tr069       off
     2021-07-15 19:46:23   box_wlanCount   6
     2021-07-15 19:46:23   box_wlan_2.4GHz on
     2021-07-15 19:46:23   box_wlan_5GHz   on
     2021-07-15 19:46:23   lastReadout     241 values captured in 0.77 s
     2021-07-15 19:46:23   mac_04_B4_29_9C_0B_F1 PC-04-B4-29-9C-0B-F1 (WLAN, 0 / 0 Mbit/s, 0)
     2021-07-15 19:46:23   mac_18_4E_16_76_EB_3F PC-192-168-1-79 (WLAN, 702 / 526 Mbit/s, -64)
     2021-07-15 19:46:23   mac_3C_A6_2F_BA_69_26 PC-192-168-1-1
     2021-07-15 19:46:23   mac_50_EC_50_0E_5D_13 PC-50-EC-50-0E-5D-13 (WLAN, 0 / 0 Mbit/s, 0)
     2021-07-15 19:46:23   mac_60_AF_6D_41_A6_C1 PC-192-168-1-147 (WLAN, 71 / 40 Mbit/s, -45)
     2021-07-15 19:46:23   mac_7C_49_EB_0F_2F_65 inactive
     2021-07-15 19:46:23   mac_88_9F_6F_B0_7C_94 PC-192-168-1-133 (WLAN, 57 / 22 Mbit/s, -55)
     2021-07-15 19:46:23   mac_A4_6C_F1_AB_B2_35 PC-192-168-1-105 (WLAN, 325 / 6 Mbit/s, -65)
     2021-07-15 19:46:23   mac_E8_DF_70_6D_73_CC PC-192-168-1-102
     2021-07-15 19:46:23   state           WLAN: on gWLAN: off
   fhem:
     LOCAL      0
     definedHost 192.168.1.102
     is_double_wlan 1
     lastHour   0
     modulVersion $Date: 2020-06-06 13:11:54 +0200 (Sat, 06 Jun 2020) $
     radioCount 0
     sid        99049cc5d320ad38
     sidTime    1626371183.12563
     landevice:
...
helper:
     TimerCmd   FritzRepeater_1750E.Cmd
     TimerReadout FritzRepeater_1750E.Readout
Attributes:
   DbLogExclude .*
   allowTR064Command 1
   boxUser    fhem
   devStateIcon devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off
   event-on-change-reading mac_18_4E_16_76_EB_3F,mac_88_9F_6F_B0_7C_94,mac_08_C5_E1_F6_1A_DF
   group      FritzBox
   icon       it_router
   room       System->Geräte
   sortby     02

Auch hier einige Readings von angeschlossenen Geräten ausgelassen...

Das Presence für mein Smartphone:
Internals:
   DEF        function {MacAddressPresent("18:4E:16:76:EB:3F")} 30
   FUUID      5f54a034-f33f-378b-ec3a-29b95fff375e2d64
   FVERSION   73_PRESENCE.pm:0.207820/2019-12-19
   INTERVAL_NORMAL 30
   INTERVAL_PRESENT 30
   MODE       function
   NAME       Smartphone_Christoph
   NOTIFYDEV  global
   NR         1521
   NTFY_ORDER 50-Smartphone_Christoph
   STATE      present
   TYPE       PRESENCE
   READINGS:
     2021-07-12 09:05:10   model           function
     2021-07-15 19:58:36   presence        present
     2021-07-15 19:58:36   state           present
   helper:
     CURRENT_STATE present
     call       {MacAddressPresent("18:4E:16:76:EB:3F")}
Attributes:
   DbLogExclude .*
   event-on-change-reading .*

(für meine Frau ist im Prinzip identisch bis auf Name und Mac)

sowie die Funktion:sub MacAddressPresent($) {
my $n = 0;
my ($reading) = @_;

$reading =~ tr/:/_/;

my @fbs = devspec2array("TYPE=FRITZBOX");

foreach (@fbs) {
my $name = ReadingsVal($_, "mac_" . $reading, "");
if ($name ne "" && $name ne "inactive") {
$n++;
}
}

return 1 if ($n > 0);
return 0 if ($n == 0);
}


Das Merkwürdige ist, daß es mal funktioniert, mal auch nicht ... laut Log war meine Frau heute Vormittag die ganze Zeit anwesend (sie war aber arbeiten, und hatte ihr Smartphone mit)
Bei mir hat es heute funktioniert - nachdem ich heute morgen zum Testen das WLAN im Smartphone bei mir einmal abgeschaltet hatte  :o

Ich würde mich freuen, wenn wir dem Problem auf die Spur kommen würden - es hängen noch andere Dinge mit andere Anwesenheit
Danke

Gruß, Christoph
Alte Techniker-Regel: "kaum macht man es richtig, funktioniert es auch"
------
Dell Wyse5070 ThinClient 16GBRam, 64GB SSD, Lubuntu 22.04LTS, fhem (aktuell), debmatic, Homematic-Devs, ConBee II und deConz, viele Shellys, Rademacher, NextCloud-Anbindung, FullyKioskBrowser+FUIP uvm.

Otto123

#1
Hallo Christoph,

es gibt zu Deinem Thema eine Unmenge an Threads und Möglichkeiten. Ich bin nicht sicher ob Du eine zuverlässige Variante findest.

Auf alle Fälle gibt es hier eine aufwendiger gestaltete Funktion, vielleicht ist die besser?
https://wiki.fhem.de/wiki/FRITZBOX#Anwesenheitserkennung_.C3.BCber_mehrere_Fritzboxen_oder_AVM_Repeater_und_Fritzbox

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

caldir65

Hallo Otto,

danke für den Hinweis - ich werde es einmal anpassen und weiter Beobachten, ob es damit wie gewünscht funktioniert - nach ersten Tests scheint es gut zu funktionieren  :)
Irgendwie war mir dieser Link sogar bekannt, aber ich habe ihn nicht wieder gefunden.

Gruß, Christoph
Alte Techniker-Regel: "kaum macht man es richtig, funktioniert es auch"
------
Dell Wyse5070 ThinClient 16GBRam, 64GB SSD, Lubuntu 22.04LTS, fhem (aktuell), debmatic, Homematic-Devs, ConBee II und deConz, viele Shellys, Rademacher, NextCloud-Anbindung, FullyKioskBrowser+FUIP uvm.