Haltezeit: erst ausloesen, wenn die Bedingung dabei bleibt
Bisher loeste eine Automatik in dem Moment aus, in dem die Bedingung wahr wurde. Fuer Dauerzustaende taugt das nicht: "der Wasserzaehler laeuft" ist jedes Haendewaschen, gemeint war "laeuft seit einer halben Stunde ohne Pause". hold_secs schiebt die Flanke nach hinten, statt sie zu verbrauchen - cond_met bleibt bis dahin 0, und alles danach (Tagessperre, Sperrzeit, Protokoll) bleibt unberuehrt. Ein Aussetzer setzt die Zeit zurueck, das Zugehen des Zeitfensters ebenfalls. Gezaehlt wird im Speicher (erfuellt_seit) wie war_aktiv: nach einem Neustart weiss niemand, ob die Bedingung zwischendurch anlag. hold_secs = 0 ist die Vorgabe und heisst: wie bisher. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
-- ===========================================================================
|
||||
-- Haltezeit: die Bedingung muss eine Weile durchgehend erfuellt sein
|
||||
--
|
||||
-- Einspielen:
|
||||
-- mysql -h 127.0.0.1 -P 3310 -u homeMesh -p homeMesh < haltezeit.sql
|
||||
--
|
||||
-- Danach den Runner neu starten (startSolarServer.sh) - Daten laedt er
|
||||
-- selbst nach, neuen Code nicht.
|
||||
--
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- Wozu
|
||||
--
|
||||
-- Bisher loeste eine Automatik in dem Moment aus, in dem die Bedingung wahr
|
||||
-- wurde. Fuer "Temperatur ueber 22 Grad" ist das richtig. Fuer "der
|
||||
-- Wasserzaehler laeuft und hoert nicht auf" ist es unbrauchbar: Jeder
|
||||
-- Spuelgang macht die Bedingung wahr, und gemeint war "seit einer halben
|
||||
-- Stunde ohne Pause".
|
||||
--
|
||||
-- Die Sperrzeit (lockout_secs) taugt dafuer nicht - sie begrenzt, wie oft
|
||||
-- ausgeloest wird, nicht wie lange etwas anliegen muss. Und die Verkettung
|
||||
-- ueber eine zweite Automatik traefe es nur ungefaehr.
|
||||
--
|
||||
-- hold_secs = 0 ist die Vorgabe und heisst: sofort, also genau wie bisher.
|
||||
-- Jede vorhandene Automatik behaelt damit ihr Verhalten.
|
||||
--
|
||||
-- Gezaehlt wird im Runner, nicht in der Datenbank: Er weiss ohnehin bei
|
||||
-- jedem Takt, ob die Bedingung gerade erfuellt ist. Faellt sie zwischendurch
|
||||
-- aus, faengt die Zeit von vorn an - genau das ist "ohne Pause".
|
||||
-- ---------------------------------------------------------------------------
|
||||
|
||||
ALTER TABLE `automations`
|
||||
ADD COLUMN IF NOT EXISTS `hold_secs` int(11) NOT NULL DEFAULT 0
|
||||
COMMENT 'Haltezeit: so lange muss die Bedingung ununterbrochen erfuellt sein, bevor ausgeloest wird. 0 = sofort'
|
||||
AFTER `lockout_secs`;
|
||||
Reference in New Issue
Block a user