93 lines
3.1 KiB
Bash
Executable File
93 lines
3.1 KiB
Bash
Executable File
#!/bin/sh
|
|
# Monitorink — boucle d'affichage e-ink sur Kobo Libra 2.
|
|
#
|
|
# 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:-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')] $*"; sync; }
|
|
|
|
fetch() {
|
|
# busybox wget (toujours présent), fallback curl si dispo dans le PATH.
|
|
"$BUSYBOX" wget -q -T 30 -O "$TMP" "$IMAGE_URL" 2>/dev/null && return 0
|
|
command -v curl >/dev/null 2>&1 && curl -fsSL -m 30 -o "$TMP" "$IMAGE_URL" 2>/dev/null && return 0
|
|
return 1
|
|
}
|
|
|
|
# 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() {
|
|
"$FBINK" -g file="$TMP",valign=CENTER,halign=CENTER -c -f
|
|
log "fbink rc=$?"
|
|
}
|
|
|
|
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.
|
|
secs="$1"
|
|
sync
|
|
echo 1 > /sys/power/state-extended 2>/dev/null
|
|
start=$(date +%s)
|
|
"$BUSYBOX" rtcwake -a -s "$secs" -m mem 2>/dev/null
|
|
elapsed=$(( $(date +%s) - start ))
|
|
log "rtcwake elapsed=${elapsed}s"
|
|
if [ "$elapsed" -le 10 ]; then
|
|
log "suspend manuel via echo mem"
|
|
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)"
|
|
fi
|
|
echo 0 > /sys/power/state-extended 2>/dev/null
|
|
}
|
|
|
|
wifi_up() {
|
|
./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
|
|
}
|
|
|
|
# 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)"
|
|
|
|
while true; do
|
|
log "--- itération ---"
|
|
./scripts/ledToggle.sh on 2>/dev/null
|
|
|
|
if fetch; then
|
|
log "fetch OK ($(wc -c < "$TMP" 2>/dev/null) octets)"
|
|
display
|
|
else
|
|
# WiFi peut-être tombé : on tente une reconnexion puis un re-essai.
|
|
log "fetch KO -> reconnexion WiFi"
|
|
wifi_up
|
|
if fetch; then
|
|
log "fetch OK après reco ($(wc -c < "$TMP" 2>/dev/null) octets)"
|
|
display
|
|
else
|
|
log "fetch ECHEC (hors ligne)"
|
|
"$FBINK" -pmh "Monitorink hors ligne ($(date '+%H:%M'))"
|
|
fi
|
|
fi
|
|
|
|
./scripts/ledToggle.sh off 2>/dev/null
|
|
sleep "$REFRESH"
|
|
done
|