Commit Graph

43 Commits

Author SHA1 Message Date
jerem
e773259aa7 Dashboard: compacte la section trackers + resserre séparateurs/labels
Fait tenir 4 trackers sous le NAS sans déborder la colonne gauche (ratio 38px,
io 22px, padding réduit ; hr 22px ; label margin 20px).
2026-06-17 11:13:19 +02:00
jerem
df9f384d57 Trackers: ajoute yggreborn (Flask, login email+CSRF), ratio seul
Type yggreborn : login form classique (identifier=EMAIL, password, csrf_token),
ratio lu dans l'en-tête (Ratio : X.XX). Pas de up/down ni jetons (ligne envoyé/
reçu rendue conditionnelle sur up/down>0).
2026-06-17 11:09:48 +02:00
jerem
f6f6694215 Trackers: ajoute tr4ker (SPA React, auth cookie) + jetons Crédit
Type tr4ker : login cookie TR4KER_session via POST /api/auth/login {identifier,
password}, profil GET /api/me. Ratio = (uploaded+bonus_upload)/(downloaded+
bonus_download), garde-fou download=0 -> 1 Go. Jetons = champ money, libellé
token_currency_name (Crédit).
2026-06-17 10:57:07 +02:00
jerem
c4e5c141aa Trackers: affiche les jetons de seed (torr9 jeton_balance)
Champ tokens optionnel sur TrackerStat (None = tracker sans jetons) ; torr9 le
remplit depuis jeton_balance de /users/me. Ligne « N jetons » conditionnelle sous
envoyé/reçu, masquée pour les trackers sans système de jetons (c411).
2026-06-17 10:43:32 +02:00
jerem
291a076759 Trackers: ajoute le type torr9 (login JWT + /api/v1/users/me)
torr9 a une API Go dédiée (api.torr9.net) avec auth JWT (username/password).
Le ratio se calcule (total+bonus) up/down comme le frontend ; pas de champ
ratio dans l'API. Le passkey du compte ne sert qu'au RSS, pas au profil.
2026-06-17 10:39:09 +02:00
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
jerem
b1229e3dcc Codex: monte le dossier ~/.hermes (pas le fichier) pour suivre le rename du token
Le bind-mount d'un fichier unique reste accroché à l'inode capturé au
démarrage ; Hermes réécrit auth.json par rename atomique -> le conteneur
servait un token périmé (401), la section Codex disparaissait au refresh.
2026-06-16 16:35:49 +02:00
jerem
ca4febbc44 Refresh e-ink: multi-régions + full toutes les 2h (basé temps)
Le full refresh apparaissait trop souvent: getbbox() renvoyait un seul
rectangle englobant tous les pixels modifiés, donc météo (haut) + heure de
MaJ (ailleurs) qui changeaient au même cycle produisaient un rectangle
quasi plein écran -> ratio > partial_max_ratio -> full forcé.

- frame.py: détection des bandes horizontales modifiées disjointes
  (_changed_regions), refresh partiel serré par zone. Full basé sur le
  temps écoulé (last_full_at + time.monotonic) au lieu d'un compteur de
  cycles. État pngs/regions en liste, get_png(client, region).
- config.py: full_refresh_interval_minutes (MONITORINK_FULL_INTERVAL_MIN,
  défaut 120). Suppression de partial_max_ratio.
- app.py: /frame.meta renvoie un bloc multi-ligne "MODE SEQ N" + N régions
  "i x y w h"; /frame.png?region=i.
- monitorinkloop.sh: display_meta parse le bloc et fait N fbink partiels.
2026-06-16 14:06:49 +02:00
jerem
d7f52210e7 Kobo: réglages suspend post-validation + log batterie
Validé sur une nuit (34 cycles, 34 suspends pleins ~901s) :
- délai de décharge VEE 8 -> 12s : le suspend réussit dès la 1re tentative
  (les logs montraient tentative=1 KO / tentative=2 OK vers ~12s), un cycle
  suspend/resume gâché en moins par itération. Retry conservé comme filet.
- DIAG verbeux remplacé par un filet compact (alim + dmesg PM/epdc), ne se
  déclenche qu'en cas d'échec total des retries.
