An-/Abwesenheitserkennung mit WLAN und Fritz!Box

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

Vorheriges Thema - Nächstes Thema

ch.eick

Hallo zusammen,
bietet jemand diese esp Dinger mit Bluetooth bereits fertig konfiguriert/installiert mit Übergang zu Wlan an?
Ich bräuchte dann ca. 4 Stück ;-)

Die Lösung mit der RPIs finde ich doch zu groß, bisher komme ich mit einem im Haus aus.

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

MadMax-FHEM

Alternative ohne "basteln" und "flashen": Raspberry PI ZeroW mit lepresenced...
...und collectord.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Beta-User

Zitat von: Otto123 am 25 November 2020, 10:46:23
Und seit ich den OpenMQTT Gateway hier eher zum Spaß laufen habe habe,
:o ::) 8) ...
(Du darfst mir gerne Rückmeldung geben zu meinen "Lernpaket zu MQTT(2)", das ich mal vor längerem (in eurem Usertreff-Thread?) gepostet hatte. Evtl. kann man das irgendwie "wiederverwerten" oder ausbauen...? Dann ggf. im Wiki-Bereich gesondert anfangen?)

@ch.eick:
Die ESP32 sind nicht sonderlich schwer zu flashen. Ist zwar etwas anders als bei den ESP8266, aber es gibt (unter Win) grafische Lösungen, und bei Bedarf kann ich gerne auch einen kompletten Flash-Command für esptool.py liefern.
(Und ja, es erschlägt einen näherungsweise, was sich da so ansammelt, selbst, wenn man ziemlich weg vom Schuss wohnt...)
(Die Struktur der attrTemplate dazu ist aber nicht ganz einfach und die Vorgehensweise teils etwas anders als bei den "einfachen" Templates zu shelly, tasmota und zigbee2mqtt, und die Doku könnte mal jemand (anderes) überarbeiten ;) ).

Zitat von: MadMax-FHEM am 25 November 2020, 12:15:13
Alternative ohne "basteln" und "flashen": Raspberry PI ZeroW mit lepresenced...
...und collectord.
Aha: Statt flashen (einmalige Aktion + alle halbe Jahr ein update a 10 Minuten Aufwand) ein vollwertiges OS dauerhaft pflegen...? Dazu dieses Rumgebocke, das teilweise zu blockiertem FHEM führt...?
Dann doch lieber ein paar ESP32, die man hin und wieder neu booten muss (meine schmieren alle paar Wochen mal ab; es dürfte aber nur eine Frage der Zeit sein, bis das OMG-Team das gelöst hat...).
Blöd ist, dass die keine grafische Möglichkeit haben, um updates per Web-Interface aufzuspielen und hinter den Trick, wie es über die ungrafische Webschnittstelle geht, bin ich leider noch nicht gestiegen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

MadMax-FHEM

Naja, updaten ja nur wegen Lücken/Sicherheit...
...beim ESP bleiben Lücken halt dann drin -> vglbar. keine Updates beim PI...

Auch bei den ESPs gibt es "Updates"...
...nur "schwert" sich da keiner ;)


EDIT: ok "falsch" gelesen ;)

Und warum soll fhem da blockieren?

Aber (wie immer): jeder wie er kann und will... Und (ich denke) mal sollte alle (bekannten) Möglichkeiten zumindest nennen (dürfen)... :)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Manos

Aha! Apple  8) Jetzt verstehe ich etwas besser....

Ihr spricht von der Möglichkeit, die MAC Adresse des Telefons ständig zu ändern damit man das Telefon fuer Werbezwecke nicht tracken kann!
Zum Beispiel, wenn man auf eine Einkaufspassage läuft, die WiFi Router können das Telefon verfolgen, auch wenn man sich im WiFi nicht eingeloggt hat (auf Basis der MAC Adresse).

Ich bin kein Apple User, wusste ich nicht dass die Funktion Private-Address per default eingeschaltet ist!  :o
Ich muss kurz suchen

[EDIT] Meine Informationen kommen aus der USA Version, ich glaube aber nicht dass Apple ein anderes Verhalten programmiert hat fuer Europa:
MAC Spoofing aka "Private WLAN-Adresse" ist per default eingeschaltet  :o
Mein Verständnis ist, es bleibt die gleiche MAC im gleichen WiFi (geht man in ein anderes WiFi, dann zeigt das iPhone ein andere MAC Adresse). Otto's Schilderung aber zeigt, dass dies nicht der Fall ist!

Wie auch immer: Das Problem lasst sich sehr einfach korrigieren.
Öffne die App "Einstellungen", und tippe auf "WLAN".
Tippe auf die Informationstaste (das blaue "i") neben einem Netzwerk.
Tippe auf "Private Adresse". Wenn dein Gerät ohne Verwendung einer privaten WLAN-Adresse dem Netzwerk beigetreten ist, wird in einer Datenschutzwarnung erläutert, warum.
Dadurch wird jetzt bei diesem WiFi das iPhone immer die gleiche MAC Adresse haben.

