2026-10-25

Kindle 4 als E-Ink-Display für Home Assistant

Praxisanleitung · Kindle 4 Non-Touch (D01100) · Firmware 4.1.4 · 600 × 800 Pixel 

 

1. Ziel und Ergebnis

Wir haben einen Kindle 4 (Baujahr 2011) zu einem dauerhaft betriebenen Home-Assistant-E-Ink-Display umgebaut. Statt der normalen Kindle-Oberfläche zeigt das Gerät ein von Home Assistant erzeugtes Dashboard an.

  • Automatischer Dashboard-Start nach dem Einschalten
  • Vollbildanzeige ohne Kindle-Statusleiste
  • Bildprüfung alle fünf Minuten; Aktualisierung nur bei Änderungen
  • Übertragung des Kindle-Akkustands an Home Assistant
  • Automatische Ladesteuerung über eine Zigbee-Steckdose
  • Fernwartung über WLAN und SSH
  • Dauerhaft deaktivierter Bildschirmschoner
  • Rückkehr zur Kindle-Oberfläche über SSH möglich

Hinweis zur Genauigkeit: Die Anleitung fasst unsere tatsächlich umgesetzten Schritte zusammen, nicht die zwischenzeitlichen Tests.

2. Verwendete Hardware und Software

Komponente Unsere Installation
E-Ink-Gerät Kindle 4 Non-Touch, Modell D01100
Firmware 4.1.4
Display 600 × 800 Pixel
Smart-Home-System Home Assistant OS
Konfigurationsrechner Linux Mint
Kindle-Erweiterungen Jailbreak, KUAL 2.7.37, MRPI, USBNetwork 0.57.N, NiLuJe ScreenSaver Hack
Bildausgabe curl, cmp, eips
SSH-Server Dropbear
Netzteil USB-Netzteil über Zigbee-Steckdose

Unsere Netzwerkadressen (für andere Installationen anpassen):

Gerät/Dienst Adresse
Home Assistant 192.168.0.xx
Kindle 192.168.0.yy
Linux Mint 192.168.0.zz
Dashboard-Server http://192.168.0.xx:5000/

3. Kindle vorbereiten

3.1 Jailbreak und Erweiterungen

Wir haben einen zur Firmware 4.1.4 passenden Jailbreak installiert und anschließend KUAL, MRPI, USBNetwork und den NiLuJe ScreenSaver Hack eingerichtet.

3.2 WLAN und SSH

Der Kindle wurde ins WLAN eingebunden. In /mnt/us/usbnet/etc/config wurden folgende Einstellungen verwendet. Die genannte IP-Adresse wird nur für das USNnet verwendet, nicht für die WLAN-Verbindung:

HOST_IP=192.168.15.201
KINDLE_IP=192.168.15.244
K3_WIFI="true"
K3_WIFI_SSHD_ONLY="false"
USE_OPENSSH="false"
USE_VOLUMD="true"
QUIET_DROPBEAR="false"
TWEAK_MAC_ADDRESS="false"

Der Zugriff erfolgt per RSA-Schlüssel über Dropbear. Auf Linux Mint ist ein SSH-Alias eingerichtet:

ssh kindle

Wichtig: Den USBNetwork-Autostart haben wir nicht aktiviert. /mnt/us/usbnet/DISABLED_auto ist vorhanden; /mnt/us/usbnet/auto fehlt. So wird der USB-Massenspeichermodus nicht automatisch durch USB-Ethernet ersetzt.

4. Dashboard in Home Assistant bereitstellen

Wir verwenden das Add-on sibbl/hass-lovelace-kindle-screensaver. Es erzeugt aus dem Home-Assistant-Dashboard ein Bild, das der Kindle über das lokale Netzwerk abruft:

http://192.168.0.xx:5000/

Ein Browser auf dem Kindle ist nicht nötig. Das Dashboard wurde für 600 × 800 Pixel eingerichtet; 

 

5. Dashboard-Skript auf dem Kindle

Datei: /mnt/us/ha_display.sh

Dieses Skript liest den Akkustand aus, sendet ihn an Home Assistant, lädt das Dashboard-Bild herunter und aktualisiert das E-Ink-Display nur, wenn sich das Bild verändert hat:

#!/bin/sh

HA_IP="192.168.0.xx"
IMAGE_URL="http://$HA_IP:5000/"
BATTERY_URL="http://$HA_IP:8123/api/webhook/kindle_4_battery_8f3a71c2"

IMAGE="/tmp/ha_display.png"
TEMP="/tmp/ha_display_new.png"
CHILD=""

cleanup() {
    if [ -n "$CHILD" ]; then
        kill "$CHILD" 2>/dev/null
    fi
    exit 0
}
trap cleanup TERM INT HUP

