蓝牙网关 MQTT 的多设备接入及多型号兼容

发布时间: 2022-07-27 11:14:05 作者: 大象笔记

多设备接入需求

MQTT Client ID 规范

例如:

- 蓝牙网关:gateway_<DeviceID>_<SeatIndex>
- Pad: pad_<DeviceID>_<SeatIndex>

主要是为了防止 client id 冲突。

TOPIC 规范

mqtt 订阅回调函数中可以获取到消息的来源主题,然后从主题中解码出设备信息。

补充两个变量:

主题:

- 蓝牙网关数据上报 topic: healthdata/monitor/<DeviceID>_<SeatIndex>/<GatewayModel>_<MonitorModel>
- 平板监听 topic: healthdata/pad/<DeviceID>_<SeatIndex>

服务端订阅多个主题

使用多层通配符。例如,healthdata/monitor/#。

client 账号密码问题

为了偷懒,我打算 pub / sub 用两套账号密码,就不逐个设备不同的账号密码了。

sub 的平板 pad 上,账号密码被获取到的概率较大,所以独立一套。但是数据又没有敏感性,所以还好。

座位 id 问题的修正:背景

之前忽略了一个问题,一个舱内只会有一个蓝牙网关,而不是多个。 所以没法用蓝牙网关的 client id 来标注体征监测设备的型号及座位 id。

蓝牙网关

client id

是否要在后台建个网关的表。通过心跳记录蓝牙网关是否在线,方便诊断。(pad 端给出提示)

蓝牙网关与体征监测设备建立连接时

首先,建立连接的请求量很小,这个请求频率可控。

获取蓝牙设备 mac 地址,去 go 缓存查询是否有对应的 device id & seat id.

体征监测设备数据表

mac 加索引;device_id & seat_id 组合唯一索引

收到上报数据时

首先查询 go 缓存中是否有对应的 mac 地址:

TODO

参考

我是一名山东烟台的开发者,联系作者