Skip to main content

eHome App 端详细需求设计文档

M09 OTA升级(对应需求:FR-1801~1806)

项目内容
所属项目eHome 智能家居硬件配套 APP + 云端后台定制开发项目
设计依据《eHome智能家居项目需求文档(PRD V1.1)》OTA固件升级章节、第8章、NFR-03(升级成功率≥99%)/NFR-04(可用性)/NFR-05(安全性,签名校验);《eHome项目页面功能工时费用明细表》M09模块
范围说明本模块覆盖固件版本检测、升级详情与更新日志、下载/安装全流程、灰度发布与强制升级策略、批量升级、自动升级设置、升级历史与失败恢复(回滚);不包含设备配网(属 M03)、传感器校准(属 M07,本模块仅提供升级锁定状态与能力变更通知)、APP自身版本更新(属 M01 应用内升级,复用本章下载组件规范但独立发布通道)
编号衔接说明M07/M08 文档中引用的"OTA 锁定""最低固件版本""能力变更通知"均由本模块提供;本文档 FR 编号按工时表 M09 行顺延为 FR-1801~1806
优先级P0(MVP必须;固件缺陷修复与功能迭代依赖OTA通道,无OTA则硬件售后成本不可控;同时是安全漏洞修补的生命线)
里程碑M2 完整功能期开发(依赖 M01 账号、M02 家庭/设备、M03 配网、M04 设备状态;固件升级协议与分区方案须 M1 冻结;灰度策略依赖 M12 运营后台)
文档用途直接交付 UI 设计、Flutter 开发(APP端)、云端开发、固件联调、测试QA、运维(发布流程)

需求编号映射(以工时表 M09 功能项为准):

需求编号功能项
FR-1801升级检测与状态总览(红点提醒、可升级列表、当前版本、强制升级拦截)
FR-1802升级详情页(版本号、更新日志、包大小、预计耗时、注意事项、灰度标识)
FR-1803下载与安装全流程(进度展示、断点续传、升级锁定、失败重试与自动回滚)
FR-1804升级设置(自动升级开关、升级时间窗、仅Wi-Fi下载、通知偏好)
FR-1805批量升级与升级历史(多设备并行、逐台进度、历史记录与结果追溯)
FR-1806OTA升级流程 UI 设计(进度组件、双主题、7语种、无障碍)

1. 模块概述与设计原则

1.1 模块范围

序号页面/功能项需求编号类型优先级
1升级中心页(状态总览+可升级列表)FR-1801APP+云端P0
2升级详情页(更新日志+确认升级)FR-1802APP+云端P0
3下载与安装进度页(含失败恢复)FR-1803APP+云端+固件P0
4升级设置页FR-1804APP+云端P0
5批量升级页+升级历史页FR-1805APP+云端P0
6OTA UI 规范FR-1806UIP0

边界与衔接说明:

  • 入口A:「我的」Tab →【固件升级】(含可升级数量红点)→ 本模块 O01(升级中心);
  • 入口B:M04-R01 设备详情页【检查更新】/【有新版本】横幅 → O02(该设备升级详情);
  • 入口C:M07 校准页"固件不支持校准"→ [升级固件] 携带目标版本 → O02;
  • 入口D:M06 推送"固件更新可用/升级完成/升级失败"→ 深链 O02/O03/O06;
  • 入口E:M02 设备列表固件过旧标记 → O02;
  • 出口:升级成功后能力模型刷新(通知 M02/M07/M08 重拉能力)→ 返回来源页;升级锁定状态供 M07/M08 事务前置校验查询;灰度与发布配置由 M12 运营后台管理;失败工单 → M10。

1.2 设计原则

  • 升级不打断生活:默认下载不打扰、安装在用户确认或时间窗内执行;升级中设备功能明确降级提示(锁定态),而非无响应假死。
  • 变砖零容忍:固件 A/B 双分区 + 签名校验 + 安装失败自动回滚旧分区;APP 侧任何异常(断网/杀进程/低电量)都不允许设备停留在不可用状态;回滚结果必须可确认。
  • 灰度可控可停:所有发布走灰度管道(内部→1%→10%→50%→100%),云端可一键暂停/撤回发布;强制升级仅限安全漏洞级别且需产品+安全双审批。
  • 信息透明:更新日志用户可读(价值导向文案,非工程术语);包大小/预计耗时/电量与网络要求前置告知;失败原因映射用户可懂文案+自助恢复指引。
  • 一致性单源:版本号、能力声明、最低支持版本全部以云端设备影子(Device Shadow)为唯一事实源;APP 不缓存版本判定逻辑,只消费云端"可升级/强制/灰度中"结论。
  • 低功耗设备适配:电池设备(传感器/门窗磁)升级耗时长且失败风险高——强制电量阈值(≥50%或充电中)、仅在网关代理下升级、明示"升级期间设备不可用约X分钟"。
  • 双主题 + 7语种:更新日志 CMS 按 7 语种维护,缺失回退英文并标记;进度文案、注意事项、失败原因全资源文件。

