Ich habe gerade eine Woche damit verbracht, dieses Problem zu überwinden, so dass ich davon absehen kann, SMS an meine Frau zu senden, wenn sie bei der Arbeit ist.
Ping funktioniert nicht, da das iPhone im Ruhezustand nicht auf ICMP reagiert. Das Lesen des ARP-Cache funktioniert nicht, weil ein schlafendes iPhone kommen und gehen wird (überprüfen Sie es alle 30 Sekunden für ein paar Minuten).
Der einzige Weg, den ich "zuverlässig" feststellen kann, wenn meine zwei iPhones in meinem lokalen (Heim-) Netzwerk sind, ist die PCAP-dotnet-Bibliothek, um nach Paketen zu suchen, die von den MAC-Adressen beider Telefone stammen. Zum Beispiel, wenn Sie mit dem Wireshark-Erfassungsfilter
ether src <iphone-mac-address>
laufen Sie eine überraschende Menge an Netzwerk-Discovery/announcement Verkehr vom Telefon sehen. Es hat immer noch Ruhezustände, aber bis jetzt ist das längste Intervall, das ich zwischen eingefangenen Paketen gesehen habe, ungefähr 10 Minuten. Du müsstest warten, bis du für einige Zeit nicht mehr vom Telefon gehört hast (ich benutze 15 Minuten), bevor du es nicht zu Hause deklarierst.
Mit dieser Technik finden Sie schnell ein Telefon, wenn es wieder mit dem Heimnetzwerk verbunden wird, vorausgesetzt, Ihr Telefon ist für DHCP konfiguriert. Ich verwende auch Port-Mirroring auf meinem Haupt-Ethernet-Switch, um Datenverkehr von meinen Wireless Access Points einzubeziehen.
Ich habe keine Raspberry Pi-Lösung für diese, weil meine Linux-Expertise ist sehr begrenzt, aber jemand anderes kann Ihnen in diese Richtung helfen. Ich habe einen Windows-Dienst, der die PCAP-Bibliothek verwendet, und bisher funktioniert es zuverlässig, mit der Einschränkung, 15 Minuten warten zu müssen, bevor entschieden wird, dass ein iPhone das Netzwerk verlassen hat.
* update 2-3-2018 *
Ich habe diesen Erkennungsalgorithmus bis etwa 5 Minuten nach unten, mit einer Kombination von Ping/arp-Nachrichten an jedes Telefon gerichtet, etwa einmal pro Minute. Scheint gut zu funktionieren.
Ich habe dies aufgegeben und verwende jetzt Bluetooth, um regelmäßig zu überprüfen, ob mein iPhone in Reichweite ist. – PiEnthusiast
Falls jemand auf dieses Problem stößt und sich fragt, was ich mache, um die Anwesenheit mit Bluetooth zu erkennen: Ich versuche den Namen meiner (bekannten) Geräteadresse aufzulösen ('sudo hcitool name xx: xx: xx: xx: xx: xx'). Wenn ich eine gültige Antwort erhalte, befindet sich das Telefon in BT-Reichweite. – PiEnthusiast