From 93fcf373ab3eecf9c32551735542c08479e363be Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sun, 28 Jun 2026 09:27:30 +0200 Subject: [PATCH] Browser GUI: always reflect server ist values for heater power and stirrer speed Remove one-time sync guards (initialPowerSync, initialSpeedSync) so heater power and stirrer speed sliders track the server's ist readbacks on every push, not just on first connect. Also remove the zero-out on sud stop/pause: with continuous ist tracking the animation and slider always agree, and the zero-out caused them to diverge when the server kept sending non-zero values during a pause. Co-Authored-By: Claude Sonnet 4.6 Claude-Session: https://claude.ai/code/session_01SH2D4LRuCnhLSzoYerAfJX --- web/app.js | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/web/app.js b/web/app.js index 9519bf7..c5f6136 100644 --- a/web/app.js +++ b/web/app.js @@ -28,8 +28,6 @@ let stirrerSpeedIst = 0; // value via Qt's signal/slot machinery; here the DOM itself never echoes // a plain .value assignment as an 'input'/'change' event, but the // stale-overwrite risk is the same). -let initialPowerSync = true; -let initialSpeedSync = true; let initialHeatrateSync = true; let initialTempSollSync = true; let initialPotTempSync = true; @@ -527,18 +525,11 @@ function onHeaterChanged(msg) { heaterPowerSoll = msg.PowerSet; document.getElementById('lcd-power-soll').textContent = msg.PowerSet; updateFireVisualization(); - if (RUNNING_STATES.has(sudState)) { - document.getElementById('heater-power').value = msg.PowerSet; - document.getElementById('heater-power-readout').textContent = msg.PowerSet; - } } else if (key === 'Power') { heaterPowerIst = msg.Power; document.getElementById('lcd-power-ist').textContent = msg.Power; - if (initialPowerSync) { - document.getElementById('heater-power').value = msg.Power; - document.getElementById('heater-power-readout').textContent = msg.Power; - initialPowerSync = false; - } + document.getElementById('heater-power').value = msg.Power; + document.getElementById('heater-power-readout').textContent = msg.Power; } else if (key === 'Capabilities') { const power = msg.Capabilities.Power; heaterMaxPower = power.Max || 100; @@ -553,12 +544,8 @@ function onStirrerChanged(msg) { for (const key of Object.keys(msg)) { if (key === 'Speed') { stirrerSpeedIst = msg.Speed; - const sudRunningSpd = RUNNING_STATES.has(sudState); - if (initialSpeedSync || sudRunningSpd) { - document.getElementById('stirrer-speed').value = msg.Speed; - document.getElementById('stirrer-speed-readout').textContent = msg.Speed; - if (!sudRunningSpd) initialSpeedSync = false; - } + document.getElementById('stirrer-speed').value = msg.Speed; + document.getElementById('stirrer-speed-readout').textContent = msg.Speed; updateStirrerVisualization(); updateStepPlates(); } else if (key === 'Capabilities') { @@ -641,12 +628,6 @@ function onSudChanged(msg) { energyByStep = {}; energyCurrent = 0; } - if (!isRunningNow && wasRunning) { - document.getElementById('heater-power').value = 0; - document.getElementById('heater-power-readout').textContent = 0; - document.getElementById('stirrer-speed').value = 0; - document.getElementById('stirrer-speed-readout').textContent = 0; - } wasRunning = isRunningNow; sudState = newState; const sliderDisabled = RUNNING_STATES.has(sudState); @@ -762,8 +743,6 @@ function connect() { ws = ws_; statusEl.textContent = 'Connecting…'; ws.onopen = () => { - initialPowerSync = true; - initialSpeedSync = true; initialHeatrateSync = true; initialTempSollSync = true; initialPotTempSync = true;