Grundsätzlich, finde ich es als eine sehr nützliche Option (und ärgere ich mich, dass ich diese Option nicht in meinem Note 8 finde).

@Otto  Als "vertrautes Netzwerk" meinte ich mein eigenes Netzwerk zu Hause, im Gegensatz zu einem "öffentlichen Netzwerk" wo ich nicht weiss was der Router fuer Daten sammelt.
 


Zitat von: Otto123 am 25 November 2020, 10:46:23
Ich teste da momentan mit einer MQTT Basierten Lösung aus OwnTrack, eigener Instanz bei Cloudmqtt und MQTT2_CLIENT.
Mein Eindruck nach zwei Wochen: So stressfrei wie eine BT Erkennung meiner Geräte funktioniert das bei Weitem nicht.
Oh ja, das muss ich angucken, Danke!

HP Microserver GEN8 XEON, Ubuntu 22.04, FHEM, ConBee II, CCU2, CUL433, Tradfri, Luxtronik2, Volkszaehler (und wenig Ahnung...)

Beta-User

Zitat von: MadMax-FHEM am 25 November 2020, 12:25:42
Und warum soll fhem da blockieren?
Kann sein, dass ich da was falsch zugeordnet habe, meinte mich zu erinnern, dass es user gibt, die mit system-Aufrufen die BT-Abfrage machen und FHEM dann solange wartet, bis was zurückkommt - was hin und wieder lange dauern kann.
Muss aber zugeben, dass ich mich mit BT@Pi nie selbst beschäftig habe (kein Pi am laufen, und schon gleich kein aktueller vorhanden) und daher ggf. auch was durcheinanderbringe...

Bei mir dienen die OMG eher dazu, Temperatur- und Feuchtigkeitswerte zu erfassen (Mija mit Display), BT-Anwesenheit (und "Lokalisierung" via RSSI-Wert) sind eher "Abfallprodukte", bisher hat das über die Fritte (event-basiert) eigentlich ganz gut funktioniert, so dass der Bedarf eher gering war. Mal sehen, wie sich das entwickelt.

Was updates angeht: Selbst wenn man die auf einem ESP32 nicht macht, bietet er nicht ganz dieselbe Angriffsfläche wie ein echtes Linux-Device und eben evtl. auch etwas "security by obscurity"...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

frank

ZitatMAC Spoofing aka "Private WLAN-Adresse" ist per default eingeschaltet  :o
Mein Verständnis ist, es bleibt die gleiche MAC im gleichen WiFi (geht man in ein anderes WiFi, dann zeigt das iPhone ein andere MAC Adresse). Otto's Schilderung aber zeigt, dass dies nicht der Fall ist!
hatte ich auch so verstanden, dass es eigentlich kein problem sein sollte.

eventuell gibt es ja probleme, wenn man mehre APs/repeater hat.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Otto123

ZitatMein Verständnis ist, es bleibt die gleiche MAC im gleichen WiFi
Ich will mich da nicht streiten, aber ich habe immer mal versucht meine "Kinder" in die Anwesenheit einzubinden. Das scheitert aber daran, dass die MAC jedes mal wenn die hier aufschlagen eine andere ist.
Und wenn man pro Wifi eine MAC hat, dann weiß der Platz, der Markt, das Kaffee doch auch immer wenn ich wieder da bin? Ich denke eher pro Login wird natürlich nicht gewechselt, aber es  gibt bestimmt bei jedem neuen Login eine Neue. Ich probier das mal mit dem neuen Android aus, die liegen hier noch. Vielleicht habe ich ja übertrieben, aber ich bilde mir auch ein so eine Schilderung schon hier im Forum gelesen zu haben.

Aber wir reden hier komplett OT :)

Es wäre sicher schick wenn es den ESP32 in einem netten Steckergehäuse mit Netzteil gäbe. Flashen in die Dose stecken und gut :) hab ich leider noch nicht gesehen.
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

Zitat von: Otto123 am 25 November 2020, 13:46:23
Es wäre sicher schick wenn es den ESP32 in einem netten Steckergehäuse mit Netzteil gäbe. Flashen in die Dose stecken und gut :) hab ich leider noch nicht gesehen.
Schade, aber danke für die Rückmeldung.
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


Hallo Christian,

vielen Dank fuer deine Version, sie funktioniert ohne Probleme!  :D
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
}



Im Gegenteil, die Version die zur Zeit auf https://wiki.fhem.de/wiki/FRITZBOX existiert, hat bei mir nicht sauber funktioniert. Sie zeigt MAC Adressen als "present", obwohl sie laengst das Haus verlassen:

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

HP Microserver GEN8 XEON, Ubuntu 22.04, FHEM, ConBee II, CCU2, CUL433, Tradfri, Luxtronik2, Volkszaehler (und wenig Ahnung...)

Otto123

