73_PRESENCE.pm: Support für Sleep-Proxy

Begonnen von Loredo, 11 Mai 2013, 13:15:58

Vorheriges Thema - Nächstes Thema

Loredo

Hi,

ich würde gerne mein iPhone über das PRESENCE Modul überfachen.
Ich weiß, dass sich das iPhone im Standby aus dem WLAN ausloggt. Mit der Aktivierung des iTunes-Sync über WLAN sollte das Gerät im WLAN bleiben. Vermutlich ist das auch so, wenn man keine allumfassende Apple-Ausstattung hat...
Ist jedoch ein Apple TV oder eine AirPort Express/Extreme Station vorhanden (ganz gleich ob als Basis oder nur als AirPlay-Client wie bei mir) bieten diese Geräte einen Sleep-Proxy Dienst im Netz an. Das iPhone kann sich dadurch wieder aus dem Netz ausklinken und der Sleep-Proxy hält das Bonjour-Announcement aufrecht und schickt im Bedarfsfall ein Magic-Paket (ja, auch über WLAN; funktioniert aber etwas anders, genau konnte ich das noch nicht herausfinden), um das iPhone aufzuwecken, so dass es wieder per WLAN erreichbar (und ping-bar!) ist.

Ich bin noch auf der Suche danach, wie man "zu Fuss" herausfinden kann, ob im Netz ein schlafendes iPhone ist (vermutlich mit Avahi Tools) und wie man das dann aufwecken kann, um es zu pingen (ob man das noch aufwecken muss sei mal dahin gestellt, ggf. genügt ja auch das Vertrauen, dass der Sleep-Proxy nix falsches announced). Bisher habe ich nichts gefunden. Deshalb wollte ich schonmal fragen, ob sich damit bereits jemand anders beschäftigt hat?


Gruß
Julian


PS: Das AirPort WLAN Script aus dem Wiki hilft mir nicht; ich nutze keine AirPort als WLAN AccessPoint (und auch keine Fritzbox). Wäre beides auch genauso unbrauchbar wegen des vorhandenen Sleep-Proxies.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

justme1968

zum punkt miz dem wlan sync kann ich sagen das das so einfach nicht stimmt. das iphone bleibt auch bei aktiviertem wlan sync höchstens so lange im netz wie der server auf dem itunes läuft an ist. bei mir ist es ein laptop. sobald der aus ist würde das nicht weiter helfen.

zur überwachung per airport express kann ich aber sage das es bei mir tatsächlich 100% zuverlässig funktioniert. auch wenn das iphone per ping nicht erreichbar ist und auch wenn es im netz einen sleep proxy gibt liefert die snmp überwachung die richtigen presence werte für mein iphone.

was den sleep proxy angeht ist mir nicht ganz klar welchen dienst ein iphone bereit stellt für das ein sleep proxy hilfreich wäre. weder der proxy in der base station noch im apple tv tut etwas das mit meinem iphone zu tun hat. ich dachte immer ist ist umgekehrt. der apple tv benutzt den sleep proxy um sich z.b. vom iphone aufwecken zu können.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Loredo

Zitat von: justme1968 schrieb am Sa, 11 Mai 2013 13:47zum punkt miz dem wlan sync kann ich sagen das das so einfach nicht stimmt. das iphone bleibt auch bei aktiviertem wlan sync höchstens so lange im netz wie der server auf dem itunes läuft an ist. bei mir ist es ein laptop. sobald der aus ist würde das nicht weiter helfen.

Das ist klar. Mein iMac läuft aber ohnehin immer und auch iTunes, daher erstmal relativ sekundär.

Zitatzur überwachung per airport express kann ich aber sage das es bei mir tatsächlich 100% zuverlässig funktioniert. auch wenn das iphone per ping nicht erreichbar ist und auch wenn es im netz einen sleep proxy gibt liefert die snmp überwachung die richtigen presence werte für mein iphone.

Du nutzt die Airport aber als tatsächlichen WLAN Access Point, oder? Ansonsten hast du kein eingebuchtes iPhone, was du per SNMP abfragen könntest, sprich die Liste bleibt leer.

Zitatwas den sleep proxy angeht ist mir nicht ganz klar welchen dienst ein iphone bereit stellt für das ein sleep proxy hilfreich wäre.

Es stimmt, das iPhone stellt keinen Dienst bereit. Aber wenn du z.B. an deinem iTunes auf den Syn-Button klickst soll das iPhone ja trotzdem aufwachen, damit der Sync starten kann.

