Kobo: fix nm (:sh au lieu de :exec), logs USB-visibles + marqueurs debug, LC_ALL/policy0
This commit is contained in:
@@ -1,18 +1,22 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Monitorink — point d'entrée lancé par NickelMenu.
|
# 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"
|
BASE="/mnt/onboard/.adds/Monitorink"
|
||||||
|
LOG="$BASE/monitorink.log" # sur la partition USB-visible (debug via USB)
|
||||||
cd "$BASE" || exit 1
|
cd "$BASE" || exit 1
|
||||||
|
|
||||||
# --- Configuration (adapter au besoin) ---
|
# --- Configuration (adapter au besoin) ---
|
||||||
export MONITORINK_URL="https://monitorink.homelab.nestor-server.fr/image.png"
|
export MONITORINK_URL="https://monitorink.homelab.nestor-server.fr/image.png"
|
||||||
export MONITORINK_REFRESH=600
|
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
|
for gov in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
|
||||||
echo ondemand > "$gov" 2>/dev/null
|
echo ondemand > "$gov" 2>/dev/null
|
||||||
done
|
done
|
||||||
|
|
||||||
# Lance la boucle (journalisée). exec pour ne pas laisser de process orphelin.
|
# Lance la boucle, tout est journalisé dans $LOG.
|
||||||
exec sh "$BASE/monitorinkloop.sh" >> /tmp/monitorink.log 2>&1
|
exec sh "$BASE/monitorinkloop.sh" >> "$LOG" 2>&1
|
||||||
|
|||||||
@@ -1,67 +1,72 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Monitorink — boucle d'affichage e-ink sur Kobo Libra 2.
|
# 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 :
|
# Overlay sur https://github.com/usetrmnl/trmnl-kobo : réutilise ses binaires ARM
|
||||||
# il réutilise ses binaires ARM pré-compilés (bin/fbink, bin/busybox_kobo) et ses
|
# (bin/fbink, bin/busybox_kobo) et ses helpers WiFi (scripts/*.sh). On remplace l'appel
|
||||||
# helpers WiFi éprouvés (scripts/enable-wifi.sh, etc.). On remplace l'appel API TRMNL
|
# API TRMNL par un simple fetch de notre image de dashboard.
|
||||||
# par un simple fetch de notre image de dashboard.
|
# Lancé par monitorink.sh (via NickelMenu). Logs -> ../monitorink.log
|
||||||
#
|
|
||||||
# Lancé par monitorink.sh (lui-même lancé via NickelMenu).
|
|
||||||
# ⚠️ La séquence suspend/rtcwake est à valider sur l'appareil (FW 4.38.23171).
|
|
||||||
|
|
||||||
BASE="$(dirname "$0")"
|
BASE="$(dirname "$0")"
|
||||||
cd "$BASE" || exit 1
|
cd "$BASE" || exit 1
|
||||||
|
|
||||||
IMAGE_URL="${MONITORINK_URL:-http://monitorink.homelab.nestor-server.fr/image.png}"
|
IMAGE_URL="${MONITORINK_URL:-https://monitorink.homelab.nestor-server.fr/image.png}"
|
||||||
REFRESH="${MONITORINK_REFRESH:-600}" # secondes entre deux rafraîchissements
|
REFRESH="${MONITORINK_REFRESH:-600}"
|
||||||
TMP="/tmp/monitorink.png"
|
TMP="/tmp/monitorink.png"
|
||||||
|
|
||||||
FBINK="./bin/fbink/fbink"
|
FBINK="./bin/fbink/fbink"
|
||||||
BUSYBOX="./bin/busybox_kobo"
|
BUSYBOX="./bin/busybox_kobo"
|
||||||
|
|
||||||
|
log() { echo "[$(date '+%H:%M:%S')] $*"; }
|
||||||
|
|
||||||
# Ferme les FD hérités pour ne pas bloquer l'éjection USB.
|
# Ferme les FD hérités pour ne pas bloquer l'éjection USB.
|
||||||
exec 3>&- 2>/dev/null
|
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() {
|
display() {
|
||||||
# Affiche l'image plein écran, full refresh (-f) anti-ghosting, clear (-c) avant.
|
|
||||||
"$FBINK" -g file="$TMP",valign=CENTER,halign=CENTER -c -f
|
"$FBINK" -g file="$TMP",valign=CENTER,halign=CENTER -c -f
|
||||||
|
log "fbink rc=$?"
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend_for() {
|
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"
|
secs="$1"
|
||||||
start=$(date +%s)
|
start=$(date +%s)
|
||||||
"$BUSYBOX" rtcwake -a -s "$secs" -m mem 2>/dev/null
|
"$BUSYBOX" rtcwake -a -s "$secs" -m mem 2>/dev/null
|
||||||
end=$(date +%s)
|
end=$(date +%s)
|
||||||
if [ $((end - start)) -lt 10 ]; then
|
if [ $((end - start)) -lt 10 ]; then
|
||||||
|
log "rtcwake fallback (state-extended)"
|
||||||
echo 1 > /sys/power/state-extended 2>/dev/null
|
echo 1 > /sys/power/state-extended 2>/dev/null
|
||||||
sleep 2
|
sleep 2
|
||||||
echo mem > /sys/power/state 2>/dev/null
|
echo mem > /sys/power/state 2>/dev/null
|
||||||
echo 0 > /sys/power/state-extended 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=$(date +%s)
|
||||||
[ $((now - start)) -lt 10 ] && sleep "$secs"
|
[ $((now - start)) -lt 10 ] && { log "suspend KO -> sleep $secs"; sleep "$secs"; }
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
|
log "--- itération ---"
|
||||||
./scripts/ledToggle.sh on 2>/dev/null
|
./scripts/ledToggle.sh on 2>/dev/null
|
||||||
|
|
||||||
# WiFi à la demande (ON -> fetch -> OFF) pour préserver la batterie.
|
log "wifi: enable"
|
||||||
./scripts/enable-wifi.sh
|
./scripts/enable-wifi.sh >/dev/null 2>&1
|
||||||
./scripts/force-wifi-connection.sh
|
./scripts/force-wifi-connection.sh >/dev/null 2>&1
|
||||||
./scripts/obtain-ip.sh
|
./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
|
if curl -fsSL -m 30 -o "$TMP" "$IMAGE_URL"; then
|
||||||
|
log "curl OK ($(wc -c < "$TMP" 2>/dev/null) octets)"
|
||||||
display
|
display
|
||||||
else
|
else
|
||||||
|
log "curl ECHEC (rc=$?)"
|
||||||
"$FBINK" -pmh "Monitorink : image indisponible ($(date '+%H:%M'))"
|
"$FBINK" -pmh "Monitorink : image indisponible ($(date '+%H:%M'))"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
./scripts/release-ip.sh
|
./scripts/release-ip.sh >/dev/null 2>&1
|
||||||
./scripts/disable-wifi.sh
|
./scripts/disable-wifi.sh >/dev/null 2>&1
|
||||||
./scripts/ledToggle.sh off 2>/dev/null
|
./scripts/ledToggle.sh off 2>/dev/null
|
||||||
|
|
||||||
|
log "suspend ${REFRESH}s"
|
||||||
suspend_for "$REFRESH"
|
suspend_for "$REFRESH"
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# Entrée NickelMenu pour Monitorink.
|
# Entrée NickelMenu pour Monitorink.
|
||||||
# À copier dans /mnt/onboard/.adds/nm/monitorink (fichier séparé, ne touche pas à `config`).
|
# À copier dans /mnt/onboard/.adds/nm/monitorink (fichier séparé, ne touche pas à `config`).
|
||||||
# NickelMenu agrège tous les fichiers du dossier nm/.
|
# 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 :cmd_spawn :sh /mnt/onboard/.adds/Monitorink/monitorink.sh
|
||||||
menu_item :main :Monitorink STOP :cmd_spawn :exec pkill -f monitorinkloop.sh
|
menu_item :main :Monitorink STOP :cmd_spawn :pkill -f monitorinkloop.sh
|
||||||
|
|||||||
Reference in New Issue
Block a user