feat: E1002 顶部加设备电量/温湿度列+server 四路上游并行拉取与响应预算
- 新增 SenseCraft 设备遥测客户端(api-key 走 .env),读电量/充电/温度/湿度,DEVICE_TTL 与设备 300s 上报周期同步 - 大时钟 F84 右侧一列三行左缘对齐:电池(充电绿/≤20% 红)、温度计+蓝色水滴、星期日期(与时钟基线对齐) - server 过期上游由串行改并行,整体最多等 FETCH_BUDGET 秒(默认 5);超预算的一路本次用旧值、后台拉完回填缓存,同一路不重复实拉 - 此前串行且上游 socket 超时 30s,任一路卡住即整图拖到平台抓取超时;「多路 TTL 同时到期」猜想经日志核查不成立,排查顺序写入 CLAUDE.md Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
11
config.py
11
config.py
@@ -48,6 +48,9 @@ E1002_COLOR_STRIP = os.environ.get("E1002_COLOR_STRIP", "0") == "1" # 底部六
|
||||
# 服务端三路上游的内存缓存有效期(秒):收到请求先查缓存是否过期,过期才实拉并更新时间戳,否则直接用缓存渲染;
|
||||
# 拉取失败沿用旧值且不更新时间戳(下次请求再试)。设 0 = 每次请求都实拉。天气/BTC 复用上面的 WEATHER_TTL/BTC_TTL。
|
||||
MAO_TTL = int(os.environ.get("MAO_TTL", "60")) # 橘喵今日实时,默认 60 秒
|
||||
# server.py 一次请求里等待过期上游并行实拉的总预算(秒):超预算的那路本次用上一次成功值,后台继续拉完更新缓存。
|
||||
# 上游 socket 超时各 30s(和风/橘喵)、8s(BTC),若不设预算、任一路卡住会拖到平台抓取超时;预算 ≥ 正常三路并行耗时(~1s)即可。
|
||||
FETCH_BUDGET = float(os.environ.get("FETCH_BUDGET", "5"))
|
||||
# 真机验证结论:Image 控件只在填写 URL 时抓一次快照、此后不再更新;HTML 控件填同一图片 URL 则每周期重抓。
|
||||
SERVER_HOST = os.environ.get("SERVER_HOST", "0.0.0.0")
|
||||
SERVER_PORT = int(os.environ.get("SERVER_PORT", "8790"))
|
||||
@@ -104,6 +107,14 @@ BTC_LIMIT = int(os.environ.get("BTC_LIMIT", "48")) # 展示最近 N 根
|
||||
BTC_TTL = int(os.environ.get("BTC_TTL", "300")) # 秒,默认 5 分钟(本机文件缓存与 server.py 内存缓存共用)
|
||||
BTC_CACHE_PATH = os.path.join(BASE_DIR, ".btc_cache.json")
|
||||
|
||||
# ---- reTerminal E1002 设备遥测(SenseCraft HMI,电量/温度/湿度,宽版顶部状态栏)----
|
||||
# api-key 由用户在 SenseCraft 后台生成,放 .env;设备每 300s 上报一次,DEVICE_TTL 与之同步(0=每次实拉)。
|
||||
SENSECRAFT_API_BASE = os.environ.get("SENSECRAFT_API_BASE", "https://sensecraft-hmi-api.seeed.cc")
|
||||
SENSECRAFT_API_KEY = os.environ.get("SENSECRAFT_API_KEY", "")
|
||||
SENSECRAFT_DEVICE_EUI = os.environ.get("SENSECRAFT_DEVICE_EUI", "")
|
||||
DEVICE_TTL = int(os.environ.get("DEVICE_TTL", "300"))
|
||||
DEVICE_CACHE_PATH = os.path.join(BASE_DIR, ".device_cache.json")
|
||||
|
||||
# ---- AI 用量数据源(Claude Usage / Codex Usage 两个模块)----
|
||||
# 形态 A:两路都在**本机**采集(需本机的登录态),由 main.py --target push 上报给 server.py;服务端不持任何凭证、不读本机文件。
|
||||
# Claude(claude_usage.py):复用 Claude Code 自身的 OAuth 登录态(macOS 钥匙串「Claude Code-credentials」,只读、绝不刷新),
|
||||
|
||||
Reference in New Issue
Block a user