核心业务流程
1. 设备上行:数据上报 (Telemetry)
这是设备主动向平台汇报状态的流程。
时序图
详细步骤
- 采集:设备(如四路继电器)检测到开关状态变化或周期性读取传感器数据。
- 发布:设备将数据封装为 JSON 格式,发布到 Topic
sys/{product_id}/{device_id}/thing/event/property/post。 - 接收:后端服务作为 MQTT 客户端,通过 TCP 长连接实时收到订阅的消息。
- 处理:
- 后端服务校验数据格式与设备身份。
- 更新 Redis 中的设备影子 (Shadow) 状态。
- 将时序数据写入 InfluxDB 存档。
- 推送:如果用户正在查看小程序,后端通过 WebSocket/SSE 将最新状态实时推送给前端。
2. 设备上下线感知 (Webhook)
这是平台维护设备在线状态的关键流程。
时序图
详细步骤
- 事件触发:当设备发起连接或意外断开时,EMQX 内部触发系统事件。
- 回调:EMQX 根据配置的 Webhook 规则,向后端 HTTP 接口发送 JSON 数据(包含 ClientID、断开原因等)。
- 状态同步:后端收到请求后,解析 ClientID 获取设备 ID,并在 Redis 中更新该设备的在线状态标记。
在线状态以 Webhook 事件为主,并可结合设备心跳或 TTL 机制进行兜底判断。
3. 应用下行:指令控制 (Command)
这是用户通过手机控制设备的流程。
时序图
详细步骤
- 操作:用户在小程序点击“开启继电器 1”。
- 请求:小程序发送 HTTPS 请求
POST /device/control携带目标设备 ID 和指令参数。 - 鉴权:后端服务验证用户是否有权限控制该设备。
- 下发:
- 后端生成控制指令 Payload。
- 后端通过 MQTT 发布到 Topic
sys/{product_id}/{device_id}/thing/service/property/set。
- 执行:设备收到 MQTT 消息,解析指令,驱动继电器动作。
- 反馈:
- 设备动作完成后,发布响应消息到
sys/.../reply确认执行结果。 - 后端收到确认后,更新数据库状态,并返回操作成功给小程序(或通过异步通知)。
- 设备动作完成后,发布响应消息到
3. 设备配网与绑定流程 (待补充)
待后续详细设计配网方式(蓝牙配网 / AP 配网)后补充。
