Appearance
MQTT 配置说明
目前MQTT 默认支持 3.1.1
主题定义
[主题类型]/[topic]/client/[订阅/发布]/[id]
主题类型
| 类型 | 值 |
|---|---|
| 透传 | trans |
| 控制 | control |
topic
topic可自定义
client
固定值 表示指令是客户端的
订阅/发布
订阅 sub 发布 pub
id
自动拼接上设备的唯一ID
MQTT 主题
透传
订阅主题
trans/[topic]/client/sub/[id]
发布主题
trans/[topic]/client/pub/[id]
控制
TIP
基于安全考虑,建议控制主题需要在服务器进行 ACL 控制。
控制主题定义格式:
control/<topic>/client/<sub|pub>/<action>/<device_id>
订阅主题
1、设置低功耗
control/<topic>/client/sub/low_power/<device_id>
传入参数与 bluetooth 设置低功耗参数一致。
2、获取透传设备状态
control/<topic>/client/sub/get_status/<device_id> //获取状态
3、重启设备
control/<topic>/client/sub/restart_device/<device_id> //重启设备
发布主题
1、 透传设备状态
control/<topic>/client/pub/get_status/<device_id>
说明: 此主题在接收到订阅主题 获取透传设备状态 的时候进行发布。
参数使用TLV数据结构,Type 定义如下:
| Type | 说明 |
|---|---|
| 0x01 | BLE状态 |
| 0x02 | WI-FI状态 |
| 0x03 | MQTT 状态 |
| 0x04 | 低功耗 开启状态 |
| 0x05 | 低功耗 睡眠时长 |
| 0x06 | 低功耗 清醒时长 |
BLE状态
// OFF: BLE 栈未运行/未初始化或已停止(资源释放/不可用)
BC_BLE_STATE_OFF = 0,
// IDLE: BLE 栈运行中,但当前未广播且未连接(例如延迟广播窗口)
BC_BLE_STATE_IDLE = 1,
// ADVERTISING: 正在广播
BC_BLE_STATE_ADVERTISING = 2,
// CONNECTED: 已建立连接
BC_BLE_STATE_CONNECTED = 3
WI-FI状态
WIFI_STATE_OFF = 0,
WIFI_STATE_DISCONNECTED =1,
WIFI_STATE_CONNECTING =2,
WIFI_STATE_CONNECTED =3,
WIFI_STATE_GOT_IP = 4
MQTT状态
MQTT_STATE_IDLE = 0,
MQTT_STATE_CONNECTING =1,
MQTT_STATE_CONNECTED =2,
MQTT_STATE_ERROR =3
通知业务服务器
当 MQTT 客户端成功连接到 MQTT 服务器(Broker)后,服务器是否能主动通知业务服务器,以及具体的实现方法。答案是完全可以,主流的 MQTT 服务器都提供了成熟的机制来捕获客户端连接事件,并将其推送给业务服务器。 核心实现思路 MQTT 服务器的核心逻辑是:捕获客户端连接(CONNECT)事件 → 提取客户端连接信息(ClientID、IP、用户名、连接时间等) → 通过标准化的方式(如 HTTP/HTTPS、MQTT 主题转发、gRPC 等)将事件数据推送给业务服务器。
例如使用的EMQX服务器 https://docs.emqx.com/zh/emqx/v5.1/data-integration/rule-get-started.html