Zitatweder der proxy in der base station noch im apple tv tut etwas das mit meinem iphone zu tun hat.

Stimmt nicht ganz. Die Sleep-Proxy Funktion ist quasi ein genereller Dienst, den ein Apple Infrastruktur-Gerät seit einiger Zeit generell bereitstellt. Apple nutzt aus, dass viele einen Apple TV oder eine Airport Express haben und lässt diesen Dienst dort einfach laufen. Der ist für die Funktion des Apple TV oder der Airport nicht wichtig, aber dient als Helper-App im Netzwerk eben z.B. um ein iPhone als im Netzwerk anwesend zu kennzeichnen ohne dass es selbst im WLAN sein muss.
Der interessante Teil dafür ist hier zu lesen denke ich: http://en.wikipedia.org/wiki/Bonjour_Sleep_Proxy#Address_resolution_protocol

Zitatich dachte immer ist ist umgekehrt der apple tv benutzt den sleep proxy um sich z.b. vom iphone aufwecken zu können.

Der Apple TV kann seinen eigenen Dienst ja nicht nutzen, um sich selbst aufzuwecken ;-)
Nee, der Apple TV geht gar nicht offline im Netz, der ist immer pingbar. Er geht aber in einen Stromsparmodus, das stimmt. Der Sleep-Proxy läuft weiter um eben für andere Dienste eine Verbesserung bereitzustellen (wie dem iTunes WLAN Sync und einem schlafenden iPhone).
Für ein iPhone ist es ein leichtes einen Apple TV aufzuwecken, denn er schläft nicht so tief, dass er gar nicht mehr im Netz wäre.

Um auf das PRESENCE Modul zurück zu kommen:
Vermutlich kann man sich also drauf verlassen, wenn man per ARP eine MAC-Adresse für die IP des iPhones bekommt, dass es sich dann noch im Netz befindet. Pingbar ist das iPhone ohne ein Magic Packet natürlich trotzdem nicht, zumal lt dem Text die MAC-Adresse ja auch die des Sleep-Proxy-Devices sein kann (auch wenn ich das so noch nicht live beobachten konnte bisher, "arp -a" am Mac zeigt irgendwie immer die wahre MAC Adresse an). So ein WMM basiertes Magic Paket kann man natürlich dann noch an die MAC-Adresse schicken, aber allein dass die ARP-Auflösung funktioniert sollte lt. der Spezifikation dann genug sein und könnte für das PRESENCE Modul dann wohl schon als Indikator ausreichen.



Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Markus Bloch

@justme1968: Würde denn in dem Fall, den der TO angesprochen hat nicht die SNMP Erkennung wie hier http://www.fhemwiki.de/wiki/Anwesenheitserkennung#Beispiel_DHCP_.C3.BCberwachung_auf_Airport_Basestation beschrieben funktionieren?
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Loredo

Ich habs rausgefunden:

Ein
nmap -P0 -sT -p62078 192.168.1.1
weckt das iPhone mit der IP 192.168.1.1 auf, so dass man es kurzfristig pingen kann. Wenn es nicht im Netzwerk ist, gibts natürlich keine Antwort auf einen Ping. Funktioniert recht zuverlässig, wenn eben ein Sleep-Proxy im Netz vorhanden ist und WLAN-Sync am iPhone aktiviert ist. All das macht der Sleep-Proxy vollkommen transparent.

Wäre das nicht was, um es mit in das PRESENCE Modul einzubauen?
Man muss ja nichtmals auf nmap setzen, wichtig ist ein TCP-Paket an den Port 62078 der IP des iPhones zu senden. nmap liefert bei mir immer ein "host is up" zurück, egal ob die IP überhaupt in Verwendung ist/war oder nicht. Die Rückgabe- und Ausgabewerte von nmap kann man also nicht sofort verwenden und muss immer einen Ping hinterher schieben. Wenn man auf nmap verzichten kann kriegt man ggf. ne Unterscheidung hin, ob das Telefon aufgeweckt werden konnte oder nicht.


Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Zitat von: Markus Bloch schrieb am Sa, 11 Mai 2013 15:48@justme1968: Würde denn in dem Fall, den der TO angesprochen hat nicht die SNMP Erkennung wie hier http://www.fhemwiki.de/wiki/Anwesenheitserkennung#Beispiel_DHCP_.C3.BCberwachung_auf_Airport_Basestation beschrieben funktionieren?
Das funktioniert eben nur, wenn die Airport auch als DHCP Server im Netzwerk in Betrieb ist. Das ist bei mir nicht der Fall und fällt somit aus.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