while true; do
    if [ ! -f /mnt/us/ha_disabled ]; then
        BATTERY=$(lipc-get-prop com.lab126.powerd battLevel)

        curl -s --max-time 15 \
            -X POST \
            -H "Content-Type: application/json" \
            -d "{\"battery\":$BATTERY}" \
            "$BATTERY_URL" >/dev/null 2>&1

        if curl -s --max-time 60 -o "$TEMP" "$IMAGE_URL"; then
            if [ -s "$TEMP" ] && ! cmp -s "$TEMP" "$IMAGE"; then
                mv "$TEMP" "$IMAGE"
                eips -f -g "$IMAGE"
            fi
        fi
    fi

    sleep 300 &
    CHILD=$!
    wait "$CHILD"
    CHILD=""
done

Ausführbar machen:

chmod +x /mnt/us/ha_display.sh

Eine Sicherung liegt unter /mnt/us/ha_display.sh.bak.

Technischer Hintergrund: eips -f -g schreibt das Bild direkt auf das E-Ink-Display. cmp verhindert unnötige Display-Refreshs. Die Wartezeit beträgt 300 Sekunden.

6. Mehrfachstarts verhindern und Cron einrichten

Datei: /mnt/us/ha_start.sh

Der Wrapper verwendet ein Lock-Verzeichnis und eine PID-Datei. Dadurch wird verhindert, dass mehrere Dashboard-Instanzen gleichzeitig laufen:

#!/bin/sh

LOCK="/tmp/ha_display.lock"
PIDFILE="$LOCK/pid"
CHILD=""

if ! mkdir "$LOCK" 2>/dev/null; then
    if [ -f "$PIDFILE" ]; then
        PID=$(cat "$PIDFILE")
        if kill -0 "$PID" 2>/dev/null; then
            exit 0
        fi
    fi
    rm -rf "$LOCK"
    mkdir "$LOCK" 2>/dev/null || exit 1
fi

echo $$ > "$PIDFILE"

cleanup() {
    if [ -n "$CHILD" ]; then
        kill "$CHILD" 2>/dev/null
        wait "$CHILD" 2>/dev/null
    fi
    rm -rf "$LOCK"
    exit 0
}
trap cleanup TERM INT HUP

/bin/sh /mnt/us/ha_display.sh &
CHILD=$!
wait "$CHILD"
cleanup

Ausführbar machen:

chmod +x /mnt/us/ha_start.sh

Eine Sicherung liegt unter /mnt/us/ha_start.sh.bak.

In /etc/crontab/root haben wir folgende Zeile ergänzt:

* * * * * /mnt/us/ha_start.sh >> /mnt/us/ha_cron.log 2>&1

Cron anschließend neu starten:

/etc/init.d/cron restart

Cron ruft den Wrapper jede Minute auf. Die Lock-Prüfung verhindert Doppelstarts; die eigentliche Bildprüfung erfolgt innerhalb von ha_display.sh alle fünf Minuten.

7. Akkustand und Ladesteuerung

Den Akkuwert liefert die Kindle-Energieverwaltung:

lipc-get-prop com.lab126.powerd battLevel

Das Dashboard-Skript sendet ihn per HTTP-POST an den Home-Assistant-Webhook:

http://192.168.0.xx:8123/api/webhook/kindle_4_battery_nnnnnnn

Sicherheitshinweis: Die Webhook-ID ist installationsspezifisch, hier nur beispielhaft.

Dieser Ladezustand wird in einem Helfer gespeichert und damit eien Automation gesteuert, die die Steckdose des Netzteils für den Kindle bei einem Ladezustand von über 80% abschaltet und unter 30% einschaltet 

8. SSH-Autostart und Bildschirmschoner

Datei: /mnt/us/ha_ssh_start.sh

Dies ist das SSH-Startskript:

#!/bin/sh

# Bildschirmschoner deaktivieren
lipc-set-prop com.lab126.powerd preventScreenSaver 1

DROPBEAR="/usr/bin/dropbear"
PIDFILE="/mnt/us/usbnet/run/sshd.pid"

# SSH-Port ueber WLAN freigeben
if ! iptables -L INPUT -n -v 2>/dev/null | grep -q 'wlan0.*tcp dpt:22'; then
    iptables -A INPUT -i wlan0 -p tcp --dport 22 -j ACCEPT
fi

# Laufenden SSH-Server erkennen
if [ -f "$PIDFILE" ]; then
    PID=$(cat "$PIDFILE")
    if kill -0 "$PID" 2>/dev/null; then
        exit 0
    fi
    rm -f "$PIDFILE"
fi

# SSH-Server starten
"$DROPBEAR" -P "$PIDFILE" -K 15

Datei ausführbar machen:

chmod +x /mnt/us/ha_ssh_start.sh

Für den automatischen Start haben wir den symbolischen Link /etc/rc5.d/S90ha-ssh angelegt. Dazu wird das Root-Dateisystem kurzzeitig beschreibbar geschaltet:

mntroot rw
ln -s /mnt/us/ha_ssh_start.sh /etc/rc5.d/S90ha-ssh
mntroot ro

Der SSH-Start wurde nach einem vollständigen Neustart bestätigt. Der Kindle startet den SSH-Dienst vor dem Framework-Aufruf (S95framework).

Hinweis: Das Skript ist keine allgemeine Härtungsvorlage für öffentlich erreichbare SSH-Server. Port 22 sollte ausschließlich aus einem vertrauenswürdigen lokalen Netz erreichbar sein.

