固件升级任务¶
固件升级任务把多台设备升级到同一个目标版本,并逐台跟踪每台设备的进度。本页面是 平台侧托管固件 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。无需翻日志即可知道失败原因。