docs(M06-C-R1): 回填协议纠偏与游标

This commit is contained in:
Codex
2026-08-10 16:28:11 +08:00
parent dabc656f63
commit 3ff68d103b
9 changed files with 76 additions and 35 deletions
+18 -7
View File
@@ -1,12 +1,12 @@
# MQTT 协议映射
M06-C 已按 V5.4固化的厂商协议字段实现适配器、上行解析、命令关联、消息幂等与死信。仓库当前未找到总纲点名的两份 PDF 原件,因此尚不能完成 PDF 页码级复核;不得把此状态写成“PDF 已阅读”
M06-C-R1 已依据 V5.6完成的两份厂商协议原件审计,校正控制箱与 Sub-1G 门锁的 Wire JSON、上行结果、事件、脱敏和离线处理。智慧插座的原件差异已识别,当前游标在 M06-E-R1,未完成前不得沿用旧 `powerW/temperature/overLoad` 假字段作为有效协议结论
| 设备 | Topic/命令 | 方向 | 字段 | 状态 |
|---|---|---|---|---|
| 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/mqttConfig/startVoice/task/taskconfig``ConctolPower``Crldoor``PlayTTS/stopTTS``CrlLED``task/addtask/canceltask` | PROTOCOL_FIXTURE_PASS |
| Sub-1G 智能门锁 | 经父控制箱使用相同三个 Topic | 双向 | `AddDevice``CtrlDevice``open/close/none/setkey/delkey/setcard/delcard/factoryreset` | PROTOCOL_FIXTURE_PASS |
| 4G 智慧插座 | `/devicesend/{DeviceID}``/devicewill/{DeviceID}``/deviceaccept/{DeviceID}` | 双向 | `basicInfo/workInfo/localtask/mqttConfig``on/off``localtask/clearTask`、保护配置与特殊断电事件 | M06-E-R1 DOING |
## M06-A ACL 基线
@@ -22,7 +22,18 @@ M06-C 已按 V5.4 中固化的厂商协议字段实现适配器、上行解析
- 命令 ID 只允许 1-13 位数字,默认生成 10 位秒时间戳加 3 位滚动序号。
- 下发先写 `qipai_iot_commands=PENDING`MQTT 发布成功后转 `PUBLISHED`,有效 ACK 才转 `ACKED`
- `fail/busy/unconfirm/timeout/full` 统一转 `FAILED` 并保留厂商结果码;超时扫描可把未回包命令转 `TIMEOUT`
- 上行先校验 Topic、资产 DeviceID 和 JSON;异常 Topic、未知设备、非法 JSON/字段进入 `qipai_iot_dead_letters`
- 结果按命令判别:`task` 接受 `ok/busy/fail/unconfirm``CtrlDevice` 接受 `ok/fail/timeout/full``PlayTTS` 接受 `ok/paraerror`;其他已知结果还包括 `error/update`
- 未知或不属于当前命令的结果保存原值并标准化为 `UNKNOWN_VENDOR_RESULT`,命令转 `FAILED`,同时写协议告警和死信;不得让消费进程崩溃或误判成功
- 上行先校验 Topic、资产 DeviceID 和消息边界;异常 Topic、未知设备、非法 JSON/字段进入 `qipai_iot_dead_letters``/devicewill/{DeviceID}` 明确兼容原始文本 `close`,此情形直接更新离线状态,不作为非法 JSON。
- QoS 1 重复消息命中唯一键后只增加 `receive_count`,不重复执行 ACK、状态快照或后续业务副作用。
- 原始 JSON 与标准化 JSON 分开保存;协议字段大小写和拼写不得在适配器外重新拼装。
- 原始 JSON 与标准化 JSON 分开保存;`record.content` 和门锁密码/卡号 `value` 在持久化前只保留 SHA-256 与脱敏尾号,协议字段大小写和拼写不得在适配器外重新拼装。
## M06-C-R1 精确出站映射
| 领域输入 | Canonical Wire | 约束 |
|---|---|---|
| TTS `volume/firstPlay/loop/speaker/style/speed/intonation` | `action=PlayTTS` + `vol/firstPlay/loop/speaker/style/speed/intona/id` | `vol 0-10``firstPlay 0/1``speaker 0-5``style 0-2``speed/intona 0-10` |
| 配对等待 `timeout` | `action=AddDevice,time,id` | 首个无 `subtype/subID``ok` 只表示进入配对窗口;最终包才将命令 ACK 并固化拓扑 |
| 门锁动作 | `action=CtrlDevice,subtype,subID,order,id[,value]` | `subtype` 仅 14/15;密码按连续 6 位分组,卡号按连续 8 位十六进制分组;卡号发送大写 |
`delkey/delcard value=all``factoryreset` 仅平台管理员加固定确认短语可下发;凭据管理至少要求门店管理员权限。`magstate``taskfinish``Poweron``connected``record` 均按事件处理,不进入命令 ACK。