Anwesenheitskontrolle per Wlan Ping und Android 6

Begonnen von Steffmaster, 09 Februar 2016, 09:01:08

Vorheriges Thema - Nächstes Thema

psycho160

#75
Ich möchte euch mal meinen Lösungsvorschlag zeigen mit dem ich endlich wieder auch unter Android 7 die Anwesenheitserkennung  über WLAN von FHEM nutzen kann.

Voraussetzung:
etwas besseren WLAN Router mit Terminal ( in meinem Fall ein Mikrotik mit RouterOS)

Mal zur Ursache:
Seit Android 6 wurde eine Art Energiesparmodus in Android eingeführt die das Smartphone zumindest auf IP-Ebene "abschaltet". Sogenannt Doze -> hier wird das recht gut beschrieben, wen es interessiert https://www.bignerdranch.com/blog/diving-into-doze-mode-for-developers/

Da ich aber seit ca. 2013 die  komplette Anwesenheitserkennung (Heizung, Alarm, Licht,...) über die Presence Funktion realisiert habe und das wirklich praktisch ist möchte ich werder auf irgendwelche Bluetooth Tags umsteigen oder jeden Raum mit einem Raspi ausstatten. Für mich kommt nur WLAN mit meinem Smartphone in Frage weil das habe ich auch immer bei mir.

Nach etlichen Versuchen und Recherchen habe ich festgestellt das ein Android Smartphone in jedem Fall, egal ob DeepSleep oder LightSleep seine Verbindung mit dem AP aufrecht behält! (auch wenn es IP mäßig z.B. per Ping nicht mehr erreichbar ist und man denkt das WLAN ist aus)
Das könnt ihr gerne nachprüfen (meistens unter "Registration Table" oder "Connect List") werdet ihr die MAC eures Smartphones auch dann finden wenn es tief und fest schläft :)

Und genau auf dieser Tatsache beruht meine Lösung->

LÖSUNG:
Per Script (füge ich unten bei) frage ich alle 25 Sekunden meinen Registration Table nach vom Access Point nach verbundenen MAC Adressen ab.
Wenn meine Smartphone MAC dabei ist dann erstelle ich mir eine "virtuelle IP" auf einem Interface. (der Router hat dann halt einfach 2 IP Adressen)
Diese IP diehnt mir im FHEM als Presence Device und tada -> Anwesenheitserkennung läuft wieder :-)

Natürlich prüft mein Script auch ob die MAC weg ist und löscht die "virtuelle IP" wieder womit auch die Abwesenheit erkannt wird.

Mein Script für RouterOS Geräte:


  • Script unter System-Scrips einfügen und anpassen (IP, MAC und Interface!)
  • unter System-Sheduler einen Task anlegen der das Script alle 20 Sekunden aufruft

# Set variables to use
:local atHome1;
:local hostmac1;
:local ip1;
:local atHome2;
:local hostmac2;
:local ip2;
:local free1;
:local free2;
:set free1 "true";
:set free2 "true";

#Clients for FHEM

#MAC-Client1
:set hostmac1 "XX:XX:XX:XX:XX:XX";
:set ip1 "192.168.1.199/24";
:set atHome1 "false";

#MAC-Client2
:set hostmac2 "XX:XX:XX:XX:XX:XX";
:set ip2 "192.168.1.198/24";
:set atHome2 "false";

# find mac1 in registration-table
/caps-man registration-table;
:foreach a in=[find] do={
# debug :log info [get $a mac-address];
:if ([get $a mac-address] = $hostmac1) do={
:set atHome1 "true";
}

# find mac2 in registration-table
:if ([get $a mac-address] = $hostmac2) do={
:set atHome2 "true";
  }
}

#present
/ip address;
:foreach i in=[find] do={ 
  :if ([get $i address] = $ip1) do={
    :set free1 "false";
  }
:if ([get $i address] = $ip2) do={
    :set free2 "false";
  }
}
:if ($free1 = true && $atHome1 = true) do={     
      /ip address add interface=vlan2 address=$ip1;
    }
:if ($free2 = true && $atHome2 = true) do={     
      /ip address add interface=vlan2 address=$ip2;
    }

#absent
:if ($atHome1 = false) do={
/ip address remove [find address=$ip1];
}
:if ($atHome2 = false) do={
/ip address remove [find address=$ip2];
}


