首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用MQTT实时报告重复邻近信标

如何用MQTT实时报告重复邻近信标
EN

Stack Overflow用户
提问于 2021-03-09 06:41:13
回答 1查看 476关注 0票数 0

就目前而言,这是一个很好的解决方案:

How to use bluetoothctl like hcitool lescan to report repeated proximity beacons

不过,我想更进一步:我不想将信标检测结果打印到终端,而是将每个检测到的信标的MAC地址传输到一个命令,该命令将其发布到Mosquitto。这将有助于将信标添加到HomeAssistant中,例如,用于检测附在人的住宅密钥上的密钥fob。通过修改上面脚本的最后两行,我成功地实现了这个想法,但它只发布了第一个检测.那就别再说了。我想扫描是通过尝试运行mosquitto_pub命令而关闭或中止的。(与中断线程或子subshells有关??)

下面是脚本的最后一行,我的两个测试信标的MAC地址被混淆了。您可以看到我在上面的链接中修改的完整脚本。

代码语言:javascript
复制
) | sed --unbuffered --quiet --expression 's/^.*Device //p' \
| grep --line-buffered -E 'FF:FF::::|FF:GG::::' \
| stdbuf -oL cut -c 1-17 \
| { read topic; mosquitto_pub -d -u username -P password -m ON -t monitor/$topic; }

注:\ stdbuf -oL剪切-c 1-17 \将输出缩减到仅MAC地址,例如FF:GG:

最后一行将ON命令发布到一个以信标的MAC地址结尾的唯一状态主题,例如“monitor/FF:GG:”。

如果我删除最后一行,检测就会随着时间的推移添加到终端控制台中不断增长的列表中。但一旦我加上最后一行,它只工作一次,然后就死了。

如何使脚本响应每个检测,而不仅仅是第一个检测?为什么它只对第一次检测做出反应,然后挂起?

EN

回答 1

Stack Overflow用户

发布于 2021-03-09 14:44:31

BlueZ的命令行工具不是为此目的而设计的,这使得它们很难可靠地进行管道扫描。在我的经验中,过程要么死,要么挂,最后你的管道断了。

BlueZ的C API更稳定。为此,我用C语言编写了一个简单的命令行程序,您可以使用它来代替蓝牙C:

https://gist.github.com/davidgyoung/0a18028b4338ff6cb201fba274502662

这个程序必须用cc scanner.c -lbluetooth -o scanner编译,然后你可以用scanner启动扫描仪。程序的输出将如下所示:

代码语言:javascript
复制
B8:27:EB:1F:93:4D -68 02 01 06 11 06 82 75 25 D9 37 9D D7 8F 5F 4A F4 20 00 00 75 30
71:5C:23:9D:BC:7F -68 02 01 1A 02 0A 0C 0B FF 4C 00 10 06 03 1A 3B D4 B2 EB
B8:27:EB:1F:93:4D -68 02 01 06 11 06 82 75 25 D9 37 9D D7 8F 5F 4A F4 20 00 00 75 30
4A:53:7F:64:71:EC -91 03 03 9F FE 17 16 9F FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
69:0D:FF:7B:75:65 -73 02 01 1A 02 0A 0C 0A FF 4C 00 10 05 03 1C 27 BB 63
61:39:71:E9:1D:C9 -93 02 01 1A 02 0A 18 0A FF 4C 00 10 05 01 18 3B 24 12
B8:27:EB:1F:93:4D -68 02 01 06 11 06 82 75 25 D9 37 9D D7 8F 5F 4A F4 20 00 00 75 30

上面的每一行显示检测到的蓝牙设备的MAC地址,然后是信号强度RSSI,然后是广告的十六进制字节。

我使用这个程序管道到其他shell脚本,并发现它是可靠的许多天。如果有帮助的话,可以随意使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66541990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档