jerem 4680092f8a Trackers: section ratio/envoi/réception sous le NAS (c411, extensible)
Nouveau module integrations/trackers.py : pour chaque tracker configuré (env
MONITORINK_TRACKERS + bloc par clé), récupère ratio/uploaded/downloaded. Type
unit3d_nuxt (c411) : login session (CSRF meta + /api/auth/login) car le ratio
n'est pas lisible au token API ; session réutilisée, résultat caché (TTL 30 min).
Section dashboard sous le NAS, style instrument 1-bit. Architecture par type pour
ajouter d'autres trackers ensuite.
2026-06-17 10:04:30 +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%