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:
@@ -211,6 +211,31 @@ function lockoutChoices()
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Wie lange die Bedingung anliegen muss, bevor ausgeloest wird.
|
||||
*
|
||||
* Der Gegenspieler zur Sperrzeit: die begrenzt, wie oft ausgeloest wird,
|
||||
* diese, wie lange etwas anliegen muss, bevor es ueberhaupt dazu kommt.
|
||||
* "Der Wasserzaehler laeuft" ist jedes Haendewaschen - "laeuft seit einer
|
||||
* halben Stunde ohne Pause" ist ein offener Hahn.
|
||||
*
|
||||
* Faellt die Bedingung zwischendurch aus, faengt die Zeit von vorn an; genau
|
||||
* das ist mit "ununterbrochen" gemeint. Gezaehlt wird im Runner.
|
||||
*
|
||||
* 0 ist die Vorgabe und heisst: wie bisher, sofort.
|
||||
*/
|
||||
function haltezeitChoices()
|
||||
{
|
||||
return [
|
||||
["value" => 0, "label" => "sofort"],
|
||||
["value" => 300, "label" => "nach 5 Min. ununterbrochen"],
|
||||
["value" => 900, "label" => "nach 15 Min. ununterbrochen"],
|
||||
["value" => 1800, "label" => "nach 30 Min. ununterbrochen"],
|
||||
["value" => 3600, "label" => "nach 1 Std. ununterbrochen"],
|
||||
["value" => 10800, "label" => "nach 3 Std. ununterbrochen"],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Auswahlwerte aus possible_values in eine einheitliche Form bringen.
|
||||
*
|
||||
@@ -805,6 +830,7 @@ function emptyAutomation($floor)
|
||||
"force_once" => false,
|
||||
"once_per_day" => false,
|
||||
"lockout_secs" => 60,
|
||||
"hold_secs" => 0,
|
||||
"last_run" => null,
|
||||
"conditions" => [],
|
||||
"actions" => [],
|
||||
@@ -842,6 +868,8 @@ function loadAutomation($id)
|
||||
// rahmen_erweitern.sql legt die Spalte erst an.
|
||||
"once_per_day" => (bool)($row["once_per_day"] ?? 0),
|
||||
"lockout_secs" => intval($row["lockout_secs"]),
|
||||
// ?? 0 wie oben: haltezeit.sql legt die Spalte erst an.
|
||||
"hold_secs" => intval($row["hold_secs"] ?? 0),
|
||||
"last_run" => $row["last_run"],
|
||||
"conditions" => [],
|
||||
"actions" => [],
|
||||
@@ -936,6 +964,10 @@ function saveAutomation($data)
|
||||
if (!in_array($lockout, array_column(lockoutChoices(), "value"), true)) {
|
||||
$lockout = 60;
|
||||
}
|
||||
$halten = intval($data["hold_secs"] ?? 0);
|
||||
if (!in_array($halten, array_column(haltezeitChoices(), "value"), true)) {
|
||||
$halten = 0;
|
||||
}
|
||||
|
||||
$db->begin_transaction();
|
||||
try {
|
||||
@@ -961,11 +993,12 @@ function saveAutomation($data)
|
||||
$stmt = $db->prepare("UPDATE automations SET name = ?, floor = ?, enabled = ?,
|
||||
window_from = ?, window_to = ?, weekdays = ?,
|
||||
on_vacation = ?, on_holiday = ?, next_day = ?, force_once = ?,
|
||||
once_per_day = ?, lockout_secs = ?, changed = NOW()
|
||||
once_per_day = ?, lockout_secs = ?, hold_secs = ?,
|
||||
changed = NOW()
|
||||
WHERE id = ?");
|
||||
$stmt->bind_param("ssissiiiiiiii", $name, $floor, $enabled, $windowFrom, $windowTo,
|
||||
$stmt->bind_param("ssissiiiiiiiii", $name, $floor, $enabled, $windowFrom, $windowTo,
|
||||
$weekdays, $onVacation, $onHoliday, $nextDay, $forceOnce,
|
||||
$oncePerDay, $lockout, $id);
|
||||
$oncePerDay, $lockout, $halten, $id);
|
||||
$stmt->execute();
|
||||
$stmt->close();
|
||||
$db->query("DELETE FROM automation_conditions WHERE automation_id = " . $id);
|
||||
@@ -974,11 +1007,11 @@ function saveAutomation($data)
|
||||
$stmt = $db->prepare("INSERT INTO automations
|
||||
(name, floor, enabled, window_from, window_to, weekdays,
|
||||
on_vacation, on_holiday, next_day, force_once,
|
||||
once_per_day, lockout_secs)
|
||||
VALUES (?,?,?,?,?,?,?,?,?,?,?,?)");
|
||||
$stmt->bind_param("ssissiiiiiii", $name, $floor, $enabled, $windowFrom, $windowTo,
|
||||
once_per_day, lockout_secs, hold_secs)
|
||||
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)");
|
||||
$stmt->bind_param("ssissiiiiiiii", $name, $floor, $enabled, $windowFrom, $windowTo,
|
||||
$weekdays, $onVacation, $onHoliday, $nextDay, $forceOnce,
|
||||
$oncePerDay, $lockout);
|
||||
$oncePerDay, $lockout, $halten);
|
||||
$stmt->execute();
|
||||
$id = $db->insert_id;
|
||||
$stmt->close();
|
||||
|
||||
Reference in New Issue
Block a user