Files
adminandClaude Opus 5 e1e678f6c0 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>
2026-09-21 08:57:14 +02:00

35 lines
1.6 KiB
SQL

-- ===========================================================================
-- 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`;