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

@@ -95,14 +95,11 @@ class Config:
)
# --- Refresh partiel e-ink (endpoints /frame.*) ---
# Un full refresh est forcé tous les N cycles pour effacer le ghosting (1=toujours full).
# En prod 12 (~1 h à 5 min/cycle) ; en dev on descend à 2 (~1 min à 30 s/cycle).
full_refresh_every: int = field(
default_factory=lambda: int(_get("MONITORINK_FULL_EVERY", "12"))
)
# Si la zone modifiée dépasse cette fraction de l'écran, on bascule en full (partiel inutile).
partial_max_ratio: float = field(
default_factory=lambda: float(_get("MONITORINK_PARTIAL_MAX_RATIO", "0.6"))
# Un full refresh (flash, efface le ghosting) est forcé au 1er lancement/reset puis toutes les
# N minutes — indépendamment du cycle Kobo. Entre deux, on ne fait que des partiels serrés sur
# les zones réellement modifiées. En dev on descend à 1-2 min pour tester rapidement.
full_refresh_interval_minutes: int = field(
default_factory=lambda: int(_get("MONITORINK_FULL_INTERVAL_MIN", "120"))
)
@property