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.
This commit is contained in:
jerem
2026-06-16 14:06:49 +02:00
parent d7f52210e7
commit ca4febbc44
6 changed files with 140 additions and 83 deletions

View File

@@ -19,10 +19,9 @@ MONITORINK_ROTATE=cw
MONITORINK_CACHE_TTL=120
# Refresh partiel e-ink (endpoints /frame.meta + /frame.png).
# Full refresh (efface le ghosting) tous les N cycles. PROD=12 (~1 h à 5 min/cycle), DEV=2.
MONITORINK_FULL_EVERY=12
# Bascule en full si la zone modifiée dépasse cette fraction de l'écran (partiel inutile).
MONITORINK_PARTIAL_MAX_RATIO=0.6
# Full refresh (flash, efface le ghosting) au 1er lancement/reset puis toutes les N minutes ;
# entre deux, uniquement des partiels serrés sur les zones modifiées. PROD=120 (2 h), DEV=1-2.
MONITORINK_FULL_INTERVAL_MIN=120
# Intervalle mini entre deux appels réels à l'endpoint /usage de Claude (anti-429). Secondes.
MONITORINK_USAGE_TTL=120