Wecker als Automatik statt als eigener Prozess
wecker.py hat genau das getan, was der AutoAction-Runner ohnehin kann - nur mit allem doppelt: eigener Datenbank alarm, eigenem Feiertags- und Ferienkalender neben calendar_days, eigenem UDP-Log auf Port 13377, eigener Endlosschleife und einem Startskript samt naechtlichem Neustart um drei. Punkt fuer Punkt hatte der Runner die bessere Fassung schon: die Zeit als Bedingung "um 05:50" mit Nachholfenster statt eines Vergleichs im 20-Sekunden-Takt, weekdays als Bitmaske statt sieben Spalten, on_holiday/on_vacation gegen calendar_days statt gegen einen zweiten Kalender, die steigende Flanke statt einer wecked-Spalte, und den Versand mit einem Faden je Geraet statt fuenf HTTP-Versuchen im Abstand von vier Sekunden. Umgezogen ist die eine Weckzeit, die scharf war: 05:50, Mo-Fr, nicht in den Ferien, nicht an Feiertagen, WLED-Preset 5 auf MenasHimmel. Die drei anderen Zeilen in alarmtime standen auf onoff = -1. wecker_zu_automatik.sql legt die Automatik an und beschreibt im Kopf, wie dasselbe im Dashboard von Hand geht. Die Datenbank alarm und der Abschnitt [alarm] in der config.ini bleiben vorerst stehen - sie liest nur niemand mehr. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
-- ===========================================================================
|
||||
-- Der Wecker als Automatik
|
||||
--
|
||||
-- Ersetzt wecker.py. Das Skript hat dasselbe getan, was der AutoAction-Runner
|
||||
-- ohnehin kann, nur mit eigener Datenbank (`alarm`), eigenem Feiertags- und
|
||||
-- Ferienkalender, eigenem UDP-Log und einer eigenen Endlosschleife:
|
||||
--
|
||||
-- wecker.py Automatik
|
||||
-- --------------------------------- ----------------------------------
|
||||
-- alarmtime.time_1 = 05:50:00 Bedingung "Uhrzeit = 05:50"
|
||||
-- alarmtime.mo..fr != -1 weekdays = 31 (Bit 0..4, Mo bis Fr)
|
||||
-- mode = schule, is_holiday() on_holiday = 0
|
||||
-- mode = schule, is_school_holiday() on_vacation = 0
|
||||
-- alarmtime.wecked = heute cond_met, die steigende Flanke
|
||||
-- POST {"ps": 5} an 192.168.179.139 Kommando "Preset" des Aktors
|
||||
-- MenasHimmel, Parameter preset = 5
|
||||
--
|
||||
-- Preset 5 heisst am Geraet "Wakeup".
|
||||
--
|
||||
-- Von den vier Zeilen in `alarmtime` war nur eine scharf (id 3, 05:50, Modus
|
||||
-- schule); die drei anderen standen auf onoff = -1. Nur diese eine zieht hier
|
||||
-- also um.
|
||||
--
|
||||
-- Einspielen:
|
||||
-- mysql -h 127.0.0.1 -P 3310 -u homeMesh -p homeMesh < wecker_zu_automatik.sql
|
||||
--
|
||||
-- Dasselbe geht auch ohne SQL: im Dashboard unter "Automatismen", Etage EG,
|
||||
-- neue Automatik anlegen - Bedingung "Uhrzeit um 05:50", Aktion
|
||||
-- "MenasHimmel / Preset" mit Wakeup, Wochentage Mo-Fr, die beiden Haken
|
||||
-- "auch in den Ferien" und "auch an Feiertagen" heraus. Der Runner liest das
|
||||
-- Regelwerk alle 30 Sekunden neu, ein Neustart ist so oder so nicht noetig.
|
||||
-- ===========================================================================
|
||||
|
||||
INSERT INTO automations
|
||||
(name, floor, enabled, window_from, window_to, weekdays,
|
||||
on_vacation, on_holiday, force_once, lockout_secs)
|
||||
SELECT Wecker Magdalena, EG, 1, 00:00:00, 23:59:00, 31, 0, 0, 0, 900
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM automations WHERE name = Wecker Magdalena);
|
||||
|
||||
SET @auto = (SELECT id FROM automations WHERE name = Wecker Magdalena);
|
||||
|
||||
-- Bedingung: state_id 1 ist der gerechnete Messwert "Uhrzeit" des
|
||||
-- Logic-Aktors. Operator = heisst "um", also ab dieser Minute noch
|
||||
-- catchup_minutes lang wahr - ausgeloest wird trotzdem nur einmal, dafuer
|
||||
-- sorgt die Flanke.
|
||||
INSERT INTO automation_conditions
|
||||
(automation_id, group_no, position, state_id, operator, value)
|
||||
SELECT @auto, 0, 0, 1, =, 05:50
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM automation_conditions
|
||||
WHERE automation_id = @auto AND state_id = 1);
|
||||
|
||||
-- Aktion: command_id 20 ist "Preset" des WLED-Aktors MenasHimmel
|
||||
-- (wled://192.168.179.139), Vorlage {"ps":%preset%}.
|
||||
INSERT INTO automation_actions (automation_id, position, command_id)
|
||||
SELECT @auto, 0, 20
|
||||
FROM DUAL
|
||||
WHERE NOT EXISTS (SELECT 1 FROM automation_actions
|
||||
WHERE automation_id = @auto AND command_id = 20);
|
||||
|
||||
SET @aktion = (SELECT id FROM automation_actions
|
||||
WHERE automation_id = @auto AND command_id = 20);
|
||||
|
||||
-- parameter_id 16 ist "preset" zu diesem Kommando.
|
||||
INSERT INTO automation_action_params (action_id, parameter_id, value)
|
||||
VALUES (@aktion, 16, "5")
|
||||
ON DUPLICATE KEY UPDATE value = VALUES(value);
|
||||
|
||||
SELECT a.id, a.name, a.weekdays, a.on_vacation, a.on_holiday,
|
||||
c.operator, c.value AS uhrzeit, p.value AS preset
|
||||
FROM automations a
|
||||
JOIN automation_conditions c ON c.automation_id = a.id
|
||||
JOIN automation_actions ak ON ak.automation_id = a.id
|
||||
JOIN automation_action_params p ON p.action_id = ak.id
|
||||
WHERE a.name = "Wecker Magdalena";
|
||||
Reference in New Issue
Block a user