1.3 用户与前置条件

  • 用户状态:必须已登录(M01);未登录拦截,成功回跳来源页。
  • 权限前置:手动升级/批量升级需家庭管理员或设备编辑权限成员;自动升级设置仅管理员可改;普通成员 O01 为只读态(可见版本与历史,升级按钮置灰+提示)。
  • 设备前置:设备在线(离线设备展示"待设备上线后升级",支持预约);电量≥30%(电池设备≥50%);未处于其他事务(校准 M07/场景执行 M08)——升级开始前云端做事务互斥锁定。
  • 网络前置:固件包下载走云端 CDN;设备侧下载需 Wi-Fi/网关在线;APP 侧"仅Wi-Fi下载"设置约束预下载行为。
  • 版本前置:跨版本升级路径由云端判定(是否需中间版本逐级升级),APP 仅展示结论;不允许降级(云端拒绝旧版本包)。

2. 页面结构与流程图

2.1 页面导航结构

入口A:我的→[固件升级](红点N) ──► O01
入口B:M04-R01[检查更新/新版本横幅] ──► O02
入口C:M07[升级固件] ──► O02(携带目标版本)
入口D:M06推送 ──► O02/O03/O06深链
入口E:M02设备列表[固件过旧] ──► O02

O01 升级中心页
├─ 汇总卡(N台可升级 / 全部最新 / M台升级中)
├─ 可升级列表(设备+当前版本→新版本+强制标记+灰度标记)
├─ 升级中列表(实时进度缩略)
├─ [全部升级] ──► O05 批量升级
├─ [升级设置] ──► O04
├─ [升级历史] ──► O06
└─ 待上线预约区(离线设备+预约开关)

O02 升级详情页(单设备)
├─ 版本信息卡(当前vX → 新版vY、包大小、预计耗时、发布日期)
├─ 更新日志(分段:新功能/优化/修复;多语言CMS)
├─ 升级前置检查结果(电量/网络/事务锁定/存储,逐项✓✘)
├─ 注意事项(升级期间设备不可用/勿断电/预计时长)
├─ [下载并升级] / [仅下载](按设置)
├─ [预约升级](离线设备/时间窗)
└─ 强制升级态:不可关闭弹窗+倒计时+唯一[立即升级]

O03 下载与安装进度页
├─ 阶段步骤条:下载→校验→传输至设备→安装→重启验证
├─ 环形进度+阶段文案+剩余时间
├─ 后台执行提示(可离开页面,M06推送结果)
├─ 失败态:原因+自助恢复指引+[重试]/[联系客服]
└─ 成功态:新版本摘要+[完成](能力变更提示)

O04 升级设置页
├─ 自动升级总开关(默认关)
├─ 自动下载新固件(仅Wi-Fi开关)
├─ 自动安装时间窗(默认02:00-05:00,可改)
├─ 升级完成通知/失败通知开关(经M06)
├─ 灰度计划说明入口(H5)
└─ 家庭级设置(管理员)与设备级覆盖(P1)

O05 批量升级页
├─ 设备多选(全选/按房间/按品类)
├─ 前置检查汇总(N台就绪 / M台电量不足 / K台离线)
├─ 并行策略展示(网关子设备串行、Wi-Fi设备并行≤5)
├─ 逐台进度列表(阶段+百分比+状态)
└─ 汇总结果(成功N/失败M+[失败项重试])

O06 升级历史页
├─ 时间线(设备+版本vX→vY+时间+结果徽标+耗时)
├─ 详情(失败原因/回滚记录/重试次数)
├─ 筛选(设备/结果/时间范围)
└─ 空态+30天保留说明(云端保留全生命周期,APP默认展示近30天可加载更多)

2.2 核心状态机一:设备升级任务生命周期

[无可用更新](当前=最新已发布版本)

├──(云端灰度命中该设备)──► [更新可用] ──► O01红点/M06推送(按设置)
│ │
│ ├──(用户确认升级 / 自动升级时间窗触发 / 预约到时)──► [前置检查]
│ │ │
│ │ ├──检查失败(电量/网络/事务锁定)──► [条件不满足] ──► 提示具体原因
│ │ │ ├──(电量不足)──► "请充电至50%以上" + 条件满足后自动恢复流程
│ │ │ └──(校准/场景事务中)──► "设备正在执行其他任务" + 事务结束后重试
│ │ │
│ │ └──检查通过──► [下载中](CDN,断点续传)
│ │ │
│ │ ├──下载失败(网络)──► [下载失败] ──► 自动重试3次(指数退避) ──► 仍失败提示用户
│ │ └──下载完成──► [校验中](签名+哈希)
│ │ │
│ │ ├──校验失败──► [升级失败·包损坏] ──► 丢弃包+重新下载1次+告警运维
│ │ └──校验通过──► [传输中](云→设备/网关→子设备)
│ │ │
│ │ └──► [安装中](写入备用分区)
│ │ │
│ │ ├──(固件自检通过→切换分区→重启)──► [验证中]
│ │ │ │
│ │ │ ├──(新版本上线+影子版本回读一致)──► [升级成功]
│ │ │ │ └──► 刷新能力模型+通知M02/M07/M08+M06推送+写历史
│ │ │ └──(超时10min未上线/版本不符)──► [升级失败·验证超时]
│ │ │
│ │ └──(自检失败)──► [自动回滚](切回旧分区重启)
│ │ ├──(旧版本上线确认)──► [已回滚·升级失败] ──► 设备可正常使用+M06通知+告警运维
│ │ └──(回滚后仍未上线·罕见)──► [设备异常] ──► 强提示联系客服+工单(M10)+运维介入
│ │
│ ├──(用户取消,仅下载/传输阶段可取消)──► [已取消](清理临时包)
│ └──(云端撤回发布)──► [更新已撤回] ──► 列表移除+已下载包作废

