我的最终目标是让我的树莓皮检测到我的iphone或pebble手表就在附近。我现在正在关注pebble,因为我相信iphone会随机化MAC地址。我有pebble手表的静态MAC地址。
我的问题是如何通过蓝牙检测MAC地址的存在?
我试过hcitool rssi
[mac address]或l2ping
[mac address],但是在任何响应之前,这两个都需要在监视上确认连接。我希望它是自动的。。。
我也尝试过hcitool
扫描,但需要一段时间,可能它正在经历所有的可能性。我只想搜索一个特定的Mac地址。
编辑:我刚刚试过“hcitool name[Mac Address]”,它返回设备的名称,如果没有,它会返回一个“null”,所以这是我的想法。。。有没有类似的python?
我是python新手,所以希望有人能指出我如何简单地ping mac地址,看看RSSI值有多大?
感谢Chris,我构建了自己的脚本来检测我的手机是否在范围内,并锁定/解锁屏幕,如果设备在超时5秒后仍然不在。 有点快又脏,但对我有用:)
可能需要向/etc/sudoers添加一行:
也许这对某人有帮助。 干杯!
=========================
更新日期:2017年9月26日!
我对此进行了一些更新,并编写了一个Python脚本,该脚本通过DBus检测连接的蓝牙设备。因此,应首先对BT设备进行配对。 如果连接丢失,脚本还会尝试重新连接到设备。这是因为有些设备无法自行重新连接(就像我的手机一样)。 这个脚本没有读取RSSI的信号强度,因为系统上的dbu没有报告它(不知道为什么)。 因为我在Gnome下,所以我使用org.Gnome.ScreenSaver作为DBus接口来锁定屏幕。如果你在KDE上或者你想在代码中改变它的任何东西。
检查PyBluez。
为了检测附近的设备,PyBluez网站上有一个示例scrip。检查inquiry.py
另一个想法是使用您已经尝试过的
hcitool
,但是使用subprocess来拥有所有东西是Python。Apple iDevices确实使用了蓝牙低能耗(BLE)专用可解析地址。他们每隔大约15分钟就换一个地址。只有具有所谓身份解析密钥的成对设备才能“破译”这些看似随机的地址,并将它们与成对设备关联起来。
所以要想用你的iPhone做这样的事情,你需要把它和你的覆盆子皮配对。 然后,你可以做一个简单的iOS应用程序,为一些数据做广告(没关系的是,当应用程序被备份时,只有iOS自己才能将数据放入广告包)。在覆盆子pi上,然后可以使用
hcitool lescan
扫描BLE广告。如果广告的地址可以用IRK来解析,那么你很肯定地知道那是iPhone。我不确定hcitool
是否有现成的IRK计算,但是解析算法是由蓝牙规范很好地指定的Pebble目前确实使用固定地址。然而,只有当它与本应连接的手机断开连接时,它才是广告。因此,对于您的用例,使用它的BLE广告不是很有用。目前,Pebble SDK中没有允许Pebble上的应用程序公布数据的API。
FWIW,你提到的命令只对蓝牙2.1(“经典”)有用,可能只有在其他设备可以被发现时才有用(基本上永远不会,除非它在设置/蓝牙菜单中)。
相关问题 更多 >
编程相关推荐