Files
Monitorink/README.md

69 lines
3.4 KiB
Markdown
Raw Permalink 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
```
[Serveur] backend PNG (FastAPI + Playwright, Docker, derrière un reverse proxy)
├─ Claude : GET /api/oauth/usage (login isolé dédié, scope user:profile)
├─ Codex : usage ChatGPT/Codex via un token openai-codex (auth.json monté)
├─ Météo : Open-Meteo (sans clé)
├─ NAS : endpoint HTTP exposant l'état du NAS (/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
```
Toutes les sources sauf Claude (Codex, NAS, trackers) sont **optionnelles** : laisser la
variable d'env correspondante vide masque la section. Voir `.env.example`.
- **`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, aperçu hors-ligne `preview.py`).
## 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 de la machine de dev ou du serveur. Le backend
lit/rafraîchit **uniquement ce fichier isolé** (`/creds/.credentials.json`), jamais le
`~/.claude` partagé.
## Démarrage backend (dev)
```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 (serveur, Docker)
1. Login Claude isolé dédié (scopes complets) sur le serveur :
`CLAUDE_CONFIG_DIR=~/.monitorink-claude claude auth login`
2. Créer `.env` (depuis `.env.example`) : coords météo, NAS, trackers. Adapter les chemins
des volumes dans `docker-compose.yml` (login Claude → `/creds`, données → `/data`).
3. `docker compose up -d --build`, puis exposer le service via le reverse proxy de ton choix
(le `docker-compose.yml` fourni utilise `caddy-docker-proxy` à titre d'exemple).
Voir `kobo/README.md` pour l'installation côté Kobo.