我刚刚在这个问题上花了一个星期的时间,所以当她在工作时,我可以避免发送短信给家里的闹钟。
Ping不起作用,因为iPhone睡觉时不会响应ICMP。读取ARP缓存将不起作用,因为睡眠的iPhone会来来去去(每隔30秒检查一次)。
我发现'可靠'确定我的两个iPhone在我的本地(家庭)网络上的唯一方法是使用PCAP网点库查找任何来自任一电话的MAC地址的数据包。例如,如果您使用捕获过滤器运行Wireshark
ether src <iphone-mac-address>
您将看到令人惊讶的来自手机的网络发现/通告流量。它仍然处于静止状态,但到目前为止,我所见到的捕获数据包之间的最长时间间隔大约为10分钟。在声明不在家之前,您需要等一段时间(我用15分钟)才能听到电话。
使用此技术,假设您的电话配置为DHCP,您将在重新加入家庭网络时快速找到电话。我还在我的主要以太网交换机上使用端口镜像,以包含来自我的无线接入点的流量。
我没有Raspberry Pi解决方案,因为我的linux专业知识非常有限,但其他人可能能够帮助您沿着这些路线。我有一个使用PCAP库的Windows服务,迄今为止它的工作可靠,限制等待15分钟,然后决定iPhone离开网络。
*更新2018年2月3日*
我有这样的检测算法下降到约5分钟,使用每分钟针对每个电话,约一次平/ ARP消息的组合。似乎很好。
我已经放弃了这个,现在我正在使用蓝牙来定期检查我的iPhone是否在范围内。 – PiEnthusiast
如果有人遇到这种情况,并想知道我在做什么来检测使用蓝牙的存在: 我尝试解析我的(已知)设备地址的名称('sudo hcitool名称xx:xx:xx:xx:xx: xx')。如果我得到有效的回复,手机在BT范围内。 – PiEnthusiast