Disable manual sliders during sud, track live values continuously
During a running sud, all four manual sliders (temp soll, heat rate, heater power, stirrer speed) are disabled for user input but update their positions continuously from server pushes. They re-enable when the sud stops or is paused, or on disconnect. Browser client also resets initial-sync flags on reconnect so sliders re-sync correctly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DF16nV2ispNw1C9SbvqbRQ
This commit is contained in:
+27
-7
@@ -526,6 +526,10 @@ 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;
|
||||
@@ -548,10 +552,11 @@ function onStirrerChanged(msg) {
|
||||
for (const key of Object.keys(msg)) {
|
||||
if (key === 'Speed') {
|
||||
stirrerSpeedIst = msg.Speed;
|
||||
if (initialSpeedSync) {
|
||||
const sudRunningSpd = RUNNING_STATES.has(sudState);
|
||||
if (initialSpeedSync || sudRunningSpd) {
|
||||
document.getElementById('stirrer-speed').value = msg.Speed;
|
||||
document.getElementById('stirrer-speed-readout').textContent = msg.Speed;
|
||||
initialSpeedSync = false;
|
||||
if (!sudRunningSpd) initialSpeedSync = false;
|
||||
}
|
||||
updateStirrerVisualization();
|
||||
updateStepPlates();
|
||||
@@ -571,9 +576,10 @@ function onTempCtrlChanged(msg) {
|
||||
if ('Temp' in soll) {
|
||||
plotTempSoll = soll.Temp;
|
||||
document.getElementById('lcd-temp-soll').textContent = soll.Temp.toFixed(1);
|
||||
if (initialTempSollSync) {
|
||||
const sudRunning = RUNNING_STATES.has(sudState);
|
||||
if (initialTempSollSync || sudRunning) {
|
||||
document.getElementById('temp-soll').value = Math.round(soll.Temp);
|
||||
initialTempSollSync = false;
|
||||
if (!sudRunning) initialTempSollSync = false;
|
||||
}
|
||||
document.getElementById('temp-soll-readout').textContent = document.getElementById('temp-soll').value;
|
||||
updatePotVisualization();
|
||||
@@ -583,9 +589,10 @@ function onTempCtrlChanged(msg) {
|
||||
if ('Current' in rate) {
|
||||
document.getElementById('lcd-rate-soll').textContent = rate.Current.toFixed(1);
|
||||
}
|
||||
if ('Set' in rate && initialHeatrateSync) {
|
||||
const sudRunningHr = RUNNING_STATES.has(sudState);
|
||||
if ('Set' in rate && (initialHeatrateSync || sudRunningHr)) {
|
||||
document.getElementById('heatrate-soll').value = rate.Set;
|
||||
initialHeatrateSync = false;
|
||||
if (!sudRunningHr) initialHeatrateSync = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -635,6 +642,10 @@ function onSudChanged(msg) {
|
||||
}
|
||||
wasRunning = isRunningNow;
|
||||
sudState = newState;
|
||||
const sliderDisabled = RUNNING_STATES.has(sudState);
|
||||
for (const id of ['temp-soll', 'heatrate-soll', 'heater-power', 'stirrer-speed']) {
|
||||
document.getElementById(id).disabled = sliderDisabled;
|
||||
}
|
||||
if (newState === WAIT_USER_STATE && prevState !== WAIT_USER_STATE && sudUserMessage) {
|
||||
showUserMessage(sudUserMessage);
|
||||
} else if (prevState === WAIT_USER_STATE && newState !== WAIT_USER_STATE) {
|
||||
@@ -740,6 +751,10 @@ function connect() {
|
||||
ws = ws_;
|
||||
statusEl.textContent = 'Connecting…';
|
||||
ws.onopen = () => {
|
||||
initialPowerSync = true;
|
||||
initialSpeedSync = true;
|
||||
initialHeatrateSync = true;
|
||||
initialTempSollSync = true;
|
||||
setConnected(true);
|
||||
for (const channel of CHANNELS) {
|
||||
ws.send(JSON.stringify({'+': channel}));
|
||||
@@ -754,7 +769,12 @@ function connect() {
|
||||
statusEl.textContent = `Could not connect to ${url}`;
|
||||
statusEl.className = 'status-disconnected';
|
||||
};
|
||||
ws.onclose = () => setConnected(false);
|
||||
ws.onclose = () => {
|
||||
for (const id of ['temp-soll', 'heatrate-soll', 'heater-power', 'stirrer-speed']) {
|
||||
document.getElementById(id).disabled = false;
|
||||
}
|
||||
setConnected(false);
|
||||
};
|
||||
ws.onmessage = (event) => {
|
||||
const msg = JSON.parse(event.data);
|
||||
for (const channel of Object.keys(msg)) {
|
||||
|
||||
Reference in New Issue
Block a user