Bildschirmschoner deaktivieren

Der folgende Befehl setzt den Kindle-Status auf 1:

lipc-set-prop com.lab126.powerd preventScreenSaver 1

Kontrolle:

lipc-get-prop com.lab126.powerd preventScreenSaver

Erwartete Ausgabe:

1

Da der Wert nach einem Neustart zunächst wieder 0 war, wurde die Einstellung in ha_ssh_start.sh aufgenommen. Nach einem erneuten Neustart stand der Wert korrekt auf 1.

9. Vollbildmodus ohne Kindle-Oberfläche

Der entscheidende Schritt verwendet eine originale Firmware-Funktion. Das Kindle-Skript /etc/init.d/framework prüft beim Start, ob diese Datei vorhanden ist:

/mnt/base-us/DONT_START_FRAMEWORK

Ist sie vorhanden, wird das Kindle-Framework nicht gestartet. Unser Dashboard läuft trotzdem und zeichnet über eips direkt auf das Display. Wir mussten dafür keine Framework-Systemdatei bearbeiten.

Vollbildmodus aktivieren:

touch /mnt/base-us/DONT_START_FRAMEWORK
reboot

Beim Start erscheint zunächst kurz die Firmware-Meldung, dass das Framework nicht gestartet wird. Sobald unser Dashboard-Skript das erste Bild überträgt, erscheint die Home-Assistant-Anzeige ohne Kindle-Statusleiste.

Zur normalen Kindle-Oberfläche zurückkehren

Über die funktionierende SSH-Verbindung:

rm -f /mnt/base-us/DONT_START_FRAMEWORK
reboot

Wichtig: Dieser Rückweg setzt erreichbares WLAN-SSH voraus. Ein davon unabhängiger USB-Rettungsweg wurde in unserem Projekt nicht abschließend bestätigt.

10. Übersicht der dauerhaft verwendeten Dateien

Datei oder Pfad Aufgabe
/mnt/us/ha_display.sh Akku melden, Bild herunterladen, vergleichen und anzeigen
/mnt/us/ha_start.sh Start-Wrapper mit Lock/PID
/mnt/us/ha_ssh_start.sh WLAN-SSH und Bildschirmschoner-Sperre
/etc/crontab/root Cron-Autostart des Dashboards
/etc/rc5.d/S90ha-ssh SSH-Autostart beim Booten
/mnt/base-us/DONT_START_FRAMEWORK Normale Kindle-Oberfläche deaktivieren
/mnt/us/usbnet/etc/config USBNetwork-Konfiguration
/mnt/us/ha_cron.log Protokoll des Cron-Aufrufs
/tmp/ha_display.lock Lock-Verzeichnis für Dashboard-Wrapper

Die Dateien ha_recovery.sh und ha_recovery_timer.sh entstanden nur im Rahmen der Absicherung und Tests. Der Timer-Aufruf wurde vor dem dauerhaften Betrieb wieder aus dem SSH-Startskript entfernt; beide Skripte sind nicht Bestandteil des regulären Bootablaufs.

11. Was passiert nach einem Neustart?

  1. Der Kindle startet seine grundlegenden Systemdienste und verbindet sich mit dem WLAN.
  2. S90ha-ssh startet den SSH-Server und deaktiviert den Bildschirmschoner.
  3. S95framework erkennt DONT_START_FRAMEWORK und überspringt die normale Oberfläche.
  4. Cron ruft ha_start.sh auf.
  5. Der Wrapper startet einmalig ha_display.sh.
  6. Das Skript sendet den Akkustand, lädt das Dashboard und zeigt neue Bilder mit eips an.
  7. Nach 300 Sekunden wird erneut geprüft.

12. Wartung und Administration

Aufgabe Befehl
SSH-Verbindung ssh kindle
Dashboard-Prozesse anzeigen ps -ef \| grep ha_
Dropbear-Prozesse anzeigen ps -ef \| grep dropbear
Cron-Protokoll ansehen tail /mnt/us/ha_cron.log
Dashboard pausieren touch /mnt/us/ha_disabled
Dashboard fortsetzen rm -f /mnt/us/ha_disabled
Bildschirmschoner prüfen lipc-get-prop com.lab126.powerd preventScreenSaver
Kindle neu starten reboot

13. Fazit

Der Kindle 4 funktioniert nun als eigenständiges Home-Assistant-E-Ink-Dashboard mit automatischem Start, Vollbildanzeige, SSH-Fernwartung und gesteuerter USB-Stromversorgung. Die wesentlichen Bausteine sind die Bildausgabe über eips, die zuverlässige Startlogik über Cron und SysV sowie die Firmware-eigene Datei DONT_START_FRAMEWORK.

Für Nachbauer: Die gezeigten IP-Adressen, Webhook-Kennung, Dashboard-Adresse und Home-Assistant-Entitäten sind installationsspezifisch. Vor der Übernahme anpassen.

⬇ Kindle 4 – Skripte herunterladen

Keine Kommentare: