An-/Abwesenheitserkennung mit WLAN und Fritz!Box

Begonnen von borsti67, 25 Juli 2015, 21:21:04

Vorheriges Thema - Nächstes Thema

Otto123

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

Hackstall

Hallo seit meinem Fritzbox Update habe ich einige Probleme:
unter anderem funktioniert meine Anwesenheitskontrolle nicht mehr.
In meiner aktuelle Implementierun pruefe ich auch auf weg oder invalid.

Die Fritzbox liefert aber folgenden Output:

mac_XX_XX_XX_XX_XX_XX  MeinDevice (WLAN, 0 / 0 Mbit/s, 0)


Das wurde hier schon mal angesprochen jedoch werde ich aus der Antwort nicht schlau.
Wie muss ich nun die 0 auswerten damit bei 0 absent gemeldet wird.

Danke Andreas

Jamo

#197
Ich glaube du meintest "weg" oder "inactive" (nicht invalid). Auf deinen Output testest Du etwa so: my $StatusMac   = ReadingsVal("MeinDevice", $MAC, "weg"); 
if ($StatusMac =~ /WLAN,.0.\/.0.Mbit.s.*/) {"Pseudocode für melde absent"}
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Hackstall

Danke das geht schon in die richtige Richtung. Wie würde das denn aussehen für:

define Andreas PRESENCE event Fritzbox:mac_<macaddr>:\s+inactive Fritzbox:mac_<macaddr>:\s+.+\s+\(WLAN,.+\)



Hackstall

Sorry ich glaube ich muss mich korrigieren:
Der Sachverhalt auf meiner Fritzbox ist wie folgt:

Wenn Handy im Netz dann meldet das Fritzbox Device:

mac_xx_xx_xx_xx_xx_xx AndreasHandy (WLAN, 1300 / 877 Mbit/s, -52)


Wenn Handy im Netz aber nicht da:

mac_xx_xx_xx_xx_xx_xx AndreasHandy (WLAN, 0 / 0 Mbit/s, 0)


Wenn Handy längere Zeit nicht im Netz war:

<leer, kein Eintrag mehr im Fritzbox Device>


Gelöst hatte ich das wie folgt:

efine Andreas PRESENCE event Fritzbox:mac_XX_XX_XX_XX_XX_XX:\s+inactive Fritzbox:mac_XX_XX_XX_XX_XX_XX:\s+.+\s+\(WLAN,.+\)
attr Andreas DbLogExclude .*
attr Andreas event-on-change-reading .*
attr Andreas group Grp-People
attr Andreas icon people_sensor
attr Andreas room 1.0.0_Haus
attr Andreas userReadings DaNichtDa { (ReadingsVal("Andreas","state","absent") eq "absent")?0:1 }


Das funktioniert aber irgendwie nicht mehr.
Warum?

Danke Andreas


amenomade

Also, dein "abwesend" Event versucht auf 'inactive' zu matchen, obwohl (bei dir komischerweise - siehe meine Antwort auf deinem Doppelpost) der Status nicht auf "inactive" steht, sondern auf 0 / 0 Mbits

Wenn dann, musst Du nicht eine Regex mit "inactive" benutzen, sondern eine Regex wie von Jamo vorgeschlagen. Sowas in der Art:
Fritzbox:mac_XX_XX_XX_XX_XX_XX:\s+?WLAN,.0.\/.0.Mbit.*
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ch.eick

In der aktuellen Version fuer die Abwesenderkennung steht schon seit langem beides drin.

###################################################
###     Presence Erkennung
###################################################
sub checkAllFritzMACpresent($) {
  # Benötigt: nur die zu suchende MAC ($MAC),
  # Es werden alle Instanzen vom Type FRITZBOX abgefragt
  #
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden
  my ($MAC) = @_;
  # Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0
  my $Status = 0;
  $MAC =~ tr/:/_/;
  $MAC = "mac_".uc($MAC);
  my @FBS = devspec2array("TYPE=FRITZBOX");
    foreach( @FBS ) {
                my $StatusFritz = ReadingsVal($_, $MAC, "weg");
                if ($StatusFritz eq "weg") {
                } elsif ($StatusFritz eq "inactive") {
                } elsif ($StatusFritz =~ /(.*)s, 0/) {
                        # Dieser Zweig testet auf "<geraetename> (WLAN, 0 / 0 Mbit/s, 0)"
                } else {
                  # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.
                  $Status = 1;
                }
    }
  return $Status
}
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

amenomade

OK dann ist es vielleicht spezifisch zu bestimmten Modellen von Fritzboxen (oder Handys... ich habe kein Apple). Bei mir hat es immer mit "inactive" funktioniert, und funktioniert heute noch (Fritz!OS 7.19) nur mit "inactive".
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ch.eick

Zitat von: amenomade am 30 Juli 2020, 20:24:24
OK dann ist es vielleicht spezifisch zu bestimmten Modellen von Fritzboxen (oder Handys... ich habe kein Apple). Bei mir hat es immer mit "inactive" funktioniert, und funktioniert heute noch (Fritz!OS 7.19) nur mit "inactive".
Das funktioniert auch noch so, jedoch etwas verzoegert. Der Zustand mit 0/0 Mbit kommt als erstes, danach geht es auf inactive und dann ist im Fitzbox Modul spaeter auch das reading ganz weg. Moechte man dass es etwas schneller reagiert, muss man das 0/0 Mbit mit in die Abfrage aufnehmen.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

