docs(MQTT): DLD960_IoT_MQTT协议 V1.12 — 4G 通道适配修订为方案 C(Air780 协议转换)
方案 B → 方案 C(用户 2026-08-31 决策): - Air780 解析 0x7F 帧转换为标准 JSON 命令(loop_data/event_report/initialize/heartbeat),平台零改动 - V1.11 的 frame_report/frame_cmd 降级为可选兜底 - 4G 事件面 = 仅线圈事件(car_enter/car_leave/loop_cut/loop_restore),不含 DBN 内部网络事件 - event_report 复刻 DBN iot_evt_* 逻辑(Lua: 沿检测+ACK+5s×3+16深队列+跨重连同 msg_id),可行性已评估无硬障碍 - 命令响应: Air780 单命令状态机 + 超时回 code=5(与 g_lup_cmd 同模式) - 链路层: DBN UART2↔UART1 纯转发(魔数分流),转发不丢帧是沿检测前提 同步: README 索引 V1.12 + devlog 置顶条目
This commit is contained in:
@@ -59,7 +59,7 @@ DLD960 是一款基于环形线圈检测原理的四通道车辆检测器,支
|
|||||||
| [DLD960Loop_串口通信协议.md](docs/DLD960Loop_串口通信协议.md) | V1.05 | Loop MCU ↔ DBN MCU | 0x7F 帧、0xC0 传感主动上报、variation 3B 有符号 |
|
| [DLD960Loop_串口通信协议.md](docs/DLD960Loop_串口通信协议.md) | V1.05 | Loop MCU ↔ DBN MCU | 0x7F 帧、0xC0 传感主动上报、variation 3B 有符号 |
|
||||||
| [DLD960_串口通信协议.md](docs/DLD960_串口通信协议.md) | V1.01 | 整机 TTL 串口 | 设备管理、参数配置、数据上报 |
|
| [DLD960_串口通信协议.md](docs/DLD960_串口通信协议.md) | V1.01 | 整机 TTL 串口 | 设备管理、参数配置、数据上报 |
|
||||||
| [DLD960_TCP_JSON协议.md](docs/DLD960_TCP_JSON协议.md) | V1.03 | 以太网 TCP :5960 | 鉴权 + 命令 + event_report 客户端必答 + 脱机日志(事件/快照流) |
|
| [DLD960_TCP_JSON协议.md](docs/DLD960_TCP_JSON协议.md) | V1.03 | 以太网 TCP :5960 | 鉴权 + 命令 + event_report 客户端必答 + 脱机日志(事件/快照流) |
|
||||||
| [DLD960_IoT_MQTT协议.md](docs/DLD960_IoT_MQTT协议.md) | V1.11 | 云平台 MQTT | 双主题 `{sn}/srv`+`{sn}/dev`、initialize、event_report 平台必答、设备时钟同步、脱机日志(事件/快照流)、Loop 远程 OTA(ota_* 命令,先存后刷)、**4G 通道适配(frame_report/frame_cmd hex 透传 + link,V1.11)** |
|
| [DLD960_IoT_MQTT协议.md](docs/DLD960_IoT_MQTT协议.md) | V1.12 | 云平台 MQTT | 双主题 `{sn}/srv`+`{sn}/dev`、initialize、event_report 平台必答、设备时钟同步、脱机日志(事件/快照流)、Loop 远程 OTA(ota_* 命令,先存后刷)、**4G 通道适配(方案 C:Air780 协议转换,标准 JSON 命令面 + link,V1.12)** |
|
||||||
| [DLD960_BLE协议.md](docs/DLD960_BLE协议.md) | V1.03 | 蓝牙 BLE | 帧格式 + 分包 + 配置命令全表(0x09~0x24/0x31/0x8A/0x92/0xC5,未实现如实标注)+ 脱机日志(OFFLOG_STAT/QUERY/CLEAR)+ 传感快照(SNAP_STAT/QUERY/CLEAR)+ 透传(0x7F/0x9F) |
|
| [DLD960_BLE协议.md](docs/DLD960_BLE协议.md) | V1.03 | 蓝牙 BLE | 帧格式 + 分包 + 配置命令全表(0x09~0x24/0x31/0x8A/0x92/0xC5,未实现如实标注)+ 脱机日志(OFFLOG_STAT/QUERY/CLEAR)+ 传感快照(SNAP_STAT/QUERY/CLEAR)+ 透传(0x7F/0x9F) |
|
||||||
| [DLD960硬件资源.md](docs/DLD960硬件资源.md) | — | 硬件 | 双 MCU IO 分配、继电器、指示灯、拨码 |
|
| [DLD960硬件资源.md](docs/DLD960硬件资源.md) | — | 硬件 | 双 MCU IO 分配、继电器、指示灯、拨码 |
|
||||||
|
|
||||||
|
|||||||
+55
-74
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
> 基于《DLD960 串口通信协议》V1.01,将设备管理、参数配置、数据上报映射到 MQTT 协议。
|
> 基于《DLD960 串口通信协议》V1.01,将设备管理、参数配置、数据上报映射到 MQTT 协议。
|
||||||
> 交互格式:JSON。
|
> 交互格式:JSON。
|
||||||
> 版本:V1.11(2026-08-31,4G 通道适配)
|
> 版本:V1.12(2026-08-31,4G 通道适配修订为方案 C:Air780 协议转换)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -161,15 +161,15 @@ dld960/{dev_serial}/{direction}
|
|||||||
| `ota_flash` | 触发本地 ISP 刷写(仅 ready 态) | srv→dev | — |
|
| `ota_flash` | 触发本地 ISP 刷写(仅 ready 态) | srv→dev | — |
|
||||||
| `ota_status` | 查询 OTA 状态(含进度) | srv→dev | — |
|
| `ota_status` | 查询 OTA 状态(含进度) | srv→dev | — |
|
||||||
| `loop_version_query` | 实时查询地感 Loop MCU 版本(V1.10) | srv→dev | 0x4A |
|
| `loop_version_query` | 实时查询地感 Loop MCU 版本(V1.10) | srv→dev | 0x4A |
|
||||||
| `frame_cmd` | 4G 通道原始帧透传下发(hex 封装,V1.11) | srv→dev | — |
|
| `frame_cmd` | 4G 通道原始帧透传下发(hex 封装,可选兜底) | srv→dev | — |
|
||||||
| `initialize` | 设备上电初始化登陆 | dev→srv | — |
|
| `initialize` | 设备上电初始化登陆 | dev→srv | — |
|
||||||
| `loop_data` | 线圈传感数据上报 | dev→srv | 0xC0 |
|
| `loop_data` | 线圈传感数据上报 | dev→srv | 0xC0 |
|
||||||
| `event_report` | 事件上报(**平台须应答**,见 §5.3) | dev→srv | — |
|
| `event_report` | 事件上报(**平台须应答**,见 §5.3) | dev→srv | — |
|
||||||
| `ota_report` | OTA 进度/结果主动上报 | dev→srv | — |
|
| `ota_report` | OTA 进度/结果主动上报 | dev→srv | — |
|
||||||
| `heartbeat` | 设备心跳 | dev→srv | — |
|
| `heartbeat` | 设备心跳 | dev→srv | — |
|
||||||
| `frame_report` | 4G 通道原始帧透传上报(hex 封装,V1.11) | dev→srv | — |
|
| `frame_report` | 4G 通道原始帧透传上报(hex 封装,可选兜底) | dev→srv | — |
|
||||||
|
|
||||||
> ⚠ `frame_cmd` / `frame_report` 为 **4G 通道专用**(方案 B:原始帧透传,见 §6),有线通道不使用。4G 通道不使用有线标准 JSON 业务命令(loop_data / event_report 等)。
|
> 4G 通道(方案 C,见 §6):上行由 Air780 解析 0x7F 帧并转换为**标准 JSON 命令**(loop_data / event_report / initialize / heartbeat,与有线通道一致),平台无感。`frame_cmd` / `frame_report` 保留为**可选兜底**(Air780 未实现转换的命令 / 未识别帧透传),有线通道不使用。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -1408,93 +1408,72 @@ dld960/{dev_serial}/{direction}
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# 6 4G 通道适配(方案 B:原始帧透传 + hex 封装,V1.11 新增)
|
# 6 4G 通道适配(方案 C:Air780 协议转换,V1.12 修订)
|
||||||
|
|
||||||
> 适用场景:vd960DBN 有线网络失效时,经 **Air8781P 整板(Air780EPM 4G 模组,LuatOS vd960Air 工程)** 兜底上报。
|
> 适用场景:vd960DBN 有线网络失效时,经 **Air8781P 整板(Air780EPM 4G 模组,LuatOS vd960Air 工程)** 兜底上报。
|
||||||
> 4G 通道与有线通道**命令面不同**(见 §6.2),平台须按通道区分解析。
|
> **方案 C**:Air780 解析 0x7F 帧并转换为**标准 JSON 命令**(与有线通道一致),平台无感。
|
||||||
|
> 修订说明:V1.11 曾定方案 B(原始帧 hex 透传 frame_report/frame_cmd),V1.12 改为方案 C,frame_* 降级为可选兜底。
|
||||||
|
|
||||||
## 6.1 通道架构
|
## 6.1 通道架构
|
||||||
|
|
||||||
```
|
```
|
||||||
上行: vd960Loop --0x7F帧(UART2)--> vd960DBN --原样转发(UART1)--> Air780 --MQTT frame_report--> 平台
|
上行: vd960Loop --0x7F帧(UART2)--> vd960DBN --原样转发(UART1)--> Air780 --解析转JSON--> MQTT(loop_data/event_report/响应)
|
||||||
下行: 平台 --MQTT frame_cmd--> Air780 --原样(UART1)--> vd960DBN --0x7F帧(UART2)--> vd960Loop
|
下行: 平台 --标准JSON命令--> Air780 --转换0x7F帧--> vd960DBN --0x7F帧(UART2)--> vd960Loop
|
||||||
```
|
```
|
||||||
|
|
||||||
- **魔数分流(在 vd960DBN 侧)**:`0x7F` 帧 → 转发 UART2(vd960Loop 地感);`0x8F` 帧 → DBN 本地处理(BLE/串口配置命令同源)
|
- **vd960DBN**:UART2↔UART1 双向转发(魔数分流:`0x7F` 帧 → 转发 UART2(vd960Loop);`0x8F` 帧 → DBN 本地处理)。列入 vd960DBN 开发计划,**固件未实现**。⚠ 转发必须**不丢帧**(沿检测依赖完整 0xC0 帧流)。
|
||||||
- **Air780 职责**:0x7F 帧切包(Lua 状态机,只切包不懂内容)+ MQTT 收发 + hex 封装
|
- **Air780**:0x7F 帧解析(Lua 状态机)+ **协议转换**(0x7F 帧 ↔ 标准 JSON,§6.3)+ MQTT(标准 JSON 命令面)
|
||||||
- **vd960DBN 职责**:UART2↔UART1 双向转发(复用 `manage_dbn_ble_transparent` 透传模式;列入 vd960DBN 开发计划,**固件未实现**)
|
- **平台**:标准 JSON 解析,与有线通道一致(**零新增依赖**)
|
||||||
- **链路层(UART)**:数据面 0x7F 帧字节流透传(0x7F 帧自带 LEN/校验,Air780 按帧切包);`0x7D` 帧仅用于 DBN↔Air780 配置同步下发/握手(详见 vd960Air 工程 readme §3)
|
|
||||||
|
|
||||||
## 6.2 命令面差异
|
## 6.2 命令面(4G 通道 = 标准 JSON)
|
||||||
|
|
||||||
| 通道 | 上行(dev→srv) | 下行(srv→dev) |
|
| 通道 | 上行(dev→srv) | 下行(srv→dev) |
|
||||||
|------|----------------|----------------|
|
|------|----------------|----------------|
|
||||||
| 有线(ETH MQTT) | initialize / loop_data / event_report / heartbeat / ota_report(标准 JSON) | dev_serial_set / ssc_net_* / iot_net_* / loop_param_* / report_config / log_* / ota_* / loop_version_query(标准 JSON) |
|
| 有线(ETH MQTT) | initialize / loop_data / event_report / heartbeat / ota_report(标准 JSON) | 标准 JSON 命令全表(dev_serial_set / ssc_net_* / iot_net_* / loop_param_* / report_config / log_* / ota_* / loop_version_query) |
|
||||||
| 4G(Air780 透传) | **frame_report**(hex 帧,§6.3)+ initialize(JSON,§6.3.1) | **frame_cmd**(hex 帧,§6.4) |
|
| 4G(Air780 转换) | **标准 JSON**(initialize / loop_data / event_report / heartbeat,Air780 从 0x7F 帧生成)+ 可选 frame_report | **标准 JSON**(Air780 转换为 0x7F 帧下发)+ 可选 frame_cmd |
|
||||||
|
|
||||||
- 4G 通道**不使用**有线通道的标准 JSON 业务命令(loop_data / event_report 等)
|
- 4G 通道上行 JSON 结构与有线通道**完全一致**(平台按同一解析逻辑处理)
|
||||||
- 4G 通道**不适用**的网络配置类命令:`ssc_net_set` / `ssc_net_query` / `iot_net_set` / `iot_net_query` / `iot_topic_set` / `iot_topic_query`(4G 接入网是 SIM 运营商网络,APN/主题由 4G 侧管理;经 4G 通道下发返回 `code=4`)
|
- `frame_report` / `frame_cmd` 保留为**可选兜底**(§6.8):Air780 未实现转换的命令 / 未识别帧,平台可直接发/收原始帧
|
||||||
- 其余命令(loop_param_*、log_*、ota_*、pwd_*、report_config、device_reset 等)可由平台经 `frame_cmd` 下发 `0x8F` 帧由 DBN 本地处理,或 `0x7F` 帧转发 vd960Loop——设备侧指令面不变
|
|
||||||
|
|
||||||
## 6.3 上行 `frame_report`
|
## 6.3 Air780 协议转换职责(0x7F 帧 ↔ 标准 JSON)
|
||||||
|
|
||||||
> Topic: `dld960/{sn}/dev` · QoS 1 · 每个 0x7F 帧一条
|
**上行(0x7F → JSON):**
|
||||||
|
|
||||||
```json
|
| 0x7F 帧 | 转换目标 | 说明 |
|
||||||
{
|
|---------|---------|------|
|
||||||
"msg_id": 123,
|
| 0xC0 传感上报 | `loop_data` | 4 路通道字段映射(§5.2),携带 link(§6.7) |
|
||||||
"cmd": "frame_report",
|
| 0xC0 car_state 沿 | `event_report` | 进出车事件(§6.4) |
|
||||||
"ts": 1719000000,
|
| 0xC0 loop_state 沿 | `event_report` | 线圈断开/恢复(loop_cut / loop_restore,§6.4) |
|
||||||
"data": { "frame": "7f00c0060102030405aabb" },
|
| 0x09~0x1F 配置响应 | 对应命令响应 | code / msg / data(按 §4 各命令响应结构) |
|
||||||
"link": { "imei": "860012345678901", "iccid": "89860012345678901234", "imsi": "460001234567890", "msisdn": "", "csq": 23, "net": "4G" }
|
| 0x63 / 0x64 车检器参数响应 | `loop_param_set` / `loop_param_query` 响应 | 多路参数结构(§4.13 / §4.14) |
|
||||||
}
|
| 0x4A 版本响应 | `loop_version_query` 响应 / `initialize.loop_ver` | 地感版本(§4.25) |
|
||||||
```
|
|
||||||
|
|
||||||
| data 字段 | 类型 | 说明 |
|
**下行(JSON → 0x7F):**
|
||||||
|-----------|------|------|
|
|
||||||
| `frame` | string(hex) | **0x7F 帧完整字节 hex**(含魔数 0x7F/校验字节),小写;平台按《DLD960Loop_串口通信协议》解析(0xC0 传感 / 0x0C 响应 / 事件等) |
|
|
||||||
|
|
||||||
- `link` 为 4G 特有字段(§6.6),每条上行携带
|
| 平台 JSON 命令 | 转换 0x7F 帧 | 说明 |
|
||||||
- `msg_id` / `ts` 由 Air780 生成;`ts` 校准遵循 §2.3(见 §6.3.1)
|
|---------------|-------------|------|
|
||||||
|
| loop_param_set / loop_param_query | 0x63 / 0x64 | 车检器多路参数 |
|
||||||
|
| loop_version_query | 0x4A | 地感版本查询 |
|
||||||
|
| (其余需转发的命令) | 对应 0x7F 命令 | 按《DLD960Loop_串口通信协议》 |
|
||||||
|
|
||||||
### 6.3.1 4G 通道 `initialize`(JSON)
|
## 6.4 事件上报(仅线圈事件,V1.12 明确)
|
||||||
|
|
||||||
4G 通道的 `initialize` 由 **Air780** 在 MQTT 连接成功后发送(标准 JSON 形态 + `link`),用于:① 平台识别 4G 设备上线;② 平台下发 `report_config` 校准 `ts`(§2.3)。
|
- **4G 通道事件面 = 仅线圈事件**(car_enter / car_leave / loop_cut / loop_restore,源自 0xC0 帧 car_state / loop_state 沿)
|
||||||
|
- **不含 DBN 内部网络事件**(iot_connect / iot_ready / iot_reconn 等——Air780 无法感知 DBN 内部状态,**平台勿依赖 4G 通道获取网络事件**)
|
||||||
|
- `event_report` 语义与有线通道**完全一致**(V1.04 机制):
|
||||||
|
- 平台必答(回显 msg_id + code=0)→ 出队
|
||||||
|
- 5s 超时重发,同 msg_id / 原始 ts,最多 3 次;耗尽挂起
|
||||||
|
- 16 深环形队列,溢出丢最旧;多事件合并一条 publish
|
||||||
|
- 跨重连保持同 msg_id(平台按 (sn, msg_id) 去重)
|
||||||
|
- Air780 以 Lua 复刻 DBN `iot_evt_*` 逻辑(沿检测 + ACK 状态机 + 重发定时器),可行性已评估(2026-08-31):逻辑块全部可映射 Lua(table 队列 / sys.timer / mqtt 回调 / json),无硬障碍
|
||||||
|
|
||||||
```json
|
## 6.5 命令响应链路
|
||||||
{
|
|
||||||
"msg_id": 1,
|
|
||||||
"cmd": "initialize",
|
|
||||||
"ts": 3,
|
|
||||||
"data": { "loop_ver": "1.0.5", "loop_hw_ver": "1.0" },
|
|
||||||
"link": { "imei": "860012345678901", "iccid": "89860012345678901234", "imsi": "460001234567890", "msisdn": "", "csq": 23, "net": "4G" }
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- `loop_ver` / `loop_hw_ver`:地感 Loop 版本(与 §4.25 同语义;vd960DBN 未实现 UART1 通道前可省略)
|
- 平台 JSON 命令 → Air780 转 0x7F → vd960DBN → vd960Loop → 响应帧 → vd960DBN → Air780 → JSON 回包
|
||||||
- 后续传感/事件/响应数据一律经 `frame_report`
|
- Air780 维护**单命令状态机**(暂存 msg_id + 超时回 code=5,与 DBN `g_lup_cmd` 同模式)
|
||||||
|
- 链路 4 跳:响应超时建议与 DBN 命令超时一致(当前 300ms~1s 量级,待板级确认)
|
||||||
|
|
||||||
## 6.4 下行 `frame_cmd`
|
## 6.6 4G 通道不支持的命令(网络配置类)
|
||||||
|
|
||||||
> Topic: `dld960/{sn}/srv` · QoS 1
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"msg_id": 456,
|
|
||||||
"cmd": "frame_cmd",
|
|
||||||
"ts": 1719000100,
|
|
||||||
"data": { "frame": "7f000809010203040506" }
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
| data 字段 | 类型 | 说明 |
|
|
||||||
|-----------|------|------|
|
|
||||||
| `frame` | string(hex) | 0x7F 帧(→ vd960Loop 地感指令)或 0x8F 帧(→ vd960DBN 本地配置)hex |
|
|
||||||
|
|
||||||
- Air780 收到 → hex 解码 → 原始字节 → UART1 → vd960DBN 魔数分流
|
|
||||||
- 地感/设备响应经 `frame_report` 上行
|
|
||||||
|
|
||||||
## 6.5 4G 通道不支持的命令
|
|
||||||
|
|
||||||
| cmd | 说明 |
|
| cmd | 说明 |
|
||||||
|-----|------|
|
|-----|------|
|
||||||
@@ -1504,7 +1483,7 @@ dld960/{dev_serial}/{direction}
|
|||||||
|
|
||||||
> 经 4G 通道下发以上命令:设备回 `code=4 unsupported`。
|
> 经 4G 通道下发以上命令:设备回 `code=4 unsupported`。
|
||||||
|
|
||||||
## 6.6 link 对象(4G 特有字段)
|
## 6.7 link 对象(4G 特有字段)
|
||||||
|
|
||||||
| 字段 | 来源 | 说明 |
|
| 字段 | 来源 | 说明 |
|
||||||
|------|------|------|
|
|------|------|------|
|
||||||
@@ -1515,12 +1494,13 @@ dld960/{dev_serial}/{direction}
|
|||||||
| `csq` | mobile.csq() | 信号强度 0-31(31 最强,99/255 无信号) |
|
| `csq` | mobile.csq() | 信号强度 0-31(31 最强,99/255 无信号) |
|
||||||
| `net` | 固定 "4G" | 网络制式(预留扩展) |
|
| `net` | 固定 "4G" | 网络制式(预留扩展) |
|
||||||
|
|
||||||
## 6.7 平台侧要求
|
## 6.8 平台侧要求
|
||||||
|
|
||||||
1. **双通道区分**:有线通道按标准 JSON 业务命令解析;4G 通道按 `frame_report` / `frame_cmd` 解析(可依 `link.net` 或报文形态区分)
|
1. **标准 JSON 解析**:与有线通道一致(**零新增依赖**);依 `link.net` 或报文形态识别 4G 通道
|
||||||
2. **新增解析依赖**:《DLD960Loop_串口通信协议》(hex → 0x7F 帧 → 字段)
|
2. **设备唯一标识**:`dev_serial` 与有线通道同一序列号(Topic 族一致,平台认同一台设备);`link.imei` / `link.iccid` 辅助 4G 设备/流量卡管理
|
||||||
3. **设备唯一标识**:`dev_serial` 与有线通道同一序列号(Topic 族一致,平台认同一台设备);`link.imei` / `link.iccid` 辅助 4G 设备/流量卡管理
|
3. **时钟校准**:Air780 上线发 `initialize`(JSON + link)后,平台照常下发 `report_config` 校准 `ts`(§2.3)
|
||||||
4. **时钟校准**:Air780 上线发 `initialize`(JSON + link)后,平台照常下发 `report_config` 校准 `ts`(§2.3)
|
4. **事件面约束**:4G 通道仅报线圈事件,不报 DBN 内部网络事件(§6.4)
|
||||||
|
5. **可选兜底**:若启用 `frame_report` / `frame_cmd`(Air780 未识别帧 / 未实现转换命令),平台需按《DLD960Loop_串口通信协议》解析/组帧
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -1536,6 +1516,7 @@ dld960/{dev_serial}/{direction}
|
|||||||
| V1.05 | 2026-07-15 | 增加**设备时钟同步**(§2.3,方案B):设备无 RTC,`initialize` 上线后平台经 `report_config` 命令下发 Unix `ts`,设备据此校准,之后上行 `ts` 为真实 Unix 时间;校准前为上电秒数 | wangfq |
|
| V1.05 | 2026-07-15 | 增加**设备时钟同步**(§2.3,方案B):设备无 RTC,`initialize` 上线后平台经 `report_config` 命令下发 Unix `ts`,设备据此校准,之后上行 `ts` 为真实 Unix 时间;校准前为上电秒数 | wangfq |
|
||||||
| V1.06 | 2026-08-04 | 增加**脱机事件日志**命令:`log_stat`(统计/分页定位)、`log_query`(按全局序号分页,count≤4)、`log_clear`(清除+审计留痕);§2.3 补充日志双时间戳语义(`ts_ms` 相对 + `unix_ts` 已同步,0=未同步,锚点回算规则) | wangfq |
|
| V1.06 | 2026-08-04 | 增加**脱机事件日志**命令:`log_stat`(统计/分页定位)、`log_query`(按全局序号分页,count≤4)、`log_clear`(清除+审计留痕);§2.3 补充日志双时间戳语义(`ts_ms` 相对 + `unix_ts` 已同步,0=未同步,锚点回算规则) | wangfq |
|
||||||
| V1.07 | 2026-08-18 | `log_stat` / `log_query` / `log_clear` 增加**快照流**支持(`stream=snapshot`,与 BLE 0x28/0x29/0x2A 同语义):快照统计 capacity 随芯片动态(48064~449472)、快照分页 count≤1(4 通道记录 JSON ~810B 超发送缓冲,实测修正;BLE 原始通道仍 ≤2)、快照清除审计留痕;`capacity`/`count` 类型修正为 uint32(W25Q256 事件流 130944 超 16bit) | wangfq |
|
| V1.07 | 2026-08-18 | `log_stat` / `log_query` / `log_clear` 增加**快照流**支持(`stream=snapshot`,与 BLE 0x28/0x29/0x2A 同语义):快照统计 capacity 随芯片动态(48064~449472)、快照分页 count≤1(4 通道记录 JSON ~810B 超发送缓冲,实测修正;BLE 原始通道仍 ≤2)、快照清除审计留痕;`capacity`/`count` 类型修正为 uint32(W25Q256 事件流 130944 超 16bit) | wangfq |
|
||||||
|
| V1.12 | 2026-08-31 | **4G 通道适配修订:方案 B(hex 透传)改为方案 C(Air780 协议转换)**——Air780 解析 0x7F 帧并转换为**标准 JSON 命令**(loop_data / event_report / initialize / heartbeat,与有线通道一致),平台零改动;V1.11 的 frame_report / frame_cmd 降级为**可选兜底**;4G 事件面 = **仅线圈事件**(car_enter/car_leave/loop_cut/loop_restore,不含 DBN 内部网络事件);命令响应链路 Air780 单命令状态机(超时回 code=5);link 对象保留;Air780 以 Lua 复刻 iot_event_report 逻辑(沿检测 + ACK + 5s×3 重发 + 16 深队列 + 跨重连同 msg_id),可行性已评估(2026-08-31) | wangfq |
|
||||||
| V1.11 | 2026-08-31 | **4G 通道适配(方案 B:原始帧透传 + hex 封装)**:新增 `frame_report`(dev→srv,§6.3)/ `frame_cmd`(srv→dev,§6.4)两命令(4G 通道专用);4G 通道**不使用**有线标准 JSON 业务命令(loop_data/event_report),不适用网络配置类命令(ssc_net_*/iot_net_*/iot_topic_*,4G 通道下发回 code=4);上行附加 `link` 对象(IMEI/ICCID/IMSI/MSISDN/CSQ,§6.6);链路层数据面 0x7F 帧字节流透传(魔数分流在 vd960DBN 侧),0x7D 帧仅 DBN↔Air780 配置同步/握手;平台双通道区分解析 + 新增《DLD960Loop_串口通信协议》解析依赖(§6.7);实施主体:Air8781P(Air780EPM)vd960Air 工程,vd960DBN UART1 通道列入开发计划(固件未实现) | wangfq |
|
| V1.11 | 2026-08-31 | **4G 通道适配(方案 B:原始帧透传 + hex 封装)**:新增 `frame_report`(dev→srv,§6.3)/ `frame_cmd`(srv→dev,§6.4)两命令(4G 通道专用);4G 通道**不使用**有线标准 JSON 业务命令(loop_data/event_report),不适用网络配置类命令(ssc_net_*/iot_net_*/iot_topic_*,4G 通道下发回 code=4);上行附加 `link` 对象(IMEI/ICCID/IMSI/MSISDN/CSQ,§6.6);链路层数据面 0x7F 帧字节流透传(魔数分流在 vd960DBN 侧),0x7D 帧仅 DBN↔Air780 配置同步/握手;平台双通道区分解析 + 新增《DLD960Loop_串口通信协议》解析依赖(§6.7);实施主体:Air8781P(Air780EPM)vd960Air 工程,vd960DBN UART1 通道列入开发计划(固件未实现) | wangfq |
|
||||||
| V1.10 | 2026-08-20 | **网络上报携带地感版本**(配合远程 OTA 升级前后版本核对):`dev_info_query` 响应 + `initialize` 上报新增 `loop_ver`/`loop_hw_ver`(地感 Loop MCU 固件/硬件版本,格式 `"主.次.次"`,来自 0x4A 查询缓存,尽力携带可为空);新增命令 `loop_version_query`(§4.25,srv→dev 实时查询,设备经 UART2 0x4A 异步查询后回包,含 `loop_ver`/`loop_hw_ver`/`version_str`);版本语义:`soft_ver`=整机 DBN 固件(`主.次`),`loop_ver`=地感 Loop 固件(`主.次.次`),二者区分 | wangfq |
|
| V1.10 | 2026-08-20 | **网络上报携带地感版本**(配合远程 OTA 升级前后版本核对):`dev_info_query` 响应 + `initialize` 上报新增 `loop_ver`/`loop_hw_ver`(地感 Loop MCU 固件/硬件版本,格式 `"主.次.次"`,来自 0x4A 查询缓存,尽力携带可为空);新增命令 `loop_version_query`(§4.25,srv→dev 实时查询,设备经 UART2 0x4A 异步查询后回包,含 `loop_ver`/`loop_hw_ver`/`version_str`);版本语义:`soft_ver`=整机 DBN 固件(`主.次`),`loop_ver`=地感 Loop 固件(`主.次.次`),二者区分 | wangfq |
|
||||||
| V1.09 | 2026-08-20 | **OTA 刷写结果判定修复**(现场:刷写物理成功但平台误判"刷写未启动"):① 刷写成功后台侧状态回 `idle`(镜像保留:`size`/`crc32`/`version` 不变,`last_result=0`,可重刷),与"下载完成待刷 `ready`"严格区分;② `ota_report` 升级为刷写结果**主依据**(`stage=done`/`failed` 设备必报,重发 3 次×5s),`ota_status` 仅兜底;③ 明确平台判定指引——`idle+size>0+last_result=0`=成功,不得以轮询未见 `flashing` 或状态持续 `ready` 判"刷写未启动"(本地刷写 <1s,轮询大概率错过中间态);④ `ota_begin` 兼容 `idle+size/crc32 一致` → 免下载直接可刷(重刷) | wangfq |
|
| V1.09 | 2026-08-20 | **OTA 刷写结果判定修复**(现场:刷写物理成功但平台误判"刷写未启动"):① 刷写成功后台侧状态回 `idle`(镜像保留:`size`/`crc32`/`version` 不变,`last_result=0`,可重刷),与"下载完成待刷 `ready`"严格区分;② `ota_report` 升级为刷写结果**主依据**(`stage=done`/`failed` 设备必报,重发 3 次×5s),`ota_status` 仅兜底;③ 明确平台判定指引——`idle+size>0+last_result=0`=成功,不得以轮询未见 `flashing` 或状态持续 `ready` 判"刷写未启动"(本地刷写 <1s,轮询大概率错过中间态);④ `ota_begin` 兼容 `idle+size/crc32 一致` → 免下载直接可刷(重刷) | wangfq |
|
||||||
|
|||||||
@@ -4,6 +4,42 @@
|
|||||||
>
|
>
|
||||||
> 项目定位: DLD960 通信板 — BLE 配网、TCP JSON 协议服务、Loop MCU 串口桥接
|
> 项目定位: DLD960 通信板 — BLE 配网、TCP JSON 协议服务、Loop MCU 串口桥接
|
||||||
|
|
||||||
|
## 2026-08-31 — MQTT 协议 V1.12:4G 通道适配修订为方案 C(Air780 协议转换)
|
||||||
|
|
||||||
|
> **协议先行修订**(同日 V1.11 方案 B 未落地即修订,固件均未实现)。
|
||||||
|
|
||||||
|
### 修订动因
|
||||||
|
|
||||||
|
V1.11 曾定**方案 B**(vd960DBN 纯转发 + frame_report/frame_cmd hex 透传)。讨论后改为**方案 C**:Air780 解析 0x7F 帧并转换为**标准 JSON 命令**(loop_data / event_report / initialize / heartbeat),平台零改动、与有线通道一致。
|
||||||
|
|
||||||
|
### 四个决策点(用户 2026-08-31)
|
||||||
|
|
||||||
|
| # | 决策 | 结果 |
|
||||||
|
|---|------|------|
|
||||||
|
| 1 | event_report | Air780 以 Lua 复刻 DBN iot_evt_* 逻辑(沿检测 + ACK + 5s×3 + 16 深队列 + 跨重连同 msg_id),可行性已评估:全部逻辑块可映射 Lua,无硬障碍 |
|
||||||
|
| 2 | 事件面 | **4G 仅线圈事件**(car_enter/car_leave/loop_cut/loop_restore),不含 DBN 内部网络事件(协议 §6.4 明确) |
|
||||||
|
| 3 | 命令响应 | Air780 单命令状态机 + 超时回 code=5(与 DBN g_lup_cmd 同模式),协议 §6.5 |
|
||||||
|
| 4 | frame_* 去留 | **保留为可选兜底**(Air780 未实现转换命令/未识别帧透传),协议 §6.8 |
|
||||||
|
|
||||||
|
### 协议变更(V1.11 → V1.12)
|
||||||
|
|
||||||
|
- §6 重写:方案 C 架构(Air780 协议转换)/ 命令面 = 标准 JSON / 转换职责表(0x7F↔JSON)/ 事件上报 / 命令响应链路 / link / 平台要求
|
||||||
|
- §3 命令详表:frame_cmd/frame_report 标注改为"可选兜底"
|
||||||
|
- 修订记录 V1.12
|
||||||
|
|
||||||
|
### vd960DBN 侧开发计划(固件未实现,不变)
|
||||||
|
|
||||||
|
- [ ] UART1(PB6/PB7) 通道 + UART2↔UART1 双向透传(⚠ 转发不丢帧是 Air780 沿检测的前提)
|
||||||
|
- [ ] BLE 设置服务器/topic 参数时同步下发 Air780 配置
|
||||||
|
- [ ] 通道切换策略(待讨论;暂定默认 4G)
|
||||||
|
|
||||||
|
### 同步
|
||||||
|
|
||||||
|
- `README.md` 文档索引 V1.11 → V1.12
|
||||||
|
- 协议文档 §6 重写 + 修订记录 V1.12(V1.11 保留作历史)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 2026-08-31 — MQTT 协议 V1.11:4G 通道适配(方案 B:原始帧透传 + hex 封装)协议先行
|
## 2026-08-31 — MQTT 协议 V1.11:4G 通道适配(方案 B:原始帧透传 + hex 封装)协议先行
|
||||||
|
|
||||||
> **本次为协议文档先行**(Air8781P 4G 兜底通道设计稿并入主协议;vd960DBN 固件未实现,列入开发计划)。
|
> **本次为协议文档先行**(Air8781P 4G 兜底通道设计稿并入主协议;vd960DBN 固件未实现,列入开发计划)。
|
||||||
|
|||||||
Reference in New Issue
Block a user