验证状态:存在关键缺口,不可作为完整契约发布。Web 发送与会话订阅、应答消费已源码核验;设备固件是最终消费者,其源码不在本工作区,字段校验、持久化与错误行为缺证。 适用基线:源码归纳 @ 2026-09-14
按 struct 名称向设备写入配置修改,用于设备远控各设置页的单字段或整表提交。本页是 device/{deviceNo}/iot/configs/v1 上 sub:"set" 写命令的唯一操作正本;读取见读取设备配置。本页不承诺设备已应用配置,Web 仅以"收到应答"作为成功信号。
| 页面/功能 | 写入 struct |
|---|---|
| 远控设置·录制提交(整表与单字段) | RECORD_CFG_S |
| 远控设置·直播编码提交 | SLAVEENC_CFG_S |
| 远控设置·视频编码提交 | MASTERENC_CFG_S |
| 远控设置·声音提交(整表把同一表单对象写入 3 个 struct;单字段按 struct 写入) | AUDIO_CFG_S、UINOTIFY_CFG_S、VOLUME_CFG_S |
远控设置·时间提交(整表剔除 TimeSync) |
TIME_CFG_S |
| 远控设置·安全提交(单字段;密码按平台约定先作摘要变换) | GUDISK_CFG_S、USER_CFG_S |
| 远控设置·移动网络提交 | MOBILENET_CFG_S |
远控设置·设备用户提交(整表剔除只读 SerialNo) |
ZFYGB_CFG_S |
| 远控设置·抓拍提交 | JPEG_CFG_S |
| 远控设置·WiFi 开关提交 | WIFIDEV_CFG_S |
| 远控设置·WiFi 连接/自动连接 | WIFICLI_CFG_S(SelectIndex) |
对应 inventory operationId:mqtt-set-configs-v1-device-var-iot-configs-v1-* 10 项与 mqtt-module-device-var-iot-configs-v1-1e1b661c。
MQTT 发布 device/{deviceNo}/iot/configs/v1(Web → Broker → 设备直发,中心网关不消费;QoS/retain 等 wire 细节见业务页)— 按 struct 名称向设备写入配置修改(sub:"set")。
设备直连 configs 通道的清单口径见MQTT 主题清单 · 服务端订阅面(网关默认订阅清单无 device/+/+/configs/#,该 topic 不在中心消费/发布点清单内);通道业务语义见设备业务 · mqtt-bridge 设备消息链。
载荷形态 {sub:"set", id, reply, params}——params 为 struct 名到字段对象的映射(单字段提交时对象仅含一个键),应答按 reply topic 回流。
| 层级 | 判据 |
|---|---|
| 发布完成 | publishAsync Promise 成功;仅代表 Broker 发布调用完成 |
| 请求关联 | 应答到达专用 reply topic 即消费;不校验 id 回显;无超时——收不到应答时 UI 永远停留在等待态 |
| 设备执行 | 不可观测:收到 data 不代表设备已持久化或生效。唯一的间接确认是 Web 在写后重新读取(见下) |
| 业务完成 | 页面惯例:写应答到达即 toast 成功,多数页面随后清空缓存重新 get 以回读实际值(settings.config 同构;settings.record set 应答即回填) |
WIFICLI_CFG_S.SelectIndex)后设备侧连接需要时间,Web 以 2 秒间隔轮询读取 16 秒窗口观察结果,这是前端观察手段而非协议确认机制。PQueue concurrency:1)避免并发发布,卸载时清空队列(如)。set 分支的字段校验、持久化时机、失败应答形态、部分成功语义均无法核验。params 中未列字段的设备行为(保留/重置/拒绝)缺证;声音页整表把同一对象写入三个 struct 的实际设备效果缺证。status/error)缺证,错误处理只能按"无应答"设计。