CommunityProgramación y desarrollogithub.com

leosongyyy/zectrix-friday-weather

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

¿Qué es zectrix-friday-weather?

Esta skill genera una página divertida para pantallas de tinta electrónica Zectrix 400x300 monocromáticas, combinando el clásico meme «¿Hoy es viernes?» con información meteorológica local. Está basada en el proyecto de código abierto [eyaeya/today-is-friday](https://github.com/eyaeya/today-is-friday) (MIT), pero rediseñada para pantallas en blanco y negro. La skill renderiza una imagen de 400x300 píxeles con: en la parte superior, la pregunta y la ubicación del usuario; en la columna izquierda, frases divertidas que cambian según el día y la hora (con un sistema de baraja para evitar repeticiones); en la columna derecha, un gran icono del tiempo, temperatura, nivel de rayos UV y temperaturas HI/LO; y en la parte inferior, un pronóstico de tres días con una recomendación de vestimenta generada automáticamente según el clima real. Es compatible con macOS, Linux y entornos donde se pueda ejecutar Python 3 con las bibliotecas Pillow y requests. El proceso de inicialización recopila tres datos del usuario (API Key de Zectrix, ID del dispositivo y ubicación) sin almacenar secretos en el código de la skill, lo que permite compartir y actualizar la skill de forma segura. La skill se puede ejecutar manualmente para renderizar y enviar la imagen a la pantalla, o configurarse con una tarea programada para actualizaciones diarias.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add leosongyyy/zectrix-friday-weather

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Pantalla de tinta electrónica «¿Hoy es viernes?» + Clima

Renderiza una página divertida para la pantalla de tinta electrónica monocromática Zectrix 400×300. La idea proviene del proyecto de código abierto eyaeya/today-is-friday (MIT). Esta habilidad la rediseña para pantallas monocromáticas en blanco y negro, y le añade el clima local.

Ver assets/preview.png para ver el resultado:

  • Parte superior: izquierda «¿Hoy es viernes?», derecha la ubicación del usuario (ej. «Chengdu·Chenghua District»)
  • Columna izquierda: saludo + dos líneas de frases divertidas, cambiando según el día de la semana y el periodo horario, con un sistema de baraja para evitar repeticiones en una misma ronda
  • Columna derecha: icono grande del clima + temperatura grande + estado + nivel de rayos UV + HI/LO
  • Parte inferior: pronóstico de tres días (hoy/mañana/pasado mañana) + una recomendación de vestimenta generada según el clima real (llevar paraguas si llueve, protección solar si hace calor, abrigarse si hace frío, alerta de温差, protector solar si hay UV)

Reglas de periodo horario y combinación de colores (según la lógica del proyecto original):

HoraSaludoColor
Lunes–JuevesNo.Fondo blanco, texto negro
Viernes antes de las 16:00¡Es viernes!Fondo negro, texto blanco
Viernes después de las 16:00¡Es viernes! + sello «退朝» en esquina superior derechaFondo negro, texto blanco
Sábado, Domingo antes de las 19:00Descanso.Fondo negro, texto blanco
Domingo después de las 19:00Mañana es lunes.Fondo blanco, texto negro

El grupo de frases tiene 9 conjuntos (lunes–jueves / viernes día / viernes noche / sábado / domingo día / domingo noche), cada uno con 65 frases, almacenadas en scripts/friday_phrases.json. Puedes añadir más frases directamente editando el archivo.

1. Primer uso: inicialización obligatoria (sin secretos, sin claves integradas)

Esta habilidad no contiene ninguna API Key, ID de dispositivo ni coordenadas. Todo debe ser proporcionado por el usuario. Debes inicializarla antes del primer uso.

cd ~/.workbuddy/skills/zectrix-friday-weather/scripts
python3 init.py            # Guía interactiva, recomendado
# O no interactivo:
python3 init.py --api-key zt_xxx --device AA:BB:CC:DD:EE:FF --place "Chengdu Chenghua District" --label "Chengdu·Chenghua District"

Necesitas recopilar tres datos del usuario, todos son obligatorios (no adivines, no uses valores de ejemplo):

  1. Clave API de Zectrix: El usuario la obtiene desde la consola de Jiquyun, comienza con zt_. Si no está seguro, ejecuta primero python3 init.py --api-key zt_xxx --list-devices para ver si puede listar dispositivos.
  2. ID del dispositivo: La dirección MAC del dispositivo, con formato AA:BB:CC:DD:EE:FF; se puede obtener de la salida del comando anterior.
  3. Ubicación: Nombre de lugar en chino, ej. «Chengdu Chenghua District», «Shanghai Xuhui», «Shenzhen Nanshan». El script llamará al servicio de geocodificación de Open-Meteo para convertirlo en coordenadas; si hay múltiples candidatos, se selecciona interactivamente; en entorno no interactivo, se toma el primero.

La inicialización verifica que la clave coincida con el dispositivo (si no, muestra advertencia y sale; si hay problemas de identificación, se puede añadir --no-verify), luego escribe en ~/.config/zectrix-friday-weather/config.json:

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

La configuración y el estado se almacenan en ~/.config/zectrix-friday-weather/ (se puede sobrescribir con la variable de entorno ZECTRIX_FRIDAY_CONFIG_DIR), no dentro del directorio de la habilidad, por lo que la habilidad se puede compartir y actualizar de forma segura sin exponer claves.

2. Uso diario

cd ~/.workbuddy/skills/zectrix-friday-weather/scripts
ZECTRIX_NO_PUSH=1 python3 zectrix_friday_push.py   # Solo renderizar vista previa, genera imagen en /tmp/zectrix_friday_screen.png
python3 zectrix_friday_push.py                     # Renderizar y enviar a la pantalla de tinta electrónica

Si no se ha inicializado, el script imprimirá NEED_INIT: y terminará con código de salida 2; en ese caso, guía al usuario para que complete la configuración como se indica en la sección anterior, sin inventar claves.

3. Experiencia de renderizado y maquetación (obligatorio al modificar el estilo)

  • Renderizado nativo 400×300, relación 1:1, no amplíes y luego reduzcas; umbral de binarización THRESHOLD=128, dither=false al enviar (umbral duro, texto más nítido)
  • Fuente: Por defecto se usa la fuente de mapa de bits assets/fonts/Zfull.ttf incluida en el repositorio (8-24px, nítida a nivel de píxel, muy recomendada para tinta electrónica; clonar el repositorio ya la activa, no necesita instalación adicional). Se puede sobrescribir con $ZECTRIX_FONT=/path/to/xxx.ttf, y luego se recurre a PingFang / Heiti / Noto CJK del sistema
  • Iconos: draw_icon() se dibuja dos veces (primero el color de borde expandido, luego el color de fondo de relleno) para obtener un contorno grueso sin líneas internas; las nubes pueden ocultar naturalmente el sol detrás. Los símbolos multibyte como ▲▼ pueden faltar en la fuente de mapa de bits a tamaños pequeños, así que se dibujan con código
  • El texto siempre en peso normal, sin negrita ni contorno (el negrita en una pantalla de 1 bit se vuelve borroso)
  • Icono y temperatura de la columna derecha centrados como conjunto: primero se mide el ancho real de la temperatura con d.textlength(), luego se calcula el punto de inicio tomando como referencia la línea central de la columna derecha. El brillo del icono de sol se expande, por lo que el ancho de la posición debe ampliarse por separado
  • Rotación del sello: usar fillcolor=255 para evitar esquinas negras; en escenarios de inversión de color, el sello debe pegarse con img.paste(tcol, box, mask) según el color del marco

4. Envío programado

El dispositivo se actualiza mediante extracción (pull), la API devuelve code:0 si es exitoso, y la pantalla se actualizará en el próximo sondeo. Las frases cambian según el periodo horario; se recomienda configurar una automatización para enviar una vez al día a las 10:00. Para que después de las 19:00 del domingo muestre «Mañana es lunes.» y después de las 16:00 del viernes aparezca el sello «退朝», es necesario añadir otro envío a las 19:00.

5. Descripción de archivos

ArchivoDescripción
scripts/init.pyAsistente de inicialización: recopila clave/dispositivo/ubicación, geocodificación, escribe configuración
scripts/zectrix_friday_push.pyScript principal de renderizado + envío
scripts/dev_render_sample.pyGenera imágenes de ejemplo para documentación (especifica día de semana/periodo/clima, sin envío)
scripts/friday_phrases.json9 conjuntos × 65 frases, se puede editar directamente para ampliar
assets/fonts/Zfull.ttfFuente de mapa de bits incluida (fuente de renderizado por defecto, distribuida con el repositorio)
assets/preview.pngImagen de vista previa
assets/sample-friday.pngEjemplo de viernes por la tarde (fondo negro, texto blanco + sello «退朝»)

Los datos meteorológicos provienen de Open-Meteo (gratuito, sin necesidad de clave de registro), el índice UV se toma del uv_index_max del día.

Skills relacionados