docs(M06-G): 记录硬件联调阻塞并推进余额账本

This commit is contained in:
Codex
2026-06-24 15:26:05 +08:00
parent d01f77151e
commit 8de3d05da6
8 changed files with 44 additions and 15 deletions
+3 -3
View File
@@ -120,9 +120,9 @@ WSL 已验证:EMQX `5.8.9`、MQTTX CLI `1.13.0`、EMQX 服务 `active (running
项目已开发部分模块。具体完成度不得从 README 猜测,必须以现有代码、测试、数据库迁移、Git 历史以及 `docs/current-baseline.md``docs/module-status.md``docs/feature-status.md` 为准。
- 当前执行游标:`M06-G`
- 最近工程提交:`8936ad1`,完成 M06-F 订单设备自动联动任务,支持订单开始、续费、取消、结束和换房时的控制箱任务与插座开关
- 下一工程目标:M06-G 真实硬件联调
- 当前执行游标:`M07-A`
- 最近工程提交:`d01f771`,完成 M06-G 真实硬件烟测运行器;缺生产 MQTT 账号、DeviceID 和实物时安全 SKIP/DRY_RUN
- 下一工程目标:M07-A 双余额账本
## 版本递进
+2 -2
View File
@@ -1,8 +1,8 @@
# 当前开发成果基线
> V5.0 首次核验日期:2026-06-16
> audited_commit: `8936ad1`
> next_engineering_target: M06-G 真实硬件联调
> audited_commit: `d01f771`
> next_engineering_target: M07-A 双余额账本
> 事实源:当前工作区、Git 历史、状态文档、Windows/WSL 检查脚本。
## 总体结论
@@ -0,0 +1,27 @@
# M06-G 真实硬件联调
- 日期:2026-06-24
- 起始 commit`c00526f`
- 工程 commit`d01f771`
- ENGINEERING_DELTA=YES
- 子阶段状态:BLOCKED_EXTERNAL;烟测运行器已完成,真实设备未执行
## 工程增量
- 新增 `hardware-smoke-runner`,默认 dry-run 生成控制箱、Sub-1G 门锁和智慧插座联调矩阵。
- 未配置 DeviceID 时安全 `SKIP`;未显式设置 `QIPAI_HARDWARE_SMOKE_ENABLE=true` 时只输出 `DRY_RUN`,不发布真实硬件命令。
- 危险动作默认关闭;只有 `QIPAI_HARDWARE_SMOKE_ALLOW_ACTIONS=true` 且提供对应 DeviceID/subID 时才加入控电、开锁和插座开关动作。
- 真实执行时通过 MQTT 3.1/QoS 1 发布 `/deviceaccept/{DeviceID}` 并等待 `/devicesend/{DeviceID}` 中匹配命令 ID 的 ACK。
- 输出 JSON 结果,便于后续粘贴进硬件联调报告和部署验收记录。
## 验证
- Windows `npm run build`:退出码 0。
- Windows `node tests/hardware-smoke-runner.test.mjs`:退出码 0。
- Windows `node dist/devices/hardware-smoke-runner.js`:退出码 0,未配置 DeviceID 时返回 `SKIP`
- Windows `npm test`:退出码 0,M01-A 至 M06-G 全量后端回归通过。
- 工程 commit 已 push`HEAD == origin/main == d01f771`
## 外部阻塞与后续
缺生产 MQTT 账号/ACL、控制箱、Sub-1G 门锁、4G 智慧插座、DeviceID、subID 和现场配线/负载,未执行真实 ACK、断电保护、开锁、订单联动和异常恢复矩阵。M06 保持 `PARTIAL/BLOCKED_EXTERNAL`,游标旁路进入 M07-A 双余额账本。
+2 -2
View File
@@ -16,7 +16,7 @@
| OPS-002 | 单仓库 Gitea 推送与拉取部署 | M00-B/M10 | PARTIAL | 远端 HEAD | Windows 到 Gitea `origin/main` 首次 push 与远端校验通过。 | 生产服务器只读拉取部署尚未验证。 | M00-D/M00-E 继续完善生产拉取、菜单部署和状态检查。 |
| OPS-003 | 整仓发布清单 | M00-E/M10 | PARTIAL | `59d92c0` | `deploy-business.sh --dry-run` 可在 Windows/WSL 验证当前 HEAD 的 release manifest 结构;`check-release-manifest.ps1` 已接入 `test-all.ps1`;正式构建待项目生成。 | 后端/后台尚未生成,生产菜单未执行。 | M01/M09 后接入真实构建结果,并在生产菜单 2 生成真实 release manifest。 |
| OPS-004 | 菜单式更新与环境监测 | M00-E/M10 | PARTIAL | `292ab7f` | `setup.sh` 已接入初始化、更新、MQTT、HTTPS、状态、备份、恢复、回滚和诊断菜单;`--backup-status` 已在 WSL 验证,可检查备份工具、目录和模板。 | 未在生产 Ubuntu 执行;真实备份配置未启用。 | 生产执行后补部署记录、真实备份和恢复演练记录。 |
| IOT-001 | MQTT Broker 生产部署 | M00/M06 | PARTIAL | `c140613` | 菜单 3 已支持 Ubuntu 24.04 amd64 原生安装/更新与复检;正式 Topic ACL 已固定;后端实现 MQTT.js 3.1、QoS 1、持久会话、自动重连、订阅恢复、消息上限和真实连接健康状态Windows 全量测试通过,WSL EMQX 5.8.9 服务级检查通过。 | 缺生产 EMQX 安装、正式账号、ACL/端口/备份验收;WSL 本地账号未配置,认证冒烟按预期 SKIP。 | 由管理员在生产菜单 3 执行并登记结果;提供本地最小权限账号后完成错误密码、ACL、TLS、遗嘱和三个 Topic 冒烟。 |
| IOT-001 | MQTT Broker 生产部署 | M00/M06 | PARTIAL | `d01f771` | 菜单 3 已支持 Ubuntu 24.04 amd64 原生安装/更新与复检;正式 Topic ACL 已固定;后端实现 MQTT.js 3.1、QoS 1、持久会话、自动重连、订阅恢复、健康检查、消息上限和真实硬件烟测运行器Windows 全量测试通过,WSL EMQX 5.8.9 服务级检查通过。 | 缺生产 EMQX 安装、正式账号、ACL/端口/备份验收;WSL 本地账号未配置,真实硬件烟测按预期 SKIP。 | 由管理员在生产菜单 3 执行并登记结果;提供生产账号、DeviceID 和实物后执行 `node dist/devices/hardware-smoke-runner.js`。 |
| SYS-001 | 微信原生小程序 | M00-C/M08 | PARTIAL | `c658b09` | 微信原生基础模板、固定生产 API 配置和开发者工具项目配置已纳管;JSON 与 JavaScript 静态语法检查通过。 | 当前仅为基础模板,登录、门店、订单和多角色业务页面尚未接入。 | 保持 M03-C 当前游标;到 M08 基于现有模板实现完整业务,不重复初始化。 |
| CFG-001 | 小程序品牌自定义 | M02-A/M03/M08 | PARTIAL | `8b8fb28` | 已建立 AppID/tenant 品牌配置表和 `/app-api/bootstrap`;同一 AppID 两租户隔离读取在 MySQL 8.4.9 实测通过。 | Logo/分享图片上传与小程序实际展示属于后续阶段。 | M03/M08 接入配置管理和小程序展示。 |
| BKG-010 | 后台多小程序管理 | M02-A/M08/M10 | PARTIAL | `8b8fb28` | 已建立逻辑应用、租户绑定和租户配置模型;多租户 AppID 未指定租户会被拒绝。 | 尚无后台管理页面,多 AppID 真机配置未验证。 | M02-B/C 完成身份权限,M08 增加管理页面。 |
@@ -47,4 +47,4 @@
| IOT-003 | Sub-1G 门锁绑定 | M06-D | PARTIAL | `d15fd3f` | `AddDevice` 下发、超时窗口、回包 subID/subtype、701C/701G 型号映射和父子拓扑自动固化已实现。 | 缺现场 `*789#` 与实物配对。 | M06-G 现场配对、超时和换绑验收。 |
| IOT-004 | Sub-1G 门锁控制 | M06-D | PARTIAL | `d15fd3f` | `CtrlDevice` 开关门、密码/卡片和恢复出厂适配器已实现;危险清空/恢复出厂仅平台管理员加确认短语;record 内容哈希脱敏,低电量及 timeout/full/unconfirm 告警。 | 缺 701C/701G 实物及密码/卡片现场验收。 | M06-G 完成实物控制与故障场景。 |
| IOT-005 | 智慧插座接入 | M06-E | PARTIAL | `9144fa8` | `basicInfo/workInfo` 查询、`on/off``localtask/clearTask` 已通过适配器、命令持久化和后台 API 接入;本地任务限制 20 条;过载、过温、过流、过压/欠压、功率和温度阈值写入设备告警;Windows 全量后端回归通过。 | 缺 4G 智慧插座实物、DeviceID、生产 MQTT 账号/ACL 和现场负载,未执行真实计量与保护断电联调。 | M06-F 接入订单自动联动;M06-G 完成实物计量、开关、本地任务和保护事件矩阵。 |
| IOT-008 | 设备告警与离线 | M06/M10 | PARTIAL | `8936ad1` | `/devicewill/{DeviceID}` 可更新离线状态;低电量、timeout/full/unconfirm、插座过载、过温、过流、过压/欠压、功率和温度阈值可写入开放告警;订单联动任务失败会进入异步任务重试/补偿。 | 缺真实硬件离线、保护断电、任务结束和弱信号事件矩阵。 | M06-G 现场验证 Broker、设备、ACK、告警和恢复。 |
| IOT-008 | 设备告警与离线 | M06/M10 | PARTIAL | `d01f771` | `/devicewill/{DeviceID}` 可更新离线状态;低电量、timeout/full/unconfirm、插座过载、过温、过流、过压/欠压、功率和温度阈值可写入开放告警;订单联动任务失败会进入异步任务重试/补偿;真实硬件烟测运行器可等待 ACK 并输出 JSON 报告。 | 缺真实硬件离线、保护断电、任务结束和弱信号事件矩阵。 | 取得实物和生产 MQTT 账号后执行硬件烟测矩阵;当前旁路进入 M07-A。 |
+1
View File
@@ -4,3 +4,4 @@
|---|---|---|---|---|---|---|
| 2026-06-15 | - | 尚未联调 | 本地文档骨架 | 未执行 | - | 缺实机联调。 |
| 2026-06-15 | EMQX Broker | 菜单检查模板 | WSL 脚本验证 | WARN | `setup.sh --mqtt` | 本地未安装 EMQX,生产未验证。 |
| 2026-06-24 | 控制箱/门锁/插座 | M06-G 硬件烟测运行器 | Windows 后端测试 | SKIP | `node dist/devices/hardware-smoke-runner.js` 输出 `hardware-smoke-config SKIP``npm test` 退出码 0 | 缺生产 MQTT 账号/ACL、DeviceID、subID、控制箱、门锁、插座和现场配线。 |
+1 -1
View File
@@ -5,4 +5,4 @@
| 4G 智能门禁控电箱 | V5.4 已固化命令与字段;PDF 原件未在当前仓库找到 | PARTIAL | M06-D 完成业务权限和控制;取得 PDF 后逐页复核。 |
| Sub-1G 智能门锁 | V5.4 已固化 `AddDevice/CtrlDevice`、subID/subtype 和结果码;PDF 原件缺失 | PARTIAL | M06-D 完成绑定、控制、安全门禁与事件。 |
| 4G 智慧插座 | V5.4 已固化查询、开关、本地任务和事件;PDF 原件缺失 | PARTIAL | M06-E 已完成查询、开关、本地任务和保护告警;M06-G 补实物计量与保护断电矩阵。 |
| EMQX Broker | 固定主机 `101.42.38.246`;已生成安装说明、ACL 模板菜单检查 | PARTIAL | 生产 Ubuntu 安装、端口限制 ACL 应用后复验。 |
| EMQX Broker | 固定主机 `101.42.38.246`;已生成安装说明、ACL 模板菜单检查和硬件烟测运行器 | PARTIAL | 生产 Ubuntu 安装、端口限制、账号 ACL、DeviceID 和实物到位后运行 `node dist/devices/hardware-smoke-runner.js`。 |
+7 -7
View File
@@ -2,15 +2,15 @@
```yaml
execution_cursor:
current_module: M06
current_stage: M06-G
current_module: M07
current_stage: M07-A
stage_status: TODO
last_completed_stage: M06-F
next_stage: M06-G
last_engineering_commit: 8936ad1
next_stage: M07-A
last_engineering_commit: d01f771
last_push_verified: true
base_branch: main
blocked_reason: ""
blocked_reason: "M06-G 真实硬件联调缺生产 MQTT 账号/ACL、DeviceID、控制箱、门锁、插座和现场配线;已完成烟测运行器并按 BLOCKED_EXTERNAL 旁路。"
updated_at: 2026-06-24T00:00:00+08:00
```
@@ -22,8 +22,8 @@ execution_cursor:
| M03 门店、房间、价格、营业时间 | DONE | `d563078` | docs/devlogs/2026-06-18-M03-D-场景码NFC与WiFi.md | M03-A/B/C/D 已完成门店房间、装修广告、媒体、地图选店、场景码/NFC 页面导航和受控 Wi-Fi;真实微信小程序码图片生成留待 M08 真机联调。 |
| M04 订单、时段锁定、支付闭环 | DONE | `91801fe` | docs/devlogs/2026-06-20-M04-D-订单分享.md | M04-A/B/C/D 已完成可信定价、并发预占、订单状态机、续费取消换房、管理员调整、代下单和最小权限分享;Windows 全量回归与 WSL MySQL 8.4.9 模块回归通过。 |
| M05 会员、余额、套餐、优惠券 | PARTIAL | `1680d73` | docs/devlogs/2026-06-22-M05-D-分账与收款配置.md | M05-A/B/C/D 工程闭环已完成:统一支付、微信支付退款、团购直订、门店收款账户、分账接收方、比例策略、授权门禁、幂等分账和对账查询均通过 Windows 与 WSL MySQL 回归;真实微信/团购/分账权限未提供,模块保持 PARTIAL/BLOCKED_EXTERNAL。 |
| M06 设备、MQTT 与真实硬件联动 | PARTIAL | `8936ad1` | docs/devlogs/2026-06-24-M06-F-订单自动联动.md | M06-A 至 F 已完成 MQTT、拓扑、协议幂等、控制箱、Sub-1G 门锁、智慧插座和订单自动联动任务;无实物联调,继续 M06-G 真实硬件联调。 |
| M07 保洁、通知、任务和语音播报 | TODO | - | - | - |
| M06 设备、MQTT 与真实硬件联动 | PARTIAL | `d01f771` | docs/devlogs/2026-06-24-M06-G-真实硬件联调.md | M06-A 至 F 已完成 MQTT、拓扑、协议幂等、控制箱、Sub-1G 门锁、智慧插座和订单自动联动任务;M06-G 已补真实硬件烟测运行器,缺生产 MQTT 账号/ACL、DeviceID 和实物配线,保持 BLOCKED_EXTERNAL。 |
| M07 会员、余额、充值、优惠券和套餐营销 | TODO | - | - | 当前游标进入 M07-A 双余额账本。 |
| M08 微信原生小程序完整业务 | TODO | - | - | - |
| M09 后台管理端完整业务 | TODO | - | - | - |
| M10 部署、域名、验收和运维闭环 | TODO | - | - | - |
+1
View File
@@ -15,3 +15,4 @@
| ISSUE-011 | 2026-06-22 | M05-D/FRN-001 | 微信支付真实分账尚未联调。 | 高 | 已完成收款账户、接收方、比例策略、授权门禁、成功支付校验、API 请求签名、幂等批次、失败人工处理和查询;Mock 仅限非生产。 | 缺微信支付服务商/分账权限、已授权接收方和生产商户凭据。 | 取得权限后登记环境接收方映射,执行小额支付后多接收方分账、重复请求和失败对账验收。 | BLOCKED_EXTERNAL |
| ISSUE-012 | 2026-06-22 | M06-A/IOT-001 | 生产 EMQX、正式 MQTT 客户端账号和 ACL 尚未现场验收。 | 高 | 已完成菜单 3 安装/更新、正式 Topic ACL、后端 MQTT 3.1/QoS 1、重连、订阅恢复、健康检查、消息限制和 Mock 客户端测试;WSL EMQX 服务级检查通过。 | Codex 不自动操作生产 Ubuntu,且尚无生产 MQTT 账号;WSL 本地最小权限账号也未配置。 | 管理员在 `101.42.38.246` 执行菜单 3 并建立账号/ACL;提供 Git 忽略的本地账号后执行错误密码、越权、TLS、遗嘱和三个 Topic 冒烟。 | BLOCKED_EXTERNAL |
| ISSUE-013 | 2026-06-22 | M06-C/协议资料 | V5.4 点名的控制箱与智慧插座协议 PDF 原件未在 `参考/`、现有压缩包或仓库其他路径找到。 | 中 | M06-C 严格按 V5.4 已固化的 Topic、命令拼写、字段约束和结果枚举实现,并用 Mock/MySQL 验证;未伪称 PDF 已阅读。 | 协议原件未随当前工作区提供。 | 用户补充两份 PDF 后按页码复核字段、范围和完整枚举;若有差异,以 PDF 和实机结果修正适配器并记录迁移。 | BLOCKED_EXTERNAL |
| ISSUE-014 | 2026-06-24 | M06-G/真实硬件联调 | 控制箱、Sub-1G 门锁、4G 智慧插座和生产 MQTT 账号/ACL 未提供,无法执行真实 ACK、开锁、控电、插座保护和订单联动矩阵。 | 高 | 已完成后端 MQTT、设备拓扑、协议适配、命令状态机、订单联动和 `hardware-smoke-runner`;未配置 DeviceID 时安全 SKIP,未显式启用时 DRY_RUN。 | 真实设备、DeviceID、subID、生产账号、ACL 和现场配线属于外部条件。 | 提供实物和 Git 忽略的环境变量后运行 `node dist/devices/hardware-smoke-runner.js`,再补照片/视频/日志和故障场景报告。 | BLOCKED_EXTERNAL |