Autor Thema: An-/Abwesenheitserkennung mit WLAN und Fritz!Box  (Gelesen 32210 mal)

Offline lusche800

  • New Member
  • *
  • Beiträge: 35
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #135 am: 17 Mai 2018, 22:22:50 »
Hallo Otto123.
Sorry für die späte Rückmeldung.
Gestern Abend war es von der Uhrzeit zu spät um noch zu testen. Und heute war mal wieder die Hölle los.
Ich versuche es die nächsten Tage ausgiebig zu testen.
Was ich schon sagen kann ist, das alle Fritzboxen überprüft werden.
Auf jedenfall werde ich mich nochmals melden und Rückmeldung geben.

Offline lusche800

  • New Member
  • *
  • Beiträge: 35
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #136 am: 18 Mai 2018, 09:13:22 »
So, ich werde mal versuchen so verständlich wie möglich zu schreiben.

Ich besitze zwei Fritzboxen, die per LAN-Kabel verbunden sind.

In FHEM: FritzBox -> FB 6360 ( Hauptrouter )
                                                                            > über LAN-Kabel verbunden
In FHEM: FritzBox2 -> FB 4020 ( als Repeater )

Durch Versuche mit unseren Handys, hat sich folgender Code ( ohne MAC-Adresse Zuweisung ) bewährt:

######## Wer ist online
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
}

Es werden sämtliche Fritzboxen durchsucht.

2018.05.17 22:39:39 1: Abfrage Fritzbox: FritzBox  Reading:  Handy01 (LAN3) Status: 1
2018.05.17 22:39:39 1: Abfrage Fritzbox: FritzBox2  Reading:  Handy01 (WLAN, 72 / 8 Mbit/s, -41)

Als Device in FHEM gibt es zwei Möglichkeiten:

define Handy01 PRESENCE function {DeviceImWlan("A1:B1:C1:D1:E1:F1")} 10 30
Hierbei wird die MAC-Adresse in beiden Fritzboxen gesucht. Da das Handy aber nur auf einer Fritzbox mit "Verbrauch" angezeigt wird, dauert es ewig, bis das Handy abgemeldet ist. Der "Verbrauch" ist zwar 0, allerdings steht die MAC-Adresse als aktiv in den Fritzboxen. Somit ist diese Methode für mich nicht brauchbar.

oder

define Handy01 PRESENCE function {checkFritzMACpresent("FritzBox2","A1:B1:C1:D1:E1:F1")} 10 30
Hierbei wird der "Verbrauch" auf einer vorgewählten Fritzbox gesucht. Hier habe ich An- und Abmeldezeiten unter 1 min.. Der Nachteil, es wird nur die voreingestellte Fritzbox beobachtet. Sollte sich das Handy in die andere Fritzbox einloggen, hab ich auch hier hohe An- und Abmeldezeiten.
Also muss ich für die zweite Fritzbox einen zusätzlichen Device anlegen.

define Handy01b PRESENCE function {checkFritzMACpresent("FritzBox","A1:B1:C1:D1:E1:F1")} 10 30
Je nachdem wo sich das Handy einloggt, wird entweder das erste oder das zweite Device als Anwesend gemeldet.

Wie ich jetzt aus zwei Anwesenheitsabfragen eine Anwesenheitsanzeige mache, weiß ich noch nicht. Eventuell über ein notify mit schaltbarem Dummy.

Wenn jemand einen Verbesserungsvorschlag hat, nur her damit. Ich bin zum testen bereit, allerdings bitte ich um etwas Zeit für die Versuche.

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 10200
    • Otto's Technik Blog
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #137 am: 18 Mai 2018, 09:30:56 »
Moin,

interessant wäre etwas mehr Log gewesen:
2018.05.17 22:39:39 1: Abfrage Fritzbox: FritzBox  Reading:  Handy01 (LAN3) Status: 1
2018.05.17 22:39:39 1: Abfrage Fritzbox: FritzBox2  Reading:  Handy01 (WLAN, 72 / 8 Mbit/s, -41)
hier ist das Handy01 online, der Wechsel nach offline (Abmeldung) würde mich ja auch interessieren.
Was mich wundert ist: Warum ist die zweite Zeile unvollständig? Warum fehlt hinten der Status? Copy&Paste Fehler?

