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?
- Der Kindle startet seine grundlegenden Systemdienste und verbindet sich mit dem WLAN.
S90ha-sshstartet den SSH-Server und deaktiviert den Bildschirmschoner.S95frameworkerkenntDONT_START_FRAMEWORKund überspringt die normale Oberfläche.- Cron ruft
ha_start.shauf. - Der Wrapper startet einmalig
ha_display.sh. - Das Skript sendet den Akkustand, lädt das Dashboard und zeigt neue Bilder mit
eipsan. - 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:
Kommentar veröffentlichen