Fazit: Seit 1 Woche läuft bei mir und meiner Freundin die Anwesenheitserkennung wieder einwandfrei unter Android 7 :-)
- 2013@FHEM - 2020 Setup: Pi 4 4GB Systeme: Shelly, Tasmota, Zigbee und mittlerweile nur noch wenig Homematic. Entwicker von: tado-FHEM Modul (perlcritic 3 ^^)(https://git.wolfmajer.at/Public/FHEM-Tado)
- 2024@HomeAssistant, FHEM nur noch als legacy System per MQTT von HA versorgt

Otto123

Das funktioniert so nach demselben Prinzip auch bei der Fritzbox
Bei mir zumindest zuverlässig, seit 2 Jahren.

Trotzdem scheint es Fälle zu geben wo es anders ist, wird zumindest immer wieder beschrieben. Toll das es bei Dir so funktioniert. Die ursprüngliche Fragestellung mit Abfrage mit WLAN Ping kann theoretisch eigentlich nicht funktionieren.

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

JoeALLb

Nur mal noch 2-3 Gedanken:
# Du könntest aus dem Mikrotik auch direkt über fetch in FHEM Variablen setzen oder einen status updaten, dann hättest du weniger zeitverlust und vermutlich weniger overhead.
# Alternativ kannst du den "Registration Table" auch per snmp abfragen, somit ersparst du dir auch den Umweg über die zusätzliche interface-IP.
# Bei mir nutze ich es aktuell über die Prüfung auf DHCP-Leases, denn selbst ein schlafendes Android hält sein lease aktuell. (Aber vielleicht ist die Prüfung der Registration Table schneller?!?)
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

psycho160

#78
Danke für euere Rückmeldungen :-)

@JoeALLb
Du hast recht es gibt natürlich mehrere Wege, aber so muss ich im FHEM nichts ändern. Natürlich wäre es über die RouterOS API oder SNMP schöner aber ich fange dann im FHEM damit nichts an - zumindest wüsste ich jetzt auf die schnelle nicht wie ... :o


EDIT:
grad entdeckt: https://forum.fhem.de/index.php?topic=57273.0
- 2013@FHEM - 2020 Setup: Pi 4 4GB Systeme: Shelly, Tasmota, Zigbee und mittlerweile nur noch wenig Homematic. Entwicker von: tado-FHEM Modul (perlcritic 3 ^^)(https://git.wolfmajer.at/Public/FHEM-Tado)
- 2024@HomeAssistant, FHEM nur noch als legacy System per MQTT von HA versorgt

JoeALLb

Noch einfacher... ich stell mal ein Beispiel zusammen.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Punkt

Hallo zusammen,

gibt es diesbezüglich neue Erkenntnisse?

Ich habe im Haus verteilt 4 Accespoints / Router als Accesspoints von TP-Link mit OpenWrt drauf.
Leider bin ich auch von dem Problem betroffen mit Android 7 und den WLAN-Abbrüchen: Nach irgendwas zwischen 5 und 10 Minuten gehen meine Pings verloren und mein Mobiltelefon ist quasi nicht mehr anwesend - doof wenn man die gesamte Anwesenheitssteuerung darauf ausgelegt hat.

Ich hab mir das mal angesehen und zusätzlich jetzt noch festgestellt, dass in meinen OpenWrt-Accesspoints direkt nachdem die Pings verloren gehen auch die MAC-Adresse in meinen Accesspoints nicht mehr registriert sind - zumindest auf der Übersichtsseite des Accesspoints. Somit dürfte ein Workaround in der Art mit NMAP auch nicht mehr funktionieren, oder?

...ich bin da echt am verzweifeln!
Vor 1,5 Jahren hatte ich das Problem mit meinem S6 schonmal nach einem Update auf Android 6 - ich hatte gehofft, dass das in der Zwischenzeit geändert wurde...jetzt hab ich ein S7 bekommen mit Android 7 und muss mit Erschrecken feststellen dass das immer noch so ist... :-/

Mir ist unbegreiflich warum man sowas macht...zumal ich ja eine Einstellung im WLAN-Bereich habe wo ich angeben kann dass das WLAN im Standby an bleiben soll...!?!?!  Da erschliesst sich mir der Sinn irgendwie nicht...

Hat da jemand evtl. noch weitere Ideen oder ähnliche Beobachtungen mit Android 7 und OpenWrt?


Viele Grüße

Michael
FHEM auf LXD-Container (Ubuntu 24.04) mit 1wire-Bus und I2C-Extensions
Datenbank: influxdb
verschiedene "Satellitensysteme" mit ESP-8266

mumpitzstuff

Versuch's mal mit Geofence oder du lässt bluetooth an und kaufst dir einen bluetooth dongle.

Punkt

Geofence hab ich noch nicht ausprobiert - aber dazu muss ich eine funktionierende GPS-Verbindung haben, richtig?
Das ist bei mir im Inneren des Hauses nicht gegeben...

...Bluetooth fällt auch raus - musste schon 4 Accesspoints im Haus verteilen weil meine Stahlbetondecken und Verstärkungen in den Wänden sehr stark abschirmen.

Da fange ich nicht noch damit an überall Bluetooth-Empfänger zu verbauen.
Das hat die ganze Zeit ja mit WLAN funktioniert - nur seit Google bei den neuen Android-Versionen diesen DOZE-Modus eingeführt haben gibts jetzt diese Probleme... :-/
FHEM auf LXD-Container (Ubuntu 24.04) mit 1wire-Bus und I2C-Extensions
Datenbank: influxdb
verschiedene "Satellitensysteme" mit ESP-8266

mumpitzstuff

Mit Root kannst du doze abschalten.

Mit Geofence hab ich leider auch keine eigenen Erfahrungen, das funktioniert aber auch mit WLAN Erkennung und vor allem Funkzellen Auswertung. GPS ist da meines Erachtens kaum notwendig, das wäre auch viel zu belastend für den Akku.

TeleDet

@ Punkt

Ich hatte wie alle anderen auch das Problem und bin auf Bluetooth umgestiegen (USB-Adapter direkt im BananaPi).
Ich denke mittlerweile, dass selbst wenn Du das mit WLAN wieder hinbekommst, es für die Zukunft doch sehr
ungewiss bleibt! Was erwartet uns bei Android 7.5 ... 8 .... 9 etc. Bluetooth ist konzeptionell schon anders angelegt
(dauerhafte Verbindung zwischen Smartphone und Zubehör) von daher sollten die Überraschungen der Google-Entwickler
nicht sehr groß sein. Hoffe ich zumindest.  ::)