lunak

Hat noch jemand Probleme mit der Anwesenheitserkennung mit dem neuesten  FRITZ!OS: 07.21 ?
Bei mir wechselt der Status in unregelmäßigen Abständen zwischen kommen und gehen.
Konnte aber leider noch nicht rausfinden ob es am FritzOS liegt oder ob das Problem im Presence liegt :( 


Thx
Lunak

ch.eick

Zitat von: lunak am 20 November 2020, 17:08:52
Hat noch jemand Probleme mit der Anwesenheitserkennung mit dem neuesten  FRITZ!OS: 07.21 ?
Bei mir wechselt der Status in unregelmäßigen Abständen zwischen kommen und gehen.
Konnte aber leider noch nicht rausfinden ob es am FritzOS liegt oder ob das Problem im Presence liegt :( 
Ich habe zwar noch nicht aktualisiert, habe jedoch auch dieses Phänomen. Es hat mit iPhones begonnen und tritt auch bei Android auf.
Nach meiner Erkenntnis liegt es am Wlan Powersave der Handys.
VG
  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Manos

Zitat von: ch.eick am 30 Juli 2020, 09:31:37
In der aktuellen Version fuer die Abwesenderkennung steht schon seit langem beides drin.

###################################################
###     Presence Erkennung
###################################################
sub checkAllFritzMACpresent($) {
  # Benötigt: nur die zu suchende MAC ($MAC),
  # Es werden alle Instanzen vom Type FRITZBOX abgefragt
  #
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden
  my ($MAC) = @_;
  # Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0
  my $Status = 0;
  $MAC =~ tr/:/_/;
  $MAC = "mac_".uc($MAC);
  my @FBS = devspec2array("TYPE=FRITZBOX");
    foreach( @FBS ) {
                my $StatusFritz = ReadingsVal($_, $MAC, "weg");
                if ($StatusFritz eq "weg") {
                } elsif ($StatusFritz eq "inactive") {
                } elsif ($StatusFritz =~ /(.*)s, 0/) {
                        # Dieser Zweig testet auf "<geraetename> (WLAN, 0 / 0 Mbit/s, 0)"
                } else {
                  # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.
                  $Status = 1;
                }
    }
  return $Status
}


Hallo Christian,

wo genau steht diese Version? Denn, auf https://wiki.fhem.de/wiki/FRITZBOX finde ich nur die Version

sub checkAllFritzMACpresent($) {
  # Benötigt: nur die zu suchende MAC ($m),
  # Es werden alle Instanzen vom Type FRITZBOX abgefragt
  #
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden
  my ($m) = @_;
  # Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0
  my $s = 0;
  $m =~ s/:/_/g;
  $m = "mac_".uc($m);
  foreach(devspec2array("TYPE=FRITZBOX")){
    if (ReadingsVal($_,$m,"inactive") ne "inactive"){
      # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.
      $s = 1;
      last;
    }
  }
  return $s
}


Schoene Gruesse,
Manos

P.S. Nicht, dass ich etwa die eine hier, oder die andere verstehe...  ;D es geht nur damit ich weiss was ich lesen muss  ::)
HP Microserver GEN8 XEON, Ubuntu 22.04, FHEM, ConBee II, CCU2, CUL433, Tradfri, Luxtronik2, Volkszaehler (und wenig Ahnung...)

ch.eick

Zitat von: Manos am 23 November 2020, 04:09:16
wo genau steht diese Version? Denn, auf https://wiki.fhem.de/wiki/FRITZBOX finde ich nur die Version
P.S. Nicht, dass ich etwa die eine hier, oder die andere verstehe...  ;D es geht nur damit ich weiss was ich lesen muss  ::)
Hallo Manos,
die fertige Funktion findest Du glaube ich nirgends, deshalb habe ich das damals aus dem Thread aus Stücken ergähnst und Dir hier mal geposted ;-)
Aber beachte auch diese Anmerkung
Zitat
Ich habe zwar noch nicht aktualisiert, habe jedoch auch dieses Phänomen. Es hat mit iPhones begonnen und tritt auch bei Android auf.
Nach meiner Erkenntnis liegt es am Wlan Power save der Handys.
Ich lege zwar keinen großen Wert auf eine 100% Top Lösung mit presence Meldern in jedem Raum, jedoch scheint das mit dem Wlan nicht wirklich verlässlich zu sein.

Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Otto123

Das mittlerweile in allen Systemen eingeführte MAC Spoofing ist auch zu beachten. Muss man für zu Hause dann ausschalten.
Ich kann die Version von Christian gerne ins Wiki übernehmen, ich kann sie nur nicht mehr testen, da ich es so nicht mehr verwende.
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

ch.eick

#209
Zitat von: Otto123 am 23 November 2020, 10:34:57
Das mittlerweile in allen Systemen eingeführte MAC Spoofing ist auch zu beachten. Muss man für zu Hause dann ausschalten.
Ich kann die Version von Christian gerne ins Wiki übernehmen, ich kann sie nur nicht mehr testen, da ich es so nicht mehr verwende.
Hallo Otto,
meine Variante läuft genau so, nur habe ich leider diese An/Abmeldungen, für die ich mangels Kenntnisse keine Erklärung finde.
Kannst du das mit dem MAC Spoofing näher angeben? Ein Link zum lesen, was bei einer Fritzbox gemacht werden kann?
Was verwendest Du denn jetzt? WLan wird nämlich langsam eng ;-)
Gruß
   Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick