跳转至

固件升级任务

固件升级任务把多台设备升级到同一个目标版本,并逐台跟踪每台设备的进度。本页面是 平台侧托管固件 OTA 的入口;固件由设备自己拉取,平台从不下发。

固件来源

每个任务只指定一种来源:

  • 平台固件包 — 上传到"固件包"页面的产物,版本标签取自固件包。
  • 外部 URL — 旧版固件位置。需自行提供版本标签、https 下载地址、 SHA-256 摘要(64 位十六进制)和字节大小;设备直接从该地址下载。

平台固件包可以下发到网关子设备,由网关中继进度帧,因此两类设备的逐台视图一致。

目标选择

目标可通过两种方式选择:

  • 选择设备 — 显式设备列表,创建时即固定成员。
  • 机群选择器 — 任意组合设备型号、设备分组和客户;设置的维度做 AND 组合。机群在任务创建时一次性解析并快照,之后加入或移出选择范围的设备 不会影响运行中的任务。选择器上限 1000 台设备,表单会在提交前显示当前 匹配的活跃设备数。

绑定某型号的平台固件包只能投放到该型号;选择了不兼容的设备(或选择器覆盖 了其他型号)会被拒绝。已经上报目标版本的设备不会重复刷写,其 item 直接创建为 skipped / already_current。

灰度批次与安全策略

高级选项区可以让任务分批渐进开放:

  • 一次性全量(默认)— 所有目标首批立即开放,与历史单批行为一致。
  • 按比例分批或按固定数量分批 — 首批创建即开放,后续批次需等上一批 结算并经过观察间隔后才开放。后续批次在服务端持有,开放前不可下载。
  • 观察间隔 — 上一批结算后、开放下一批前等待的秒数。

安全熔断条件会自动熔断任务并停止开放后续批次:

  • 失败率达到熔断阈值(默认结算设备的 20%);
  • 连续失败达到阈值(默认 5 台);
  • 下载停滞看门狗(默认 30 分钟无进展);
  • 重启确认看门狗(默认 2 小时未确认)。

熔断触发时已开始刷写的设备不受打扰、继续完成,其结果仍会记录,而任务保持 aborted,抽屉顶部显示熔断原因。留空某字段即继承平台默认值。

离线网关不再导致任务失败:其设备保持 pending,网关重新上线时平台自动补发。

成功口径

成功口径决定设备何时算作"成功"。任务创建时设置一次,对本任务内所有设备生效。

  • 设备上报即成功(默认)— 设备上报应用成功后任务立即完成。
  • 重启后确认 — 设备必须重启并重新连接、上报正在运行的版本后才算成功。 若上报版本不一致则任务失败并记 version_mismatch;若设备始终未重启则 失败并记 reboot_timeout。

当设备每次应用后都会上报运行版本时,请选"设备上报即成功";只有当必须确认新 镜像真正启动后才能宣布成功时,才选"重启后确认"。

列表

每行显示目标版本、聚合状态、进度、设备计数(总数、成功、失败、取消、跳过)和 创建时间。带机群选择器标签的任务表示目标来自选择器快照。点开任务可查看逐台 设备进度、灰度任务的当前开放批次及熔断原因。状态筛选支持 paused(已暂停)和 aborted(已熔断)等聚合状态。

逐台设备进度

抽屉按设备列出每台目标设备,及其网关(子设备)、当前阶段、进度百分比、消息和 最后更新时间。展开某台设备可查看事件时间线:每个阶段边界都会记录,因此可以看 到它何时接受、何时开始下载、何时校验、何时应用、何时确认,并显示结果码以及上报 来源(平台 / 设备 / 网关)。

设备阶段

pending → initiated → downloading → downloaded → verified → updating → updated(已应用,等待重启)→ rebooting → confirmed。 终态为 succeeded、failed、canceled 和 skipped。

高频进度(百分比、字节数)只实时更新行,不会写入时间线;时间线只记录阶段变化和 最终结果。

暂停与继续

对运行中的任务点击暂停:不再开放新批次,重连的网关也不会收到新设备,但 已开始刷写的设备不受打扰、继续完成。继续会立即补发当前已开放批次。暂停中的 任务也可以取消;对已终态的任务执行暂停会被拒绝。

取消任务

取消按设备当前进度分级生效:

  • pending 设备直接跳过,不开始升级。
  • 仍在下载或尚未应用的设备标记为 canceled;网关会停止为它们中继下载。
  • 已处于 updating、updated 或 rebooting 的设备不受打扰、继续执行。其结果 仍会记录,但任务状态保持 canceled。

取消是终态且幂等——对已取消的任务再次取消不会改变任何东西;其它终态会拒绝该请求。

结果码

失败设备带有机器可读的结果码,例如 integrity_check_failed、out_of_ram、 flash_full、model_mismatch、version_mismatch、reboot_timeout 或 download_no_progress。无需翻日志即可知道失败原因。