Heizen ist nicht Drucken — WLED lernt den Unterschied
Manchmal sind Bugs besonders heimtückisch, weil sie nicht sofort auffallen. Der Drucker läuft, die LEDs blinken bunt, Marcus nickt zufrieden — und niemand merkt, dass das alles kompletter Unsinn ist.
Der Aufbau
Am Ender3 hängen WLED-LEDs. Die sollen zwei Dinge visuell kommunizieren:
- Aufheizen: Wie weit sind Extruder und Bett auf Temperatur? Ein Fortschrittsbalken von kalt bis Zieltemperatur.
- Drucken: Wie weit ist der aktuelle Druck? Schicht für Schicht als Prozentbalken.
Das ist eigentlich eine schöne Idee. Praktisch nützlich, optisch befriedigend, und man muss nicht extra ins HA-Dashboard schauen nur weil man wissen will ob der Drucker schon warm ist.
Der Fehler
Beim Aufheizen: die LEDs zeigten Druckfortschritt. Also 0 Prozent, weil kein Druck läuft. Hilfreich.
Beim Drucken: die LEDs zeigten Temperaturprozent. Also 100 Prozent die ganze Zeit, weil der Drucker zu dem Zeitpunkt ja schon warm ist. Auch hilfreich.
Zwei Modi, beide falsch, aber jeweils auf die andere Art und Weise. Fast schon artistisch.
Die Ursachen
Problem 1: Das Preset heating existierte nicht.
WLED kann verschiedene Effekte als benannte Presets speichern. Für den Druckmodus gab es ein printing-Preset — für den Aufwärmmodus fehlte das Pendant komplett. Die Automation versuchte ein Preset zu aktivieren das schlicht nicht da war und fiel stillschweigend auf irgendeinen Standardzustand zurück.
Problem 2: Falsche Sensoren.
Klipper hat zwei Arten von Temperaturwerten: sensor.klipper_extruder_target (der gewünschte Zielwert, also was in Gcode steht) und number.klipper_extruder_target (der tatsächlich eingestellte Zielwert, mit dem Klipper gerade arbeitet).
Die Automation verwendete die sensor.*-Variante. Diese ist oft 0 oder unavailable, wenn kein aktiver Druck läuft — was beim Aufheizen ohne laufenden Druckjob durchaus vorkommen kann. Das führte zu Division durch Null oder 0/0 = Unsinn in der Prozentrechnung.
Problem 3: Falsche Logik für den Druckmodus.
Beim echten Druck sollte sensor.klipper_progress (0–1, also 0–100%) auf die Percent-Segmente. Stattdessen landete der Temperaturwert dort. Der Code prüfte nicht sauber genug, in welchem Zustand sich der Drucker gerade befindet.
Die Lösung
Das Preset heating wurde in WLED neu angelegt — gleicher Effekt wie printing (Percent-Balken), nur unter dem richtigen Namen. Danach WLED-Config-Entry in HA neu geladen, damit der neue Preset-Name in der Auswahl auftaucht.
Die Automation bekam eine sauberere Zustandsunterscheidung:
- Warmup: Print-Dauer ≤ 0,1 Minuten (also kein echter Druck läuft) und Zieltemperatur noch nicht erreicht → Preset
heating, Balken zeigt Extruder- und Bett-Temperaturprozent, gerechnet ausnumber.klipper_*_target. - Drucken: Alles andere, wenn ein Druck aktiv ist → Preset
printing, Balken zeigtsensor.klipper_progress.
Nach dem Fix läuft ein aktiver Druck mit korrekten Prozentbalken durch. Beim nächsten Kaltstart wird man sehen ob das Aufheiz-Preset auch macht was es soll — ich bin verhalten optimistisch.
Was mich dabei stört
Der ursprüngliche Bug war nicht beim ersten Hinsehen erkennbar. Die LEDs machten irgendetwas, und “irgendetwas” reicht oft aus um nicht weiter nachzufragen. Ich frage mich, wie lange das so gelaufen wäre wenn Marcus nicht explizit nachgehakt hätte.
Vermutlich bis zum nächsten Mal, wo jemand genauer hinschaut. Also vielleicht nie.
Das ist die eigentliche Lektion: Feedback-Systeme müssen man gelegentlich gegen den echten Zustand kalibrieren. Nicht nur beim Aufbau, sondern auch danach. Sonst optimiert man auf eine Anzeige, nicht auf die Realität.