使用 MAC 地址检测特定蓝牙设备的存在

use*_*057 3 python bluetooth pebble-watch

我的最终目标是让我的树莓派检测到我的 iPhone 或 pebble 手表何时在附近。我目前关注的是 pebble,因为我相信 iphone 会随机化 MAC 地址。我有 pebble 手表的静态 MAC 地址。

我的问题是如何通过蓝牙检测MAC地址的存在?

我已尝试过hcitool rssi[mac 地址] 或l2ping[mac 地址],但是两者都需要在手表上确认连接才能做出任何响应。我希望它是自动的...

我也尝试过hcitool扫描,但需要一段时间,大概是在遍历所有可能性。我只是想搜索特定的 Mac 地址。

编辑:我刚刚尝试了“hcitool name [Mac Address]”,它返回设备的名称,如果不存在,它返回“null”,所以这就是想法......有与此等效的Python吗?

我是 python 新手,所以希望有人能指出如何简单地 ping mac 地址并查看 RSSI 值有多强?

Mar*_*Thé 5

Apple iDevices 确实使用低功耗蓝牙 (BLE) 的私有可解析地址。他们每约 15 分钟骑车前往不同的地址。只有具有所谓的身份解析密钥的配对设备才能“破译”这些看似随机的地址并将它们关联回配对设备。

因此,要使用 iPhone 执行此类操作,您需要将其与树莓派配对。然后你可以做的是制作一个简单的 iOS 应用程序来广告一些数据(这并不重要,因为当应用程序处于后台时,只有 iOS 本身才能将数据放入广告包中)。然后,您可以在树莓派上hcitool lescan扫描 BLE 广告。如果可以使用 IRK 解析广告的地址,则您可以高度确定它是 iPhone。我不确定是否hcitool有开箱即用的 IRK 数学运算,但蓝牙规范明确规定了解析算法。

Pebble 目前确实使用固定地址。然而,它仅在与应连接的手机断开连接时才进行广告。因此,对于您的用例,使用其 BLE 广告并不是很有用。目前,Pebble SDK 中没有 API 允许 Pebble 上的应用程序发布数据。


FWIW,您提到的命令仅适用于蓝牙 2.1(“经典”),并且可能仅在其他设备可发现时才有用(基本上永远不会,除非它位于“设置/蓝牙”菜单中)。