justme1968

ja. ich nutze den arport tatsächlich als wlan access point. das abfragen per snmp müsste eigentlich auch mit anderen routern oder access points funktionieren wenn sie snmp unterstützen. das problem ist aber das die mib die ich verwende deprecated ist. was schade ist. es funktioniert nämlich besser als alles andere.

das mit dem sleep proxy zum aufwecken beim wlan sync klingt zwar logisch kann aber nicht stimmen oder ist zumindest nicht die ganze wahrheit weil wlan sync auch funktioniert wenn man nur ein iphone und itunes hat ohne weitere apple infrastruktur. also ohne sleep proxy. ich vermute eher das itunes direkt ein magic packet versendet zum aufwecken. zumal wlan sync auch erst geht nach dem es ein mal per kabel aktiviert/konfiguriert wurde.

die bonjour und sleep proxy seiten kenne ich.

wenn es tatsächlich was mit dem sleep proxy zu tun hat sollte es möglich sein arping statt ping zu verwenden. ich weiss aber nicht ob das iphone dann nicht dauernd aufwacht. das tut es zumindest bei der snmp methode nicht.

edit: ich kann mein schlafendes iphone nicht zuverlässig per arping anpingen. und wenn es mal geht ist es danach immer noch nicht per ping erreichbar.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Markus Bloch

Zitat von: Loredo schrieb am Sa, 11 Mai 2013 15:49Wäre das nicht was, um es mit in das PRESENCE Modul einzubauen?
Man muss ja nichtmals auf nmap setzen, wichtig ist ein TCP-Paket an den Port 62078 der IP des iPhones zu senden. nmap liefert bei mir immer ein "host is up" zurück, egal ob die IP überhaupt in Verwendung ist/war oder nicht. Die Rückgabe- und Ausgabewerte von nmap kann man also nicht sofort verwenden und muss immer einen Ping hinterher schieben. Wenn man auf nmap verzichten kann kriegt man ggf. ne Unterscheidung hin, ob das Telefon aufgeweckt werden konnte oder nicht.

Hallo Julian,

ich persönlich halte dieses Szenario (genauso wie die SNMP-Abfragerei von andre ;-) ) sehr speziell und würde dir daher empfehlen eine eigene Perl-Funktion zu schreiben die das ganze dann abarbeitet und als Resultat eine 0 oder 1 für ab-/anwesend zurückgibt.

Diese Funktion kannst du dann ähnlich wie das Beispiel der SNMP-Abfrage von andre nutzen.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Loredo

Hi Markus,

Zitat von: Markus Bloch schrieb am Sa, 11 Mai 2013 16:07ich persönlich halte dieses Szenario (genauso wie die SNMP-Abfragerei von andre ;-) ) sehr speziell und würde dir daher empfehlen eine eigene Perl-Funktion zu schreiben die das ganze dann abarbeitet und als Resultat eine 0 oder 1 für ab-/anwesend zurückgibt.

Diese Funktion kannst du dann ähnlich wie das Beispiel der SNMP-Abfrage von andre nutzen.

Ich nahm an es wäre eine der brennensten Fragen der Menscheit :D
Oder zumindest bei FHEM Nutzern, iPhones sind schließlich weit verbreitet. Ich werde mir wohl dann selbst weiterhelfen müssen. Nur grundsätzlich finde ich das etwas schade, wenn jeder so sein eigenes Süppchen kocht. Selbst wenn diese Brocken dann irgendwo im Forum oder im Wiki mit viel Mühe zusammenzusuchen sind, so ist es doch extrem mühsam. Daher wollte ich zum Wohle aller erstmal "offiziell" nachfragen. Inwiefern das gewollt ist oder nicht, weiß ich als Neuling hier eben noch nicht.

