Files
Monitorink/README.md

65 lines
3.1 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 du NAS**, **ratios des trackers**, et surtout le **reste de
tokens des abonnements Claude et Codex**.
![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 (login isolé dédié, scope user:profile)
├─ Codex : usage ChatGPT/Codex via le token Hermes (wham/usage)
├─ Météo : Open-Meteo (sans clé)
├─ NAS : moniteur maison nas_monitor (/api/status)
└─ Trackers : ratios des trackers torrent privés (login session)
└── 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, NAS, trackers. 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.