└──(强制升级命中)──► [强制更新] ──► 设备功能锁定+APP不可关闭弹窗+倒计时 ──► 唯一路径[立即升级]

2.3 核心状态机二:发布与灰度管道(云端-运营视角)

[固件包上传](M12运营后台,研发签名+哈希登记)

├──(安全扫描+签名验证)──► [待发布]
│ │
│ └──(发布审批:普通=产品审批 / 强制=产品+安全双审批)──► [灰度中]
│ │
│ ├──阶段1:内部白名单设备(员工/测试机)──► 观察24h
│ ├──阶段2:1% 用户设备 ──► 观察指标
│ ├──阶段3:10% ──► 观察指标
│ ├──阶段4:50% ──► 观察指标
│ └──阶段5:100% ──► [全量发布]

├──(灰度熔断指标:升级成功率<98% / 回滚率>1% / 设备异常率>0.5%)──► [自动暂停]
│ ├──(运维确认修复后)──► [恢复灰度]
│ └──(确认版本缺陷)──► [撤回发布] ──► 已升级设备保持(不可降级)/未升级设备移除入口+公告

└──(全量发布后持续监控7天)──► [发布归档]

灰度命中规则:按 deviceId 哈希分桶 + 地区 + 硬件批次(HW revision) + 白名单;
同一硬件批次绑定固件兼容性矩阵,禁止跨批次误发(云端强校验)。


3. 页面级详细需求

O01 升级中心页(FR-1801)

页面目标:一屏掌握全家庭固件健康度,可升级设备清晰可操作,红点驱动触达。

页面元素:

元素规格与规则
顶部导航返回+标题"固件升级";右侧[升级设置]→O04、[历史]→O06
汇总卡三态:N台可升级(主态,含强制升级警示色)/全部已是最新版本(绿色✓插画)/M台升级中(进度摘要);[全部升级]主按钮(N≥2时展示)→O05
可升级列表每项:设备图标+名称+房间+当前版本→新版本+徽标([强制]红/[灰度]蓝/[推荐]橙)+[升级]按钮;点击条目→O02;排序:强制>升级中>推荐>灰度
升级中列表置顶分组:设备名+阶段文案+进度条缩略;点击→O03
待上线预约区离线可升级设备折叠区:"设备上线后自动提醒/自动升级(按O04设置)";预约开关
检查更新按钮底部[手动检查全部设备更新];触发全家庭版本比对,loading后刷新列表;节流:60s内不重复请求
权限只读态普通成员:[全部升级]/[升级]置灰+顶部提示"仅管理员可执行升级";可查看版本与历史
空态全部最新:插画+"所有设备固件均为最新版本"+上次检查时间;无设备:引导M03

逻辑规则:

  1. 数据来源:GET /ota/devices?familyId=(返回逐设备:当前版本/最新可用版本/是否命中灰度/是否强制/升级任务状态/电量/在线状态);进入拉取+下拉刷新+MQTT ota/status/{deviceId} 增量更新;
  2. 红点链路:云端推送"更新可用"→M01 我的Tab红点→O01角标数量;用户进入O01后消除红点(升级动作完成或明确忽略均消);强制升级红点不可消,直至完成;
  3. 检测时机:APP冷启动静默检查(节流12h)+进入O01检查+用户手动检查;静默检查仅刷新角标不推送(推送由云端灰度事件经M06按O04设置分发);
  4. 强制升级拦截:任一设备强制升级→O01顶部红色横幅不可dismiss+设备项置顶;进入该设备任何控制页(M04-R01)弹不可关闭弹窗(见O02);
  5. 版本判定单源:APP不做版本比较逻辑,直接消费云端 canUpgrade/forced/graying 字段;硬件批次兼容由云端保证;
  6. 离线设备:展示"待设备上线";预约开关=上线后自动进入升级流程(受O04时间窗约束);
  7. 埋点:O01曝光、红点点击转化、全部升级点击、单设备升级点击、强制横幅曝光→升级转化、检查更新使用率。

异常与边界:接口失败→展示缓存+重试;升级中设备被移除(M02)→云端终止任务并通知,列表移除+Toast;家庭无设备→空态引导配网;大量设备(>50台)列表虚拟化。

验收要点:三态汇总卡正确;四类徽标与云端一致;红点产生/消除链路(含强制不可消);权限只读;预约离线设备;手动检查节流;升级中实时进度缩略。


O02 升级详情页(FR-1802)

页面目标:升级决策信息完备透明,前置检查通过才允许发起,强制升级唯一路径。

页面元素:

