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

73 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 墨水屏仪表盘推送eink-push
将橘喵今日经营、近30天趋势、日期与天气合成为一张 **400×300 纯黑白**图片,
推送到 Zectrix 极趣云墨水屏设备(`zectrix-s3-epaper-4.2`1bit
纯 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
```
## 安装
```bash
pip install -r requirements.txt
```
## 使用
```bash
python3 main.py # 渲染并推送(默认取设备列表第一个)
python3 main.py --render-only # 只渲染到 output/dashboard.png不推送
```
环境变量可覆盖配置:
```bash
ZECTRIX_API_KEY=zt_xxx ZECTRIX_DEVICE_ID=AA:BB:CC:DD:EE:FF python3 main.py
```
## 定时刷新cron 示例,每 15 分钟)
```cron
*/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` 负责把响应映射成渲染结构;**拉取失败会自动回退 mock**
`JM_USE_MOCK=1` 可强制用 mock 离线调试。后端地址等见 `config.py`
- **天气**`data.py``_weather()` 仍为 mock 占位,接入真实天气 API 时替换它即可。
- **日期 / 时间 / 上次更新**:真实系统时间。
## 设计说明
- 设备为 **1bit 无真灰阶**,灰阶只能抖动成网点(难看),故全程纯黑白,靠构图、字号、留白建立层级。
- 字体用 **Fusion Pixel 12px 点阵字体**,按整数倍尺寸(12/24/48)渲染、关闭抗锯齿 → 像素锐利;
重点数据用「伪粗体」(偏移叠绘)加粗。
- 推送用 `dither=false`(硬阈值),纯黑白图最锐利。
```