FHEM Forum

FHEM => Frontends => FHEMWEB => Thema gestartet von: Invers am 23 November 2025, 14:49:58

Titel: Claude ai hat angeblich die Ursache für einen Fehler gefunden betreffs styleData
Beitrag von: Invers am 23 November 2025, 14:49:58
Ich bitte um Nachsicht, falls das Müll ist.
Bug-Report: Floating-Point Ungenauigkeiten in styleData Attribut
=================================================================

**Betroffenes Modul:** f18 (FHEMWEB Style)
**Problem:** Positionswerte werden mit extrem langen Kommastellen gespeichert
**Schweregrad:** Mittel (Funktionalität gegeben, aber Datenqualität beeinträchtigt)

---

PROBLEMBESCHREIBUNG:
-------------------
Beim Verschieben von Elementen via Drag & Drop werden die Positionswerte im
styleData-Attribut mit Floating-Point-Ungenauigkeiten gespeichert.

Beispiele aus meinem styleData:
- "top": 939.9999694824219    (sollte: 940)
- "left": 639.9999847412109  (sollte: 640)
- "height": 38.08333          (sollte: 38)
- "width": 318.466666        (sollte: 318 oder 318.5)

Diese Ungenauigkeiten häufen sich im Lauf der Zeit an und führen zu einem
aufgeblähten, schwer lesbaren styleData-Attribut.

---

URSACHE:
--------
JavaScript verwendet 64-bit Floating-Point-Arithmetik für alle Zahlen.
Bei wiederholten Drag & Drop Operationen sammeln sich Rundungsfehler an.

Die Analyse (durchgeführt mit Claude AI) zeigt, dass das Problem beim
SPEICHERN der Positionswerte auftritt. Während des Draggings funktioniert
"snapToGrid: true" vermutlich korrekt, aber beim Schreiben ins Attribut
werden die Werte nicht gerundet.

---

REPRODUKTION:
-------------
1. styleData-Attribut mit "snapToGrid": true konfigurieren
2. Drag & Drop Anfasser aktivieren ("showDragger": true)
3. Mehrere Elemente verschieben
4. styleData-Attribut inspizieren
5. Beobachtung: Positionswerte enthalten lange Kommastellen

Das Problem tritt auch mit snapToGrid auf, was darauf hindeutet, dass
die Rundung nur während des Draggings, nicht aber beim Speichern erfolgt.

---

ERWARTETES VERHALTEN:
---------------------
Positionswerte sollten beim Speichern auf ganze Zahlen gerundet werden:
- Entweder: Math.round() für ganzzahlige Pixel
- Oder: Math.round(value * 10) / 10 für maximal 1 Dezimalstelle

Wenn snapToGrid aktiviert ist, sollten die gespeicherten Werte EXAKT
auf dem Grid liegen, ohne Floating-Point-Reste.

---

VORSCHLAG ZUR BEHEBUNG:
-----------------------
Im JavaScript-Code, der die styleData-Werte speichert, sollte eine
Rundungsfunktion eingefügt werden:

```javascript
// Aktuell (vermutlich):
styleData.Pos[element].left = position.left;
styleData.Pos[element].top = position.top;
styleData.Pos[element].width = size.width;
styleData.Pos[element].height = size.height;

// Vorgeschlagen:
styleData.Pos[element].left = Math.round(position.left);
styleData.Pos[element].top = Math.round(position.top);
styleData.Pos[element].width = Math.round(size.width);
styleData.Pos[element].height = Math.round(size.height);

// Optional mit gridSize berücksichtigen:
var gridSize = settings.gridSize || 1;
styleData.Pos[element].left = Math.round(position.left / gridSize) * gridSize;
```

---

AUSWIRKUNG:
-----------
- Sauberere, lesbarere styleData-Attribute
- Kleinere Attribut-Größe (weniger Zeichen)
- Konsistente Werte über Zeit
- Bessere Kompatibilität mit manuellem Editing
- Verhindert Drift durch wiederholtes Verschieben

---

ZUSÄTZLICHE INFORMATION:
------------------------
Ein temporärer Workaround ist möglich durch manuelles Bereinigen des
styleData-Attributs mit einem Script, aber das Problem tritt bei jeder
Drag & Drop Operation erneut auf.

Das Problem wurde durch Analyse mit Claude AI (Anthropic) identifiziert
und betrifft die JavaScript-Implementierung der Drag & Drop Funktionalität
im f18-Modul.

---

SYSTEM-INFORMATION:
-------------------
FHEM Version: [Deine Version hier einfügen]
f18 Version: [Deine Version hier einfügen]
Browser: [Dein Browser hier einfügen]

---

Vielen Dank für die Betrachtung dieses Bug-Reports!

Mit freundlichen Grüßen,
Titel: Aw: Claude ai hat angeblich die Ursache für einen Fehler gefunden betreffs styleData
Beitrag von: rudolfkoenig am 23 November 2025, 17:22:56
Ich habe das versucht nachzustellen, ohne Erfolg.

Ich habe ca 30 Elemente in unterschiedlichen Raeumen verschoben mit oder ohne snapToGrid, sowohl horizontal wie auch vertikal, uebereinander, usw. aber keiner der top, left, width, height, oTop, oLeft Werte wurde dabei als Fliesskomma gespeichert.

Damit ich das Problem fixen kann, muss ich es nachstellen koennen, sonst kann ich auch nicht ueberpruefen, ob der Fix hilft.

Einen Patch kann man sich sparen siehe https://forum.fhem.de/index.php?topic=143131.msg1352312#msg1352312