feat(P4): Cold Extraction am Touch-Display + RX-Zeilenlimit-Fix (1.1.0 / S3 5.3.2) #13

Merged
thomas merged 1 commits from feat/cold-extraction-p4 into main 2026-08-10 23:58:07 +02:00
Owner

Display-Seite der kalten Extraktion.

P4 (1.1.0)

  • Schalter Cold Extraction auf der Temperatur-Seite unter Modi mit Erklaerzeile (Zustand bzw. Sperrgrund). Unsichtbar, solange die S3 die Funktion nicht freigeschaltet meldet - auch bei aelterer S3-Firmware.
  • Einschalten nur bei erteilter Freigabe, ausschalten immer ausser waehrend eines laufenden kalten Bezugs. Es wird gezielt startColdExtraction/stopColdExtraction gesendet statt eines Toggles, damit ein abgewiesener Befehl den Schalter nicht in einen nie bestaetigten Zustand bringt.
  • Eigener Statuszeilen-Slot direkt hinter der Sicherheitsmeldung (Dauerzustand, Sperrgrund, Pumpenpause, abgewiesener Start, Abbruch ohne Zulauf).
  • Wasser-Kachel zeigt Cold Extraction - Heizen aus statt eines unerreichbaren Sollwerts; Aufheiz-Countdown unterdrueckt.
  • Phasenleiste und Live-Bezugsschirm: erste Phase heisst Vorbenetzung, keine Pause-Phase, Pumpenpause sichtbar.
  • Brew-Seite: Parameter als Anzeige. Statistik: kalte Bezuege mit (kalt) markiert und aus der mittleren Dauer heraus.

Bug-Fix P4 (bestand schon vor Cold Extraction)
PROTO_RX_LINE_MAX lag bei 2048 Bytes, waehrend die State-Zeile der S3 real bereits rund 2,1 KB erreicht. Mit langem Status-, Profil- oder SSID-Text lag sie darueber - dann verwarf der Client die GANZE Zeile und das Display fror auf dem letzten Stand ein, ohne dass die Verbindung als tot erkannt wurde. Limit jetzt 4096 Bytes. Der Puffer bleibt bei 2 KB reserviert, weil der interne RAM knapp ist (statisch 98 %) und eine Arduino-String nicht ins PSRAM alloziert werden kann.

S3 (5.3.2)
Sperrgrund und transiente Meldung gehen als Codes (cxBlock/cxNotice) statt als Klartext ans Display, dazu cxPreInf fuer die Phasenleiste. Der bis zu 110 Byte lange Freitext haette die State-Zeile ueber das Limit gedrueckt. Texte rendert jetzt das Display - dieselbe Trennung wie statusKey/statusText. Auf dem OLED und in den ack-Antworten bleibt der Klartext unveraendert.

Compile-Check: S3 72 % Flash / 23 % RAM, P4 37 % Flash / 98 % statischer RAM (unveraendert).

Display-Seite der kalten Extraktion. **P4 (1.1.0)** - Schalter `Cold Extraction` auf der Temperatur-Seite unter `Modi` mit Erklaerzeile (Zustand bzw. Sperrgrund). Unsichtbar, solange die S3 die Funktion nicht freigeschaltet meldet - auch bei aelterer S3-Firmware. - Einschalten nur bei erteilter Freigabe, ausschalten immer ausser waehrend eines laufenden kalten Bezugs. Es wird gezielt `startColdExtraction`/`stopColdExtraction` gesendet statt eines Toggles, damit ein abgewiesener Befehl den Schalter nicht in einen nie bestaetigten Zustand bringt. - Eigener Statuszeilen-Slot direkt hinter der Sicherheitsmeldung (Dauerzustand, Sperrgrund, Pumpenpause, abgewiesener Start, Abbruch ohne Zulauf). - Wasser-Kachel zeigt `Cold Extraction - Heizen aus` statt eines unerreichbaren Sollwerts; Aufheiz-Countdown unterdrueckt. - Phasenleiste und Live-Bezugsschirm: erste Phase heisst `Vorbenetzung`, keine Pause-Phase, Pumpenpause sichtbar. - Brew-Seite: Parameter als Anzeige. Statistik: kalte Bezuege mit `(kalt)` markiert und aus der mittleren Dauer heraus. **Bug-Fix P4 (bestand schon vor Cold Extraction)** `PROTO_RX_LINE_MAX` lag bei 2048 Bytes, waehrend die State-Zeile der S3 real bereits rund 2,1 KB erreicht. Mit langem Status-, Profil- oder SSID-Text lag sie darueber - dann verwarf der Client die GANZE Zeile und das Display fror auf dem letzten Stand ein, ohne dass die Verbindung als tot erkannt wurde. Limit jetzt 4096 Bytes. Der Puffer bleibt bei 2 KB reserviert, weil der interne RAM knapp ist (statisch 98 %) und eine Arduino-String nicht ins PSRAM alloziert werden kann. **S3 (5.3.2)** Sperrgrund und transiente Meldung gehen als Codes (`cxBlock`/`cxNotice`) statt als Klartext ans Display, dazu `cxPreInf` fuer die Phasenleiste. Der bis zu 110 Byte lange Freitext haette die State-Zeile ueber das Limit gedrueckt. Texte rendert jetzt das Display - dieselbe Trennung wie `statusKey`/`statusText`. Auf dem OLED und in den ack-Antworten bleibt der Klartext unveraendert. Compile-Check: S3 72 % Flash / 23 % RAM, P4 37 % Flash / 98 % statischer RAM (unveraendert).
thomas added 1 commit 2026-08-10 23:58:06 +02:00
Display-Seite der kalten Extraktion: Schalter unter "Modi" auf der Temperatur-Seite
mit Erklärzeile, eigener Slot in der Statuszeile direkt hinter der
Sicherheitsmeldung, "Cold Extraction - Heizen aus" in der Wasser-Kachel statt eines
unerreichbaren Sollwerts, unterdrückter Aufheiz-Countdown, "Vorbenetzung" als erste
Phase des kalten Bezugs, Parameter-Anzeige auf der Brew-Seite und "(kalt)"-Markierung
in der Statistik (kalte Bezüge zählen nicht in die mittlere Dauer).

Bug-Fix P4: PROTO_RX_LINE_MAX lag bei 2048 Bytes, während die State-Zeile der S3
bereits rund 2,1 KB erreicht. Mit langem Status-, Profil- oder SSID-Text lag sie
darüber — dann wurde die ganze Zeile verworfen und das Display fror auf dem letzten
Stand ein, ohne dass die Verbindung als tot erkannt wurde. Limit jetzt 4096 Bytes;
der Puffer bleibt bei 2 KB reserviert, weil der interne RAM knapp ist und eine
Arduino-String nicht ins PSRAM alloziert werden kann.

S3 5.3.2: Sperrgrund und transiente Meldung gehen als Codes (cxBlock/cxNotice) statt
als Klartext ans Display, dazu cxPreInf für die Phasenleiste. Der bis zu 110 Byte
lange Freitext hätte die State-Zeile über das Zeilenlimit gedrückt; die Texte rendert
jetzt das Display, analog zur Trennung statusKey/statusText. Auf dem OLED und in den
ack-Antworten bleibt der Klartext unverändert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
thomas merged commit 1933a41e64 into main 2026-08-10 23:58:07 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: thomas/Dual-PID#13