目标:固件 ↔ 云端 ↔ GUI 端到端跑通,不只各端自测。
| 阶段 | 条件 | 内容 |
|---|---|---|
| L1 虚拟联调 | 云端 P1 + GUI 产品版第一期完成 | 虚拟设备(host 程序,精确模拟 F407 发出的精简版 telemetry 和 cmd 处理)→ EMQX → 云端入库/API → GUI 展示;全链路无真实硬件 |
| L2 真机联调 | 固件网关集成完成 + 有 F407 硬件 | 真实 F407 网关替掉虚拟设备,其他不变;验证 3.5 字符间隔、断网续传、遗嘱消息等硬件相关行为 |
| L3 压力联调 | L2 通过 | 多设备并发、断网重连、24h soak |
云端 P1 的模拟数据发生器不是随便造 JSON,必须精确模拟 F407 的行为:
{"unit":1,"r0":123,"r1":456}(字段名、类型与固件 mqtt-codec 拼出的逐字节一致){"device_id":"…","online":true,"version":"x.y.z"},断开靠遗嘱发 online:falsecmd topic,收到 {"cmd_id":"…","action":"ping","params":{}} 后回 cmd_ack(cmd_id 原样带回)这样 L1 跑通 = 云端和 GUI 已经能吃固件的真实现场数据,L2 只是换数据源。
| 编号 | 链路 | 断言 |
|---|---|---|
| T1 | 设备→云→GUI | 虚拟设备发 telemetry,5 秒内 GUI 实时监控页显示对应点位值 |
| T2 | 状态 retained | 虚拟设备先上线再启动云端/GUI,仍能拿到 online:true(retained 生效) |
| T3 | 命令往返 | GUI 点"下发 set_config",虚拟设备收到 cmd 并回 cmd_ack,GUI 显示成功(cmd_id 配对正确) |
| T4 | 遗嘱 | kill 虚拟设备,status 变为 online:false(MQTT 遗嘱) |
| T5 | 数据类型 | telemetry 带 data_type=f32 的点位,GUI 显示的浮点值与发送值一致(字节序正确) |
| T6 | 断网续传 | 断 EMQX 10 分钟再恢复,云端数据无丢失(固件 edge-engine 续传;L1 用虚拟设备模拟积压重发) |
| T7 | 多租户隔离 | tenant A 的 GUI 看不到 tenant B 的设备(ACL/JWT 生效后测,P2) |
{device} 用 UID 派生(已定)