Files
Dual-PID/Changelog.txt
T
raw-designsandClaude Opus 5 881acec3df fix(S3): Cold Extraction brach während der Vorbenetzung ab (5.3.3)
Die Stillstands-Erkennung lief bereits während der Vorbenetzung mit. In dieser
Phase sättigt der Puck aber erst, in der Tasse kommt naturgemäß nichts an — bei
einer Vorbenetzung länger als die 15 s Stillstands-Zeit wurde deshalb jeder kalte
Bezug mit "kein Zulauf" abgebrochen. Mit dem bisherigen Standard von 30 s wäre das
ausnahmslos passiert; die Funktion war mit aktiver Waage unbenutzbar. Die
Erkennung startet jetzt erst mit dem Hauptbezug.

Dazu der Standard der Vorbenetzung von 30 s auf 10 s: Die Pumpe läuft in dieser
Phase bewusst ungepulst auf voller Leistung. Heiß kommt der erste Tropfen nach
etwa 7 s, kalt (rund dreifache Viskosität) entsprechend später — 30 s wären längst
voller Bezug bei vollem Druck gewesen, und die Hälfte des Pumpen-Laufzeitbudgets
wäre vor dem eigentlichen Bezug verbraucht. Bestehende Installationen behalten
ihren gespeicherten Wert.

Die Beschriftung auf /Brew-Control sagt jetzt ausdrücklich, dass die Pumpe während
der Vorbenetzung durchläuft und erst im Hauptbezug gepulst wird.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 01:53:48 +02:00

