通过蓝牙网关下发指令,过滤掉蓝牙设备高频率的波形数据

更新日期: 2022-07-23 阅读次数: 2042 字数: 679 分类: 物联网

问题

蓝牙设备默认会以每秒钟 350 次的频率向蓝牙网关发送实时波形数据(心电波形、血氧波形、呼吸波形), 然后蓝牙网关再将这些数据转发到服务器。

  • 这些波形数据是没有记录价值的
  • 蓝牙设备数量不可控,在数量多时,对服务器产生巨大的并发请求压力。我在开发机上 WSL Ubuntu 里部署的 EMQX 偶尔会扛不住挂掉。。。原因不明。
  • 高频造成的数据黏包严重。例如蓝牙网关协议的数据包部分,能频繁看到多个蓝牙数据包拼接,且被截断的情况
  • 蓝牙设备虽然支持禁用波形数据输出,但是每次重启都恢复原配置

过滤掉波形数据的方案

服务器端每十秒向蓝牙网关下发一次禁用波形数据的控制指令。

emqx 限速

https://www.emqx.io/docs/zh/v4.1/advanced/rate-limit.html

EMQX 有两个速率限制配置项能用上。默认是没有限制的:

  • publish_limit 是单个连接上接收 PUBLISH 报文的速率限制。100,10s 代表每个连接上允许收到的最大 PUBLISH 消息速率是每 10 秒 100 个。
  • rate_limit 是单个连接上接收 TCP数据包的速率限制。100KB,10s 代表每个连接上允许收到的最大 TCP 报文速率是每 10 秒 100KB。

写命令与写请求的区别

  • Write Request (带 response 的写指令)
  • Write Command (不带 response 的写指令)

写入命令类似于写请求,区别是写入命令没有响应。写入命令包含要写入的属性的句柄和要写入的数值。

当无需响应时,可以使用写入命令。此外,因为该命令可以在任何时刻发送,即使刚发送了一条请求还未收到相应的响应,对命令的发送时延有较高的要求时,该请求也适合。

调试方法

  • 用蓝牙网关 UDP 转发到自带的蓝牙调试工具上
  • 使用 Android 蓝牙调试工具获取能写入的特性,找到 handle 值。现有的 APP 都不太满足要求,或者使用不方便,我准备自己写个蓝牙调试工具。这里需要注意的是,建立连接时使用的 notify handle 值跟下发写入指令的特性 handle 值是不同的
  • “测试连接蓝牙设备通信”工具,可以显示发送的命令,可以用来对比自己拼接成的命令,格式是否正确

tags: 蓝牙网关

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式