diff --git a/README.md b/README.md index c0e261a..97c6fdd 100644 --- a/README.md +++ b/README.md @@ -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-E` -- 最近工程提交:`d15fd3f`,完成 M06-D 控制箱与 Sub-1G 门锁业务控制、安全门禁、配对拓扑和事件告警。 -- 下一工程目标:M06-E 智慧插座。 +- 当前执行游标:`M06-F` +- 最近工程提交:`9144fa8`,完成 M06-E 智慧插座查询、开关、本地任务、计量保护告警和后台控制 API。 +- 下一工程目标:M06-F 订单自动联动。 ## 版本递进 diff --git a/docs/api-changelog/2026-06-22-M06-D-device-control.md b/docs/api-changelog/2026-06-22-M06-D-device-control.md index cfbb240..b9f6f41 100644 --- a/docs/api-changelog/2026-06-22-M06-D-device-control.md +++ b/docs/api-changelog/2026-06-22-M06-D-device-control.md @@ -1,4 +1,4 @@ -# M06-D 控制箱与门锁 API +# M06-D/M06-E 设备控制 API - `POST /admin-api/device-control/power` - `POST /admin-api/device-control/door` @@ -10,5 +10,9 @@ - `POST /admin-api/device-control/task/cancel` - `POST /admin-api/device-control/sub-lock/pair` - `POST /admin-api/device-control/sub-lock/action` +- `POST /admin-api/device-control/socket/read` +- `POST /admin-api/device-control/socket/switch` +- `POST /admin-api/device-control/socket/task` +- `POST /admin-api/device-control/socket/task/clear` 响应中的 `PUBLISHED` 只表示 MQTT 发布完成,设备执行结果以 ACK 后的命令状态为准。 diff --git a/docs/current-baseline.md b/docs/current-baseline.md index 267b87d..6d2e9b9 100644 --- a/docs/current-baseline.md +++ b/docs/current-baseline.md @@ -1,8 +1,8 @@ # 当前开发成果基线 > V5.0 首次核验日期:2026-06-16 -> audited_commit: `d15fd3f` -> next_engineering_target: M06-E 智慧插座 +> audited_commit: `9144fa8` +> next_engineering_target: M06-F 订单自动联动 > 事实源:当前工作区、Git 历史、状态文档、Windows/WSL 检查脚本。 ## 总体结论 diff --git a/docs/devlogs/2026-06-24-M06-E-智慧插座.md b/docs/devlogs/2026-06-24-M06-E-智慧插座.md new file mode 100644 index 0000000..83a140b --- /dev/null +++ b/docs/devlogs/2026-06-24-M06-E-智慧插座.md @@ -0,0 +1,27 @@ +# M06-E 智慧插座 + +- 日期:2026-06-24 +- 起始 commit:`4863860` +- 工程 commit:`9144fa8` +- ENGINEERING_DELTA=YES +- 子阶段状态:PARTIAL/BLOCKED_EXTERNAL;Mock 与后端控制闭环完成,缺插座实物 + +## 工程增量 + +- 新增智慧插座业务控制服务:`basicInfo/workInfo` 查询、`on/off` 开关、本地任务 `localtask` 和 `clearTask`。 +- 新增后台 API:`/admin-api/device-control/socket/read`、`/socket/switch`、`/socket/task`、`/socket/task/clear`。 +- 插座命令复用设备命令状态机,先落库再发布 MQTT;返回 `PUBLISHED` 不伪造成设备执行成功。 +- 插座控制复用租户、门店、房间和 `device.write` 范围校验;离线设备拒绝下发。 +- 上行 `workInfo/special` 类事件可识别过载、过温、过流、过压/欠压、功率和温度阈值,并写入设备告警。 + +## 验证 + +- Windows `npm run build`:退出码 0。 +- Windows `node tests/iot-protocol.test.mjs`:退出码 0。 +- Windows `node tests/device-control.test.mjs`:退出码 0。 +- Windows `npm test`:退出码 0,M01-A 至 M06-E 全量后端回归通过。 +- 工程 commit 已 push,`HEAD == origin/main == 9144fa8`。 + +## 外部阻塞与后续 + +缺 4G 智慧插座实物、DeviceID、生产 MQTT 账号/ACL 和现场负载,真实计量与保护断电仍保留 `BLOCKED_EXTERNAL`。游标进入 M06-F 订单自动联动。 diff --git a/docs/feature-status.md b/docs/feature-status.md index f3c9b4a..ecffbf5 100644 --- a/docs/feature-status.md +++ b/docs/feature-status.md @@ -38,11 +38,12 @@ | GRP-003 | 管理员验券 | M05-C/M08 | PARTIAL | `cda640b` | 已提供后台人工验券、配置、映射和记录查询 API,门店数据范围校验生效,券码列表只返回脱敏值。 | 管理员小程序扫码界面待 M08,真实平台核销待授权。 | M08 接入扫码界面;授权后切换 API 模式。 | | FRN-001 | 加盟商与自动分账 | M05-D/M10/M08 | PARTIAL | `1680d73` | 已实现租户/门店收款账户、商户号、环境凭据引用、分账授权状态、接收方哈希脱敏、比例总和校验、支付后幂等分账和明细查询;未授权不能开启,生产环境 Mock 强制关闭。 | 缺微信支付服务商和分账权限,尚未执行真实分账。 | M10/M08 补加盟流程与界面;取得权限后执行真实分账与对账。 | | BKG-007 | 后台微信支付配置 | M05-D/M08 | PARTIAL | `1680d73` | 已提供收款账户、分账接收方、门店/全局比例策略和授权状态 API;私钥、APIv3 Key 和接收方真实标识只使用环境引用,查询仅返回脱敏信息。 | Vue 后台页面待 M08;真实商户与服务商授权未提供。 | M08 接入响应式配置页面;授权后完成生产验收。 | -| DEV-003 | 设备管理 | M06-B/M08 | PARTIAL | `74a67ac` | 已实现 DeviceID/IMEI/ICCID/型号/固件/信号/能力资产,控制箱通道、智慧插座负载、Sub-1G 父子拓扑、状态快照、开放告警和维护记录查询;门店数据范围生效。 | 尚无后台/手机页面,在线状态仍需 M06-C/G 由真实消息更新。 | M06-C 接入协议消息与幂等;M08 实现响应式界面。 | -| BKG-004 | 后台设备管理 | M06-B/M08 | PARTIAL | `74a67ac` | 已提供设备入库、列表、拓扑、通道绑定、Sub-1G 绑定、状态和维护 API;同一房间控制目标唯一,控制箱与智慧插座重复负载被数据库拒绝。 | Vue 后台页面和真实设备扫码入库待 M08/M06-G。 | M06-C/D/E 接入协议后补真实状态;M08 实现管理页面。 | +| DEV-003 | 设备管理 | M06-B/M08 | PARTIAL | `9144fa8` | 已实现 DeviceID/IMEI/ICCID/型号/固件/信号/能力资产,控制箱通道、智慧插座负载、Sub-1G 父子拓扑、状态快照、开放告警和维护记录查询;插座过载、过温、过流、过压/欠压、功率和温度阈值告警已接入;门店数据范围生效。 | 尚无后台/手机页面,真实硬件在线/计量仍需 M06-G 实物更新。 | M06-F 接入订单自动联动;M08 实现响应式界面。 | +| BKG-004 | 后台设备管理 | M06-B/M08 | PARTIAL | `9144fa8` | 已提供设备入库、列表、拓扑、通道绑定、Sub-1G 绑定、状态、维护和插座控制 API;同一房间控制目标唯一,控制箱与智慧插座重复负载被数据库拒绝。 | Vue 后台页面和真实设备扫码入库待 M08/M06-G。 | M06-F 接入订单自动联动;M08 实现管理页面。 | | IOT-006 | MQTT 消息幂等 | M01/M06-C | DONE | `e795cdb` | 上行按租户、设备、Topic 和 payload SHA-256 唯一;QoS 1 重复消息只增加 `receive_count`,不重复更新命令或设备副作用;WSL MySQL 8.4.9 实测两次 ACK 仅一条事件。 | - | M06-D/E 继续复用同一消费链路。 | | IOT-007 | 命令状态机 | M01/M06-C | DONE | `e795cdb` | 已实现 `PENDING/PUBLISHED/ACKED/FAILED/TIMEOUT/UNKNOWN/CANCELLED` 数据模型,发布失败、ACK 结果、超时和 13 位命令 ID 均有测试;发布成功不等于 ACK。 | - | M06-D/F 接入业务权限、补偿与过期取消。 | -| DEV-001 | 一键开门与设备动作 | M06-D/M06-F | PARTIAL | `d15fd3f` | 已提供控制箱控电、磁力锁、TTS、LED、订单任务与 Sub-1G 门锁控制服务;离线不发送,门店范围与常开权限生效,命令返回 PUBLISHED 而非假成功。 | 顾客订单权限编排属于 M06-F,真实硬件属于 M06-G。 | M06-F 接入有效订单/分享令牌与组合动作。 | +| DEV-001 | 一键开门与设备动作 | M06-D/M06-F | PARTIAL | `9144fa8` | 已提供控制箱控电、磁力锁、TTS、LED、订单任务、Sub-1G 门锁和智慧插座控制服务;离线不发送,门店范围与常开权限生效,命令返回 PUBLISHED 而非假成功。 | 顾客订单权限编排属于 M06-F,真实硬件属于 M06-G。 | M06-F 接入有效订单/分享令牌与组合动作。 | | IOT-002 | 控制箱接入 | M06-D | PARTIAL | `d15fd3f` | `ConctolPower/Crldoor/PlayTTS/stopTTS/CrlLED/task/addtask/canceltask` 已通过适配器、命令持久化和 API 接入。 | 缺控制箱实物逐路负载、门磁、TTS 和任务回包联调。 | M06-G 执行实物矩阵。 | | 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 完成实物计量、开关、本地任务和保护事件矩阵。 | diff --git a/docs/hardware-vendor.md b/docs/hardware-vendor.md index ade60fb..88518ae 100644 --- a/docs/hardware-vendor.md +++ b/docs/hardware-vendor.md @@ -4,5 +4,5 @@ |---|---|---|---| | 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 完成能力识别、计量和保护事件。 | +| 4G 智慧插座 | V5.4 已固化查询、开关、本地任务和事件;PDF 原件缺失 | PARTIAL | M06-E 已完成查询、开关、本地任务和保护告警;M06-G 补实物计量与保护断电矩阵。 | | EMQX Broker | 固定主机 `101.42.38.246`;已生成安装说明、ACL 模板和菜单检查 | PARTIAL | 生产 Ubuntu 安装、端口限制和 ACL 应用后复验。 | diff --git a/docs/module-status.md b/docs/module-status.md index 186b2c1..2acdade 100644 --- a/docs/module-status.md +++ b/docs/module-status.md @@ -3,15 +3,15 @@ ```yaml execution_cursor: current_module: M06 - current_stage: M06-E + current_stage: M06-F stage_status: TODO - last_completed_stage: M06-D - next_stage: M06-E - last_engineering_commit: d15fd3f + last_completed_stage: M06-E + next_stage: M06-F + last_engineering_commit: 9144fa8 last_push_verified: true base_branch: main blocked_reason: "" - updated_at: 2026-06-22T22:50:00+08:00 + updated_at: 2026-06-24T00:00:00+08:00 ``` | 模块 | 状态 | 最近提交 | 最近开发日志 | 备注 | @@ -22,7 +22,7 @@ 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 | `d15fd3f` | docs/devlogs/2026-06-22-M06-D-控制箱与门锁.md | M06-A 至 D 已完成 MQTT、拓扑、协议幂等、控制箱与 Sub-1G 门锁业务控制、安全门禁、事件脱敏和告警;无实物联调,继续 M06-E 智慧插座。 | +| M06 设备、MQTT 与真实硬件联动 | PARTIAL | `9144fa8` | docs/devlogs/2026-06-24-M06-E-智慧插座.md | M06-A 至 E 已完成 MQTT、拓扑、协议幂等、控制箱、Sub-1G 门锁和智慧插座业务控制、安全门禁、事件脱敏和告警;无实物联调,继续 M06-F 订单自动联动。 | | M07 保洁、通知、任务和语音播报 | TODO | - | - | - | | M08 微信原生小程序完整业务 | TODO | - | - | - | | M09 后台管理端完整业务 | TODO | - | - | - | diff --git a/docs/mqtt-protocol-mapping.md b/docs/mqtt-protocol-mapping.md index 30785c5..92a8690 100644 --- a/docs/mqtt-protocol-mapping.md +++ b/docs/mqtt-protocol-mapping.md @@ -6,7 +6,7 @@ M06-C 已按 V5.4 中固化的厂商协议字段实现适配器、上行解析 |---|---|---|---|---| | 4G 智能门禁控电箱 | `/devicesend/{DeviceID}`、`/devicewill/{DeviceID}`、`/deviceaccept/{DeviceID}` | 双向 | `basicInfo/mqttConfig/startVoice/task/taskconfig`、`ConctolPower`、`Crldoor`、`PlayTTS/stopTTS`、`CrlLED`、`task/addtask/canceltask` | PARTIAL | | Sub-1G 智能门锁 | 经父控制箱使用相同三个 Topic | 双向 | `AddDevice`、`CtrlDevice`;`open/close/setkey/delkey/setcard/delcard/factoryreset` | PARTIAL | -| 4G 智慧插座 | `/devicesend/{DeviceID}`、`/devicewill/{DeviceID}`、`/deviceaccept/{DeviceID}` | 双向 | `basicInfo/workInfo`、`on/off`、`localtask`、`clearTask` | PARTIAL | +| 4G 智慧插座 | `/devicesend/{DeviceID}`、`/devicewill/{DeviceID}`、`/deviceaccept/{DeviceID}` | 双向 | `basicInfo/workInfo`、`on/off`、`localtask`、`clearTask`;过载、过温、过流、过压/欠压、功率和温度阈值告警 | PARTIAL | ## M06-A ACL 基线