元素规格与规则
版本信息卡设备名+房间;当前 vX.Y.Z → 新版 vA.B.C(大字号);包大小(MB);预计耗时(下载+安装,按设备类型预置);发布日期;灰度/强制徽标
更新日志分段Tab或分节:新功能/体验优化/问题修复/安全更新;CMS多语言内容;安全更新段红色强调;日志缺失回退英文+反馈入口"日志未翻译"
前置检查清单逐项自动检查:①电量≥30%(电池设备≥50%)②设备在线③网络质量(RSSI/网关连通)④无进行中事务(M07校准/M08场景执行)⑤存储空间;每项✓/✘+失败原因+[去处理]深链(充电提示/离线→M02-Q04/事务中→等待)
注意事项固定文案:升级期间设备不可用约X分钟;请勿断电;其他家庭成员将同步看到升级状态;子设备经网关升级时网关勿断电
[下载并升级]主按钮;前置检查全✓才激活,任一✘置灰+锚点定位到失败项;点击→确认弹窗(注意事项+预计时长)→O03
[仅下载]次按钮(O04允许时展示):先下载校验,安装待用户确认或时间窗
[预约升级]离线设备或用户选择稍后:时间选择器(今晚/明天/自定义,受时间窗约束)
强制升级弹窗不可关闭、返回键拦截、蒙层不可点穿;内容:安全原因简述+倒计时(默认72h,云端可配)+[立即升级]唯一按钮;倒计时归零→云端锁定设备功能(M04控制置灰"待安全升级")
已是最新态无可用更新时展示"当前已是最新版本 vX.Y.Z"+[检查更新]

逻辑规则:

  1. 数据来源:GET /ota/devices/{deviceId}/update(版本对比/日志/包大小/预计耗时/强制标记/倒计时/灰度阶段)+ GET /ota/devices/{deviceId}/precheck(前置检查实时结果,30s轮询刷新或MQTT推送);
  2. 前置检查联动:电量/在线/事务状态实时刷新;事务锁定查询 M07/M08 事务管理器(升级与校准/场景执行互斥,先到先得,升级优先于新事务创建);
  3. 强制升级:倒计时云端存储(设备维度);APP多端同步展示;归零后设备功能锁定由云端影子标记,M04 消费;完成升级自动解锁;
  4. 跨版本路径:云端判定需逐级升级时(如 v1.2→v2.0 需先 v1.5),O02 展示"本次升级包含 N 个中间版本"并按序执行(对用户表现为一次任务,云端编排多段);
  5. 预约:POST /ota/devices/{deviceId}/schedule(time);到点云端触发,前置不满足则顺延并通知;预约可取消;
  6. 撤回联动:浏览中发布被撤回→页面刷新为"更新暂不可用"+说明(云端推送驱动);
  7. 埋点:详情页曝光、日志展开阅读率、前置失败项分布(驱动硬件/固件改进)、下载并升级转化、仅下载占比、预约使用率、强制弹窗曝光→升级时长。

异常与边界:日志CMS缺失→英文回退+占位说明;预计耗时无法估算(新品类)→"约5~15分钟"兜底文案;检查接口失败→按钮置灰+重试;用户在强制倒计时中移除设备→需先完成升级或管理员确认风险(二次强提示,记录审计日志)。

验收要点:版本卡信息与云端一致;日志7语种回退正确;五项前置检查实时性与失败深链;强制弹窗不可逃逸(返回/蒙层/杀进程重进仍弹)+倒计时多端一致+归零锁定M04;逐级升级编排透明;预约创建/取消/顺延通知。


O03 下载与安装进度页(FR-1803)

页面目标:五阶段进度透明可离开,失败可解释可恢复,回滚结果可确认。

页面元素:

元素规格与规则
阶段步骤条五段:①下载固件 ②安全校验 ③传输至设备 ④安装中 ⑤重启验证;当前段高亮+loading,完成段✓,失败段✘
环形进度总进度百分比(按阶段权重:下载40%/校验5%/传输20%/安装25%/验证10%);当前阶段文案+剩余时间估算
阶段文案"正在下载固件(45.2MB/120MB)…"/"正在校验固件完整性…"/"正在传输至设备…"/"设备正在安装,请勿断电…"/"设备重启验证中…"
后台执行提示常驻说明:"可安全离开此页面,升级将在后台继续,完成后通知您";[后台运行]按钮最小化;返回拦截弹窗确认
取消按钮仅下载/校验/传输阶段可取消(安装开始后隐藏+文案"安装已开始,无法取消");取消二次确认
成功态绿色✓动画+新版本号+耗时;能力变更提示(若本次升级新增能力:"设备新增XX功能,已同步至场景编辑器"→M08);[完成]回来源页/[查看设备]→M04-R01
失败态红色✘+阶段定位+原因文案(下载失败/校验失败/传输超时/安装失败/验证超时)+自助指引(检查网络/靠近网关/充电重试)+[重试](保留已下载包)/[联系客服](携taskId→M10)
回滚态橙色:"新版本安装未通过自检,设备已自动恢复至 vX.Y.Z,可正常使用"+回滚确认结果+[我知道了]/[反馈问题];同时云端已告警运维
设备异常态红色强提示:"设备重启后未恢复响应,正在尝试恢复…(自动重试3次)"→仍失败→"请联系客服处理"+工单入口+设备诊断信息一键复制

