- server.py:三条恒定 URL 并行——/e1002.png 内存现渲染 PNG(主力)、 /e1002.html 现代网页、/e1002-web.png 网页经无头 Chrome 截图后固化六色; 天气/橘喵/BTC 按 WEATHER_TTL/MAO_TTL/BTC_TTL 走内存缓存,过期才实拉、 失败沿用旧值;用量不读本机文件,改由 POST /push/usage(_gpt) 推送暂存 - push_client.py:本机把 Claude 用量快照推送到服务(X-Push-Token 鉴权) - btc_api.py:OKX/Coinbase/Huobi 免费接口逐源兜底,时K 近 72 小时,涨绿跌红 - data.py 拆出 weather_fetch/mao_fetch/btc_fetch 与 usage_from_raw, 统一按 TZ_NAME 时区;宽版只用点阵字体整数倍字号 12/24/36/48 - probe_server.py:验证平台对同一 URL 是否周期重抓(结论:Image 控件 不重抓,HTML 控件重抓) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
59 lines
2.3 KiB
Python
59 lines
2.3 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
入口 —— 取数据 → 渲染 → 推送到设备。
|
||
|
||
用法:
|
||
python3 main.py # 渲染并推送(设备 host 取自 .env 的 EPD_HOST)
|
||
python3 main.py --render-only # 只渲染生成图片,不推送(output/dashboard.png)
|
||
python3 main.py --target e1002 # reTerminal E1002:渲染 800x480 六色图 + 固定尺寸 index.html 到 output/e1002/,
|
||
# 不推送(静态部署形态;动态形态见 server.py)
|
||
python3 main.py --target push # 把本机 Claude 用量快照(~/.claude/usage-snapshot.json)推送到 server.py
|
||
# (PUSH_URL + PUSH_TOKEN),服务端渲染时按当前时刻现算 pace
|
||
|
||
配置统一从同目录 .env 读取(见 .env.example),真实环境变量优先。
|
||
"""
|
||
import argparse
|
||
|
||
import config
|
||
from data import get_dashboard_data
|
||
from renderer import DashboardRenderer
|
||
|
||
|
||
def main():
|
||
parser = argparse.ArgumentParser(description="墨水屏仪表盘:渲染并推送")
|
||
parser.add_argument("--render-only", action="store_true", help="只渲染,不推送")
|
||
parser.add_argument("--target", choices=("miao", "e1002", "push"), default="miao",
|
||
help="miao=喵喵固件 400x300 三色屏(默认,局域网推送);e1002=reTerminal E1002 800x480 六色(产出静态 HTML 页);"
|
||
"push=把本机用量快照推送到 server.py")
|
||
args = parser.parse_args()
|
||
|
||
if args.target == "push":
|
||
from push_client import push_usage
|
||
push_usage()
|
||
return
|
||
|
||
data = get_dashboard_data()
|
||
|
||
if args.target == "e1002":
|
||
from renderer_e1002 import E1002Renderer, write_page
|
||
png = E1002Renderer().render_to_file(data, config.E1002_PNG_PATH)
|
||
html = write_page(config.E1002_HTML_PATH, png)
|
||
print(f"[渲染] 已生成 {png}")
|
||
print(f"[页面] 已生成 {html}(部署到公网 HTTPS 后填入 SenseCraft HMI 的 HTML 控件)")
|
||
return
|
||
|
||
path = DashboardRenderer().render_to_file(data, config.OUTPUT_PATH)
|
||
print(f"[渲染] 已生成 {path}")
|
||
|
||
if args.render_only:
|
||
return
|
||
|
||
from pusher import push_image
|
||
host, resp = push_image(path)
|
||
print(f"[推送] 设备 {host} 成功:{resp}")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|