Files
Monitorink/README.md

63 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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**.
![Aperçu du dashboard Monitorink](docs/preview.png)
*Rendu généré hors-ligne avec données fictives (`dev/preview.py`).*
## 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)
```sh
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.