逻辑规则:

  1. 任务驱动:POST /ota/devices/{deviceId}/upgrade 创建任务返回 taskId;进度来源 MQTT ota/progress/{taskId}(阶段+百分比+错误码,设备/网关上报经云端转发)+ HTTP GET /ota/tasks/{taskId} 轮询兜底(3s间隔,MQTT断连时);
  2. 断点续传:设备侧下载支持 Range 续传(CDN);APP杀进程/断网不影响设备侧任务(任务主体在云-设备链路,APP只是观察者);APP重进O03按taskId恢复展示;
  3. 阶段超时:下载30min/传输15min/安装20min/验证10min,云端超时判定→失败态;安装阶段设备静默属正常(固件写Flash不通信),文案安抚"请勿断电";
  4. 回滚确认:固件自检失败自动切回旧分区;云端以"旧版本号重新上线"为回滚成功判据;回滚后设备状态、场景(M08)、校准参数(M07)自动恢复旧版本兼容态并触发对账;
  5. 能力刷新:升级成功→云端更新设备影子能力模型→推送 device/capability 变更(M02/M07/M08 消费);O03成功态展示能力变更摘要(diff由云端计算);
  6. 完成通知:按O04设置经M06推送"升级成功/失败/已回滚"(失败与回滚默认推送,成功默认推送可关);
  7. 幂等:同设备同时仅一个任务;重复请求返回进行中taskId;重试复用taskId+断点;
  8. 埋点:各阶段到达率/耗时P50/P90、失败阶段分布、错误码分布、回滚率、重试成功率、页面停留/后台化比例。

异常与边界:进度长时间不动(>5min同百分比)→展示"网络较慢,请耐心等待"+[刷新];MQTT与HTTP结果冲突→以云端任务终态为准;升级中设备被移除→任务终止标记失败;升级中家庭被解散→任务终止+设备恢复出厂流程(M02);批量升级并行时O03为单设备视图,批量进度见O05。

验收要点:五阶段进度真实映射设备侧状态;杀APP/断网后任务不受影响且重进恢复展示;取消窗口正确(安装后不可取消);四类失败注入(下载/校验/安装/验证超时)文案与指引正确;回滚真机验证(刷入坏包→自动回旧版→设备可用→通知);能力变更通知M07/M08联动刷新;通知按设置分发。


O04 升级设置页(FR-1804)

页面目标:把"自动升级"的控制权与知情权交给用户,默认保守。

页面元素:

元素规格与规则
自动升级总开关默认关;开启时弹窗说明:"将在时间窗内自动安装新固件,升级期间设备短暂不可用";强制升级不受此开关约束(明示文案)
自动下载开关默认开(有更新时静默下载并校验,安装仍需确认/时间窗);子项[仅Wi-Fi下载]默认开
安装时间窗默认02:00-05:00;时间范围选择器(起止,跨零点支持);说明"时间窗内设备空闲才执行,被占用则顺延至下一晚"
通知设置[升级完成通知]默认开/[升级失败通知]默认开(强制开,不可关,安全考量)/[灰度新功能预告]默认关;均经M06渠道,尊重全局免打扰(失败通知为重要级可穿透)
灰度计划说明入口→H5:什么是灰度/您的设备何时收到更新/如何申请优先体验(白名单报名,P1)
设备级覆盖(P1)列表逐设备:跟随家庭设置/单独关闭自动升级(安防类设备默认建议关,提示原因)

逻辑规则:

  1. 设置作用域:家庭级(全家庭设备默认策略),存储云端家庭配置;修改权限=管理员;
  2. 自动升级执行:云端调度器在时间窗扫描"已下载+设备空闲+前置满足"任务→自动安装;前置不满足顺延次夜并记录(连续顺延3晚→M06提醒用户处理);
  3. 设置即时生效:修改后云端调度策略实时更新;关闭自动升级不影响已确认的手动任务;
  4. 强制升级优先:任何设置不阻断强制升级(弹窗文案已声明);
  5. 埋点:自动升级开启率、时间窗修改分布、通知开关变更、灰度H5访问、设备级覆盖使用。

异常与边界:时间窗非法(起=止/窗口<1h)→校验拦截+建议值;家庭无管理员时设置只读;设置接口失败→回滚开关态+Toast。

验收要点:默认值正确(自动升级关/自动下载开/仅Wi-Fi开/时间窗02:00-05:00);权限控制;顺延3晚提醒;强制升级不受设置影响真机验证;通知穿透免打扰策略正确。


O05 批量升级页 + O06 升级历史页(FR-1805)

O05 批量升级页

页面目标:多设备一次升级,前置检查批量预演,并行策略透明,失败可批量重试。

页面元素:

元素规格与规则
设备多选列表全选/按房间/按品类快捷选择;每项:设备+版本对比+就绪状态(就绪✓/电量不足/离线/事务中);不可就绪项默认不勾选+原因
汇总条"已选N台 · 就绪M台 · 预计总耗时约X分钟(并行估算)"
并行策略说明"同一网关下子设备逐台升级(避免网关过载),Wi-Fi设备最多5台并行";[开始升级]确认弹窗含注意事项
逐台进度列表每台:设备名+阶段文案+进度条+状态徽标(等待/下载/安装/成功/失败/已回滚);总进度条置顶
控制区[暂停](暂停未开始的任务,进行中任务继续完成)/[取消全部](仅未安装阶段)
结果汇总完成态:成功N/失败M/回滚K+失败清单+[失败项全部重试]+[查看历史];后台化支持(同O03)

逻辑规则:

  1. 批量接口:POST /ota/batch(deviceIds[])→返回 batchId+逐台taskId;云端编排:网关分组串行、跨网关并行、Wi-Fi并行≤5、总并发≤20/家庭;
  2. 版本异构:不同设备不同固件包各自独立任务;同网关子设备包合并传输(网关缓存一次分发,省带宽);
  3. 失败隔离:单台失败不影响其余;失败原因逐台记录;重试仅针对失败台;
  4. 前置批量预演:开始前云端批量precheck,不就绪台自动剔除并告知(用户可手动保留"等待就绪");
  5. 埋点:批量使用率、平均批量台数、批量成功率、暂停/取消使用。

