leosongyyy/zectrix-friday-weather

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

Qu'est-ce que zectrix-friday-weather ?

Cette compétence transforme un écran e-paper Zectrix 400×300 monochrome en un affichage ludique et pratique : elle combine la célèbre question « Est-ce vendredi ? » avec des prévisions météo locales. Basée sur le projet open-source eyaeya/today-is-friday (MIT), elle a été repensée pour l'affichage monochrome et enrichie de données météo réelles (température, indice UV, précipitations, recommandations vestimentaires). L'utilisateur doit fournir sa propre clé API Zectrix, l'identifiant de son appareil et sa localisation (via un assistant interactif). Les scripts génèrent une image 400×300 optimisée avec texte en police bitmap, icônes météo nettes et un système de phrases humoristiques qui changent selon le jour et l'heure (9 catégories de phrases, pas de répétition avant épuisement du pool). La compétence prend en charge la configuration automatique du fuseau horaire, l'affichage inversé le week-end et le vendredi, ainsi qu'un cachet « Fin de service » le vendredi après 16h. Les données météo proviennent d'Open-Meteo (gratuit, sans clé). Elle est idéale pour les développeurs possédant un écran Zectrix souhaitant un tableau de bord personnel, drôle et utile.

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

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Écran e-paper « Est-ce vendredi ? » + Météo

Affiche une page amusante sur l'écran e-paper monochrome Zectrix 400×300, inspirée du projet open-source eyaeya/today-is-friday (MIT). Cette compétence reprend la mise en page pour écran monochrome noir et blanc et superpose la météo locale.

