diff --git a/Changelog.txt b/Changelog.txt index f2b8f51..9b4329f 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,16 @@ +Version 5.6.2: +- Bug-Fix: Die Abfrage beim Aufwecken erschien nicht, sobald der Cold-Extraction-Modus noch aktiv war - + und da er persistent ist, war er das nach dem ersten kalten Bezug dauerhaft. Die Bedingung „Modus ist + aus" war falsch gedacht („sonst gibt es nichts zu fragen"): Die Auswahl muss in BEIDE Richtungen gehen, + also auch von kalt zurück auf Espresso. Ohne das hing man nach dem ersten kalten Bezug im kalten Modus + fest, ohne beim Aufwecken je wieder gefragt zu werden. +- „Espresso" beendet jetzt einen laufenden Cold-Extraction-Modus, statt ihn nur nicht einzuschalten. + Sonst wäre die Auswahl eine Einbahnstraße gewesen. +- Das Auswahlfenster bleibt bei aktivem Modus offen (bisher wurde es sofort geschlossen); die Frage + lautet dann „weiter kalt oder zurück auf Espresso?". +- Die Diagnose auf /Cold-Extraction listet den Modus nicht mehr als Voraussetzung, sondern zeigt ihn + als Ist-Zustand an. + Version 5.6.1: - Diagnose: Die Seite /Cold-Extraction zeigt jetzt live, welche Voraussetzungen der Abfrage beim Aufwecken erfüllt sind (freigeschaltet, Abfrage eingeschaltet, Touch-Display verbunden, Modus diff --git a/Dual-PID.ino b/Dual-PID.ino index ff4d575..3b90f9b 100644 --- a/Dual-PID.ino +++ b/Dual-PID.ino @@ -369,7 +369,7 @@ Adafruit_SH1106G display = Adafruit_SH1106G(128, 64, &Wire); * Firmware-Informationen ************************************************************************************/ -String version = "5.6.1"; +String version = "5.6.2"; String versionHersteller = "Thomas Müller"; String versionHerstellerMail = "thomas@mueller.black"; @@ -5448,8 +5448,12 @@ void loop() { // Auswahlfenster oeffnen: gilt fuer JEDEN Weg aus dem Standby (Schalter, Touch, Web, // Timer). Nur sinnvoll mit angeschlossenem Display - ohne das koennte niemand waehlen, // und die Maschine wuerde nur unnoetig spaeter heizen. + // Bewusst OHNE Pruefung auf coldExtractionModeActive: Der Modus ist persistent, und + // die Abfrage muss in BEIDE Richtungen gehen - auch von "kalt" zurueck auf Espresso. + // Sonst bliebe man nach dem ersten kalten Bezug dauerhaft im kalten Modus haengen, + // ohne beim Aufwecken je wieder gefragt zu werden. if (coldExtractionEnabled && coldExtractionAskOnWake && touchUartClientActive && - !coldExtractionModeActive && coldExtractionArmable() && + coldExtractionArmable() && (coldExtractionWakeDecisionMs == 0 || (currentMillis - coldExtractionWakeDecisionMs) > COLDEX_WAKE_DECISION_GRACE_MS)) { coldExtractionWakeChoicePending = true; @@ -5461,8 +5465,7 @@ void loop() { // Einmal pro Laufzeit, sobald sich das Display gemeldet hat. static bool coldExtractionBootChoiceDone = false; if (!coldExtractionBootChoiceDone && !standbyModeActive && touchUartClientActive && - coldExtractionEnabled && coldExtractionAskOnWake && !coldExtractionModeActive && - coldExtractionArmable()) { + coldExtractionEnabled && coldExtractionAskOnWake && coldExtractionArmable()) { coldExtractionBootChoiceDone = true; coldExtractionWakeChoicePending = true; coldExtractionWakeChoiceUntilMs = currentMillis + COLDEX_WAKE_CHOICE_MS; @@ -5473,7 +5476,9 @@ void loop() { // Auswahlfenster beenden: Zeit abgelaufen, Standby, oder es wird ohnehin schon bezogen if (coldExtractionWakeChoicePending) { - if (standbyModeActive || coldExtractionModeActive || shotActive || shotSoftwareActive || + // coldExtractionModeActive ist hier KEIN Abbruchgrund: Bei aktivem Modus ist die + // Frage "weiter kalt oder zurueck auf Espresso?" - das Fenster muss offen bleiben. + if (standbyModeActive || shotActive || shotSoftwareActive || flushActive || !coldExtractionEnabled || (long)(currentMillis - coldExtractionWakeChoiceUntilMs) >= 0) { coldExtractionWakeChoicePending = false; @@ -7854,8 +7859,10 @@ void handleColdExtraction(AsyncWebServerRequest *request) { diag += flag(coldExtractionEnabled, "Funktion freigeschaltet"); diag += flag(coldExtractionAskOnWake, "Abfrage beim Aufwecken eingeschaltet"); diag += flag(touchUartClientActive, "Touch-Display verbunden"); - diag += flag(!coldExtractionModeActive, "Cold-Extraction-Modus derzeit aus (sonst gibt es nichts zu fragen)"); diag += flag(coldExtractionArmable(), "Kein Wartungsmodus / Reinigung / PID-Tuning"); + diag += "Aktueller Modus: "; + diag += coldExtractionModeActive ? "Cold Extraction aktiv" : "normal (Espresso)"; + diag += " - die Abfrage geht in beide Richtungen.
"; if (coldExtractionWakeChoicePending) { long remainMs = (long)(coldExtractionWakeChoiceUntilMs - millis()); long remainSec = (remainMs > 0) ? ((remainMs + 999) / 1000) : 0; @@ -15728,6 +15735,13 @@ bool executeDashboardAction(const String& action, const String& value, else if (action == "wakeEspresso") { coldExtractionWakeDecisionMs = millis(); coldExtractionWakeChoicePending = false; + // "Espresso" heisst auch: einen noch laufenden Cold-Extraction-Modus beenden. + // Ohne das waere die Auswahl eine Einbahnstrasse - der Modus ist persistent und + // liesse sich beim Aufwecken nie wieder abwaehlen. + if (coldExtractionModeActive && !shotActive && !shotSoftwareActive) { + String cxMsg; + setColdExtractionMode(false, cxMsg); + } if (standbyModeActive) { standbyModeActive = false; startupTime = millis(); diff --git a/JC_Display_Firmware/Changelog.txt b/JC_Display_Firmware/Changelog.txt index c379f6c..1b764f6 100644 --- a/JC_Display_Firmware/Changelog.txt +++ b/JC_Display_Firmware/Changelog.txt @@ -1,3 +1,9 @@ +Version 1.4.1: +- Passend zu S3 5.6.2: Die Auswahl beim Aufwecken erscheint auch dann, wenn der Cold-Extraction-Modus + bereits aktiv ist - sie geht in beide Richtungen. „Espresso" schaltet den Modus dann ab. +- Der Cold-Extraction-Knopf zeigt den Ist-Zustand: Bei aktivem Modus ist er hervorgehoben und heißt + „Cold Extraction (aktiv lassen)", sonst „Cold Extraction (Wasser bleibt kalt)". + Version 1.4.0: - Die Auswahl „Espresso oder Cold Extraction" erscheint jetzt auch beim Aufwecken über den Schalter (braucht S3-Firmware ab 5.6.0). Meldet die S3 ein offenes Auswahlfenster (cxWakeChoice), blendet das diff --git a/JC_Display_Firmware/config.h b/JC_Display_Firmware/config.h index 1cc578f..82a6110 100644 --- a/JC_Display_Firmware/config.h +++ b/JC_Display_Firmware/config.h @@ -65,7 +65,7 @@ // ------------------------------------------------------------------------------------- // Firmware // ------------------------------------------------------------------------------------- -#define DISPLAY_FW_VERSION "1.4.0" // Firmware-Stand der P4-Display-Steuerung (Info-Seite) +#define DISPLAY_FW_VERSION "1.4.1" // Firmware-Stand der P4-Display-Steuerung (Info-Seite) // ------------------------------------------------------------------------------------- // Protokoll diff --git a/JC_Display_Firmware/ui.cpp b/JC_Display_Firmware/ui.cpp index f06baad..9861dd9 100644 --- a/JC_Display_Firmware/ui.cpp +++ b/JC_Display_Firmware/ui.cpp @@ -3603,9 +3603,11 @@ void ui_update(const MachineState& st) { // Zwei Faelle: Vorab-Abfrage beim Antippen im Standby (askMode) und das von der S3 // geoeffnete Auswahlfenster NACH dem Aufwecken (choiceOpen) - letzteres deckt auch // das Aufwecken per Schalter ab, wo es keine Vorab-Abfrage geben kann. + // Kein "!st.cxActive": Der Modus ist persistent, die Auswahl muss in beide + // Richtungen gehen - sonst haengt man nach dem ersten kalten Bezug dauerhaft fest. const bool choiceOpen = st.cxWakeChoice; const bool askMode = choiceOpen || - (st.cxEnabled && st.cxArmable && !st.cxActive && st.cxAskOnWake); + (st.cxEnabled && st.cxArmable && st.cxAskOnWake); if (g_wakeColdBtn) { if (askMode) lv_obj_remove_flag(g_wakeColdBtn, LV_OBJ_FLAG_HIDDEN); else lv_obj_add_flag(g_wakeColdBtn, LV_OBJ_FLAG_HIDDEN); @@ -3631,6 +3633,17 @@ void ui_update(const MachineState& st) { if (g_wakeYesLbl) { label_set_if_changed(g_wakeYesLbl, askMode ? "Espresso" : "Aufwecken"); } + // Aktive Wahl hervorheben: Bei laufendem Modus ist "Cold Extraction" der Ist-Zustand, + // "Espresso" schaltet ihn ab - andersherum genauso. + if (g_wakeColdBtn && askMode) { + lv_obj_set_style_bg_color(g_wakeColdBtn, st.cxActive ? COL_ACCENT : COL_CARD2, 0); + lv_obj_t* coldLbl = lv_obj_get_child(g_wakeColdBtn, 0); + if (coldLbl) { + lv_obj_set_style_text_color(coldLbl, st.cxActive ? lv_color_hex(0x000000) : COL_ACCENT, 0); + label_set_if_changed(coldLbl, st.cxActive ? "Cold Extraction (aktiv lassen)" + : "Cold Extraction (Wasser bleibt kalt)"); + } + } // Auswahlfenster von der S3 -> Dialog von sich aus zeigen (kein Antippen noetig) if (choiceOpen && g_wakeConfirm && lv_obj_has_flag(g_wakeConfirm, LV_OBJ_FLAG_HIDDEN)) { wake_confirm_show();