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
This commit is contained in:
jerem
2026-06-15 16:41:31 +02:00
parent ba7ea0af3f
commit 88569f533b
3 changed files with 37 additions and 7 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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