Voir l'aperçu dans assets/preview.png :

  • En haut : à gauche « Est-ce vendredi ? », à droite le lieu de l'utilisateur (ex. « Chengdu · District Chenghua »)
  • Colonne gauche : message d'accueil + deux lignes de texte humoristique, changeant selon le jour et l'heure, avec tirage aléatoire sans répétition dans un cycle
  • Colonne droite : grande icône météo + grande température + situation + indice UV + HI/LO
  • En bas : prévisions sur 3 jours (aujourd'hui/demain/après-demain) + conseil vestimentaire basé sur la météo réelle (parapluie par temps de pluie, protection solaire par forte chaleur, ajout de vêtements par froid, alerte aux écarts de température, crème solaire si UV élevé)

Règles de période et de couleurs (reprises du projet original) :

PériodeMessage d'accueilCouleurs
Lundi–JeudiNon.Fond blanc, texte noir
Vendredi avant 16hC'est vendredi !Fond noir, texte blanc inversé
Vendredi après 16hC'est vendredi ! + cachet « Fin de service » en haut à droiteFond noir, texte blanc inversé
Samedi, Dimanche avant 19hRepos.Fond noir, texte blanc inversé
Dimanche après 19hDemain c'est lundi.Fond blanc, texte noir

Le pool de phrases contient 9 catégories (lun.-jeu. / vendredi jour / vendredi soir / samedi / dimanche jour / dimanche soir), chacune avec 65 phrases, stockées dans scripts/friday_phrases.json. Vous pouvez ajouter directement des phrases pour l'étendre.

1. Première utilisation : initialisation obligatoire (aucune clé intégrée)

Cette compétence ne contient aucune clé API, identifiant d'appareil ou coordonnées – tout doit être fourni par l'utilisateur. L'initialisation est requise avant la première exécution.

cd ~/.workbuddy/skills/zectrix-friday-weather/scripts
python3 init.py            # Assistant interactif (recommandé)
# Ou en mode non interactif :
python3 init.py --api-key zt_xxx --device AA:BB:CC:DD:EE:FF --place "Chengdu Chenghua" --label "Chengdu·District Chenghua"

Trois informations sont nécessaires (aucune ne peut être omise – ne pas deviner ni utiliser de valeurs d'exemple) :

  1. Clé API Zectrix : obtenue depuis la console Jiquyun, commence par zt_. En cas de doute, exécutez d'abord python3 init.py --api-key zt_xxx --list-devices pour vérifier si les appareils sont listés.
  2. Identifiant de l'appareil : adresse MAC de l'appareil, format AA:BB:CC:DD:EE:FF ; disponible dans la sortie de la commande précédente.
  3. Localisation : nom de lieu en chinois, par exemple « Chengdu Chenghua », « Shanghai Xuhui », « Shenzhen Nanshan ». Le script utilise le service de géocodage Open-Meteo pour convertir en coordonnées ; en cas de plusieurs candidats, choix interactif, sinon par défaut le premier.

L'initialisation vérifie que la clé correspond à l'appareil (sinon avertissement et arrêt ; pour forcer, ajoutez --no-verify), puis écrit dans ~/.config/zectrix-friday-weather/config.json :

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

La configuration et l'état se trouvent dans ~/.config/zectrix-friday-weather/ (peut être remplacé par la variable d'environnement ZECTRIX_FRIDAY_CONFIG_DIR), pas dans le répertoire de la compétence, ce qui permet de partager/mettre à jour la compétence en toute sécurité sans divulguer de clés.

2. Utilisation quotidienne

cd ~/.workbuddy/skills/zectrix-friday-weather/scripts
ZECTRIX_NO_PUSH=1 python3 zectrix_friday_push.py   # Rendu uniquement : génère /tmp/zectrix_friday_screen.png
python3 zectrix_friday_push.py                     # Rendu + envoi à l'écran e-paper

Si non initialisé, le script affiche NEED_INIT: et se termine avec le code 2 – dans ce cas, guidez l'utilisateur pour compléter la configuration (ne pas inventer de clé).

3. Rendu et mise en page (à respecter en cas de modification du style)

  • Rendu natif 400×300, 1:1 – ne pas agrandir puis réduire ; seuil de binarisation THRESHOLD=128, dither=false (seuil dur, texte le plus net)
  • Police : par défaut, police bitmap assets/fonts/Zfull.ttf incluse dans le dépôt (8-24 px, nette au pixel, idéale pour e-paper, fonctionne après clone sans installation supplémentaire) ; peut être remplacée par $ZECTRIX_FONT=/path/to/xxx.ttf, avec fallback sur PingFang / Heiti / Noto CJK
  • Icônes : draw_icon() dessine deux fois (d'abord contour extérieur avec couleur de bord, puis remplissage avec couleur de fond) pour obtenir un contour épais sans lignes intérieures ; les nuages masquent naturellement le soleil derrière ; les symboles multi-octets (▲▼) sont dessinés par le code car absents des petites tailles de police bitmap
  • Texte toujours en poids normal – pas de gras ni de contour (le gras devient flou sur un écran 1-bit)
  • Icône + température centrés verticalement dans la colonne droite : mesurer d'abord la largeur réelle de la température avec d.textlength(), puis calculer le point de départ par rapport à la ligne médiane de la colonne droite ; les rayons du soleil par beau temps s'étendent, la largeur de l'espace réservé doit être augmentée
  • La rotation du cachet utilise fillcolor=255 pour éviter les coins noirs ; dans un scénario inversé, le cachet doit être collé avec img.paste(tcol, box, mask) en fonction de la couleur du cadre

4. Envoi programmé

L'appareil fonctionne en mode pull – l'API renvoie code:0 en cas de succès, l'écran se met à jour lors de la prochaine interrogation. Les phrases changent selon la période ; nous recommandons une automatisation pour un envoi quotidien à 10h. Pour que « Demain c'est lundi. » s'affiche après 19h le dimanche et que le cachet « Fin de service » apparaisse après 16h le vendredi, ajoutez un second envoi à 19h.

5. Structure des fichiers

FichierDescription
scripts/init.pyAssistant d'initialisation : collecte de la clé/appareil/localisation, géocodage, écriture de la configuration
scripts/zectrix_friday_push.pyScript principal de rendu + envoi
scripts/dev_render_sample.pyGénère des exemples de documentation (spécifie jour/période/météo, sans envoi)
scripts/friday_phrases.json9×65 phrases, modifiable directement pour extension
assets/fonts/Zfull.ttfPolice bitmap incluse (police de rendu par défaut, distribuée avec le dépôt)
assets/preview.pngImage d'aperçu
assets/sample-friday.pngExemple vendredi soir (fond noir inversé + cachet « Fin de service »)

Données météo fournies par Open-Meteo (gratuit, sans clé API nécessaire). Indice UV basé sur uv_index_max du jour.

Skills associés