Bluez无法读取广告包

问题描述 投票:0回答:1

我正在尝试构建一个小程序,该程序读取我的设备周围的BLE信标,并解析我有兴趣在MQTT上发布的那些信标。我使用Raspberry Pis运行代码,我使用Mac开发。语言为JS(节点10.x),我的Pis运行的是最新的Buster,即Bluez 5.50和Noble的一个分支,用于与蓝牙层连接。

出于某种原因,在我搬到一个开放区域的一个Pis中(为了获得清晰的读数),我只收到扫描响应数据包。我从没收到广告包。有时候,我确实收到了距离很远的其中一台设备的Advertisement数据包,这让我怀疑信号在这里发挥作用。从网络机柜中的Pi(小法拉第笼)中,我确实时不时地收到两个数据包(将Pi专用于开放位置的原因)。

是否有任何方法可以强制Bluez始终接收广告包?是否存在某种错误或我未正确使用的功能?

编辑

我安装了tshark以进行密切监视,但确实看到广告包到达了我的设备。这意味着BlueZ忽略了它们。是否有一些有关如何使用bluetoothctl和如何配置蓝牙守护程序/工具以便读取这些数据包的完整文档?

bluetooth bluetooth-lowenergy raspberry-pi3 bluez
1个回答
0
投票

[经过数天的调查,我设法为我的项目获得了预期的结果。我首先想到了使用bluewalker项目访问原始数据包。这样,您可以在passive模式下进行扫描,这意味着仅检索广告包。

通过更深入地研究noble项目,这是我实际使用的接口,有一种变通方法可以在被动模式下进行扫描(https://github.com/noble/noble/issues/701),但是还有一个变量可以捕获广告和响应数据包:[ C0]。将此设置为1可以满足我的需求,既包含更改频率更高的数据的扫描请求,又包含包含更多数据的扫描响应,例如min /最多24小时值。实际上,将此设置与NOBLE_REPORT_ALL_HCI_EVENTS结合使用似乎只给我提供了[[扫描请求数据,就像在被动模式下一样。

问题仍未解决:

具有此,我仍然不知道如何使用duplicates=false同时显示

扫描请求

数据和扫描响应。我也没有找到强制将扫描模式设置为passive的方法。我可以调查更多bluetoothctl,但已弃用它们(尽管互联网上的每篇文章都引用了它们)。
© www.soinside.com 2019 - 2024. All rights reserved.