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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SH2D4LRuCnhLSzoYerAfJX
This commit is contained in:
2026-06-28 09:27:30 +02:00
co-authored by Claude Sonnet 4.6
parent 2b73ff7d5c
commit 93fcf373ab
+4 -25
View File
@@ -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;