Ho appena trascorso una settimana a battere su questo problema in modo da poter evitare di inviare allarmi SMS a casa mia quando è al lavoro.
Il ping non funziona perché l'iPhone non risponde a ICMP quando dorme. La lettura della cache ARP non funzionerà perché un iPhone dormiente andrà e verrà (controllarlo ogni 30 secondi per alcuni minuti).
L'unico modo che ho trovato per determinare "in modo affidabile" quando i miei due iPhone sono nella mia rete locale (domestica) consiste nell'utilizzare la libreria dotnet PCAP per cercare tutti i pacchetti provenienti da uno degli indirizzi MAC dei telefoni. Ad esempio, se si esegue Wireshark con il filtro di acquisizione
ether src <iphone-mac-address>
si vedrà una sorprendente quantità di traffico di rete scoperta/l'annuncio dal telefono. Ha ancora stati di quiescenza, ma finora l'intervallo più lungo che ho visto tra i pacchetti catturati è di circa 10 minuti. Dovresti aspettare fino a quando non hai sentito dal telefono per un certo intervallo (io uso 15 minuti) prima di dichiararlo non a casa.
Con questa tecnica è possibile trovare rapidamente un telefono quando si ricongiunge alla rete domestica, supponendo che il telefono sia configurato per DHCP. Io uso anche il mirroring delle porte sul mio switch Ethernet principale per includere il traffico dai miei punti di accesso wireless.
Non ho una soluzione Raspberry Pi per questo, perché la mia esperienza linux è molto limitata, ma qualcun altro potrebbe essere in grado di aiutarti lungo queste linee. Ho un servizio di Windows che utilizza la libreria PCAP e finora funziona in modo affidabile, con la limitazione di aspettare 15 minuti prima di decidere che un iPhone ha lasciato la rete.
* aggiornamento 2-3-2018 *
ho questo algoritmo di rilevamento fino a circa 5 minuti, utilizzando una combinazione di messaggi ping/ARP dirette ad ogni telefono, circa una volta al minuto. Sembra funzionare bene.
Ho rinunciato a questo e ora sto usando il bluetooth per controllare regolarmente se il mio iPhone è nel raggio d'azione. – PiEnthusiast
Nel caso qualcuno si imbatta in questo e si chiede cosa faccio per rilevare la presenza tramite bluetooth: Cerco di risolvere il nome del mio indirizzo (noto) del dispositivo ('sudo hcitool nome xx: xx: xx: xx: xx: xx'). Se ottengo una risposta valida, il telefono si trova nella gamma BT. – PiEnthusiast