首页 / Go 平台(cloud-go) / 设备接入:dgsvr + gpscodecsvr
设备接入:dgsvr + gpscodecsvr
MQTT 设备认证注册与 GPS 私有协议编解码到标准物模型。
接入链路总览
GPS Tracker / 车载设备
│ MQTT / TCP
▼
EMQX ──► dgsvr(认证、注册、在线状态)
│ 内部消息
▼
gpscodecsvr(私有 Protobuf ↔ 标准物模型 JSON)
│ NATS
▼
device.up.thing.* / application.device.*(Java 订阅)
dgsvr 设备网关
dgsvr 负责设备接入认证与链路管理,逻辑位于 internal/logic/deviceauth:
| 能力 | 实现 | 说明 |
|---|---|---|
| 访问认证 | accessAuthLogic.go | 设备访问凭证校验(上线鉴权) |
| 登录认证 | loginAuthLogic.go | 设备登录认证(设备密钥/证书) |
| 设备注册 | deviceRegisterLogic.go | 新设备注册入网 |
| 消息订阅/发布 | MQTT 客户端管理 | 设备消息上下行路由、订阅关系管理 |
| 在线状态 | Redis + 状态通知 | 上线/下线推送 device.up.status.connected/disconnected |
设备"已连接"与"已认证"是两个状态:连接由 EMQX 建立,认证通过后才允许收发业务消息;认证失败设备不进入业务链路。
gpscodecsvr 编解码
gpscodecsvr 位于设备接入层(dgsvr)与设备管理层(dmsvr)之间,专门负责 GPS Tracker 私有 Protobuf 载荷与平台标准物模型 JSON 的互转:
- 上行:私有协议坐标/状态 → 标准物模型属性(供 geosvr、Java 订阅消费)
- 下行:标准指令 → 私有协议载荷(下发到设备)
- 实现位于
internal/codec/gps与internal/protocol/gps(gps/tracker.proto)
新增设备型号/协议时优先扩展编解码层,保持上层物模型契约稳定;解码失败必须有日志与监控,避免静默丢点。
排查要点
- 设备不上线:先看 EMQX 连接 → dgsvr 认证日志 → 上线事件(
device.up.status.connected)是否发出。 - 数据未入库:确认 gpscodecsvr 是否解码成功、NATS 主题是否正确、geosvr 是否消费。
- 指令下发失败:检查 dgsvr MQTT 客户端状态与
device.down.*主题、设备是否在线。