O06 升级历史页

页面元素:

元素规格与规则
时间线列表每条:时间+设备名+vX→vY+结果徽标(成功绿/失败红/已回滚橙/已取消灰)+耗时;按日分组
筛选设备多选+结果+时间范围;搜索设备名
详情展开任务ID+各阶段耗时+失败原因/回滚记录+重试次数+[复制诊断信息](taskId/设备SN/版本/错误码,供M10工单)
统计条近30天:升级N次/成功率X%/平均耗时
保留说明默认展示近30天,[加载更多]拉取全生命周期记录(分页)

逻辑规则:历史来源 GET /ota/history?familyId=&deviceId=&status=&cursor=;成功/失败/回滚/取消全记录;回滚记录必须含回滚后确认版本;权限:管理员全量,成员仅自己发起的任务;数据回流 M12 运营看板(升级成功率/回滚率按固件版本聚合)。

验收要点(O05/O06):批量前置预演剔除正确;并行策略真机验证(网关串行/Wi-Fi并行≤5);失败隔离与批量重试;暂停/取消窗口正确;历史四类结果完整;回滚记录含确认版本;诊断信息复制字段齐全;30天/全量分页。


4. 通用交互与视觉规范(UI设计输入,FR-1806)

  1. 双主题:浅色/深色两套;状态徽标四色(强制红/灰度蓝/推荐橙/成功绿)深色模式调亮满足WCAG AA;进度环与步骤条双主题适配;强制升级弹窗深色模式蒙层不透明度单独调优(保证警示感)。
  2. 组件清单:汇总卡(三态)、设备升级列表项(版本对比+徽标)、前置检查清单(✓/✘+深链按钮)、更新日志分段容器、版本对比卡(当前→新)、环形进度(阶段权重)、五段步骤条、后台运行提示条、强制升级弹窗(不可关闭+倒计时)、批量多选列表(就绪状态)、逐台进度列表项、结果汇总卡、历史时间线条目(徽标+详情展开)、设置项(开关/时间窗选择器)、空态插画(全部最新/无历史两款)。
  3. 动效规范:进度环平滑推进(300ms插值,禁止跳变);阶段切换步骤条渐入;成功✓打勾动画+轻震动;失败✘抖动1次;下载剩余时间每秒刷新节流;强制弹窗倒计时数字翻牌;全部提供"减弱动效"降级。
  4. 多语言:更新日志由CMS按7语种维护(研发提供中文母版→本地化团队翻译→CMS录入);版本号不翻译;包大小单位(MB)locale格式;注意事项/失败原因/阶段文案资源文件;德/法/俄预留1.4倍空间;倒计时格式按locale(时:分:秒)。
  5. 无障碍:进度环+百分比文字双通道(读屏播报"下载中,45%");步骤条当前阶段播报;强制弹窗焦点锁定+[立即升级]默认焦点;前置检查清单逐项可读;徽标图标+文字不依赖颜色;倒计时提供剩余时间文字播报(每分钟)。
  6. 响应式:平板/折叠屏宽屏下 O01 左侧列表+右侧详情分栏(点击设备直接展示O02内容);O05 批量页左侧选择+右侧进度分栏;O06 左列表+右详情。
  7. 品牌一致性:设备图标复用M02/M04统一图标系统;版本号字体用等宽数字避免跳动;强制升级警示色与安全类告警(M06紧急级)同色系。

5. 客户端技术要求(Flutter)

  1. 状态管理:Riverpod/BLoC;升级任务用 TaskStreamProvider(MQTT ota/progress 流+HTTP轮询兜底合并去重);O01列表 FutureProvider+缓存(TTL 5min);前置检查30s定时刷新Provider(页面可见时);批量任务 BatchTaskNotifier(逐台状态map)。
  2. MQTT:复用 M02/M04 连接层;订阅 ota/progress/{taskId}、ota/status/{deviceId}(任务终态/撤回)、device/capability/{deviceId}(能力变更转发M08);断连期间自动切HTTP轮询(3s),恢复后回流;QoS1。
  3. 任务恢复:taskId 持久化(Hive,键=deviceId+taskId,TTL 7天);APP重启/重进按taskId拉取终态恢复O03展示;杀进程不影响云-设备链路任务(APP纯观察者模式)。
  4. 进度渲染:百分比插值动画(AnimationController,300ms);剩余时间估算=已用时间/进度比例外推(阶段内),跨阶段用云端预置权重;渲染节流1s。
  5. 强制升级弹窗:全局 Overlay 管理(根路由监听 forced 状态推送);返回键拦截(PopScope);蒙层不可点穿;多页面均触发(路由守卫);倒计时与云端时间戳同步(NTP校准手机时间偏差)。
  6. 深链路由:注册 ehome://ota/{deviceId}(O02)、ehome://ota/task/{taskId}(O03)、ehome://ota/batch/{batchId}(O05)、ehome://ota/history(O06);M06推送携带深链直达。
  7. 本地缓存:Hive 存储设备版本快照(红点计算辅助)、设置项、taskId映射;账号注销联动清除;无PII。
  8. 性能:批量50台进度列表虚拟化+局部rebuild(仅变更台重建);O01大量设备(>50)分页+虚拟滚动;进度页帧率≥55fps。
  9. 安全:所有升级操作HTTPS;APP不经手固件包(下载与安装全在云-设备链路,APP仅展示)杜绝中间人风险面;诊断信息复制不含密钥/签名;Sentry上报脱敏。
  10. 埋点:见各页;统一 OtaAnalytics 封装,事件命名 ota_*;核心漏斗(红点→O01→O02→发起→成功);质量指标(各阶段耗时P90、失败率、回滚率)实时上报支撑灰度熔断看板。

