Files
qipai/docs/mqtt-protocol-mapping.md
T
2026-08-10 16:28:11 +08:00

3.9 KiB
Raw Blame History

MQTT 协议映射

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/taskconfigConctolPowerCrldoorPlayTTS/stopTTSCrlLEDtask/addtask/canceltask PROTOCOL_FIXTURE_PASS
Sub-1G 智能门锁 经父控制箱使用相同三个 Topic 双向 AddDeviceCtrlDeviceopen/close/none/setkey/delkey/setcard/delcard/factoryreset PROTOCOL_FIXTURE_PASS
4G 智慧插座 /devicesend/{DeviceID}/devicewill/{DeviceID}/deviceaccept/{DeviceID} 双向 basicInfo/workInfo/localtask/mqttConfigon/offlocaltask/clearTask、保护配置与特殊断电事件 M06-E-R1 DOING

M06-A ACL 基线

客户端 允许发布 允许订阅 状态
设备客户端 qipai-device-{DeviceID},用户名等于 DeviceID /devicesend/{DeviceID}/devicewill/{DeviceID} /deviceaccept/{DeviceID} 模板已固定,生产未应用
后端服务 qipai_backend_prod /deviceaccept/+ /devicesend/+/devicewill/+ 模板已固定,生产未应用
普通客户端 禁止 $SYS/##+/# 禁止未显式允许主题 模板已生成

后端 MQTT.js 固定使用 MQTT 3.1protocolVersion: 3)、QoS 1、持久会话、自动重连,并在每次连接成功后显式恢复两个上行订阅。单条应用消息默认限制为 64 KiB。

M06-C 消息规则

  • 命令 ID 只允许 1-13 位数字,默认生成 10 位秒时间戳加 3 位滚动序号。
  • 下发先写 qipai_iot_commands=PENDINGMQTT 发布成功后转 PUBLISHED,有效 ACK 才转 ACKED
  • 结果按命令判别:task 接受 ok/busy/fail/unconfirmCtrlDevice 接受 ok/fail/timeout/fullPlayTTS 接受 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 分开保存;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-10firstPlay 0/1speaker 0-5style 0-2speed/intona 0-10
配对等待 timeout action=AddDevice,time,id 首个无 subtype/subIDok 只表示进入配对窗口;最终包才将命令 ACK 并固化拓扑
门锁动作 action=CtrlDevice,subtype,subID,order,id[,value] subtype 仅 14/15;密码按连续 6 位分组,卡号按连续 8 位十六进制分组;卡号发送大写

delkey/delcard value=allfactoryreset 仅平台管理员加固定确认短语可下发;凭据管理至少要求门店管理员权限。magstatetaskfinishPoweronconnectedrecord 均按事件处理,不进入命令 ACK。