Skip to content

v2.4.2

Choose a tag to compare

@bausi2k bausi2k released this 12 Aug 08:27
· 1 commit to main since this release
8ef9034

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-Komponente y, ohne den Nenner zu prüfen. Bei y=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ängt componentToHex() 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 lampe erzeugte 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.db wuchs unbegrenzt – es gab weder ein DELETE noch einen WAL-Checkpoint. Die Datenbank wird jetzt auf 50.000 Einträge begrenzt (Gegenstück zum bestehenden MAX_RAM_LOGS des 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.db war versioniert und wurde aus dem Tracking genommen; ein wirkungsloses .gitignore-Fragment entfernt.
  • Schlankeres Docker-Image: .dockerignore schließt jetzt data/, 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.