283 lines
18 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Version 5.3.3:
- Bug-Fix (Cold Extraction, hätte die Funktion mit Waage komplett unbrauchbar gemacht): Die
Stillstands-Erkennung lief bereits während der Vorbenetzung mit. In dieser Phase sättigt der Puck
aber erst, es kommt naturgemäß nichts in der Tasse an - bei einer Vorbenetzung länger als die
15 s Stillstands-Zeit wurde deshalb JEDER kalte Bezug mit „kein Zulauf" abgebrochen. Mit dem
bisherigen Standard von 30 s Vorbenetzung wäre das immer passiert. Die Erkennung startet jetzt
erst mit dem Hauptbezug.
- Standard der Vorbenetzung von 30 s auf 10 s gesenkt. In dieser Phase läuft die Pumpe bewusst
ungepulst auf voller Leistung; bei heißem Bezug kommt der erste Tropfen nach etwa 7 s, kalt
(rund dreifache Viskosität) entsprechend später. 30 s wären also längst voller Bezug bei vollem
Druck gewesen, und die Hälfte des Pumpen-Laufzeitbudgets wäre vor dem eigentlichen Bezug
verbraucht. Bestehende Installationen behalten ihren gespeicherten Wert - dort ggf. auf
/Brew-Control nachziehen.
- Die Beschriftung auf /Brew-Control sagt jetzt ausdrücklich, dass die Pumpe während der
Vorbenetzung durchläuft und erst im Hauptbezug gepulst wird.
Version 5.3.2:
- Cold Extraction sendet den Sperrgrund jetzt als Code („cxBlock") statt als Klartext („cxMessage"),
dazu eine transiente Meldung als Code („cxNotice") und die Vorbenetzungsdauer („cxPreInf").
Hintergrund: Die State-Zeile ans Touch-Display liegt real bereits bei rund 2,1 KB, und der P4
verwirft eingehende Zeilen ab einer Obergrenze komplett - ein bis zu 110 Byte langer Klartext
hätte die Zeile über diese Grenze gedrückt und damit die ganze Telemetrie unbrauchbar gemacht.
Die Texte rendert jetzt das Display, analog zur bestehenden Trennung statusKey/statusText.
- Der Klartext bleibt unverändert auf dem OLED und in den Web-/UART-Antworten (ack-message).
Version 5.3.1:
- Cold Extraction ist jetzt persistent: Der Modus wird im EEPROM gespeichert und überlebt sowohl den
Standby als auch einen Neustart. Zuvor wurde er beim Standby beendet und war nach dem Aufwachen aus -
die Maschine heizte dann erst auf, obwohl der nächste kalte Bezug einen kalten Kessel braucht, und man
musste auf das Abkühlen warten. Wer nur kalte Bezüge machen will, schaltet den Modus damit einmal ein
und wieder aus, wenn er fertig ist.
- Der Modus fällt nur weg, wenn auf /Brew-Control die Freischaltung entzogen wird oder ein Werksreset
läuft. Solange er aktiv ist, heizt der Wasserkreis nicht - Dashboard, OLED („(COLD)" in der Wasserzeile)
und Touch-Display zeigen das durchgehend an.
Version 5.3.0:
- Neu: Cold Extraction (kalte Extraktion). Die Maschine hat keinen Bypass um den Wasserkessel, kaltes Wasser
kommt also nur bei kaltem Kessel am Puck an. Die Funktion wird deshalb über eine Temperaturschwelle
freigegeben (Standard 30 °C, einstellbar 1040 °C) und ist praktisch aus dem kalten Zustand heraus nutzbar.
- Solange der Modus aktiv ist, heizt der Wasserkreis nicht (SSR gesperrt, Stellgröße und damit auch die
dutyW-Telemetrie auf 0, I-Anteil der Wasser-PID eingefroren, Feed-Forward-Boost deaktiviert). Der
Dampfkreis bleibt unberührt und darf weiter heizen.
- Die Freigabe wird vor jedem Bezug neu geprüft, nicht nur beim Aktivieren: Da der Dampfkessel weiter heizt,
kann der Wasserkessel über die Zeit über die Schwelle steigen. In diesem Fall wird der nächste Bezug
abgewiesen (Meldung auf OLED, Touch-Display und im Web-Dashboard) - ein laufender Bezug wird nie abgebrochen.
Hysterese von 5 °C, damit die Anzeige an der Schwelle nicht flattert; Sensorfehler sperrt die Funktion.
- Der Fluss wird über Pumpen-Pulsung reduziert (Pulsperiode 2005000 ms, Pumpenleistung 5100 %), davor läuft
eine einstellbare Vorbenetzung mit voller Pumpenleistung. Bezugsende über Zielgewicht oder Sicherheits-Timeout;
Brew-by-Time/Brew-by-Weight und FlowGuard sind während einer kalten Extraktion bewusst außer Kraft (FlowGuard
und Cold Extraction würden sonst um denselben Pumpen-Ausgang konkurrieren).
- Pumpenschutz: Die Steuerung zählt die kumulierte Pumpen-Einschaltzeit und legt nach der eingestellten
Laufzeit eine Zwangspause ein (Standard 60 s Laufzeit / 20 s Pause). Zusätzlich Stillstands-Erkennung -
läuft die Pumpe bei aktiver Waage 15 s ohne Zulauf, wird der Bezug beendet (dichter Puck oder ausgelöster
Pumpen-Thermoschutz).
- Bedienung: Parameter auf der Seite /Brew-Control, Ein-/Ausschalten über das Web-Dashboard oder das
UART-Touch-Display (neue Aktionen "startColdExtraction"/"stopColdExtraction"/"toggleColdExtraction").
Cold Extraction ist bewusst kein Profilfeld (maschinen- und situationsabhängig, wie der Feed-Forward);
der Modus selbst wird nicht persistiert und ist nach einem Neustart immer aus. Standby beendet ihn.
- Statistik: Kalte Bezüge werden im Log mit einem vierten CSV-Feld "C" gekennzeichnet, zählen in allen
Stückzahlen mit, gehen aber NICHT in die durchschnittliche Bezugsdauer ein (Minuten statt Sekunden würden
den Wert verzerren). Die Info-Seite weist die Anzahl separat aus, der Verlaufs-Download hat eine neue
Spalte "Art". Ältere Logzeilen bleiben unverändert lesbar.
- Neue additive State-Felder im UART-JSON (Protokoll bleibt v2): cxEnabled, cxActive, cxShot, cxAllowed,
cxResting, cxMaxTemp, cxTarget, cxMaxSecs, cxMessage sowie "cx" pro Eintrag in usageStats; neuer
statusKey "coldextraction". Ältere Display-Firmware ignoriert die Felder.
Version 5.2.0:
- Feed-Forward bei Bezug (Störgrößenaufschaltung) für den Wasserkessel: Während eines Bezugs wird der
Heizung sofort ein einstellbarer Leistungs-Boost (0100 % der Fenstergröße, 0 % = aus) aufgeschaltet,
statt auf den vom Sensor gemeldeten Temperaturabfall zu warten. Die PID regelt nur noch den Restfehler;
der Temperatur-Dip während des Shots wird deutlich kleiner. Einstellung auf der /PID-Seite
(„Feed-Forward bei Bezug"), gespeichert im EEPROM (bewusst kein Profilfeld, da maschinenabhängig).
- Optional: I-Anteil der Wasser-PID während des Bezugs einfrieren. Verhindert das Aufladen des
Integral-Anteils während des Shots und damit das Überschwingen nach Bezugsende.
- Der Boost wirkt nur bei echten Bezügen (Hardware-Schalter oder Software-Start), nicht bei
Spülen/Wartungsmodus/AutoTune. Sicherheitslogik unverändert: Sensorfehler, Übertemperatur-Abschaltung
und „Heizen oberhalb Setpoint verhindern" haben weiterhin Vorrang; Deckelung auf die Fenstergröße.
- Die Heizleistungs-Telemetrie (dutyW, u. a. für das Verlaufs-Chart des Touch-Displays) zeigt den
Boost mit an - damit ist die Wirkung direkt im Chart kalibrierbar.
Version 5.1.2:
- Profil-Seite (Web-UI): Die neue „Aktives Profil"-Anzeige stand linksbündig außerhalb des
Karten-Layouts. Sie nutzt jetzt den status-message-Stil der Seite (zentriert, max. 600 px,
dezenter Rahmen) und fügt sich damit in das bestehende Layout ein; Profilname zusätzlich fett.
Version 5.1.1:
- Aktives Profil wird jetzt geführt und angezeigt: Die Steuerung merkt sich das zuletzt geladene bzw.
gespeicherte Profil dauerhaft im EEPROM (überlebt Neustarts). Web-UI: Anzeige auf dem Dashboard über der
Profil-Auswahl sowie auf der Profil-Seite (aktives Profil zusätzlich mit grünem Punkt in der Liste).
- „Geändert"-Erkennung: Werden nach dem Laden profil-relevante Einstellungen geändert (Solltemperaturen,
PID-Werte inkl. AutoTune-Ergebnis und AutoTune-Parameter, Boost, Eco, Dampfverzögerung, Fast-Heat-Up,
Brew-Control, Piezo), erscheint hinter dem Profilnamen „✱ (geändert)". Reine Anzeige-/Systemeinstellungen
(Anzeigemodus, Aufheizzeit, Licht, FlowGuard, Waage/Sensoren) lösen das bewusst nicht aus.
- Profil löschen setzt die Anzeige zurück, wenn das gelöschte Profil das aktive war; Werksreset ebenso.
- Neue additive State-Felder "profile" und "profDirty" im UART-JSON für das Touch-Display (Protokoll bleibt
kompatibel, ältere Display-Firmware ignoriert die Felder) - Grundlage für die Profil-Schnellwahl am Display.
Version 5.1.0:
- Display-Auswahl in die Web-UI (/Sensoren) verlegt: Ohne Display / OLED (SH1106, I2C) / UART-Touch-Display.
Der Compile-Schalter ENABLE_DISPLAY entfällt, die Einstellung wird im EEPROM gespeichert und ohne Neustart
übernommen. Default ist "Ohne Display", damit die Steuerung ohne angeschlossene Anzeige immer sicher startet.
- Boot-Schutz: Vor der OLED-Initialisierung wird per I2C-Probe (0x3C) geprüft, ob das Display wirklich
angeschlossen ist. Ohne Antwort bleibt die Anzeige deaktiviert und die Steuerung bootet normal weiter -
eine falsch gesetzte Display-Einstellung kann die Maschine damit nicht mehr blockieren.
- UART-Touch-Anbindung (Serial1) wird nur noch initialisiert und bedient, wenn "UART-Touch-Display" gewählt ist.
Version 5.0.12:
- Neues additives Feld "piState" im State-JSON für das UART-Touch-Display (0=inaktiv, 1=Pre-Infusion,
2=Pause, 3=Hauptbezug): Die Pre-Infusion-Phasenleiste auf dem Display folgt damit quelltreu der echten
Statemachine der Steuerung statt einer zeitbasierten Ableitung (Protokoll bleibt v2, ältere Display-Firmware ignoriert das Feld)
- Wartungsmodus und Eco-Modus werden beim Wechsel in den Standby nun beendet (Eco wurde bereits beendet, der Wartungsmodus blieb bislang aktiv)
- Bug-Fix: Im Wartungsmodus heizte der Dampfkreis trotz deaktivierter Heizung dauerhaft, wenn die Option „Permanent heizen bei Dampf-Bezug" aktiv war und Dampf bezogen wurde
Version 5.0.11:
- Bug-Fix: Dauerhafter Neustart (Panic/Exception) der Steuerung, sobald das UART-Touch-Display (P4) angeschlossen wurde.
Ursache: Stack-Überlauf im loopTask der 3000-Byte-Puffer für das State-JSON (touchUartSendState) sowie der Puffer
für Profildetails (getProfileDetails) lagen auf dem Task-Stack (~8 KB) und liefen zusammen mit der Aufrufkette des
hello-Handshakes über. Beide Puffer sind jetzt static (analog zu touchUartSendUsageStats). Der Pfad wird nur bei
verbundenem Display ausgeführt, daher lief die Maschine ohne Display stabil.
Version 5.0.10:
- Sicherheits-Fix: Während eines Display-Firmware-Updates (P4) werden die Heizungen nun garantiert abgeschaltet.
Zuvor konnte die zeitproportionale SSR-Steuerung während der Übertragung ausgebremst werden, sodass ein gerade
eingeschaltetes Heizungs-SSR eingeschaltet blieb (Überhitzungsgefahr, z. B. zu hohe Wassertemperatur nach einem
P4-Update). Zusätzlich wurde eine Ursache für einen verzögerten Neustart (Panic) nach P4-Updates entschärft
(delay(1) statt yield(), damit die Regel-/Sicherheitsschleife während der Übertragung weiterläuft).
Version 5.0.9:
- Statistik-Seite für das UART-Display hinzugefügt
Version 5.0.8:
- Brew-by-Weight-Gewichtseingabelimit auf 150g erhöht, um auch Heißwasserbzug für Americano oder ähnliches via BBW zu ermöglichen
Version 5.0.7:
- ECO-Option „Nach Neustart/Power-On in Standby gehen" hinzugefügt
Version 5.0.6:
- UART-Touch-Display implementiert
- Rettungsmodus (für Fehlerhafte Firmware-Updates) hinzugefügt
Version 4.8.1:
- Glättungs-Funktion im Waage-Modus kann nun über Sensoren im Webinterface aktiviert/deaktiviert werden
Version 4.8.0:
- Waage-Modus nochmals verbessert
- Kalibrierungsassistent für die Wage zur Bestimmung des Kalibrierungsfaktors implementiert
Version 4.7.0:
- Unterstützung für Fully Kiosk-Endgeräte als Display hinzugefügt
- Fragmente der alten Ultraschallsensor-Komponente entfernt
- Nun nutzt auch die Desktop-Ansicht der Web-UI ein Hamburger-/Sandwich-Menü
Version 4.6.0:
- Waage weiter verbessert:
- Median-von-3 gegen einzelne Ausreißer
- Spike-Erkennung:
- außerhalb eines Bezugs: Sprünge > 3.0 g werden zunächst verworfen
- während Bezug: Sprünge > 10.0 g werden zunächst verworfen
- kommt der große Sprung wiederholt, wird er akzeptiert, damit echte Änderungen nicht hängen bleiben
- Reset der Filter bei Tara, Disconnect, Reconnect und Initialisierung
- currentWeightReading wird jetzt nur noch zentral über die Filterfunktionen gesetzt
Brew-by-Weight bleibt schnell, bekommt aber Schutz gegen einzelne Störimpulse. Performance-Kosten sind minimal: drei
Float-Samples, ein Median-Vergleich und ein paar fabs()-Checks pro Waagenmessung.
Version 4.5.2:
- Waage-Anpassung: Im Waage-Modus wird jetzt ein geglätteter und etwas trägerer Wert angezeigt, während beim Brühen der schnelle Roh-Wert der Waage verwendet wird (dieser "schwankt" daher auch manchmal leicht)
Version 4.5.1:
- Bug-Fix: Beim X-Switch war noch ein Teil der alten Schalter-Logik enthalten,
wodurch der X-Switch-Status nicht über die Web-UI geändert werden konnte
- Zeit für Longpress ist nun über die Web-UI einstellbar
Version 4.5.0:
- Neues Feature in Brew Control eingeführt: FlowGuard
Ermöglicht es, auch bei zu grober Mahlung durch Pulsen der Pumpe eine voreingestellte Ziel-Brühzeit zu erreichen
- Style-Anpassungen für mobile Ansicht
Version 4.4.2:
- Neustart-Grund wird nun in der Web-UI unter Info erweitert angezeigt, um bei Fehlern eine bessere Diagnose durchführen zu können.
Version 4.4.1:
- Einstellbares Temperatur-Offset für den Zusatz-Temperatursensor (Gehäuse/Tassenablage)
Version 4.4.0:
- Neue Funktion "Offset-Kompensation" in den PID-Einstellungen:
Bei negativem Temperatur-Offset wird in Display und Web-UI bis zur Referenzschwelle die Temperatur ohne Offset angezeigt;
funktioniert auch nach dem Aufwachen aus dem Standby
Version 4.3.5:
- Dampf- und Wasserflush ist nun auch zeitgleich möglich, sowie Dampf-Flush auch während eines Espresso-Bezugs
Version 4.3.4:
- Wechsel in Eco-Modus passiert nun nicht mehr während eines Bezugs, der knapp an der Zeit für das Eco-Umschalten liegt
- Button-Longpress von 2s auf 1s geändert
Version 4.3.3:
- Bug beim Tarieren des ersten Bezugs nach Maschinenstart / Aufwachen aus Standby behoben.
Version 4.3.2:
- Reinigungsassistent um weiteren Parameter ergänzt - Nun lässt sich auch die Pausenzeit zwischen den Zyklen einstellen.
Zudem wurde die Erfolgsmeldung/Abschlussmeldung in der Web-UI wieder entfernt.
Version 4.3.1:
- Neue Funktion für "Dampf-Nicht heizen"-Setting bei Neustart und Aufwachen aus dem Standby in den Eco-Einstellungen
Version 4.3.0:
- Home-Assistant-Integration verbessert
- Anzeige des Zusatz-Temperatursensors (Gehäuse/Tassenablage) nun im Display möglich
- Dampf-Timer in Brew-Control-Settings einstellbar für automatisches Abschalten des Dampfs nach X Sekunden
Version 4.2.8:
- HX711 verbessert: bei aktivierter Waage + Brew-by-Weight wird vor Bezugsstart zuerst 1 Sekunde tariert; im Display erscheint dabei "Waage wird tariert..."
- HX711 verbessert: beim Eintritt in den Waagenmodus wird nun ebenfalls automatisch tariert
Version 4.2.7:
- X-Switch erweitert: Short-Press und Long-Press können jetzt getrennt mit Funktionen belegt werden
Version 4.2.6:
- Hardware-Eingänge auf Tasterlogik umgestellt: Standby, Eco, X-Funktion, Bezug und Dampf arbeiten jetzt per Tastendruck statt per dauerhaftem Schalterzustand
- Bezug- und Dampftaster unterstützen jetzt Long-Press: 2 Sekunden halten startet Wasser- bzw. Dampf-Flush
- Alte Abhängigkeiten vom "Schalter zurückstellen" nach Auto-Stopp entfernt; Bezug/Dampf/Flush laufen jetzt konsistent über die Software-Logik
- OLED-Anzeige ergänzt: bei aktivem "Dampf nicht heizen" wird statt der Dampf-Temperatur "Nicht heizen aktiv" angezeigt
Version 4.2.5:
- Home-Assistant-API ergänzt: eigene HTTP-Endpunkte für Status, Standby an/aus und "Jetzt aufheizen"
- Standard-Kalibrierungsfaktor für HX711 geändert
Version 4.2.4:
- Heizung wird nach langem Standby beim Aufwecken wieder korrekt gestartet; PID-Zeitfenster werden beim Verlassen von Standby sauber resynchronisiert
Version 4.2.3:
- Standby auf reinen Software-Standby umgestellt; Hardware-Standby-Schalter arbeitet jetzt als Taster/Toggle
- Display-Hinweis ergänzt, falls der Standby-Taster versehentlich gedrückt gehalten wird
- Neue Timer-Seite in der Web-UI: beliebig viele Timer mit Wochentagen, aktiv/inaktiv sowie Standby an/aus
- Timer werden auf FATFS gespeichert und nur bei synchronisierter NTP-Zeit ausgeführt
Version 4.2.2:
- Reinigungsassistent: Heizt Wasser nun vor Start der Zyklen auf 93 °C auf, Dampfheizung bleibt dabei aus
- Reinigungsassistent: Status/Phase wird nun auch im Display angezeigt
- Standby/Web-Override: Dampf-Startverzögerung startet nach Verlassen von Standby wieder korrekt neu
- Standby: temporäre Eco- und Dampfverzögerungs-Overrides werden beim Standby-Wechsel zurückgesetzt
Version 4.2.1:
- Dampf-Timer wird nun auch (analog zum Shot-Timer) 3 Sekunden lang nach Timer-Ende im Display angezeigt
- Temperatur-Profile können nun mit Leerzeichen und Umlauten gespeichert/angezeigt werden
Version 4.2.0:
- Reinigungsassistent im Bereich Service hinzugefügt
Version 4.1.5:
- Standby-Funktion kann über Web-UI temporär deaktiviert werden
Version 4.1.4:
- Umstellung von LittleFS zu FATFS aufgrund des 16MB-MC-Flash
Version 4.1.3:
- Dampf-Heizverzögerung zählt nun erst, wenn das Gerät im "Normalbetrieb" läuft und nicht Standby-Zeit
- Standby-Zeit wird nicht mehr als Betriebszeit getrackt (verringert auch die Schreibzyklen im Speicher)
- Flush-Funktion nun auch für den Dampf-Kreislauf
Version 4.1.2:
- Dashboard: Abstände verringert / kompakter gestaltet
Version 4.1.1:
- Einstellung für Licht-Aus/An im Standby
- Versehentlich entfernte Funktion wiederhergestellt: Eco-Info im Display anzeigen
- Eco-Option "Aufheizverzögerung per Bezugsschalter überspringen" wird jetzt korrekt persistent gespeichert
- Display: Timeranzeige bei aktivem Dampf-Bezug und aktivem Flush ergänzt (Priorität: Shot > Dampf > Flush)
- Service-Seite: Flush-Zeit ist jetzt einstellbar und persistent speicherbar (Standard: 3 Sekunden)
- Eco-Timer wird nun auch durch Dampfbezug und Flush zurückgesetzt (nicht nur durch Shot)
- UART-Touch-UI (ESP32-S3 7") angebunden: neues UART-Frame-Protokoll (HELLO/STATE/CHART) mit Live-Daten für Dashboard und Chart (M1)
- UART-Touch-UI M2: ACTION_REQ/ACTION_ACK umgesetzt (Touch-Aktionen steuern jetzt direkt die Dashboard-Logik der Steuerung)
Version 4.0:
- Weitere Komfort-Funktionen (Licht, Dampf-Steuerung, Standby, Flush via Web-UI,...)
- ESP8266-Support entfällt
Version 3.7.1 - 2026-01-01
- Dashboard: Status zeigt verbleibende Minuten bis Eco-Start (z.B. "Eco-Modus in 43min")
- Web-UI /ECO: neuer Toggle "Eco-Info auf dem Display anzeigen"
- Display (Idle): optionales Layout mit Eco-Countdown bzw. "Eco-Modus aktiv"