2011-10-02 323 views
5

对于任何Linux的BlueZ/BT专家在这里(无连接):Linux的蓝牙信号强度l2ping

我正在寻找一种方式来“平”之称BT设备(即BDADDR),如果他们是在范围我想知道近似的信号强度。

我知道我可以先运行l2ping,然后建立与设备的连接,最后检查RSSI或者链路质量,如果连接不工作的第一配对。

但是我正在寻找的是获得的信号强度,无需连接装置第一种方式。完美的是来自l2ping回复数据包的信号强度测量,但我不知道这些信息是否可用并传递给堆栈。

回答

5

您可以查询扫描过程中获得的RSSI,无需连接设备。这是一个使用pybluez的例子。你也可以直接从C使用Linux上的Bluez来做同样的事情。

inquiry-with-rssi.py

+0

感谢您的链接和想法,但这需要设备处于发现模式,他们不一定会。 我知道我要来ping /测量所有设备的BD_ADDR,这就是为什么我开始了l2ping那里是没有必要的目标是在发现模式。 – Tom

+1

在这种情况下,您可以使用hcitool(BlueZ堆栈的一部分)。 [hcitool](http://linuxcommand.org/man_pages/hcitool1.html)。如果你做“hcitool CC”创建无加密/身份验证的连接,那么你就可以监视使用“hcitool RSSI” RSSI。唯一的问题是,如果您不验证(配对),某些设备可能不会让连接保持活动状态。 – TJD

+1

是的,这工作。到目前为止,我试过的两种设备都允许(不成对)连接存在,以便我可以检查rssi/lq。所以这是一个有效的解决方案,但以防万一的一种方式的人都知道,无需连接而无需目标(S)是发现,我还是很乐意看到这一点。 – Tom

2

我使用这个代码与我的iPhone 7和树莓派和它的伟大工程。

#!/bin/bash 

sudo hcitool cc AA:BB:CC:DD:EE:FF 2> /dev/null 

while true 
do 
    bt=$(hcitool rssi AA:BB:CC:DD:EE:FF 2> /dev/null) 
    if [ "$bt" == "" ]; then 
     sudo hcitool cc AA:BB:CC:DD:EE:FF 2> /dev/null 
     bt=$(hcitool rssi AA:BB:CC:DD:EE:FF 2> /dev/null) 
    fi 

    echo "$bt" 
done