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