jerem 5925b0f9d2 Reboot Kobo: 3 appuis bouton de page (evdev EV_KEY) au lieu du triple-tap tactile
L'ancien triple-tap via finger_trace dessinait des points noirs (outil de demo
FBInk), ne respawnait pas (mort definitif si le process tombait) et le tactile ne
reveille pas l'appareil. Le power, lui, n'emet que des scancodes MSC_SCAN parasites
(etat de charge USB). Les boutons de page emettent des EV_KEY propres (codes 193/194).

reboot_watcher.sh: lit l'evdev (FD persistant, pas de perte d'evenements), declenche
sur 3 press EV_KEY < 3 s, boucle de respawn. Plus de finger_trace.

Refresh: full force au (re)demarrage (reset=1 cote client -> oubli de prev_image cote
serveur) pour eviter un refresh partiel pose sur un ecran efface par le reboot.
2026-06-15 19:38:15 +02:00

Monitorink

Transforme une Kobo Libra 2 (e-reader e-ink) en écran de monitoring domestique affichant : heure, météo, statuts Home Assistant, et surtout le reste de tokens de l'abonnement Claude.

Architecture

[Homelab]  backend PNG (FastAPI + Playwright, Docker, derrière Caddy)
              ├─ Claude  : GET /api/oauth/usage (token longue durée `claude setup-token`)
              ├─ Météo   : Open-Meteo (sans clé)
              └─ Home Assistant : API REST /states
                    │
                    └── GET /image.png  (1264×1680 niveaux de gris)
                              │  WiFi à la demande
                        [Kobo Libra 2]  boucle NickelMenu : fetch → fbink → suspend rtcwake
  • backend/ — serveur Python qui agrège les données et génère l'image du dashboard.
  • kobo/ — scripts client pour la Kobo (overlay sur usetrmnl/trmnl-kobo).
  • dev/ — utilitaires de dev (sonde de l'endpoint usage Claude).

Le « reste de tokens Claude »

L'endpoint OAuth /usage (celui derrière la commande /usage de Claude Code) renvoie des pourcentages d'utilisation des fenêtres glissantes (session 5 h + hebdo), pas un nombre brut de tokens — Anthropic n'expose pas de compteur absolu côté abonnement. Monitorink affiche donc le % restant (100 utilisation) et le temps avant reset. (ChatGPT : hors scope, aucune API officielle de quota restant.)

L'endpoint /usage exige le scope OAuth user:profile, que le token claude setup-token n'a pas (403). Le backend utilise donc les credentials d'un login Claude isolé dédié à Monitorink (CLAUDE_CONFIG_DIR séparé) : scopes complets + lignée de refresh token propre, sans aucun conflit avec le Claude Code du Mac ou du homelab. Le backend lit/rafraîchit uniquement ce fichier isolé (/creds/.credentials.json), jamais le ~/.claude partagé.

Démarrage backend (dev, sur Mac)

cd backend
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python -m playwright install chromium
cp ../.env.example ../.env   # puis compléter
.venv/bin/uvicorn app:app --reload --port 8080
# -> http://localhost:8080/image.png  et  /debug.html (itération design)

Déploiement (homelab, Docker + Caddy)

  1. Login Claude isolé dédié (scopes complets) sur le homelab : CLAUDE_CONFIG_DIR=/home/jerem/.monitorink-claude claude auth login
  2. Créer .env (depuis .env.example) : coords météo, config HA. Le compose monte ~/.monitorink-claude sur /creds (lecture/écriture pour le refresh du token).
  3. docker compose up -d --build (le service s'expose via caddy-docker-proxy sur monitorink.homelab.nestor-server.fr).

Voir kobo/README.md pour l'installation côté Kobo.

Description
No description provided
Readme 593 KiB
Languages
Python 70.6%
Shell 15.9%
HTML 13%
Dockerfile 0.5%