Ich habe einen einzelnen AP und ja, der kann auch SNMP. Vielleicht werde ich nochmal schauen wie der den Status zurückmelden kann und wie lange dort ein Device als "Online" angesehen wird, auch wenn das iPhone grad schläft (es wacht, zumindest bei Nutzung vom WLAN Sync, ja auch immer mal wieder auf, eben um sich beim Sleep-Proxy erneut zu melden). Hat jemand mehrere AP's wirds auch schon wieder delikat, man müsste wohl alle einzeln abfragen.
Jedenfalls kann das kurze Aufwecken des iPhones, um es dann eben pingen zu können oder eben nicht, zumindest eine gute Alternative sein denke ich. Ich habe keine Ahnung, ob wirklich auch WLAN Sync dafür an sein muss. Ich habe es halt eingeschalt. Andere können ja probieren, ob es auch ohne das funktioniert.


Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Loredo

Zitat von: justme1968 schrieb am Sa, 11 Mai 2013 15:58ja. ich nutze den arport tatsächlich als wlan access point. das abfragen per snmp müsste eigentlich auch mit anderen routern oder access points funktionieren wenn sie snmp unterstützen. das problem ist aber das die mib die ich verwende deprecated ist. was schade ist. es funktioniert nämlich besser als alles andere.

Ich habe nochmal nachgesehen, mein Tomato-AP zeigt das iPhone auch schlafend als online. Ich denke das ist dann der Multimedia-Extension im WLAN Protokoll zu verdanken und auf dem Weg funktioniert es auch das iPhone dann aufzuwecken.
Die Ermittlung per AccessPoint ist sicherlich das zuverlässigste.

Zitatdas mit dem sleep proxy zum aufwecken beim wlan sync klingt zwar logisch kann aber nicht stimmen oder ist zumindest nicht die ganze wahrheit weil wlan sync auch funktioniert wenn man nur ein iphone und itunes hat ohne weitere apple infrastruktur. also ohne sleep proxy.

Der Sleep-Proxy stellt eine enorme Verbesserung bei der Zuverlässigkeit da. Neuere Macs haben wohl selbst einen in der Netzwerkkarten-Firmware eingebaut was ich gerade las. Genau wegen der Zuverlässigkeit will Apple den Dienst also scheinbar in jeden Haushalt bringen.
Ohne den Sleep-Proxy kann der Mac das iPhone nicht aufwecken, WLAN-Sync funktioniert dann nur wenn man es vom iPhone aus startet oder wenn das iPhone gerade verwendet wird.

Zitatich vermute eher das itunes direkt ein magic packet versendet zum aufwecken.

Nope, hab die Kommunikation vorhin mitgesnifft. Laut http://stuartcheshire.org/SleepProxy/index.html reagiert der Sleep-Proxy bei TCP/UDP Diensten, die das Gerät beim Proxy-Dienst registriert hat, und sendet das Magic Paket. Das ist für iTunes vollkommen transparent. Es versucht lediglich auf TCP-Port 62078 das iPhone zu erreichen. Deshalb funktioniert diese Methode eigentlich mit jedem Gerät und es gibt auch schon OpenSource dazu: https://github.com/awein/SleepProxyClient

Zitatzumal wlan sync auch erst geht nach dem es ein mal per kabel aktiviert/konfiguriert wurde.

Das liegt in der Natur der Sache, ist ja aber kein Hindernis. Der Mac muss soweit ich das sehe nichtmals laufen. Das iPhone registriert sich einfach für den Fall der Fälle am Proxy-Dienst.

Zitatwenn es tatsächlich was mit dem sleep proxy zu tun hat sollte es möglich sein arping statt ping zu verwenden.

Nein, siehe Doku-Link oben. Der Sleep-Proxy reagiert nur auf TCP/UDP Anfragen, um das Gerät nicht unnötig oft aufzuwecken.

Zitatich weiss aber nicht ob das iphone dann nicht dauernd aufwacht. das tut es zumindest bei der snmp methode nicht.

Das würde es selbstverständlich, ja. Das wäre auch gewollt. Die Abfrage-Intervalle müsste man halt etwas mehr anpassen. Fänd ich jetzt nicht sooo schlimm wenn das Verschwinden erst nach 5min festgestellt würde. Ein abwesendes iPhone kann man ja dann wieder alle 30sek suchen, so wie es default ist.

Zitatedit: ich kann mein schlafendes iphone nicht zuverlässig per arping anpingen. und wenn es mal geht ist es danach immer noch nicht per ping erreichbar.

Wie gesagt, geht nur mit TCP oder UDP Ping ;-)
Deshalb mein nmap-Befehl oben.


Gruß
Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

justme1968

hallo markus,

klar ist es speziell. aber im gegensatz zu fast allem anderen funktioniert es :)

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968