diff --git a/kobo/README.md b/kobo/README.md index 7ca9cbb..fd4bf42 100644 --- a/kobo/README.md +++ b/kobo/README.md @@ -42,6 +42,9 @@ afin de ne pas réinventer (et risquer de casser) la gestion WiFi/suspend spéci ## 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. - Un **swipe** sur l'écran réveille le device et force un rafraîchissement. - Pour **arrêter** : maintenir le bouton power (le device se réveille sous Nickel). - Logs : `/tmp/monitorink.log` (effacés au reboot). @@ -49,6 +52,9 @@ afin de ne pas réinventer (et risquer de casser) la gestion WiFi/suspend spéci ## À 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). - Autonomie réelle sur 24 h. diff --git a/kobo/monitorink.sh b/kobo/monitorink.sh index aa2f724..8117472 100755 --- a/kobo/monitorink.sh +++ b/kobo/monitorink.sh @@ -15,7 +15,7 @@ cd "$BASE" || exit 1 # --- Configuration --- export MONITORINK_URL="http://192.168.0.43:8899/image.png" -export MONITORINK_REFRESH=30 # DEV: refresh rapide (repasser à 300-600 en prod) +export MONITORINK_REFRESH=300 # PROD: refresh 5 min echo "===== monitorink start $(date) =====" >> "$LOG"; sync diff --git a/kobo/monitorinkloop.sh b/kobo/monitorinkloop.sh index c6a46a1..5a238a3 100755 --- a/kobo/monitorinkloop.sh +++ b/kobo/monitorinkloop.sh @@ -62,6 +62,14 @@ display() { log "fbink rc=$?" } +frontlight_off() { + # Éteint le rétroéclairage (frontlight). Le nœud sysfs exact dépend du modèle Kobo, + # donc on écrit 0 dans tous les contrôleurs présents. + for b in /sys/class/backlight/*/brightness; do + [ -w "$b" ] && echo 0 > "$b" 2>/dev/null + done +} + suspend_for() { # Séquence Kobo éprouvée (trmnl-kobo) : state-extended=1 AVANT rtcwake, puis # suspend manuel (echo mem) si rtcwake n'a pas vraiment suspendu. @@ -77,9 +85,17 @@ suspend_for() { sleep 1; sync; sleep 2 m_start=$(date +%s) echo mem > /sys/power/state 2>/dev/null - log "echo mem elapsed=$(( $(date +%s) - m_start ))s (≈${secs}=OK, ≈0=Nickel bloque)" + log "echo mem elapsed=$(( $(date +%s) - m_start ))s (≈${secs}=OK, ≈0=USB branché/suspend bloqué)" fi echo 0 > /sys/power/state-extended 2>/dev/null + # Repli : si rien n'a réellement suspendu (USB branché, etc.), on attend le temps + # restant en sleep pour ne pas boucler en continu (martèlement backend + batterie). + total=$(( $(date +%s) - start )) + if [ "$total" -lt "$secs" ]; then + rem=$(( secs - total )) + log "suspend incomplet (${total}s) -> sleep ${rem}s" + sleep "$rem" + fi } has_ip() { ip addr show 2>/dev/null | grep -o 'inet [0-9.]*' | grep -qv '127.0'; } @@ -97,15 +113,22 @@ wifi_up() { return 1 } -# MODE DEV : on garde le WiFi allumé (pas de disable, pas de suspend) -> fiable. -# La gestion d'énergie (suspend + cycle WiFi avec env Nickel) sera ajoutée pour la prod. -wifi_up -log "ip initiale: $(ip addr show 2>/dev/null | grep -o 'inet [0-9.]*' | grep -v '127.0' | head -1)" +wifi_down() { + # Coupe la radio avant le suspend (helpers trmnl, env Nickel siphonné en amont). + ./scripts/release-ip.sh >/dev/null 2>&1 + ./scripts/disable-wifi.sh >/dev/null 2>&1 +} + +# MODE PROD : frontlight éteint, WiFi cyclé (off pendant le suspend), rtcwake mem. +frontlight_off while true; do log "--- itération ---" + frontlight_off # réaffirme après chaque réveil ./scripts/ledToggle.sh on 2>/dev/null + wifi_up + if fetch; then log "fetch OK ($(wc -c < "$TMP" 2>/dev/null) octets)" display @@ -123,5 +146,6 @@ while true; do fi ./scripts/ledToggle.sh off 2>/dev/null - sleep "$REFRESH" + wifi_down # coupe la radio avant le suspend + suspend_for "$REFRESH" # rtcwake -m mem, WiFi éteint pendant ~5 min done