6. 云端需求(OTA服务)

6.1 接口清单

接口方法说明
/ota/devicesGET家庭设备升级状态总览(当前版本/可用版本/灰度/强制/任务状态/电量/在线)
/ota/devices/{id}/updateGET单设备升级详情(版本对比/多语言日志/包大小/预计耗时/强制倒计时/逐级路径)
/ota/devices/{id}/precheckGET前置检查(电量/在线/网络质量/事务互斥/存储)
/ota/devices/{id}/upgradePOST创建升级任务(幂等,返回taskId);仅下载模式参数 downloadOnly
/ota/devices/{id}/schedulePOST/DELETE预约升级(创建/取消)
/ota/tasks/{taskId}GET任务状态与进度(轮询兜底)
/ota/tasks/{taskId}/cancelPOST取消(仅下载/校验/传输阶段)
/ota/tasks/{taskId}/retryPOST失败重试(断点复用)
/ota/batchPOST批量升级(返回batchId+逐台taskId;编排策略云端执行)
/ota/batch/{batchId}GET批量进度汇总
/ota/batch/{batchId}/pausePOST暂停未开始任务
/ota/historyGET升级历史(游标分页;30天默认/全量可拉)
/ota/settingsGET/PUT家庭升级设置(自动升级/时间窗/仅Wi-Fi/通知偏好;管理员)
/ota/lock/{deviceId}GET升级锁定状态查询(供M07校准/M08场景事务前置互斥校验)
(MQTT下行)ota/notify新固件可用通知→设备(携带版本/包URL/哈希/签名/强制标记)
(MQTT上行)ota/progress设备/网关上报进度(阶段/百分比/错误码)→云端转发APP
(内部)发布管理固件包登记/签名验证/硬件批次兼容矩阵/逐级升级路径计算/灰度分桶/熔断与撤回(对接M12运营后台)
(内部)升级调度器时间窗自动安装/预约触发/顺延重试(3晚提醒)/离线设备上线触发/批量并发编排(网关串行/Wi-Fi并行≤5/家庭并发≤20)
(内部)事务互斥锁设备级分布式锁(OTA vs 校准 vs 场景执行);升级优先;锁超时自动释放(任务终态兜底)
(内部)质量监控按固件版本聚合成功率/回滚率/异常率;熔断阈值自动暂停灰度+告警运维

6.2 关键策略

  1. 发布安全:固件包上传强制签名(私钥KMS保管)+SHA256哈希登记;设备端验签+哈希双校验后才写分区;APP与设备均不可获取签名私钥;硬件批次兼容矩阵强校验,禁止跨批次误发(发布时双重确认)。
  2. 灰度管道:deviceId哈希分桶(稳定分桶,同设备始终同桶);五阶段推进(白名单→1%→10%→50%→100%),每阶段观察窗与熔断指标(成功率<98%/回滚率>1%/异常率>0.5%自动暂停);一键撤回:未升级设备移除入口+已下载包作废+公告;强制升级需产品+安全双审批且默认72h倒计时。
  3. 升级事务:taskId全链路主键(创建→前置→下载→校验→传输→安装→验证→终态);阶段超时判定;A/B分区+自检失败自动回滚+回滚确认(旧版本上线判据);回滚后触发M07参数对账与M08规则兼容性检查;任务终态写历史+通知分发。
  4. 事务互斥:设备级分布式锁(Redis,TTL=任务超时上限);OTA启动前查询校准/场景事务,进行中则等待或拒绝(用户侧文案明示);OTA锁定期间M07/M08新事务被拒(/ota/lock查询);锁泄漏兜底:任务终态强制释放+定时巡检。
  5. 版本一致性单源:设备影子(Device Shadow)存储 reported/desired 版本;升级成功以影子回读新版本为最终判据(非设备自报成功);影子与设备每日对账,不一致自动标记异常。
  6. 性能SLA:/ota/devices P99≤400ms(家庭50台内);任务创建≤500ms;进度推送端到端(设备→APP)P90≤2s;批量50台编排稳定;CDN下载带宽按发布峰值弹性扩容(全量发布日峰值预估模型)。
  7. 运营看板(回流M12):发布漏斗(命中→下载→安装→成功率)、各阶段耗时分布、失败错误码Top、回滚率按固件版本/硬件批次聚合、灰度熔断事件时间线、强制升级完成率与倒计时归零锁定数;异常自动告警(企业微信/邮件双通道)。

7. 验收标准核对表