Übrigens, wenn Du mal Google befragst was es zum Thema ,,tp-link openwrt bluetooth" orakelt, wirst du überrascht sein!
Deine TP-Link's haben ja schließlich eine USB-Schnittstelle!!! Vielleicht sollte man da Energie investieren statt in die
WLAN-Problemlösung? ;)

Gruß TeleDet

Punkt

Ich danke euch schonmal für die Antworten - das Thema ist echt frustrierend...  :-\

Zitat von: TeleDet am 05 Juni 2017, 14:10:29
Übrigens, wenn Du mal Google befragst was es zum Thema ,,tp-link openwrt bluetooth" orakelt, wirst du überrascht sein!
Deine TP-Link's haben ja schließlich eine USB-Schnittstelle!!! Vielleicht sollte man da Energie investieren statt in die
WLAN-Problemlösung? ;)

...du hast natürlich Recht - die TP-Links haben alle ne USB-Buchse...hmm....

damit hätte ich im ganzen Haus und Grundstück verteilt 5 TP-Links mit openWRT die ich mit Bluetooth versehen könnte - da hast du natürlich absolut Recht! Das hab ich noch gar nicht bedacht... *schäm*

Dann muss ich mich nur noch damit befassen wie ich das in FHEM einbauen kann - vor allem wenn ich 5 verschiedene Router dazu ansprechen muss.

...hab ich da nicht sogar noch was im Hinterkopf, dass man damit relativ genau tracken kann wo man sich im Gebäude befindet? :-)

Ich werde da die nächsten Tage mal auf die Suche zu dem Thema gehen. Habt ihr evtl. Hinweise auf Beschreibungen? Vielleicht schon hier im Forum (bin momentan auf der Arbeit - werde aber nachher dazu wie gesagt auch selbst mal das Forum durchsuchen)?


Viele Grüße

Michael
FHEM auf LXD-Container (Ubuntu 24.04) mit 1wire-Bus und I2C-Extensions
Datenbank: influxdb
verschiedene "Satellitensysteme" mit ESP-8266

Otto123

Hallo Michael,

kam heute zufällig, habe es aber selbst noch nicht gelesen -> http://www.intranet-der-dinge.de/smarthome/haus/anwesenheit/bluetooth-low-energy

Ich meine, die Scripte lepresenced wurden doch mit Signalstärkenermittlung ausgestattet, schau mal im Wiki.

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

TeleDet

... manchmal kann ein vermeintlicher Nachteil auch ein Vorteil werden  ;)

Gruß TeleDet

Punkt

so...ich hab das jetzt die letzten Tage mal verfolgt und angetestet.

Ich befürchte, das ist keine wirkliche Lösung für das Problem.
So komfortabel wie mit der PING-Anwesenheitserkennung übers WLAN wird das nicht...

Die Reichweite von Bluetooth durch mein Haus (sehr viel Stahlbeton) ist wirklich bescheiden.

Ein weiteres Problem ist, dass ich auf der Hälfte meiner openWRT-Router / -AccessPoints nicht genug Platz habe um den Bluetooth-Kram auch noch zu installieren.
Das bedeutet: dort müsste ich dann doch wieder neue Geräte hinstellen.

Irgendwie bin ich wieder am Anfang:
Es ärgert mich einfach, dass das trotz anders eingestellter Option in Android nicht mit WLAN funktioniert...
Eigentlich ist alles vorhanden - nur Android macht mir nen Strich durch die Rechnung...grrrrr!  >:(
FHEM auf LXD-Container (Ubuntu 24.04) mit 1wire-Bus und I2C-Extensions
Datenbank: influxdb
verschiedene "Satellitensysteme" mit ESP-8266

Otto123

Hi,

Du könntest Dich mit IFTTT versuchen, der kann was ausführen wenn er sich ins WLAN einbucht.
Da das Smartphone sich aus seiner Sicht ja nicht aus dem WLAN ausbucht, bleibt das WLAN ja eventuell auch für IFTTT aktiv bis sich das Smartphone wirklich wieder ausbucht.
Aber ist nur Theorie, habe ich nicht probiert.
Ich habe damit mal rumprobiert und an FHEM Mails geschickt sobald ich in meine Strasse eingebogen bin. Ich habe das dann nicht weiter verfolgt, weil Mailcheck immer abgestürzt ist wenn nachts Zwangstrennung war.

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