fix: Zielgewicht bei Cold Extraction überall korrekt anzeigen (S3 5.4.1 / P4 1.2.1)
Während einer kalten Extraktion stand als Zielgewicht überall noch der Brew-by-Weight-Wert des normalen Espresso-Bezugs. OLED, Web-Dashboard und Touch-Display griffen alle direkt auf brewByWeightTargetGrams zu — die kalte Extraktion ersetzt Brew-by-Weight aber und stoppt nach coldExtractionTargetGrams. Neue Hilfsfunktion activeTargetWeightGrams() liefert das Ziel des aktuellen bzw. nächsten Bezugs. Das UART-Feld targetWeight führt jetzt diesen Wert; bbwTarget bleibt unverändert die Roh-Einstellung, damit die Brew-Control-Seite weiter das Richtige anzeigt. Zusätzlich hing die Gewichtsanzeige selbst an "Brew-by-Weight aktiv" — das ist bei kalter Extraktion typischerweise aus, obwohl ein Ziel existiert. OLED, Waage-Kachel und Live-Bezugsschirm zeigen Gewicht und Fortschritt jetzt auch beim kalten Bezug. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e8b1832fc1
commit
334896b9cf
+15
-5
@@ -369,7 +369,7 @@ Adafruit_SH1106G display = Adafruit_SH1106G(128, 64, &Wire);
|
||||
* Firmware-Informationen
|
||||
************************************************************************************/
|
||||
|
||||
String version = "5.4.0";
|
||||
String version = "5.4.1";
|
||||
String versionHersteller = "Thomas Müller";
|
||||
String versionHerstellerMail =
|
||||
"<a href='mailto:thomas@mueller.black' class='info-link'>thomas@mueller.black</a>";
|
||||
@@ -4060,6 +4060,14 @@ bool coldExtractionTemperatureOk() {
|
||||
return (InputWasser < (double)limit);
|
||||
}
|
||||
|
||||
// Zielgewicht des aktuellen bzw. naechsten Bezugs. Bei aktiver Cold Extraction ist das
|
||||
// coldExtractionTargetGrams - brewByWeightTargetGrams gilt dann nicht, weil die kalte
|
||||
// Extraktion Brew-by-Weight ersetzt. Alle Anzeigen (OLED, Web, Display) muessen diesen
|
||||
// Wert nehmen, sonst steht dort das Espresso-Ziel waehrend eines kalten Bezugs.
|
||||
float activeTargetWeightGrams() {
|
||||
return coldExtractionModeActive ? coldExtractionTargetGrams : brewByWeightTargetGrams;
|
||||
}
|
||||
|
||||
// Steht eine nutzbare Waage bereit? Ohne sie laeuft die kalte Extraktion rein zeitgesteuert:
|
||||
// Zielgewicht und Stillstands-Erkennung greifen nicht, es bleibt nur die maximale Bezugsdauer.
|
||||
// Bewusst kein Sperrgrund - ein kurz abgemeldeter HX711 soll die Funktion nicht blockieren.
|
||||
@@ -6566,7 +6574,9 @@ if (scaleModeActive) {
|
||||
// Wenn die Zustandsmaschine nicht aktiv ist, zeige den laufenden Shot oder die Temperaturen
|
||||
else if (shotActive) {
|
||||
// Priorität: Shot läuft *aktuell*?
|
||||
if (brewByWeightEnabled && scaleConnected) {
|
||||
// Auch ein kalter Bezug hat ein Gewichtsziel - unabhaengig von Brew-by-Weight,
|
||||
// das die Cold Extraction ersetzt.
|
||||
if ((brewByWeightEnabled || coldExtractionShotActive) && scaleConnected) {
|
||||
display.setTextSize(1);
|
||||
display.setCursor(0, 0);
|
||||
display.println(F("Bezug aktiv:"));
|
||||
@@ -6583,7 +6593,7 @@ if (scaleModeActive) {
|
||||
netWeight = 0.0;
|
||||
}
|
||||
char weightBuffer[15];
|
||||
snprintf(weightBuffer, sizeof(weightBuffer), "%.1f/%.1fg", netWeight, brewByWeightTargetGrams);
|
||||
snprintf(weightBuffer, sizeof(weightBuffer), "%.1f/%.1fg", netWeight, activeTargetWeightGrams());
|
||||
// --- ENDE ÄNDERUNG ---
|
||||
|
||||
display.setCursor(0, 30);
|
||||
@@ -16325,7 +16335,7 @@ void buildDashboardJson(char *buffer, size_t bufferSize) {
|
||||
|
||||
// Plattformdaten
|
||||
dtostrf(getWeightReadingForUi(), 4, 1, floatBuf); offset += snprintf(buffer + offset, bufferSize - offset, "\"weight\":%s,", floatBuf);
|
||||
dtostrf(brewByWeightTargetGrams, 4, 1, floatBuf); offset += snprintf(buffer + offset, bufferSize - offset, "\"targetWeight\":%s,", floatBuf);
|
||||
dtostrf(activeTargetWeightGrams(), 4, 1, floatBuf); offset += snprintf(buffer + offset, bufferSize - offset, "\"targetWeight\":%s,", floatBuf); // bei Cold Extraction das kalte Ziel
|
||||
offset += snprintf(buffer + offset, bufferSize - offset, "\"scaleEnabled\":%s,", scaleEnabled ? "true" : "false");
|
||||
offset += snprintf(buffer + offset, bufferSize - offset, "\"scaleType\":%u,", (unsigned int)scaleType);
|
||||
offset += snprintf(buffer + offset, bufferSize - offset, "\"scaleConnected\":%s,", scaleConnected ? "true" : "false");
|
||||
@@ -16610,7 +16620,7 @@ static void buildTouchUartStateJson(char *buffer, size_t bufferSize) {
|
||||
}
|
||||
|
||||
dtostrf(getWeightReadingForUi(), 4, 1, floatBuf); offset += snprintf(buffer + offset, bufferSize - offset, "\"weight\":%s,", floatBuf);
|
||||
dtostrf(brewByWeightTargetGrams, 4, 1, floatBuf); offset += snprintf(buffer + offset, bufferSize - offset, "\"targetWeight\":%s,", floatBuf);
|
||||
dtostrf(activeTargetWeightGrams(), 4, 1, floatBuf); offset += snprintf(buffer + offset, bufferSize - offset, "\"targetWeight\":%s,", floatBuf); // bei Cold Extraction das kalte Ziel
|
||||
// Endgewicht des letzten Bezugs inkl. Offset (identisch zur OLED: Netto beim Stopp + Offset).
|
||||
// Nur bei gewichtsbasiertem Bezug aussagekraeftig -> lastShotByWeight signalisiert das dem P4.
|
||||
dtostrf(lastShotFinalNetWeight + brewByWeightOffsetGrams, 4, 1, floatBuf); offset += snprintf(buffer + offset, bufferSize - offset, "\"lastShotWeight\":%s,", floatBuf);
|
||||
|
||||
Reference in New Issue
Block a user