Community程式設計與開發github.com

leosongyyy/zectrix-friday-weather

墨水屏「今天是周五吗?」趣味屏 + 当地天气单页推送,适配 Zectrix 400x300 单色墨水屏。

zectrix-friday-weather 是什麼?

此技能专为 Zectrix 400x300 单色墨水屏设计,结合了「今天是周五吗?」的趣味文案与当地天气预报功能。它从开源项目 'eyaeya/today-is-friday' 汲取灵感,并对黑白单色显示进行了重新排版。技能会根据当前星期和时间动态切换开场语和版式配色(如周五显示黑底反白,并添加「退朝」印章),同时通过 Open-Meteo API 获取免费天气数据,包含温度、天气状况、紫外线指数和三日预报。初始化时需要用户自行提供 Zectrix 设备 API Key 和设备 MAC 地址,所有敏感配置独立存储在用户目录下,确保技能分享时的安全性。脚本支持仅渲染预览或直接推送至墨水屏显示。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add leosongyyy/zectrix-friday-weather

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

墨水屏「今天是周五吗?」+ 天气屏

为 Zectrix 400×300 单色墨水屏渲染一页趣味屏,灵感来自开源项目 eyaeya/today-is-friday(MIT)。本技能专为黑白单色屏重新排版,并叠加了当地天气资讯。

效果见 assets/preview.png:

  • 顶部:左方显示「今天是周五吗?」,右方显示用户所在地区(如「成都·成华区」)
  • 左栏:开场语加上两行趣味文案,根据星期和时段切换文案池,采用洗牌袋选句机制(一轮内不重复)
  • 右栏:大型天气图标、大号温度、天气状况、紫外线等级以及 HI/LO 温度信息
  • 下方:今明后三天的天气预报格,以及一条依据真实天气生成的出行穿搭建议(雨天带伞、高温防晒、低温添衣、温差提醒、紫外线涂防晒霜)

时段与配色规则(沿用原项目逻辑):

时间开场语配色
周一至周四不是。白底黑字
周五 16:00 前周五啦!黑底反白
周五 16:00 后周五啦!+ 右上「退朝」印章黑底反白
周六、周日 19:00 前休息。黑底反白
周日 19:00 后明天周一。白底黑字

文案池共有 9 个(周一至周四 / 周五白天 / 周五晚 / 周六 / 周日白天 / 周日晚),每个池子有 65 条文案,存储在 scripts/friday_phrases.json 中,可直接添加句子扩充。

一、首次使用:必须初始化(已脱敏,无内置密钥)

本技能不包含任何 API Key、设备号或坐标,全部由用户自行准备。首次运行前必须执行初始化。

cd ~/.workbuddy/skills/zectrix-friday-weather/scripts
python3 init.py            # 交互式引导,推荐
# 或非交互方式:
python3 init.py --api-key zt_xxx --device AA:BB:CC:DD:EE:FF --place "成都成华区" --label "成都·成华区"

需要向用户收集以下三项信息,缺一不可(不要猜测,不要使用示例值):

  1. Zectrix API Key:用户在极趣云控制台获取,以 zt_ 开头。如果不确定,可先执行 python3 init.py --api-key zt_xxx --list-devices 查看是否能列出设备。
  2. 设备 ID:设备的 MAC 地址,格式如 AA:BB:CC:DD:EE:FF;可从上述命令的输出中获取。
  3. 所在地区:中文地名,例如「成都成华区」、「上海徐汇」、「深圳南山」。脚本会调用 Open-Meteo 地理编码服务解析为经纬度;若有多个候选结果,交互模式下会提示选择,非交互环境默认使用第一个。

初始化过程会校验 Key 与设备是否匹配(不匹配时会发出警告并退出,若确认识别问题可添加 --no-verify 参数),随后将配置写入 ~/.config/zectrix-friday-weather/config.json:

{
  "api_key": "zt_xxx",
  "device_id": "AA:BB:CC:DD:EE:FF",
  "page": "5",
  "location": {"label": "XX·XX区", "lat": 30.0000, "lon": 104.0000, "timezone": "Asia/Shanghai"}
}

配置与状态文件都存放在 ~/.config/zectrix-friday-weather/ 目录下(可通过环境变量 ZECTRIX_FRIDAY_CONFIG_DIR 覆盖),不在技能目录内,因此技能可以安全地分享或更新,而不会泄露密钥。

二、日常使用

cd ~/.workbuddy/skills/zectrix-friday-weather/scripts
ZECTRIX_NO_PUSH=1 python3 zectrix_friday_push.py   # 仅渲染预览,生成图片 /tmp/zectrix_friday_screen.png
python3 zectrix_friday_push.py                     # 渲染并推送到墨水屏

若尚未初始化,脚本会打印 NEED_INIT: 并以退出码 2 结束——此时请按照上一节引导用户补充配置信息,不要自行编造 Key。

三、渲染与排版经验(修改样式时务必遵守)

  • 原生 400×300、1:1 渲染,不要放大后再缩小;二值化阈值 THRESHOLD=128,推送时设置 dither=false(硬阈值,文字最锐利)
  • 字体:默认使用仓库自带的 assets/fonts/Zfull.ttf 点阵字体(8-24px 像素级锐利,最适合墨水屏,clone 后即可生效,无需额外安装);可通过 $ZECTRIX_FONT=/path/to/xxx.ttf 覆盖,再回退到系统自带的 PingFang / 黑体 / Noto CJK 字体
  • 图标:draw_icon() 使用两次绘制(先用描边色外扩,再用背景色填充),得到无内线的粗轮廓,云体还能自然遮挡背后的太阳;▲▼ 等多字节符号在点阵字体小字号时会缺失字形,一律改用代码绘制
  • 文字一律使用默认字重,不加粗也不描边(加粗在 1-bit 屏上会模糊成一团)
  • 右栏图标+温度整体居中:先用 d.textlength() 测量温度实际宽度,再以右栏中线为基准计算组合起点;晴天图标光芒外扩,占位宽度需单独加宽
  • 印章旋转时使用 fillcolor=255 避免黑角;反白场景下印章需使用 img.paste(tcol, box, mask) 按框内色粘贴

四、定时推送

设备采用拉取式刷新方式,API 返回 code:0 即表示成功,屏幕会在下次轮询时更新。文案会按时段变化,建议配置自动化任务每天 10:00 推送一次;若希望周日 19:00 后显示「明天周一。」、周五 16:00 后出现「退朝」印章,则需再增加一条 19:00 的推送任务。

五、文件说明

文件说明
scripts/init.py初始化向导:收集 Key/设备/地区,地理编码,写入配置
scripts/zectrix_friday_push.py渲染 + 推送的主脚本
scripts/dev_render_sample.py生成文档示例图(指定星期/时段/天气,不推送)
scripts/friday_phrases.json9×65 条文案池,可直接编辑扩充
assets/fonts/Zfull.ttf自带点阵字体(默认渲染字体,随仓库分发)
assets/preview.png效果预览图
assets/sample-friday.png周五傍晚示例(黑底反白 + 退朝印章)

天气数据来自 Open-Meteo(免费,无需注册 Key),紫外线数据取自当日的 uv_index_max。

相關技能