Haltezeit im Rahmen: "Auslösen erst nach X ununterbrochen"
Der Gegenspieler zur Sperre, direkt daneben: die bremst die Wiederholung, die Haltezeit den ersten Lauf. Damit lassen sich Dauerzustände abfragen, die in einem einzelnen Messwert nicht zu sehen sind - "der Wasserzähler läuft seit einer halben Stunde ohne Pause". Gespeichert wird in automations.hold_secs (haltezeit.sql im SolarManager), gezählt wird im Runner. Angeboten werden feste Stufen, wie bei der Sperre: eine weitere ist eine Zeile in haltezeitChoices(). 0 ist die Vorgabe und heißt "sofort" - vorhandene Automatiken ändern sich nicht. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
let autoModel = null;
|
||||
let autoDevices = [];
|
||||
let autoLockouts = [];
|
||||
let autoHaltezeiten = [];
|
||||
let autoFerien = [];
|
||||
let autoFeiertage = [];
|
||||
let autoTagVorlagen = [];
|
||||
@@ -1125,6 +1126,9 @@ function rahmenKurzText() {
|
||||
teile.push(autoModel.window_from === "00:00" && autoModel.window_to === "23:59"
|
||||
? "rund um die Uhr"
|
||||
: autoModel.window_from + "–" + autoModel.window_to);
|
||||
if (autoModel.hold_secs > 0) {
|
||||
teile.push("erst nach " + Math.floor(autoModel.hold_secs / 60) + " Min.");
|
||||
}
|
||||
if (autoModel.lockout_secs > 0) {
|
||||
teile.push("Sperre " + (autoModel.lockout_secs >= 60
|
||||
? Math.floor(autoModel.lockout_secs / 60) + " Min."
|
||||
@@ -1143,6 +1147,7 @@ function rahmenIstVorgabe() {
|
||||
&& autoModel.window_from === "00:00"
|
||||
&& autoModel.window_to === "23:59"
|
||||
&& !autoModel.once_per_day
|
||||
&& !autoModel.hold_secs
|
||||
&& !autoModel.force_once;
|
||||
}
|
||||
|
||||
@@ -1173,6 +1178,9 @@ function fuelleFormular() {
|
||||
const sperre = document.getElementById("lockoutSecs");
|
||||
optionListe(sperre, autoLockouts.map(o => ({ value: o.value, text: o.label })),
|
||||
autoModel.lockout_secs);
|
||||
optionListe(document.getElementById("holdSecs"),
|
||||
autoHaltezeiten.map(o => ({ value: o.value, text: o.label })),
|
||||
autoModel.hold_secs);
|
||||
document.getElementById("autoName").value = autoModel.name;
|
||||
// Kennt die Liste die Etage nicht, bleibt eine Auswahlliste sonst leer
|
||||
// stehen und schickt beim Speichern "" mit.
|
||||
@@ -1207,6 +1215,7 @@ function leseFormular() {
|
||||
autoModel.once_per_day = document.getElementById("oncePerDay").checked;
|
||||
autoModel.next_day = document.getElementById("nextDay").checked;
|
||||
autoModel.lockout_secs = Number(document.getElementById("lockoutSecs").value);
|
||||
autoModel.hold_secs = Number(document.getElementById("holdSecs").value);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1214,7 +1223,8 @@ function leseFormular() {
|
||||
* Ohne das stuende dort "rund um die Uhr", waehrend darunter 08:45 steht.
|
||||
*/
|
||||
function rahmenFelderVerdrahten() {
|
||||
["tSpanFrom", "tSpanTo", "lockoutSecs", "runOnce", "oncePerDay", "nextDay"].forEach(id => {
|
||||
["tSpanFrom", "tSpanTo", "lockoutSecs", "holdSecs",
|
||||
"runOnce", "oncePerDay", "nextDay"].forEach(id => {
|
||||
const feld = document.getElementById(id);
|
||||
if (feld) feld.addEventListener("change", () => { leseFormular(); renderRahmen(); });
|
||||
});
|
||||
@@ -1242,6 +1252,7 @@ function loadAutomatic() {
|
||||
const daten = JSON.parse(document.getElementById("autoActionData").textContent);
|
||||
autoDevices = daten.devices;
|
||||
autoLockouts = daten.lockouts;
|
||||
autoHaltezeiten = daten.haltezeiten || [];
|
||||
autoFerien = daten.ferien || [];
|
||||
autoFeiertage = daten.feiertage || [];
|
||||
autoTagVorlagen = daten.tagvorlagen || [];
|
||||
@@ -1263,6 +1274,7 @@ function loadAutomatic() {
|
||||
force_once: a.force_once,
|
||||
once_per_day: a.once_per_day,
|
||||
lockout_secs: a.lockout_secs,
|
||||
hold_secs: a.hold_secs || 0,
|
||||
groups: [],
|
||||
actions: a.actions.map(x => ({ command_id: x.command_id, params: Object.assign({}, x.params) }))
|
||||
};
|
||||
@@ -1352,6 +1364,7 @@ function submitAutoAction() {
|
||||
force_once: autoModel.force_once,
|
||||
once_per_day: autoModel.once_per_day,
|
||||
lockout_secs: autoModel.lockout_secs,
|
||||
hold_secs: autoModel.hold_secs,
|
||||
conditions: [],
|
||||
actions: autoModel.actions
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user