diff --git a/Changelog.txt b/Changelog.txt index 2708f20..f2b8f51 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,3 +1,13 @@ +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 + gerade aus, kein Wartungsmodus/Reinigung/Tuning) und ob das Auswahlfenster gerade offen ist. + Hintergrund: Die Abfrage hängt an fünf Bedingungen gleichzeitig - fehlt eine, passiert einfach + nichts, und es war von außen nicht erkennbar welche. +- Die Abfrage kommt jetzt auch nach einem Kaltstart, nicht nur nach dem Standby. Wer die Maschine + am Netzschalter einschaltet, durchläuft nie einen Standby-Übergang; dieser Weg war deshalb bisher + nicht abgedeckt. Startet die Maschine in den Standby hinein, bleibt es beim Standby-Übergang. + Version 5.6.0: - Die Abfrage „Espresso oder Cold Extraction" kommt jetzt bei JEDEM Weg aus dem Standby, also auch beim Aufwecken über den Schalter. Bisher war sie eine reine Vorab-Abfrage des Touch-Displays und erschien nur diff --git a/Dual-PID.ino b/Dual-PID.ino index 33ebfcc..ff4d575 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.0"; +String version = "5.6.1"; String versionHersteller = "Thomas Müller"; String versionHerstellerMail = "thomas@mueller.black"; @@ -5456,6 +5456,21 @@ void loop() { coldExtractionWakeChoiceUntilMs = currentMillis + COLDEX_WAKE_CHOICE_MS; } } + // Gleiche Auswahl nach einem Kaltstart: Wer die Maschine am Netzschalter einschaltet, + // kommt nie durch den Standby-Uebergang - ohne diesen Zweig gaebe es dort keine Abfrage. + // Einmal pro Laufzeit, sobald sich das Display gemeldet hat. + static bool coldExtractionBootChoiceDone = false; + if (!coldExtractionBootChoiceDone && !standbyModeActive && touchUartClientActive && + coldExtractionEnabled && coldExtractionAskOnWake && !coldExtractionModeActive && + coldExtractionArmable()) { + coldExtractionBootChoiceDone = true; + coldExtractionWakeChoicePending = true; + coldExtractionWakeChoiceUntilMs = currentMillis + COLDEX_WAKE_CHOICE_MS; + } else if (!coldExtractionBootChoiceDone && touchUartClientActive && standbyModeActive) { + // Start in den Standby hinein: Der Standby-Uebergang uebernimmt die Abfrage. + coldExtractionBootChoiceDone = true; + } + // Auswahlfenster beenden: Zeit abgelaufen, Standby, oder es wird ohnehin schon bezogen if (coldExtractionWakeChoicePending) { if (standbyModeActive || coldExtractionModeActive || shotActive || shotSoftwareActive || @@ -7339,6 +7354,7 @@ static const char brewControlCX_Fields[] PROGMEM = R"rawliteral( (Beim Aufwecken aus dem Standby fragt das Touch-Display, ob normal geheizt oder kalt extrahiert werden soll - so entscheidet man das bei jedem Aufwecken neu, ohne vorher die Web-UI zu bedienen. Ohne angeschlossenes Touch-Display oder bei nicht freigeschalteter Funktion hat die Einstellung keine Wirkung.) + {CX_ASK_DIAG}

Vorbenetzung

@@ -7827,6 +7843,27 @@ void handleColdExtraction(AsyncWebServerRequest *request) { snprintf(buffer, sizeof(buffer), "%.1f", coldExtractionPumpRestSec); cxFieldsHtml.replace("{CX_PUMP_REST}", buffer); cxFieldsHtml.replace("{CX_ASK_CHECKED}", coldExtractionAskOnWake ? " checked" : ""); + // Live-Status der Bedingungen: Die Abfrage haengt an mehreren Voraussetzungen gleichzeitig. + // Fehlt eine, passiert schlicht nichts - ohne diese Anzeige ist nicht erkennbar, welche. + { + String diag = "
Voraussetzungen der Abfrage:
"; + auto flag = [](bool ok, const String& text) { + return String("" + + (ok ? "✔ " : "✘ ") + text + "
"; + }; + 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"); + if (coldExtractionWakeChoicePending) { + long remainMs = (long)(coldExtractionWakeChoiceUntilMs - millis()); + long remainSec = (remainMs > 0) ? ((remainMs + 999) / 1000) : 0; + diag += "Auswahlfenster ist gerade offen (noch " + String(remainSec) + " s).
"; + } + diag += "
"; + cxFieldsHtml.replace("{CX_ASK_DIAG}", diag); + } if (coldExtractionEnabled) { String cxStatus;