#!/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). 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 TMP="/tmp/monitorink.png" FBINK="./bin/fbink/fbink" BUSYBOX="./bin/busybox_kobo" # Ferme les FD hérités pour ne pas bloquer l'éjection USB. exec 3>&- 2>/dev/null display() { # Affiche l'image plein écran, full refresh (-f) anti-ghosting, clear (-c) avant. "$FBINK" -g file="$TMP",valign=CENTER,halign=CENTER -c -f } 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 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" fi } while true; do ./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 if curl -fsS -m 30 -o "$TMP" "$IMAGE_URL"; then display else "$FBINK" -pmh "Monitorink : image indisponible ($(date '+%H:%M'))" fi ./scripts/release-ip.sh ./scripts/disable-wifi.sh ./scripts/ledToggle.sh off 2>/dev/null suspend_for "$REFRESH" done