An-/Abwesenheitserkennung mit WLAN und Fritz!Box

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

Vorheriges Thema - Nächstes Thema

Otto123

Dann müsstest Du die Funktion in der 99_myUtils.pm ändern.

Aber ich mache das einfach mit einer Structure über mehrere Geräte pro Person. Egal welches der Geräte da ist, dann gilt die Person als anwesend.

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

Frank_Huber

Wenn die Mac wirklich mit AA bb cc dd ee FF daher kommt liegt eher ein Defekt im Nexus vor.

Gesendet von meinem S3_32 mit Tapatalk


Tabularasa

Zitat von: Otto123 am 31 Oktober 2017, 22:25:56
Dann müsstest Du die Funktion in der 99_myUtils.pm ändern.

Aber ich mache das einfach mit einer Structure über mehrere Geräte pro Person. Egal welches der Geräte da ist, dann gilt die Person als anwesend.

Gruß Otto
Hmm... Also Funktion umändern fällt schon mal weg. Da kenn ich mich überhaupt nich mit aus. Das mit der structure hört sich gut an aber da hätte ich jetzt auch keine Ahnung wo ich da ansetzen muss. Das heißt es wär schön wenn du mir einen Ansatz liefern kannst ::)
Danke
Zitat von: Frank_Huber am 31 Oktober 2017, 23:13:36
Wenn die Mac wirklich mit AA bb cc dd ee FF daher kommt liegt eher ein Defekt im Nexus vor.

Gesendet von meinem S3_32 mit Tapatalk



Die mac war nur als Beispiel gedacht weil ich die aktuelle nicht hatte. Vergibt das 5X eventuell für 2.4 & 5 GHz getrennte Macs aus?

Otto123

Hi,

ich habe das hier mal als Prinzip aufgeschrieben und mit dummies umgesetzt.

Das mit den Mac's ist eigenartig, aber ich hatte das an andere Stelle schon mal. scheinbar werden für unterschiedliche Aufgaben auch unterschiedliche Geräte/Mac Adressen verwendet. Ich glaube bei der Fritzbox habe ich das schon mal gesehen. Die Mac ist bloß in einer Stelle anders.

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

lusche800

#124
Hallo.
Mittlerweile haben wir 2018 und nun stehe ich vor dem Problem mit der Anwesenheit.
Die ganze Zeit habe ich dies mit lan-ping machen können. Da ich nun ein neues Handy habe, das im StandBy-Modus nach ca. 8 min. nicht mehr auf den ping reagiert, muss ich auf die MAC-Adresse wechseln.
Nach vielem lesen und probieren, habe ich folgendes herausgefunden:

Ich habe zwei Fritzboxen. Bei der Fritzbox, wo sich das Handy einloggt, funktioniert am besten und schnellsten ( ab- / anmelden ) dies:

my $StatusFritz = ReadingsVal($_, $MAC, "weg");
if ($StatusFritz eq "weg") {
} elsif ($StatusFritz eq "inactive") {
} elsif ($StatusFritz =~ /(.*)s, 0/) {
} else {
  # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.
  $Status = 1;
}
}



Für die gleichzeitige Abfrage der Boxen, dies: ( leider dauert die Abmeldung bis zu 10 min. )

######## Netzwerk Gerät über Fritzbox abfragen ############
sub
NetDevDa($)
{
    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++;
          }
       }
    if( $n == 0) {
        return 0;
    } else {
        return 1;
    }
}



Was jetzt für mich interessant wäre ( ich bin kein Programmierer, hab davon keine Ahnung ), wenn man beide Systeme verschmelzen könnte.
Es werden beide Fritzboxen gleichzeitig über die WLan-Geschwindigkeit abgefragt.

Könnte mir bitte jemand dabei helfen ? Damit wären, bin ich der Meinung, alle Probleme gelöst.

Im voraus vielen Dank.

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

lusche800

@ Otto123 Danke für den Hinweis. Erster Code wurde geändert.

Otto123

Muss nochmal nachfragen, da der erste Code unvollständig scheint: Wo hast Du diesen Codeschnipsel drin? 99_myUtils, userreading oder wo?

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

lusche800

Beide Codes sind in 99_myUtils eingetragen, laufen parallel und funktionieren.
Der erste Code überprüft, wie hoch der "WLan-Verbrauch" ist.
Der zweite Code überprüft nur die MAC-Adresse.

Jetzt bräuchte ich einen Code, der die MAC-Adresse auf "Verbrauch" prüft und das auf allen Fritzboxen gleichzeitig.

Otto123

Probiere es mal so, ist quasi die Kombination aus beiden

######## Testvariante
sub DeviceImWlan($) {
  # 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
  # Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0
  my ($MAC) = @_;
  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/) {
} else {
  # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.
  $Status = 1;
}
}
    return $Status
}
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

lusche800

Hallo Otto123,

ich habe Deinen Test probiert. Ergebnis:

1) Keine Fehlermeldung
2) Anmeldung unter 60 sec.
3) Abmeldung -> immer noch 10 min.

Bin über jede Idee dankbar. Im Notfall würde ich auch jede Fritzbox einzeln abfragen. Ich weiß bloss nicht, wie ich dann aus zwei Abfragepunkten eine Anwesenheit machen könnte.

Über jede Idee bin ich dankbar.

Otto123

Hi,

es ist aber exakt Dein 1. Code Abschnitt nur über alle Fritzboxen.

Das man bei der FB eine Wlan Abmeldung erst nach 10 min bekommt ist meines Erachtens völlig normal. Hast Du beide Methoden parallel laufen?

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

Frank_Huber



Zitat von: Otto123 am 16 Mai 2018, 18:11:51
Das man bei der FB eine Wlan Abmeldung erst nach 10 min bekommt ist meines Erachtens völlig normal. Hast Du beide Methoden parallel laufen?

Es kommt darauf an wie du wlan trennst.
Vernünftig abmelden ist das device in 2 bis 4 min absent.
Aus dem funkbereich gelaufen kann schon mal 10 bis 15 min dauern.
So war zumindest das Ergebnis meiner Tests damals auf der 7390. Die 75er verhält sich aber nicht merklich anderst.

Gesendet von meinem S60 mit Tapatalk


lusche800

Egal welche Box ( 6360 oder 4020 ), egal ob am Handy WLan aus oder über das verlassen des Funkbereichs:

An- und Abmelden unter 1 min. .


Ich habe die Abfrage einer Box mit Abfrage des "Verbrauches" kombiniert.

sub checkFritzMACpresent($$) {
  # Benötigt: Name der zu testenden Fritzbox ($Device),
  #           zu suchende MAC ($MAC),
  # Rückgabe: 1 = Gerät gefunden
  #           0 = Gerät nicht gefunden
  my ($Device, $MAC) = @_;
  my $Status = 0;
  $MAC =~ tr/:/_/;
  $MAC = "mac_".uc($MAC);
 
my $StatusFritz = ReadingsVal($Device, $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 {
  $Status = 1;
}
  return $Status
}


Funktioniert wunderbar.
Aber wie gesagt, der Code gilt nur für eine Box.

Otto123

Wie gesagt beide Codes sind eigentlich gleich. Probier mal bitte die Variante und poste dann mal das Log für die fragliche Zeit
######## Testvariante
sub DeviceImWlan($) {
  # 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
  # Wird in keiner Instanz die MAC Adresse gefunden bleibt der Status 0
  my ($MAC) = @_;
  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/) {
} else {
  # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.
  $Status = 1;
}
         Log 1, "Abfrage Fritzbox: $_  Reading:  $StatusFritz Status: $Status";
}
    return $Status
}


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