Man müsste jetzt einfach verhindern, dass ein Handy01 (LAN3) als erkannt gilt. Muss ich noch etwas nachdenken. Ob mir das zeitnah gelingt kann ich nicht versprechen.

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,ET9200,Arduino nano,ESP8266

Offline lusche800

  • New Member
  • *
  • Beiträge: 35
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #138 am: 18 Mai 2018, 09:44:45 »
Ups. Hast recht.

2018.05.17 22:39:39 1: Abfrage Fritzbox: FritzBox  Reading:  Handy01 (LAN3) Status: 1
2018.05.17 22:39:39 1: Abfrage Fritzbox: FritzBox2  Reading:  Handy01 (WLAN, 72 / 8 Mbit/s, -41) Status: 1

und dies:

2018.05.17 22:41:39 1: Abfrage Fritzbox: FritzBox  Reading:  Handy01 (LAN3) Status: 1
2018.05.17 22:41:39 1: Abfrage Fritzbox: FritzBox2  Reading:  weg Status: 1

Mach Dir wegen der Zeit keinen Streß. Ich bin ja schon froh, das wenigstens einer versucht zu helfen. Und das ohne irgendwelche unangebrachten Kommentare ( wieso, weshalb, warum, nutze doch Google ). Dies ist mittlerweile ein Volkssport geworden. Entweder ich gebe Hilfestellung oder ich lasse es. Meine Meinung.

Deshalb: Vielen Dank für die Unterstützung.

Online Frank_Huber

  • Hero Member
  • *****
  • Beiträge: 2235
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #139 am: 18 Mai 2018, 10:04:15 »


Wie ich jetzt aus zwei Anwesenheitsabfragen eine Anwesenheitsanzeige mache, weiß ich noch nicht. Eventuell über ein notify mit schaltbarem Dummy.

Wenn jemand einen Verbesserungsvorschlag hat, nur her damit. Ich bin zum testen bereit, allerdings bitte ich um etwas Zeit für die Versuche.

Das geht recht einfach über DOIF. Da brauchst auch keinen dummy dafür.
(Handy an fb1 oder fb2 present) ()
DOELSEIF (Handy an fb1 und fb2 absent) ()
Den Ausführungsteil lässt leer
Attribut cmdState present|absent
Dein doif bekommt dann den jeweiligen state.

Gesendet von meinem S60 mit Tapatalk


Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 10200
    • Otto's Technik Blog
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #140 am: 18 Mai 2018, 23:27:09 »
Bei Vorhandensein von LANx gilt der Status nicht, also vielleicht einfach noch eine Bedingung:
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/) {
} elsif ($StatusFritz !~ /LAN./) {
} else {
  # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.
  $Status = 1;
}
}
    return $Status
}


Ich habe das Gefühl man kann das alles verkürzen durch einfaches umkehren, aber versuch doch mal so.

Ich habe das jetzt nicht probiert, ich habe das WLAN der FB derzeit nicht in Betrieb.

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,ET9200,Arduino nano,ESP8266

Offline lusche800

  • New Member
  • *
  • Beiträge: 35
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #141 am: 20 Mai 2018, 11:29:17 »
Tja, entweder bin ich zu blöd oder es geht halt einfach nicht.
Auch mit dem Zusatz gehts nicht. In der Logfile wird nix registriert.
Was mich wundert ist:
beim suchen nach "Verbrauch" steht: elsif ($StatusFritz =~ /(.*)s, 0/)
beim suchen nach LAN steht:              elsif ($StatusFritz !~ /LAN./)
Warum bei dem einen ein "=" und beim anderen ein "!" ?
Liegt vielleicht hier das Problem ?

Ich habe für jede Fritzbox ein notify mit Dummy erstellt ( zum testen ). An der Fritzbox, wo das Handy eingeloggt ist, geht das An- und Abmelden innerhalb von Sekunden. Bei der anderen dauerts.

FritzBox:mac_A1_B1_C1_D1_E1_F1:.* {
  if (ReadingsVal("FritzBox", "mac_A1_B1_C1_D1_E1_F1", "inactive") eq "inactive")
  {
    fhem("set Handy01 absent");
  }
  else
  {
    fhem("set Handy01 present");
  }
}

So auch für die zweite Box. Funktioniert, aber mit einem Problem:

Wenn das Handy sich aus der zweiten Box ausloggt, wird der Dummy auf Abwesend gesetzt, da über das notify dies geschieht. Da das andere notify immer noch auf Anwesend steht und sich durch das einloggen auf der ersten Box sich nichts ändert ( Handy ist dort ja immer noch als Anwesend registriert ), ändert sich der Dummy nicht. Somit bin ich immer noch Abwesend.