需求验收标准本设计落点
FR-1801三态汇总/四类徽标/红点链路(强制不可消)/预约/权限只读/版本判定单源O01;/ota/devices;红点规则1
FR-1802版本卡+日志7语种回退;五项前置检查实时+深链;强制弹窗不可逃逸+倒计时+归零锁定;逐级升级透明O02;precheck接口;强制弹窗全局Overlay
FR-1803五阶段真实映射;杀进程/断网不影响任务;取消窗口;四类失败注入;回滚真机验证;能力变更联动O03;任务驱动规则;A/B分区回滚
FR-1804默认值正确;时间窗调度+顺延3晚提醒;强制不受设置影响;通知穿透策略O04;升级调度器
FR-1805批量预演剔除;网关串行/Wi-Fi并行策略;失败隔离与批量重试;历史四类结果+回滚确认版本+诊断复制O05/O06;/ota/batch;/ota/history
FR-1806双主题/7语种/无障碍/响应式全达标;强制弹窗警示规范第4章;组件清单

QA测试要点(专项):

  1. 升级全链路真机验证:单设备五阶段完整走通(Wi-Fi设备+网关子设备两种链路);影子版本回读判据;能力变更通知M07(校准能力刷新)/M08(场景能力刷新)联动生效;
  2. 回滚与变砖防护:注入坏包(自检失败)→自动回滚→旧版本上线→设备全功能可用→回滚通知+历史记录含确认版本;回滚后M07校准参数对账、M08场景兼容检查触发;
  3. 中断矩阵:下载中断网(续传恢复)/校验中杀APP(重进恢复展示)/传输中设备断电(超时失败+重试)/安装中拔网线(设备侧继续,联网后进度回流)/验证中移除设备(任务终止);
  4. 强制升级:弹窗不可逃逸(返回/蒙层/杀进程重进/多页面路由守卫);倒计时多端一致(两台手机同账号);归零后M04控制锁定"待安全升级";完成升级自动解锁;
  5. 事务互斥:校准进行中发起升级→等待/拒绝文案;升级锁定中发起校准(M07)/场景执行(M08)→被拒且提示;锁超时自动释放(人为制造泄漏);
  6. 批量升级:50台混合(网关子设备+Wi-Fi)编排验证(网关内串行/跨网关并行/Wi-Fi≤5/家庭≤20);单台失败隔离;批量重试仅失败台;暂停/取消窗口;
  7. 灰度与熔断:分桶稳定性(同设备重复检查不跳桶);模拟成功率<98%触发自动暂停;撤回后入口移除+已下载包作废;硬件批次不匹配发布被拦截;
  8. 预约与时间窗:预约到点触发;前置不满足顺延次夜+连续3晚提醒;时间窗内设备忙顺延;跨零点窗口(23:00-02:00)正确;
  9. 多语言与无障碍:日志7语种CMS回退链;读屏播报进度/阶段/倒计时;强制弹窗焦点锁定;减弱动效;深色模式徽标对比度;
  10. 性能与兼容:iOS 13+/Android 7.0+真机;/ota/devices 50台家庭P99≤400ms;批量进度列表帧率≥55fps;进度推送端到端P90≤2s;全量发布日CDN压测(模拟10万设备并发下载)。

8. 依赖与风险

说明责任/时点
固件A/B分区与升级协议双分区方案、自检逻辑、断点续传、验签实现、进度上报协议——回滚能力的基石固件团队 M1 冻结(含 bootloader 防降级);M2 联调(最大风险项,预留3周缓冲)
签名与KMS固件签名私钥管理、密钥轮换预案;私钥泄漏=全线设备风险安全团队 M1 方案;上线前渗透测试
硬件批次兼容矩阵同型号不同HW revision固件兼容性登记;误发变砖风险硬件团队提供矩阵;发布流程双重确认
M12 运营后台发布管理/灰度配置/日志CMS/熔断看板/强制升级审批流M2 前交付发布最小闭环;CMS多语言流程就绪
M02 设备影子版本/能力/在线状态单源;影子对账任务M1 影子服务就绪
M04/M07/M08 事务互斥锁定状态消费方改造(控制置灰/校准拒绝/场景抑制)M2 联调(三方契约:/ota/lock)
M06 通知渠道更新可用/成功/失败/回滚/顺延提醒推送;失败通知穿透免打扰M2 并行
M10 工单失败/设备异常携带诊断上下文建单M2 联调
CDN 与带宽成本固件包分发峰值(全量发布日);成本与扩容预案运维 M1 容量规划
电池设备升级风险传感器类升级耗电与失败率高于常供电设备;电量阈值50%仍可能中途断电固件评估功耗曲线;灰度阶段重点观察电池品类回滚率
逐级升级复杂度跨多版本路径编排(v1.2→v1.5→v2.0)中间版本包维护云端路径计算;发布规范约束(禁止跨大版本直跳)
用户知情与打扰平衡自动升级默认关→渗透率低→安全版本覆盖慢;强制升级体验强硬运营策略:安全更新文案强化+灰度预告;产品评审强制升级触发标准(仅CVE级)

以上为 M09 OTA升级(FR-1801~1806)完整详细需求设计:升级中心与红点链路、升级详情与前置检查、五阶段进度与A/B回滚、自动升级设置与时间窗调度、批量升级编排、灰度发布管道与熔断、强制升级与事务互斥均已落点;与 M01/M02/M04/M06/M07/M08/M10/M12 文档格式及衔接协议一致(设备影子单源、MQTT复用、锁定状态契约、通知复用),可直接交付 UI 与开发。如确认无误,可按同样格式继续输出后续模块(如 M10 帮助中心与工单、M11 语音生态接入、M12 运营后台等)。