Files
Monitorink/kobo
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
..

Client Kobo — Monitorink

Affiche le dashboard Monitorink (/image.png) sur une Kobo Libra 2 (FW 4.38.x) déjà équipée de NickelMenu. Approche : boucle WiFi → fetch image → fbink → suspend rtcwake.

Ces scripts sont un overlay : ils réutilisent les binaires ARM et les helpers WiFi pré-compilés/éprouvés du projet usetrmnl/trmnl-kobo, afin de ne pas réinventer (et risquer de casser) la gestion WiFi/suspend spécifique au matériel.

Contenu de ce dossier

  • monitorink.sh — point d'entrée (lancé par NickelMenu).
  • monitorinkloop.sh — boucle d'affichage (réutilise bin/ et scripts/ de trmnl-kobo).
  • nm/monitorink — entrée NickelMenu.

Installation (Kobo branchée en USB)

  1. Récupérer les binaires + helpers WiFi depuis trmnl-kobo :

    git clone https://github.com/usetrmnl/trmnl-kobo
    

    On a besoin de src/TRMNL/bin/ (fbink, fbdepth, busybox_kobo) et src/TRMNL/scripts/ (enable-wifi.sh, disable-wifi.sh, force-wifi-connection.sh, obtain-ip.sh, release-ip.sh, ledToggle.sh, getrssi.sh).

  2. Construire le dossier Monitorink sur la Kobo, à /mnt/onboard/.adds/Monitorink/ :

    Monitorink/
      monitorink.sh            (ce repo)
      monitorinkloop.sh        (ce repo)
      bin/                     (copié depuis trmnl-kobo/src/TRMNL/bin/)
      scripts/                 (copié depuis trmnl-kobo/src/TRMNL/scripts/)
    
  3. Entrée NickelMenu : copier nm/monitorink dans /mnt/onboard/.adds/nm/monitorink.

  4. Configurer l'URL dans monitorink.sh (MONITORINK_URL) et l'intervalle (MONITORINK_REFRESH, en secondes).

  5. Éjecter proprement la Kobo → l'entrée « Monitorink » apparaît dans NickelMenu.

Utilisation

  • Lancer « Monitorink » depuis NickelMenu. La boucle démarre : l'écran se met à jour, puis le device passe en suspend et se réveille à chaque intervalle.
  • Mode prod (réglages par défaut) : refresh 5 min (MONITORINK_REFRESH=300), rétroéclairage éteint (frontlight à 0), et WiFi cyclé — la radio est rallumée le temps du fetch puis coupée pendant le suspend rtcwake -m mem pour économiser la batterie.
  • Redémarrer / restaurer Nickel : 3 appuis rapides (< 3 s) sur un bouton de page (frontal). reboot_watcher.sh lit l'evdev et déclenche un reboot logiciel propre sur 3 press EV_KEY (codes 193/194). Sur batterie le device est en suspend profond et les boutons frontaux ne le réveillent pas : faire d'abord un appui power (réveil), puis les 3 appuis dans la fenêtre d'éveil. Filet de secours : appui power long = reboot matériel.
    • Pourquoi pas le bouton power directement : sur ce Kobo (mx6sll) le power n'émet que des scancodes bruts MSC_SCAN, parasités par l'état de charge USB (peu fiable). Les boutons frontaux émettent des EV_KEY propres.
    • reboot_watcher.sh tourne en arrière-plan avec une boucle de respawn (il ne reste jamais mort). Calage/debug : lancer avec MONITORINK_PWR_DEBUG=1 pour logger chaque évènement (type/code/val), puis repasser à 0.
  • finger_trace (ancien déclencheur triple-tap tactile) n'est plus utilisé : on peut le retirer de bin/fbink/.
  • Logs : /tmp/monitorink.log (effacés au reboot).

À valider sur l'appareil (cf. plan, tâche 8)

  • Orientation framebuffer : si l'image sort tournée, soit pivoter côté serveur, soit ajouter ./bin/fbdepth -r 2 avant l'affichage et -r -1 après.
  • Frontlight : frontlight_off() écrit 0 dans /sys/class/backlight/*/brightness. Vérifier ls /sys/class/backlight/*/brightness sur l'appareil et ajuster le glob si le nœud diffère.
  • Stabilité de rtcwake -m mem sur FW 4.38.23171 (sinon le fallback state-extended prend le relais ; en dernier recours sleep).
  • Cycle WiFi : confirmer qu'au réveil la reconnexion DHCP aboutit en < ~24 s (has_ip OK).
  • Boutons (reboot) : sur ce Kobo, find_button_dev retient /dev/input/event3 et les boutons de page émettent EV_KEY codes 193/194 (struct input_event 16 o). Sur un autre modèle, recaler via MONITORINK_PWR_DEBUG=1 (codes/format dans le log). Sur batterie, vérifier le geste réveil-power → 3 appuis frontaux dans la fenêtre d'éveil (les frontaux ne réveillent pas du suspend).
  • Autonomie réelle sur 24 h.