当前文档对应第 2 阶段业务面板。 第一次 USB 首刷请先走 reTerminal E1001 首刷 Runbook,确认设备、屏幕和 OTA 基础链路没问题后,再切到这里。 当前更推荐的编译/管理入口是 Mac 上独立 ESPHome Docker 方案。
这份方案是当前推荐路径的第 2 阶段:reTerminal E1001 + ESPHome 直接请求当前项目提供的设备接口。
核心数据接口:
- HTML 看板:
/dashboard/eink?token=<INFOHUB_DASHBOARD_TOKEN>&refresh=600 - 调试 JSON:
/dashboard/eink.json?token=<INFOHUB_DASHBOARD_TOKEN>&refresh=600 - 设备直连 JSON:
/dashboard/eink/device.json?token=<INFOHUB_DASHBOARD_TOKEN>&refresh=300
这条链路更适合你现在的要求:
- 不走截图,不需要额外渲染服务
- 面板直接消费当前项目 API,设备端不依赖浏览器渲染
- ESPHome 只在 payload 变化时触发一次电子纸刷新,避免无意义的反复刷屏
- 设备侧版式按当前 HTML 看板做高保真复刻,保持三张概览卡片、双表格和右侧提醒栏的同一视觉结构
- 设备接口:
GET /dashboard/eink/device.json - ESPHome 模板:reterminal_e1001_infohub_api.yaml
项目启动后,先验证三个入口:
curl "http://10.30.5.172:8080/dashboard/eink?token=YOUR_DASHBOARD_TOKEN&refresh=600"
curl "http://10.30.5.172:8080/dashboard/eink.json?token=YOUR_DASHBOARD_TOKEN&refresh=300"
curl "http://10.30.5.172:8080/dashboard/eink/device.json?token=YOUR_DASHBOARD_TOKEN&refresh=300"设备接口返回的是更适合 ESPHome 解析的紧凑结构,包含:
updated_atclaudesub2apitotalclaude_rowssub2api_rowsalertsreset_hints
在你已经完成 Stage 1 首刷之后,再使用 reterminal_e1001_infohub_api.yaml 作为设备 YAML。
这个模板的关键点:
http_request.get直接拉device.jsoncapture_response: true,在设备端拿到完整 JSON bodymax_response_buffer_size: 16384,避免 1KB 默认缓冲过小update_interval: never,显示器不做固定周期刷新- 只要 HTTP 返回 body 和上次完全一致,就不触发
component.update GPIO3保留为实体手动刷新按钮GPIO4同时作为电池 deep sleep 的手动唤醒键- 还额外暴露了一个
Force Sync按钮 - 电池 deep sleep 中按下
GPIO4唤醒后,会强制同步一次,然后重新进入对应时段的 deep sleep - 新增了“插电高实时 / 电池省电 / 电池夜间静默”三种运行状态
- Wi-Fi 使用
fast_connect: true和power_save_mode: HIGH,并关闭 fallback AP 自动启动,用于减少电池模式下的联网耗电 - 联网后不再固定等待
5s,Wi-Fi 或接口异常时由60s清醒超时兜底进入 deep sleep - HTTP 请求超时从
20s降到10s,网络异常时少醒着等待
ESPHome 的 secrets.yaml 至少要补这些值:
wifi_ssid: "YOUR_WIFI"
wifi_password: "YOUR_WIFI_PASSWORD"
wifi_fallback_password: "YOUR_FALLBACK_PASSWORD"
# 可选:配合 YAML 中 manual_ip 使用,用于缩短唤醒后联网时间
wifi_static_ip: "10.30.5.173"
wifi_gateway: "10.30.5.1"
wifi_subnet: "255.255.255.0"
esphome_api_encryption_key: "YOUR_ESPHOME_API_KEY"
esphome_ota_password: "YOUR_OTA_PASSWORD"
infohub_eink_device_url: "http://10.30.5.172:8080/dashboard/eink/device.json?token=YOUR_DASHBOARD_TOKEN&refresh=300"你也可以直接从 deploy/esphome/secrets.example.yaml 复制示例,再填入真实值。
当前仓库里的 API 模板使用周期唤醒策略:
- 插电模式:每
2min请求一次 - 电池模式:每
30min唤醒,请求和必要的屏幕刷新完成后立即 deep sleep - 低电量模式:唤醒间隔自动延长到
2h - 电池电压/电量采样:每次唤醒采样一次;插电常驻时每
2min采样一次 - Power Profile 状态:每
5min更新一次 - 电池夜间静默:
22:00到次日10:00不请求业务接口,并直接进入 deep sleep;等到10:00自动唤醒,或按GPIO4手动唤醒并刷新一次 - 电子纸刷新仍然保留“只有 payload 变化才刷新”的逻辑,所以插电模式虽然请求更频繁,但不会因为同一份内容反复刷屏
- 固件只持久化会影响画面的 payload 指纹和局刷计数;deep sleep 重启后如果业务内容未变化,不会重复刷屏
GPIO21只在电池采样的短时间内开启,采样完成后立即关闭- 如果电量低于阈值,顶部状态栏会额外显示
低电量标识
电池模式下 API/OTA 只在每次唤醒后的短窗口可用,而且成功同步后会立即休眠。需要 OTA 时,应先接入 USB 电源并确认设备进入“插电高实时”状态;60s 只是网络异常时的最长清醒兜底,不是固定的 OTA 窗口。
另外,模板还会额外暴露这些实体:
Battery VoltageBattery LevelPower Profile
这版默认使用 Seeed 官方公开的电池测量方式:
GPIO21打开电池电压测量GPIO1读取电池电压
再通过两个电压阈值做近似判断:
>= 4.15V视为插电高实时<= 4.05V视为电池省电<= 20%触发顶部低电量标识
这是一个“够实用、但不是绝对精确”的默认方案。原因是当前公开资料里比较明确的是电池电压采样能力,而不是一个现成的、已在当前仓库验证过的 USB/VBUS 供电脚位。
如果你后面实机发现:
- 满电拔电后一小段时间里仍被判成“插电”
- 或者边充边用但电压还没抬到阈值时,切换不够快
可以直接微调 reterminal_e1001_infohub_api.yaml 顶部这些 substitution:
plugged_voltage_thresholdbattery_voltage_thresholdlow_battery_level_thresholdbattery_wake_interval_minuteslow_battery_wake_interval_minutes
这两点是 2026-04-22 在真实 ESPHome 环境里已经踩到并确认过的问题:
- fallback AP 的
ssid不能超过 32 个字符,所以不要继续用"${friendly_name} Fallback"这种长名字,当前模板已经改成InfoHub Fallback font.glyphs在 ESPHome 2026.4.1 下会严格校验重复字符,重复的空格、换行或汉字都会让esphome config直接失败;当前模板里的字形集合已经去重
当前 API 模板已通过 esphome config 校验并正常编译部署。
当前这台 reTerminal E1001 的显示参数经过验证:
- 首刷使用
7.50inv2alt + reset_duration: 2ms确认屏幕可点亮 - 业务固件已切到
7.50inV2p + full_update_every: 15 + reset_duration: 2ms,支持硬件级局部刷新 - 标准
7.50inv2在当前设备上会白屏,不要使用
当前业务固件同时做到了两个层面的局部刷新:
- 逻辑层面:只有 API payload 变化时才触发屏幕刷新
- 物理显示层面:使用
7.50inV2p支持硬件级 partial refresh,配合full_update_every: 15每 15 次局刷后做一次全刷,避免残影积累
- 先完成 reTerminal E1001 首刷 Runbook,确认最小固件已 USB 刷入并且屏幕能亮字
- 启动并确认
collect-server的device.json可以访问 - 把设备 YAML 切换成 API 直连版
- 通过 OTA 更新设备,而不是重新走 USB 刷机
- 验证只有 JSON 内容变化时才会重新刷屏
- 如果启用了省电版模板,观察
Power Profile/Battery Voltage/Battery Level三个实体,确认插电和电池切换是否符合这台机器的实际电压表现 - 如果
esphome config失败,先优先检查 Wi-Fi fallback 名称长度、font.glyphs是否有重复字符,以及是否缺少根级json:组件
如果你准备进一步验证硬件级 partial refresh,不要直接拿业务面板硬切显示型号,先走独立探针固件: reTerminal E1001 局部刷新验证方案
当前这版已经把全天电池周期唤醒和夜间 deep sleep 做进模板了。如果还要继续压榨续航,可以继续往下做:
- 如果后面确认到稳定可用的 USB/VBUS 检测脚位,可以把现在的电压近似判断改成真正的外部供电检测,切换会更准
- 如果后端数据变化不频繁,可以把
battery_wake_interval_minutes从30调到60或更长 - 通过功耗仪测量每次唤醒耗时与 deep sleep 静态电流;如果深睡电流仍明显偏高,再排查板载稳压器和其他外设电源轨
- Seeed 官方的 E1001 + ESPHome 基础接线和
waveshare_epaper示例: reTerminal E Series with ESPHome - ESPHome 官方
waveshare_epaper组件文档: Waveshare E-Paper Display - ESPHome 官方
http_request组件文档: HTTP Request Component