- log de la capacité batterie à chaque itération (CAP|CHG) pour suivre le
  drain réel en %/h sur les prochaines sessions.
2026-06-16 10:32:29 +02:00
jerem
15754fb05c Kobo: corrige le suspend (EPDC/VEE) qui vidait la batterie
Cause racine de l'autonomie médiocre : la liseuse ne suspendait JAMAIS.
Juste après un refresh e-ink, le pilote EPDC (20f4000.epdc) refuse de
suspendre tant que la haute tension VEE n'est pas redescendue
("waiting for VEE stable ... please retry suspend later", error -2) :
le noyau avorte tout le suspend, on tombait dans le repli `sleep` et le
CPU tournait 24h/24 (0 suspend réussi sur 261 itérations dans les logs).

Correctif (suspend_for) : on laisse l'EPDC décharger VEE (~8 s) puis on
RÉESSAIE le suspend jusqu'à ce qu'il prenne, comme le suggère le noyau.
Résultat : rtcwake elapsed ~= REFRESH (vrai sommeil entre les refresh),
duty cycle éveillé ~100% -> ~3%.

Aussi :
- intervalle 5 min -> 15 min (moins de réveils).
- suspend_diag() one-shot conservé comme filet (ne se déclenche qu'en
  cas d'échec total après les retries) — à retirer après validation 24 h.
2026-06-16 01:07:44 +02:00
jerem
85edb5d14c Dashboard: jauges en sens intuitif (noir = consommé qui se remplit, blanc = restant)
Le remplissage noir partait du restant -> une barre quasi pleine se lisait à tort
comme « épuisé ». Le noir représente désormais la conso (gauche->droite), le blanc à
droite = budget restant ; le repère ▼ marque la ligne d'alerte (80 % conso = 20 % rest.).
2026-06-15 23:04:45 +02:00
jerem
3782738d57 Dashboard: refonte design « instrument 1-bit » (jauges graduées, polices vendorisées, glyphes météo)
- Identité noir & blanc pur (zéro gris, anti-ghosting e-ink) ; hachures pour conso/alarme
- Typo vendorisée : Archivo (mots) + JetBrains Mono (nombres tabulaires), @font-face base64
- Jauge signature : noir = restant, repère seuil 20 %, hachures sous le seuil
- Météo : glyphes 1-bit en silhouette (weather.kind) au lieu d'emoji couleur
- Layout rééquilibré (plus de débordement), états dégradés soignés
- dev/preview.py : aperçu hors-ligne du template
2026-06-15 22:56:56 +02:00
jerem
0f6286c154 claude_usage: backoff après échec de refresh OAuth (anti-429)
Token expiré -> refresh tenté à chaque rendu, échec non mémorisé -> on martelait
platform.claude.com et le 429 s'entretenait. On impose désormais un backoff de 5 min
après un refresh échoué (et sur la voie de refresh forcé 401), pendant lequel on sert
la dernière valeur connue au lieu de re-tenter.
2026-06-15 19:50:52 +02:00
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
jerem
c7395d1c37 Refresh partiel e-ink : ne redessine que la zone changée, full refresh ~1h
Backend : endpoints /frame.meta (ligne 'MODE X Y W H SEQ') + /frame.png qui
servent un crop de la zone modifiée (diff PIL par client) ou l'image pleine.
Full refresh forcé tous les N cycles (MONITORINK_FULL_EVERY=12, ~1h) ou si la
zone change sur plus de 60% de l'écran. Mode 'noop' quand rien ne change.

Anti-429 : l'usage Claude est mis en cache (MONITORINK_USAGE_TTL=120s) avec
repli sur la dernière valeur connue en cas d'erreur transitoire.

Kobo : monitorinkloop.sh récupère meta puis png et fait un fbink partiel
(-g file=,x=,y=) sans flash, full refresh (-c -f) en mode full. Refresh 5 min.
2026-06-15 18:42:32 +02:00
jerem
ce20d3675d Dashboard: retire l'heure/date, remonte meteo + NAS en haut de colonne gauche 2026-06-15 17:20:14 +02:00
jerem
c4011bef0b Dashboard: retire "Abonnement" devant Claude (titre = Claude . Max 5x) 2026-06-15 17:15:54 +02:00
jerem
88569f533b Kobo: mode prod (refresh 5 min, frontlight eteint, WiFi cycle + suspend)
- monitorink.sh: MONITORINK_REFRESH 30 -> 300 (5 min)
- monitorinkloop.sh: frontlight_off() (ecrit 0 dans /sys/class/backlight/*),
  cycle WiFi (wifi_down: release-ip + disable-wifi) autour du fetch,
  sleep -> suspend_for (rtcwake mem) + repli sleep si la veille echoue (USB)
- README: documente les reglages prod
2026-06-15 16:41:31 +02:00
jerem
ba7ea0af3f Affiche la batterie de la Kobo (push via params /image.png) en pied de page 2026-06-15 16:01:09 +02:00
jerem
0178f596ef Codex: vraies jauges 5h/hebdo via wham/usage (token Hermes monte ro) 2026-06-15 15:49:58 +02:00
jerem
319ff3f552 Ajout section Codex (conso 7j + statut limite) via dashboard Hermes 2026-06-15 15:27:13 +02:00
jerem
3191720776 NAS: retirer les soulignements par ligne (moins charge) 2026-06-15 15:07:06 +02:00
jerem
fc4f0efd20 NAS: deplacer le bloc sous la meteo (colonne gauche) 2026-06-15 15:02:18 +02:00
jerem
ca8f725b3a Ajout section NAS (disques, docker, port VPN) via nas_monitor /api/status 2026-06-15 14:58:56 +02:00
jerem
8dad6454f5 Extra usage: montants en euros (centimes/100), affiche utilise / plafond mensuel 2026-06-15 14:51:27 +02:00
jerem
ec1c8226a7 Extra usage: afficher le restant en priorite (restant / utilise / plafond) 2026-06-15 14:41:06 +02:00
jerem
56f71c0ea6 Affichage paysage: canevas 1680x1264, rotation 90deg, layout 2 colonnes 2026-06-15 14:33:05 +02:00
d75872c065 Reboot watcher: retrait du debug finger_trace 2026-06-15 14:19:19 +02:00
7e2df79499 Reboot par triple-tap (finger_trace) + indice pied de page 2026-06-15 14:03:12 +02:00
a7a92ffadf Kobo: tuer Nickel + siphon env WiFi + reboot a l'arret (refresh fiable) 2026-06-15 12:46:11 +02:00
cc92b2f283 Kobo dev: WiFi maintenu + plain sleep + reco auto (fiabilité refresh) 2026-06-15 12:34:58 +02:00
367cf7d4eb Kobo: refresh 30s (mode dev) 2026-06-15 12:24:07 +02:00
5ac4c23118 Kobo: logs sync (fiabilité) + refresh 180s 2026-06-15 12:22:47 +02:00
19a0d9153f Kobo: suspend correct (state-extended avant rtcwake) + hwclock sync + logs suspend 2026-06-15 12:13:58 +02:00
1b42e54465 Barres: afficher le % utilisé (barre se remplit a l'usage) au lieu du restant 2026-06-15 12:09:40 +02:00
edf1a81b21 Kobo: fetch via busybox wget en HTTP direct (curl absent) + port 8899 2026-06-15 11:55:12 +02:00
b4cfb74792 Kobo: fix nm (:sh au lieu de :exec), logs USB-visibles + marqueurs debug, LC_ALL/policy0 2026-06-15 11:42:53 +02:00
77ee465bd3 Kobo: URL https + curl -L + entrée nm (start/stop) 2026-06-15 11:34:21 +02:00
80c8d0ac93 Affichage des crédits extra_usage + parser validé contre réponse réelle 2026-06-15 11:08:10 +02:00
74d33eb693 Claude: passage au login isolé + refresh (scope user:profile requis par /usage) 2026-06-15 11:03:51 +02:00
789fc92c39 Orthographe: mois en minuscule dans l'en-tête 2026-06-15 10:52:44 +02:00
e5ea377199 Client Kobo (overlay trmnl-kobo) + README + sonde usage 2026-06-15 10:52:04 +02:00
bc4cf89a4b Backend Monitorink: serveur PNG (Claude usage + météo + HA) 2026-06-15 10:49:31 +02:00