From b4cfb74792a5d6beb6bd110c88afc8d9fd198d90 Mon Sep 17 00:00:00 2001 From: jerem Date: Mon, 15 Jun 2026 11:42:53 +0200 Subject: [PATCH] Kobo: fix nm (:sh au lieu de :exec), logs USB-visibles + marqueurs debug, LC_ALL/policy0 --- kobo/monitorink.sh | 12 +++++++---- kobo/monitorinkloop.sh | 45 +++++++++++++++++++++++------------------- kobo/nm/monitorink | 5 +++-- 3 files changed, 36 insertions(+), 26 deletions(-) diff --git a/kobo/monitorink.sh b/kobo/monitorink.sh index fc10aa7..25c4754 100755 --- a/kobo/monitorink.sh +++ b/kobo/monitorink.sh @@ -1,18 +1,22 @@ #!/bin/sh # Monitorink — point d'entrée lancé par NickelMenu. -# Configure quelques paramètres puis lance la boucle d'affichage. +export LC_ALL="en_US.UTF-8" BASE="/mnt/onboard/.adds/Monitorink" +LOG="$BASE/monitorink.log" # sur la partition USB-visible (debug via USB) cd "$BASE" || exit 1 # --- Configuration (adapter au besoin) --- export MONITORINK_URL="https://monitorink.homelab.nestor-server.fr/image.png" export MONITORINK_REFRESH=600 -# Gouverneur CPU économe pendant les phases actives. +echo "===== monitorink start $(date) =====" >> "$LOG" + +# Gouverneur CPU économe (Libra 2 = policy0 ; fallback générique). +echo ondemand > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor 2>/dev/null for gov in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do echo ondemand > "$gov" 2>/dev/null done -# Lance la boucle (journalisée). exec pour ne pas laisser de process orphelin. -exec sh "$BASE/monitorinkloop.sh" >> /tmp/monitorink.log 2>&1 +# Lance la boucle, tout est journalisé dans $LOG. +exec sh "$BASE/monitorinkloop.sh" >> "$LOG" 2>&1 diff --git a/kobo/monitorinkloop.sh b/kobo/monitorinkloop.sh index dad4335..09b03f5 100755 --- a/kobo/monitorinkloop.sh +++ b/kobo/monitorinkloop.sh @@ -1,67 +1,72 @@ #!/bin/sh # Monitorink — boucle d'affichage e-ink sur Kobo Libra 2. # -# Conçu comme un OVERLAY sur un checkout de https://github.com/usetrmnl/trmnl-kobo : -# il réutilise ses binaires ARM pré-compilés (bin/fbink, bin/busybox_kobo) et ses -# helpers WiFi éprouvés (scripts/enable-wifi.sh, etc.). On remplace l'appel API TRMNL -# par un simple fetch de notre image de dashboard. -# -# Lancé par monitorink.sh (lui-même lancé via NickelMenu). -# ⚠️ La séquence suspend/rtcwake est à valider sur l'appareil (FW 4.38.23171). +# Overlay sur https://github.com/usetrmnl/trmnl-kobo : réutilise ses binaires ARM +# (bin/fbink, bin/busybox_kobo) et ses helpers WiFi (scripts/*.sh). On remplace l'appel +# API TRMNL par un simple fetch de notre image de dashboard. +# Lancé par monitorink.sh (via NickelMenu). Logs -> ../monitorink.log BASE="$(dirname "$0")" cd "$BASE" || exit 1 -IMAGE_URL="${MONITORINK_URL:-http://monitorink.homelab.nestor-server.fr/image.png}" -REFRESH="${MONITORINK_REFRESH:-600}" # secondes entre deux rafraîchissements +IMAGE_URL="${MONITORINK_URL:-https://monitorink.homelab.nestor-server.fr/image.png}" +REFRESH="${MONITORINK_REFRESH:-600}" TMP="/tmp/monitorink.png" FBINK="./bin/fbink/fbink" BUSYBOX="./bin/busybox_kobo" +log() { echo "[$(date '+%H:%M:%S')] $*"; } + # Ferme les FD hérités pour ne pas bloquer l'éjection USB. exec 3>&- 2>/dev/null +log "boucle démarrée — BASE=$BASE URL=$IMAGE_URL refresh=${REFRESH}s" +log "fbink présent: $([ -x "$FBINK" ] && echo oui || echo NON) ; busybox: $([ -x "$BUSYBOX" ] && echo oui || echo NON)" + display() { - # Affiche l'image plein écran, full refresh (-f) anti-ghosting, clear (-c) avant. "$FBINK" -g file="$TMP",valign=CENTER,halign=CENTER -c -f + log "fbink rc=$?" } suspend_for() { - # Suspend-to-RAM avec réveil RTC. Si rtcwake échoue (retour < 10 s), fallback - # séquence Kobo (state-extended) puis sleep en dernier recours. secs="$1" start=$(date +%s) "$BUSYBOX" rtcwake -a -s "$secs" -m mem 2>/dev/null end=$(date +%s) if [ $((end - start)) -lt 10 ]; then + log "rtcwake fallback (state-extended)" echo 1 > /sys/power/state-extended 2>/dev/null sleep 2 echo mem > /sys/power/state 2>/dev/null echo 0 > /sys/power/state-extended 2>/dev/null - # Si même ça n'a pas tenu, on dort simplement. now=$(date +%s) - [ $((now - start)) -lt 10 ] && sleep "$secs" + [ $((now - start)) -lt 10 ] && { log "suspend KO -> sleep $secs"; sleep "$secs"; } fi } while true; do + log "--- itération ---" ./scripts/ledToggle.sh on 2>/dev/null - # WiFi à la demande (ON -> fetch -> OFF) pour préserver la batterie. - ./scripts/enable-wifi.sh - ./scripts/force-wifi-connection.sh - ./scripts/obtain-ip.sh + log "wifi: enable" + ./scripts/enable-wifi.sh >/dev/null 2>&1 + ./scripts/force-wifi-connection.sh >/dev/null 2>&1 + ./scripts/obtain-ip.sh >/dev/null 2>&1 + log "ip: $(ip addr show 2>/dev/null | grep -o 'inet [0-9.]*' | grep -v '127.0' | head -1)" if curl -fsSL -m 30 -o "$TMP" "$IMAGE_URL"; then + log "curl OK ($(wc -c < "$TMP" 2>/dev/null) octets)" display else + log "curl ECHEC (rc=$?)" "$FBINK" -pmh "Monitorink : image indisponible ($(date '+%H:%M'))" fi - ./scripts/release-ip.sh - ./scripts/disable-wifi.sh + ./scripts/release-ip.sh >/dev/null 2>&1 + ./scripts/disable-wifi.sh >/dev/null 2>&1 ./scripts/ledToggle.sh off 2>/dev/null + log "suspend ${REFRESH}s" suspend_for "$REFRESH" done diff --git a/kobo/nm/monitorink b/kobo/nm/monitorink index 7a01ac6..10eb40a 100644 --- a/kobo/nm/monitorink +++ b/kobo/nm/monitorink @@ -1,6 +1,7 @@ # Entrée NickelMenu pour Monitorink. # À copier dans /mnt/onboard/.adds/nm/monitorink (fichier séparé, ne touche pas à `config`). # NickelMenu agrège tous les fichiers du dossier nm/. +# IMPORTANT: utiliser `:sh /chemin` (et non `:exec`), comme trmnl-kobo. -menu_item :main :Monitorink :cmd_spawn :exec /mnt/onboard/.adds/Monitorink/monitorink.sh -menu_item :main :Monitorink STOP :cmd_spawn :exec pkill -f monitorinkloop.sh +menu_item :main :Monitorink :cmd_spawn :sh /mnt/onboard/.adds/Monitorink/monitorink.sh +menu_item :main :Monitorink STOP :cmd_spawn :pkill -f monitorinkloop.sh