Mal sehen, vielleicht kann ich den "Verbrauch" irgendwie mit einbauen und somit das Ganze hinbiegen. Wenn das soweit funktioniert, kann ich mich dann mal an das DOIF heranwagen.

Es ist aber interessant, an was man alles denken muss, um das System so hinzugekommen, wie man es möchte.

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 10200
    • Otto's Technik Blog
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #142 am: 20 Mai 2018, 11:48:48 »
Moin,

Zitat
Warum bei dem einen ein "=" und beim anderen ein "!" ?
=~ bedeutet: Bedingung wird war wenn der String vorhanden ist
!~ bedeutet: Bedingung wird war wenn der String nicht enthalten ist

Ja vielleicht hatte ich einen Denkfehler, probier es einfach und ersetze !~ durch =~

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,ET9200,Arduino nano,ESP8266

Offline lusche800

  • New Member
  • *
  • Beiträge: 35
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #143 am: 20 Mai 2018, 12:12:04 »
Du hattest keinen Denkfehler.
! durch = erstetzt -> Abwesend

Trotzdem danke.

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 10200
    • Otto's Technik Blog
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #144 am: 20 Mai 2018, 17:27:24 »
es wäre gut wenn Du noch logs liefern könntest von dem kompletten Wechsel von Abwesend - anwesend - abwesend.

Damit ich mitdenken kann  ;D
Allerdings morgen ist Mühlentag und dann bin ich erstmal ein paar Tage auf Radtour  8)

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,ET9200,Arduino nano,ESP8266

Online Frank_Huber

  • Hero Member
  • *****
  • Beiträge: 2235
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #145 am: 20 Mai 2018, 17:29:47 »


Allerdings morgen ist Mühlentag und dann bin ich erstmal ein paar Tage auf Radtour  8)

Gruß Otto
Viel Spass Otto!

Gesendet von meinem Doogee S60 mit Tapatalk


Offline lusche800

  • New Member
  • *
  • Beiträge: 35
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #146 am: 20 Mai 2018, 19:40:10 »
Auch von mir viel Spaß und erhol Dich gut.
Wegen der Anwesenheit mach Dir keine Sorgen.
Ich mach da auch mal eine Pause.
« Letzte Änderung: 24 Mai 2018, 13:35:19 von lusche800 »

Offline ragnarok

  • New Member
  • *
  • Beiträge: 3
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #147 am: 05 Juli 2018, 23:05:08 »
gabs da mit der Fritzbox 7590 bzw. allgemein aktuellem FritzOS noch ne Änderung, was die Anzeige der Readings angeht ?

bei mir spuckt er bei WLAN-Devices immer nur den Namen aus ohne RSSI.

wenn ich mir in der Fritzbox.pm die Methode FRITZBOX_Readout_Run_Web anschaue, ca. Zeile 1574, nahe dem Kommentar "Create a reading if a landevice is connected", wo die mac_* Readings aufgebaut werden und da ein Log reinsetze, ist sowohl $_->{ethernet}, $_->{wlan} und $_->{ethernet_port} nicht definiert für LAN-Devices.

Wenn ich das folgende Coding

if ( (!$_->{ethernet} && $_->{wlan}) ) {
So erweitere

if ( (!$_->{ethernet} && $_->{wlan}) || $wlanList{$mac} ) {
Kriege ich auch meinen RSSI Wert.

Warum ist das Coding an der Stelle nicht gleich so aufgebaut ? Ein paar Zeilen obendrüber wird die WLAN-List doch allgemeingültig ausgelesen.

Offline Jens_B

  • Full Member
  • ***
  • Beiträge: 328
Antw:An-/Abwesenheitserkennung mit WLAN und Fritz!Box
« Antwort #148 am: 30 Juli 2018, 19:58:49 »
... irgendwas muß bei der 7590 anders sein, Du hast mir meine Anwesenheitskennung wieder repariert mit der Änderung im Modul :-)

Danke Dafür.

Gruß
Jens
« Letzte Änderung: 01 August 2018, 09:00:14 von Jens_B »
RaspberryPi 3 (Raspian Stretch)FHEM+Homebridge
HMLAN für Homematic
Z-Wave USB Stick
Pilight
Fritz!Box 7490