diff --git a/src_data/pages/dashboard.html b/src_data/pages/dashboard.html
index 50f57e5..cb6fdde 100644
--- a/src_data/pages/dashboard.html
+++ b/src_data/pages/dashboard.html
@@ -351,9 +351,14 @@
value = -(step);
}
- newSettings[purpose].target = parseFloat(constrain(newSettings[purpose].target + value, minTemp, maxTemp).toFixed(2));
- modifiedTime = Date.now();
- setValue('.targetTemp', newSettings[purpose].target, tContainer);
+ const newValue = parseFloat(constrain(newSettings[purpose].target + value, minTemp, maxTemp).toFixed(2));
+ if (newSettings[purpose].target != newValue) {
+ newSettings[purpose].target = newValue;
+ modifiedTime = Date.now();
+
+ setValue('.targetTemp', newValue, tContainer);
+ tContainer.querySelector('.thermostat-header').setAttribute("aria-busy", "true");
+ }
}
});
}
@@ -383,27 +388,46 @@
value = -(bigStep);
}
- newSettings[purpose].target = parseFloat(constrain(newSettings[purpose].target + value, minTemp, maxTemp).toFixed(2));
- modifiedTime = Date.now();
+ const newValue = parseFloat(constrain(newSettings[purpose].target + value, minTemp, maxTemp).toFixed(2));
+ if (newSettings[purpose].target != newValue) {
+ newSettings[purpose].target = newValue;
+ modifiedTime = Date.now();
- setValue('.targetTemp', newSettings[purpose].target, tContainer);
+ setValue('.targetTemp', newSettings[purpose].target, tContainer);
+ tContainer.querySelector('.thermostat-header').setAttribute("aria-busy", "true");
+ }
}, 500);
});
});
document.querySelector('#tHeatEnabled').addEventListener('change', (event) => {
+ if (newSettings.heating.enabled == event.currentTarget.checked) {
+ return;
+ }
+
modifiedTime = Date.now();
newSettings.heating.enabled = event.currentTarget.checked;
+ document.querySelector('.tHeat .thermostat-header').setAttribute("aria-busy", "true");
});
document.querySelector('#tHeatTurbo').addEventListener('change', (event) => {
+ if (newSettings.heating.turbo == event.currentTarget.checked) {
+ return;
+ }
+
modifiedTime = Date.now();
newSettings.heating.turbo = event.currentTarget.checked;
+ document.querySelector('.tHeat .thermostat-header').setAttribute("aria-busy", "true");
});
document.querySelector('#tDhwEnabled').addEventListener('change', (event) => {
+ if (newSettings.dhw.enabled == event.currentTarget.checked) {
+ return;
+ }
+
modifiedTime = Date.now();
newSettings.dhw.enabled = event.currentTarget.checked;
+ document.querySelector('.tDhw .thermostat-header').setAttribute("aria-busy", "true");
});
document.querySelector('.notify-fault .reset').addEventListener('click', async (event) => {
@@ -531,6 +555,10 @@
setValue('.pressureUnit', pressureUnit(unitSystem));
setValue('.volumeUnit', volumeUnit(unitSystem));
+ document.querySelectorAll('.thermostat-header').forEach((item) => {
+ item.setAttribute("aria-busy", "false");
+ });
+
} catch (error) {
console.log(error);
}
diff --git a/src_data/scripts/utils.js b/src_data/scripts/utils.js
index ab318ef..c728a8e 100644
--- a/src_data/scripts/utils.js
+++ b/src_data/scripts/utils.js
@@ -318,7 +318,7 @@ const setupRestoreBackupForm = (formSelector) => {
console.log("Backup: ", data);
if (data.settings != undefined) {
- for (var key in data.settings) {
+ for (const key in data.settings) {
let response = await fetch(url, {
method: "POST",
cache: "no-cache",
@@ -338,6 +338,41 @@ const setupRestoreBackupForm = (formSelector) => {
return;
}
}
+
+ let finalPayload = {};
+ if (data.settings.emergency?.target !== undefined) {
+ finalPayload.emergency ??= {};
+ finalPayload.emergency.target = data.settings.emergency.target;
+ }
+
+ if (data.settings.heating?.target !== undefined) {
+ finalPayload.heating ??= {};
+ finalPayload.heating.target = data.settings.heating.target;
+ }
+
+ if (data.settings.dhw?.target !== undefined) {
+ finalPayload.dhw ??= {};
+ finalPayload.dhw.target = data.settings.dhw.target;
+ }
+
+ if (Object.keys(finalPayload).length) {
+ let response = await fetch(url, {
+ method: "POST",
+ cache: "no-cache",
+ credentials: "include",
+ headers: {
+ "Content-Type": "application/json"
+ },
+ body: JSON.stringify({
+ "settings": finalPayload
+ })
+ });
+
+ if (!response.ok) {
+ onFailed();
+ return;
+ }
+ }
}
if (data.sensors != undefined) {