Haltezeit frei in Minuten eingeben statt aus Stufen waehlen
Wonach man sucht, haengt am Messwert: eine offene Tuer faellt nach zwei Minuten auf, ein laufender Wasserhahn erst nach Stunden. Eine Stufenliste traf damit immer nur die Haelfte der Faelle. Das Feld nimmt Minuten, das Modell rechnet in Sekunden weiter. Die Kopfzeile des Rahmens rechnet beim Tippen mit - aus "210" wird dort "erst nach 3,5 Std.", also steht die lesbare Fassung neben der eingebbaren. haltezeitPruefen() ersetzt die Whitelist: nicht unter null, nicht ueber einen Tag, auf ganze Minuten gerundet. Sekunden gewinnen hier nichts, die Messwerte kommen viel seltener. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+23
-17
@@ -224,21 +224,30 @@ function lockoutChoices()
|
||||
*
|
||||
* 0 ist die Vorgabe und heisst: wie bisher, sofort.
|
||||
*/
|
||||
function haltezeitChoices()
|
||||
/**
|
||||
* Eine eingegebene Haltezeit auf etwas Brauchbares zurechtstutzen.
|
||||
*
|
||||
* Anders als die Sperre ist sie frei einstellbar: Wonach man sucht, haengt am
|
||||
* Messwert - eine offene Tuer faellt nach zwei Minuten auf, ein laufender
|
||||
* Wasserhahn erst nach Stunden. Eine Stufenliste traefe immer nur die Haelfte
|
||||
* der Faelle.
|
||||
*
|
||||
* Grenzen gibt es trotzdem. Unter null ist keine Zeit; oberhalb eines Tages
|
||||
* waere es keine Haltezeit mehr, sondern ein Dauerzustand, den man besser
|
||||
* anders abfragt - und das Zeitfenster schneidet sie ohnehin ab. Gerechnet
|
||||
* wird in ganzen Minuten, weil der Editor Minuten anbietet und Sekunden hier
|
||||
* nichts gewinnen: die Messwerte kommen viel seltener.
|
||||
*/
|
||||
function haltezeitPruefen($sekunden)
|
||||
{
|
||||
// Die 3,5 Stunden fallen aus der Reihe, weil sie aus einem konkreten Fall
|
||||
// stammen: dauerhafter Wasserverbrauch. Kuerzer waere Fehlalarm (eine
|
||||
// lange Dusche, eine Waschmaschine), laenger liefe ein offener Hahn eine
|
||||
// halbe Nacht.
|
||||
$stufen = [0, 300, 900, 1800, 3600, 7200, 12600];
|
||||
$aus = [];
|
||||
foreach ($stufen as $sek) {
|
||||
$aus[] = [
|
||||
"value" => $sek,
|
||||
"label" => $sek ? "nach " . haltezeitKurz($sek) . " ununterbrochen" : "sofort",
|
||||
];
|
||||
$sekunden = intval($sekunden);
|
||||
if ($sekunden < 0) {
|
||||
$sekunden = 0;
|
||||
}
|
||||
return $aus;
|
||||
if ($sekunden > 86400) {
|
||||
$sekunden = 86400;
|
||||
}
|
||||
return intdiv($sekunden, 60) * 60;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -985,10 +994,7 @@ 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;
|
||||
}
|
||||
$halten = haltezeitPruefen($data["hold_secs"] ?? 0);
|
||||
|
||||
$db->begin_transaction();
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user