From e43d47252e804a7f31581a3fbf14c9d7ec8a1a14 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sun, 28 Jun 2026 12:34:30 +0200 Subject: [PATCH] Progress panes: replace live actual temp with configured hold duration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each step plate now shows the scheduled hold time ("Hold h:mm:ss") as a static field instead of the live actual temperature. The value is set once at plate-creation time from the step's hold.duration; steps without a hold phase show "Hold —". Co-Authored-By: Claude Sonnet 4.6 Claude-Session: https://claude.ai/code/session_01SH2D4LRuCnhLSzoYerAfJX --- web/app.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/web/app.js b/web/app.js index ecccef3..f451723 100644 --- a/web/app.js +++ b/web/app.js @@ -183,6 +183,8 @@ function createStepPlate(index, step, resolvedTemp) { masses.textContent = `Grain ${grain.toFixed(2)} kg / Water ${water.toFixed(2)} kg`; rate.textContent = `Rate ${((step.ramp && step.ramp.rate) || 0).toFixed(2)} °/min`; target.textContent = `Target ${resolvedTemp !== null ? resolvedTemp.toFixed(1) + ' °C' : '—'}`; + actual.textContent = (step.hold && step.hold.duration != null) + ? `Hold ${formatDuration(step.hold.duration * 60)}` : 'Hold —'; // The hold phase's speed, not the ramp phase's, as the "configured" // fallback shown for an inactive step - see StepPlate.set_step()'s // own comment. @@ -265,20 +267,17 @@ function updateStepPlates() { } if (sudStepIndex !== null && i === sudStepIndex) { - plate.actual.textContent = `Actual ${plotTempIst !== null ? plotTempIst.toFixed(1) + ' °C' : '—'}`; plate.stirrer.textContent = `Stirrer ${stirrerSpeedIst.toFixed(0)} rpm`; plate.energy.textContent = `Energy ${energyCurrent.toFixed(0)} Wh`; - // Active step: ramp prefix when ramping; bare hold time when holding + // Active step: Ramp prefix when ramping; Hold time when holding // (reuses the same digit area). PAUSED/WAIT_USER keep the last phase. if (sudStepType === 'hold') { plate.remaining.textContent = 'Hold ' + formatDuration(Math.max(0, sudHoldRemaining)); } } else if (i in stepActualFrozen) { - plate.actual.textContent = `Actual ${stepActualFrozen[i].toFixed(1)} °C`; plate.stirrer.textContent = `Stirrer ${plate.configuredSpeed.toFixed(0)} rpm (cfg)`; plate.energy.textContent = (i in energyByStep) ? `Energy ${energyByStep[i].toFixed(0)} Wh` : 'Energy —'; } else { - plate.actual.textContent = 'Actual —'; plate.stirrer.textContent = `Stirrer ${plate.configuredSpeed.toFixed(0)} rpm (cfg)`; plate.energy.textContent = (i in energyByStep) ? `Energy ${energyByStep[i].toFixed(0)} Wh` : 'Energy —'; }