触发采集服务器固件信息下发(server retrieve)

验证状态:存在关键缺口,不可作为完整契约发布。Web 发布与中心设备服务的受理链(订阅、路由、消费者、应答发布)已源码核验;server/{deviceNo}/iot/deliver/v1 的最终读者是采集服务器,其源码不在本工作区,接收后行为与完成语义断链。 适用基线:源码归纳 @ 2026-09-14

用途与场景

采集服务器管理页「固件升级」按钮触发:请求中心为指定采集服务器编号生成固件上报数据,并把结果投递到该服务器的 server/{deviceNo}/iot/deliver/v1。本页是 server/{deviceNo}/iot/retrieve/v1(采集服务器变体)的唯一操作正本;设备变体 device/{deviceNo}/iot/retrieve/v1触发设备固件与文件上报,两者共用中心同一消费链,仅 topic 前缀与调用页面不同。

使用位置

页面/功能 items
采集服务器列表·固件升级 ["firmware"]

对应 inventory operationId:mqtt-module-server-var-iot-retrieve-v1-c1db2bc6(合并交接时由整合票 20 认领并发布本正本)。

端点

MQTT 发布 server/{serverNo}/iot/retrieve/v1(中心消费后把应答投递到采集服务器侧 server/{serverNo}/iot/deliver/v1,Web 不可见)— 请求中心为指定采集服务器生成固件上报数据并下发。

谓词族契约全量事实(identity ∈ device/server/user、汇入静态 RETRIEVE destination、消费方)见 MQTT 主题清单 · 谓词族yaml 详解 · retrieve;应答信封与 deliver 投递链的业务语义见设备业务 · mqtt-bridge 设备消息链。载荷形态 {sub:"retrieve", id, reply, params:{items:[]}}——id 为 Web 伪装的采集服务器身份(server,{serverNo},iot,simulate-sending),reply 固定为 server/{serverNo}/iot/deliver/v1items 本变体固定 ["firmware"]

动线与完成判据

层级 判据
发布完成 publishAsync Promise 成功;Web 随即 toast「操作成功/已发送新固件信息」——只代表 Broker 接收发布调用
中心受理 无 Web 可观察信号:应答发往采集服务器 topic,Web 不订阅;受理失败(如 id 非法)同样静默
采集服务器执行 不可观测:最终消费者源码不在工作区,收到 deliver 应答后的行为无任何回传
中心副作用 每次调用把 server,{deviceNo},iot 标记为在线并刷新最后在线时间,影响在线统计口径

错误与边界

  • 中心技术异常以固定 internal error 应答(不回传原始异常);固件业务缺失(设备不存在、无固件包)不报错,而是成功应答内带 data.firmware.error 键——采集服务器如何处理这两种形态缺证。
  • 消息 JSON 解析失败、id 非法时中心仅记 error 日志,无应答、无重试。
  • params.replyNumberMax/replyInterval 未由 Web 使用;若 App 设置,取值被钳制在 1-10 次、1-10 秒,且续发前检查该 id 前缀在线状态。
  • MQTT 族公共边界见MQTT 连接与消息边界

调用关系与资源清理

  • 无订阅、无会话资源;命令为一次性发布。
  • 与设备变体共用中心消费链(设备变体正本);与采集服务器读命令族(本域 data/v1 各正本)并行使用同一 MQTT 会话。

已知缺口

  1. 采集服务器对 server/{deviceNo}/iot/deliver/v1 的接收、固件下载/升级与失败重试行为缺证(最终消费者源码不在工作区)——本页因此标「存在关键缺口,不可作为完整契约发布」。
  2. 中心固件查询不区分 device/server 前缀:采集服务器编号在设备固件表的查询结果语义未联调核验。
  3. Broker ACL 与部署环境订阅清单一致性待部署核验。