v2.4.2
Stabilität & Datenhygiene – Behebt vier Fehler, die im laufenden Betrieb auftreten: fehlerhafte Farbwerte Richtung Loxone, ein funktionsloser Löschen-Button, eine unbegrenzt wachsende Logdatenbank und versehentlich versionierte Laufzeitdaten.
🐞 Bugfixes
- Division durch Null in der Farbumrechnung:
xyToHex()teilte durch die Leuchtdichte-Komponentey, ohne den Nenner zu prüfen. Beiy=0– von der Hue-Bridge bei nicht initialisierten Leuchten gemeldet – entstand#NaNNaNNaN, das per UDP an Loxone und an MQTT ausgeliefert wurde. Zusätzlich fängtcomponentToHex()nicht-endliche Werte ab. Gültige Farben bleiben unverändert. - Löschen-Button und Modal-Checkboxen funktionslos bei Apostroph im Namen: Die Inline-Handler bauten den Loxone-Namen als JavaScript-String-Literal in ein HTML-Attribut. Ein Name wie
anna's lampeerzeugte ungültiges JavaScript (SyntaxError: missing ) after argument list). Die Handler werden jetzt programmatisch gebunden, der Name ist nie mehr Teil eines Attributs. - HTML-Escaping im gesamten Dashboard: Gerätenamen, Log-Meldungen und erkannte Befehle wurden ungeescaped gerendert. Namen mit spitzen Klammern verloren Teile (
Küche & Esszimmer "Decke" <1>→<1>verschwand), und Fremdinhalt aus eingehenden Requests landete ausführbar im DOM. Betrifft Log-Konsole, Mapping-Liste, Details-Modal, Diagnose-Tab, Einstellungen und Export-Liste. - Log-Rotation:
logs.dbwuchs unbegrenzt – es gab weder einDELETEnoch einen WAL-Checkpoint. Die Datenbank wird jetzt auf 50.000 Einträge begrenzt (Gegenstück zum bestehendenMAX_RAM_LOGSdes RAM-Modus), gebündelt alle 1.000 Schreibvorgänge und einmalig beim Start.PRAGMA wal_checkpoint(TRUNCATE)gibt den Speicher tatsächlich frei. - XML-Export: Namen werden beim Herunterladen der Loxone-Vorlagen einzeln URL-kodiert, ein
&im Namen schnitt die Anfrage vorher ab.
🔄 Verbesserungen
- Repository-Hygiene:
data/logs.dbwar versioniert und wurde aus dem Tracking genommen; ein wirkungsloses.gitignore-Fragment entfernt. - Schlankeres Docker-Image:
.dockerignoreschließt jetztdata/, lokale Konfigurationsdateien, Doku-Assets und Testdateien aus. Das Image enthält nur noch Anwendungscode und Abhängigkeiten. - Längenbegrenzung für erkannte Befehle: Namen aus dem Request-Pfad werden auf 64 Zeichen gekürzt.
- Datenbank-Index auf die Spalte
category, nach der die Logabfrage filtert.
🧪 Tests
- Abdeckung von 18 auf 34 Tests erweitert: Randwerte der Farbumrechnung, Escaping-Verhalten (geprüft gegen den echten Quelltext), Log-Rotation und die Längenbegrenzung. Ein Regressionstest verhindert, dass künftig wieder Inline-Handler mit interpolierten Werten entstehen.