Ich habe die Routine mal so ins Wiki übernommen. Ich bin ein wenig über die doppelte Abfrage von weg und inactive gestolpert - ich meine das mit weg kann weg, wenn man den ReadingsVal() default Wert auf inactive setzen würde - aber ich habe es jetzt so gelassen.

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

Manos

Zitat von: Otto123 am 30 November 2020, 09:29:35
Ich habe die Routine mal so ins Wiki übernommen. Ich bin ein wenig über die doppelte Abfrage von weg und inactive gestolpert - ich meine das mit weg kann weg, wenn man den ReadingsVal() default Wert auf inactive setzen würde - aber ich habe es jetzt so gelassen.
Gruß Otto

Danke Otto.

Übrigens, ich glaube verstanden zu haben, warum die ursprüngliche Function nicht funktioniert hat:
Folgende Linie war falsch. Anstatt:
  $m =~ s/:/_/g; 
hätte sie so geschrieben werden:
  $m =~ s/:/_/; 
HP Microserver GEN8 XEON, Ubuntu 22.04, FHEM, ConBee II, CCU2, CUL433, Tradfri, Luxtronik2, Volkszaehler (und wenig Ahnung...)

Otto123

#237
Moin,

nö da liegst Du falsch. Probier es einfach aus:
{my $MAC='AA:BB:CC:DD:EE:FF';;$MAC =~ tr/:/_/;;return $MAC}
{my $MAC='AA:BB:CC:DD:EE:FF';;$MAC =~ s/:/_/g;;return $MAC}
{my $MAC='AA:BB:CC:DD:EE:FF';;$MAC =~ s/:/_/;;return $MAC}

und schau was bei der letzten passiert. Die ersten beiden Versionen sind gleichwertig, die letzte liefert ein falsches Ergebnis. tr/// übersetzt alle Zeichen, s/// ist nach dem ersten Zeichen fertig - dafür dann g(lobal) hinten, d.h. finde/ersetze alle.

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

Jamo

Ich habe bei mir wie folgt dekodiert, die anderen Dekodierungen von weiter oben in diesem Thread haben bei mir nicht richtig in einem Fall funktioniert.
Ich kann mich aber ehrlich gesagt nicht mehr erinnern welcher Fall nicht funktionierte und warum :-(

my $FBState        = ReadingsVal($_,"state","nA");
if ($FBState ne "disabled") {
    if    ($StatusFritz eq "weg") {}
    elsif ($StatusFritz eq "inactive") {}
    elsif ($StatusFritz =~ /WLAN,.0.\/.0.Mbit.s.*/) {}
    elsif ($StatusFritz =~ /.*\(WLAN.*/){return 1}
}

Falls man das FB Modul disabled (bei mir der Repeater den ich manchmal stromlos mache), werden die Readings nicht mehr ge-updated. Deswegen kann man noch auf ' $FBState ne "disabled" ' testen, siehe oben.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Manos

#239
Zitat von: Otto123 am 01 Dezember 2020, 11:06:38
Moin,

nö da liegst Du falsch. Probier es einfach aus:
{my $MAC='AA:BB:CC:DD:EE:FF';;$MAC =~ tr/:/_/;;return $MAC}
{my $MAC='AA:BB:CC:DD:EE:FF';;$MAC =~ s/:/_/g;;return $MAC}
{my $MAC='AA:BB:CC:DD:EE:FF';;$MAC =~ s/:/_/;;return $MAC}

und schau was bei der letzten passiert. Die ersten beiden Versionen sind gleichwertig, die letzte liefert ein falsches Ergebnis. tr/// übersetzt alle Zeichen, s/// ist nach dem ersten Zeichen fertig - dafür dann g(lobal) hinten, d.h. finde/ersetze alle.

Gruß Otto

Hallo Otto,

ich habe nochmals probiert und es funktioniert nicht.
mein Handy ist aus (airplane mode)

Dies ist die Version, die jetzt in Wiki ist.
Sie funktioniert,
defmod P_Manos PRESENCE function {checkAllFritzMACpresent("xx:xx:xx:xx:xx:xx")} 60 60
mein Handy wird als "absent" gezeigt.

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 {   $Status = 1; }
                # Reading existiert, Rückgabewert ist nicht "inactive", also ist das Gerät am Netzwerk angemeldet.
    }
  return $Status
}


Dies ist die vorherige Version in der Wiki (die, mit '$m =~ s/:/_/g;' ).
Sie funktioniert nicht
defmod P_Manos_S PRESENCE function {checkAllFritzMACpresentSimple("xx:xx:xx:xx:xx:xx")} 60 60
mein Handy wird als "present" gezeigt.

## This was a different function for Presence Erkennung, a bit simpler...
sub checkAllFritzMACpresentSimple($) {
  # 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; ## This g at the end does not work, despite Otto's claim it should ###
   $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
}




EDIT: die dritte Version wurde gelöscht, sie war falsch!
HP Microserver GEN8 XEON, Ubuntu 22.04, FHEM, ConBee II, CCU2, CUL433, Tradfri, Luxtronik2, Volkszaehler (und wenig Ahnung...)