Files
eink-push/README.md
2026-06-29 09:43:20 +08:00

2.8 KiB
Raw Blame History

墨水屏仪表盘推送eink-push

将橘喵今日经营、近30天趋势、日期与天气合成为一张 400×300 纯黑白图片, 推送到 Zectrix 极趣云墨水屏设备(zectrix-s3-epaper-4.21bit

纯 Python + Pillow + Fusion Pixel 点阵字体,无浏览器依赖,适合后台/定时运行。

效果

  • 顶部:大号时钟 + 日期 天气(图标 + 温度 + 区间)
  • 中部:橘喵今日经营(单量 / 流水 / 毛利,含环比、同比涨跌)
  • 底部近30天三指标趋势折线图同一图表实线 / 虚线 / 点线区分X 轴仅月/日)

目录结构

eink-push/
├── main.py        # 入口:取数据 → 渲染 → 推送
├── config.py      # 配置API Key、设备、字体、尺寸、推送参数
├── data.py        # 数据层:拉真实数据并映射,失败回退 mock
├── jm_api.py      # jm-devops 后端统计接口客户端(免鉴权 GET
├── renderer.py    # 渲染层DashboardRenderer 生成 400×300 图片
├── pusher.py      # 推送层:设备列表 / 推送图片(标准库 urllib
├── fonts/         # Fusion Pixel 点阵字体OFL 协议)
├── output/        # 生成的图片git 忽略)
├── requirements.txt
└── README.md

安装

pip install -r requirements.txt

使用

python3 main.py               # 渲染并推送(默认取设备列表第一个)
python3 main.py --render-only # 只渲染到 output/dashboard.png不推送

环境变量可覆盖配置:

ZECTRIX_API_KEY=zt_xxx ZECTRIX_DEVICE_ID=AA:BB:CC:DD:EE:FF python3 main.py

定时刷新cron 示例,每 15 分钟)

*/15 * * * * cd /path/to/eink-push && /usr/bin/python3 main.py >> /tmp/eink.log 2>&1

数据来源

  • 橘喵今日经营 + 近30天趋势:已接入 jm-devops 后端统计接口(jm_api.py 免鉴权直接 GET
    • GET /system/statistics/realtime —— 今日单量/流水/毛利 + 环比/同比
    • GET /system/statistics/recent-days?days=30 —— 近30天每日数据 data.py 负责把响应映射成渲染结构;拉取失败会自动回退 mockJM_USE_MOCK=1 可强制用 mock 离线调试。后端地址等见 config.py
  • 天气data.py_weather() 仍为 mock 占位,接入真实天气 API 时替换它即可。
  • 日期 / 时间 / 上次更新:真实系统时间。

设计说明

  • 设备为 1bit 无真灰阶,灰阶只能抖动成网点(难看),故全程纯黑白,靠构图、字号、留白建立层级。
  • 字体用 Fusion Pixel 12px 点阵字体,按整数倍尺寸(12/24/48)渲染、关闭抗锯齿 → 像素锐利; 重点数据用「伪粗体」(偏移叠绘)加粗。
  • 推送用 dither=false(硬阈值),纯黑白图最锐利。