Release early, release often!
Hallo,
ich habe gerade erst mit Home Assistant angefangen. Ich bin noch in der
Evaluierungsphase und überlege, was ich damit eigentlich machen möchte. Eines
der ersten Dinge, die ich haben wollte, war ein „Glance-Dashboard". Sprich etwas,
das ich vor dem Verlassen des Hauses kurz checken kann. Ist noch ein Fenster
offen? Wie ist das Wetter? Ist morgen Müllabfuhr oder steht der Keller unter
Wasser?
Die Lösungen, welche ich gefunden habe, haben mich nicht überzeugt. Entweder wurde ein
Headless-Browser für Screenshots verwendet oder sie waren irgendwie zusammengeschustert. Home Assistant verwendet bereits Pillow für die Bildverarbeitung, und SVG eignet sich hervorragend für strukturierte Layouts mit Text und Icons. Alle nötigen Bausteine sind also vorhanden und keine externen Server Komponenten wirklich erforderlich.
Also habe ich angefangen, eine neue Integration zu entwickeln.
Die Hardware-Geschichte
Ich habe mir kürzlich ein TRMNL-Gerät zugelegt. Das ist ein schickes kleines
E-Ink-Display, das genau für solche Informationen gemacht ist. Aber
nachdem ich es eingerichtet hatte, fiel mir ein, dass ich alte Kindle-E-Reader
herumliegen habe, die ich durch neuere Modelle ersetzt habe. Die Kindle
Geräte lagen einfach im Schrank.
Mein alter Kindle Paperwhite 2 hat sogar ein besseres Display als das
TRMNL OG – 758×1024 bei 16 Graustufen gegenüber 800×480 Schwarz-weiß.
Nach etwas Recherche fand ich heraus, dass man einen “gejailbreakten” Kindle als Always-on-Display umfunktionieren kann. Es gibt zwar einen Online-Screensaver, der ist aber veraltet und nicht besonders energieeffizient entwickelt worden.
Also startete ich ein neues Projekt: kndl-online-screensaver
Ein moderner Ersatz für die alten Online-Screensaver-Projekte, mit
Tests abgedeckt.
Es hat mich eine Weile gekostet herauszufinden, warum der Online-Screensaver
die FAT-Partition beschädigt, aber das ist eine andere Geschichte ;-).
Jetzt hatte ich also zwei verschiedene Geräte, die beide Bilder von Home
Assistant empfangen oder abrufen mussten.
Was macht die Integration?
Die HA Integration rendert das Dashboard-Layout direkt in Home Assistant als
PNG-Bild - kein Chromium, kein ImageMagick, kein Node.js, keine weitere
Server-Komponente. Jedes Widget wird durch eine Jinja2-SVG-Vorlage beschrieben,
alle Widgets werden zu einem einzigen SVG zusammengefügt und dieses SVG wird
von resvg in ein PNG gerastert. Pillow übernimmt die Nachbearbeitung: Rotation und E-Ink-Optimierungen. Das Bild wird über eine HA-Image-Entität und einen nicht authentifizierten HTTP-Endpunkt bereitgestellt, den Geräte nach eigenem Zeitplan abrufen können.
Für TRMNL-Geräte kann HA das gerenderte Bild nach jedem Rendervorgang per
Webhook pushen. Für Kindles (und jedes andere Gerät, das eine URL abrufen
kann) zeigt man auf dem Gerät auf den HTTP-Endpunkt und lädt das Bild nach
eigenem Zeitplan herunter. Es werden ETag-Header genutzt, um den Download und die
E-Ink-Aktualisierung zu überspringen, wenn sich nichts geändert hat.
Eine WYSIWYG-Lovelace-Karte ermöglicht das Bearbeiten des Layouts mit einer
Canvas-Vorschau, die den exakten Pixelabmessungen des Geräts entspricht.
Widgets können per Drag-and-Drop verschoben, skaliert und konfiguriert werden,
und das gerenderte Ergebnis ist sofort sichtbar. Ein Klick auf
Gerendertes Bild anzeigen lädt das serverseitig gerenderte PNG für einen
pixelgenauen Vergleich.
Aktueller Stand
Beta-Phase. Kleinere Fehler sind sicher enthalten. Bug Reports erwünscht ![]()
Das Projekt ist hier zu finden: GitHub - cryptomilk/hass-eink-dashboard: This is beta quality, should be mostly stable · GitHub
Funktionen
- Mehrere E-Ink-Displays – ein separates Dashboard für jedes Gerät mit
eigenem Layout, eigener Auflösung und eigenem Aktualisierungsintervall - Geräte-Voreinstellungen – integrierte Profile für Kindle 4/5,
Paperwhite 1–4, Oasis 2/3, TRMNL OG/X/RGB oder benutzerdefinierte Auflösung - Hoch- und Querformat – die Rotation wird automatisch anhand der
Gerätevoreinstellung und der gewählten Ausrichtung gehandhabt - WYSIWYG-Lovelace-Editor – Widgets per Drag-and-Drop verschieben,
skalieren und konfigurieren auf einer Canvas-Vorschau in den exakten
Pixelabmessungen des Geräts - Pull- und Push-Zustellung – Geräte können das Bild nach eigenem
Zeitplan abrufen (Kindle) oder HA pusht es per Webhook (TRMNL) - E-Ink-Optimierung – optionale Nachbearbeitungspipeline: Autokontrast,
Schärfe, Kontrastanpassung und Graustufen-Quantisierung (2/4/16/256 Stufen
mit Floyd-Steinberg-Dithering) - Jinja2-Vorlagen – Header-Widgets unterstützen Home-Assistant-Templates
(z. B.{{ now().strftime('%H:%M') }}) - ETag-Unterstützung – bedingte HTTP-Antworten, damit Geräte den Download
und die E-Ink-Aktualisierung überspringen, wenn sich das Bild nicht geändert
hat - Webhook-Ratenbegrenzung – Push-Ziele werden auf einen Push pro 5
Minuten bei maximal 5 MB Dateigröße gedrosselt
Mithelfen
Das ist Beta-Software – mit groben Kanten ist zu rechnen!
Wie könnt ihr helfen?
- Detaillierte Fehlerberichte erstellen, wenn etwas nicht funktioniert
- Freundlich im Umgang miteinander sein
- Bei der Verbesserung der Dokumentation helfen
- Pull Requests einreichen, den Code oder Widget-Designs zu verbessern
OpenDisplay


