【免费下载链接】homeassistant_espscreen
Tessera: beautiful, easy touch screens for Home Assistant on affordable ESP32 panels, 2.8 to 10.1 inch (CYD, Guition, Waveshare). Drag-and-drop editor, no YAML, no MQTT.
Tessera(homeassistant_espscreen)把廉价的 ESP32 触摸面板变成 Home Assistant 里漂亮易用的屏幕。它的 OTA 更新机制会让所有屏幕在凌晨通过 Wi-Fi 自动下载并安装最新固件——不用 USB 线、不用手动烧录。本文带你完整看懂这套夜间自动更新的工作原理:什么时候触发、更新哪些屏幕、每一步在做什么,以及万一失败时系统如何保护你的屏幕不"变砖"。
夜间自动更新什么时候触发
Tessera 的管理插件(screen_manager)内置一个每分钟唤醒一次的检查循环。它会在本地时间凌晨 3:00 至 5:59之间尝试发起一轮更新,这个时间窗定义在 screen_manager/app/updates.py 的NIGHT_HOURS中——选择凌晨是因为这段时间你几乎不会去操作屏幕,更新造成的短暂离线不会影响使用。
一轮更新要真正开始,必须同时满足三个条件(updates.py 中的due()判断):
- 你在 Tessera 的Settings里开启了自动更新开关;
- 当前时间落在凌晨 3–5 点窗口内;
- 今天还没有跑过一轮——每跑一轮就记录当天日期,重启插件也不会重复更新。
为什么放在凌晨、又是逐台更新?因为固件更新期间屏幕会短暂离线、重启,凌晨的静默时段是对家庭用户打扰最小的时刻。
哪些屏幕会被更新:只更新"真正需要"的
插件并不是对每块屏幕盲目重刷固件。它会先算出每台屏幕的目标固件版本(版本跟随插件自身的发布节奏,详见 docs/RELEASING.md),再筛出"待更新"的屏幕,条件包括:
- 屏幕当前在线;
- 屏幕上运行的固件版本低于目标版本,或者屏幕显示语言与 Settings → Language & region 里选择的语言不一致(语言变了也要重新编译安装);
- 插件能找到它的配置文件和 IP 地址,且它还没有排进构建队列。
已经跑着最新固件的屏幕会被直接跳过,所以夜间更新只会挑有更新的任务,不会无谓地反复编译(机制说明见 docs/BOARD_RELEASES.md 与 docs/BUILDS.md)。
更新一台屏幕的完整流程
多台待更新屏幕会组成一个"轮次"(Round),一台接一台依次处理,两台之间暂停约 2 分钟。每台屏幕的更新走同一条流水线(updates.py 的update_one),分三个阶段,页面里也会实时显示当前阶段:
| 阶段 | 做什么 | 说明 |
|---|---|---|
| install | 编译固件并通过 Wi-Fi 安装 | 编译约 1500 个源文件;GitHub 每晚预编译好每块开发板的缓存(ccache),插件下载后复用,所以夜间编译更快 |
| verify | 等待屏幕上报新固件版本 | 每 5 秒轮询一次,最长等 240 秒;屏幕必须在线、版本达标且语言正确才算通过 |
| settle | 静置 60 秒再确认屏幕仍在线 | 等待 ESPHome 的"试用期"保护窗口过去(下一节详述) |
三个步骤全部通过,这次更新才记为成功。整个流程由统一的构建队列 screen_manager/app/build_queue.py 调度——全插件同一时间只编译一个固件,夜间更新和你手动点的其他操作排队互不冲突。
双槽分区:更新失败也不会变砖
ESP32 的闪存被分成app0 和 app1 两个更新槽位:新固件写入空闲的槽位,正在运行的固件原封不动。这意味着即使新固件本身有严重问题,旧固件仍然完整保留。
更关键的是试用期回滚:ESPHome 的启动器会给新固件 1 分钟试用期,如果屏幕在这 1 分钟内重启,就会自动切回旧固件。这正是上面settle 阶段静置 60 秒的原因——熬过试用期,更新才算真正落定。
对于 4 MB 闪存的开发板(CYD 等),还有一层特殊处理:
- 这些板子使用自定义的"宽"分区表,把每个槽位从 1,835,008 字节扩大到 2,031,616 字节(分区文件见 components/flash_layout/partitions-4mb-wide.csv,原理见 docs/FLASH_LAYOUT.md)。
- 如果新固件超出了旧分区表的容量,插件会先装一个只有约三分之一槽位大小的桥梁固件(packages/bridge.yaml),通过它把宽分区表送进屏幕,最后再安装真正的固件。这一过程由屏幕的Screen flash诊断传感器(
wide/widen/widen_next等状态)驱动,用户视角只需看 docs/UPDATING_4MB_SCREENS.md。
屏幕在更新时显示了什么
更新期间你会注意到屏幕"活过来"了,这并非巧合:
- 唤醒:固件在安装开始前会点亮背光、退出待机并关闭屏保(由 packages/core.yaml 绑定),避免你在一片黑屏前干等;
- 实时进度:ESPHome 的 OTA 下载过程会占用主循环,屏幕上的 LVGL 界面暂时画不动,看起来像"卡死"。固件注册了一个 OTA 状态监听器(components/smart_display/ota_status.h),每秒左右收到一次下载进度,并立刻把百分比画到玻璃上覆盖在一切内容之上,结束时提示即将重启。
所以对屏幕上的"观众"来说,一次夜间更新看起来就是:屏幕亮起 → 显示下载百分比 → 重启 → 几分钟后以新固件身份回到 Home Assistant。
如何开启或关闭自动更新
- 打开 Tessera 面板侧边栏的Settings,找到夜间固件更新开关(界面对应 web/src/components/AppSettingsView.vue 中的
auto-update选项); - 每台屏幕详情里的Update徽章会列出本次固件"有什么新东西"(来自 CHANGELOG),进行中的更新会实时显示进度;
- 不想要夜间动作时关掉开关即可,随时也可以在屏幕页面手动点Update,或点Update all立即执行同样一轮更新。
更新失败会发生什么
系统设计上非常保守,坏结果永远"止于本机":
- 一轮中的失败会终止整轮:某台屏幕构建或安装失败时,排在后面的屏幕本轮直接跳过(skipped),有问题的构建绝不会波及下一台屏幕;
- 持久通知:自动轮次中途失败时,插件会向 Home Assistant 发送一条 persistent notification,告诉你哪台屏幕停了、原因是什么;
- 桥梁状态可恢复:即使插件重启或断电导致"桥梁"流程中断,状态会记在本地(
updates.json),之后每隔 5 分钟自动从断点续做,与夜间轮次无关; - 失败后自动消隐:如果屏幕后来通过别的方式跑上了目标固件,旧失败记录就不再显示为新闻。
相关文件速览
| 想了解的内容 | 去哪里看 |
|---|---|
| 夜间轮次的触发、调度与重试 | screen_manager/app/updates.py |
| 统一构建队列与"轮次"规则 | screen_manager/app/build_queue.py、docs/BUILDS.md |
| 屏幕端 OTA 进度绘制 | components/smart_display/ota_status.h |
| 4 MB 板分区表与桥梁机制 | docs/FLASH_LAYOUT.md、docs/UPDATING_4MB_SCREENS.md |
| 固件版本与发布节奏 | docs/RELEASING.md、docs/BOARD_RELEASES.md |
| 日常使用与设置说明 | screen_manager/DOCS.md |
一句话总结:Tessera 把"给一排 ESP32 屏幕升级固件"这件琐事,压缩成"开一个开关,凌晨自动搞定"——编译、下载、双槽安装、试用期验证、失败隔离,全程无需你在场,而屏幕上的进度条和 Home Assistant 的通知随时让你知道发生了什么。
【免费下载链接】homeassistant_espscreen
Tessera: beautiful, easy touch screens for Home Assistant on affordable ESP32 panels, 2.8 to 10.1 inch (CYD, Guition, Waveshare). Drag-and-drop editor, no YAML, no MQTT.
相关推荐
xiaozhi-esp32固件升级:OTA无线更新与版本管理机制
xiaozhi esp32固件升级:OTA无线更新与版本管理机制 还在为每次固件更新需要连接USB线、手动烧录而烦恼吗?小智AI聊天机器人(XiaoZhi AI
人工智能AI 应用语音智能硬件物联网ESP32 BLE OTA更新终极完整指南:快速实现无线固件升级
ESP32 BLE OTA更新终极完整指南:快速实现无线固件升级 本文为您详细介绍如何通过蓝牙低功耗 BLE 技术实现ESP32设备的无线固件更新 OTA 。E
嵌入式物联网固件如何快速实现ESP8266/ESP32优雅OTA更新:AsyncElegantOTA完整指南 🚀
如何快速实现ESP8266/ESP32优雅OTA更新:AsyncElegantOTA完整指南 🚀 AsyncElegantOTA是一款专为ESP8266和ES
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考