-- =========================================================================== -- Rahmenbedingungen erweitern: Ferien und Feiertage dreiwertig, -- dazu die Tagessperre. -- -- Einspielen: -- mysql -h 127.0.0.1 -P 3310 -u homeMesh -p homeMesh < rahmen_erweitern.sql -- -- Danach den Runner neu starten (startSolarServer.sh) - Daten laedt er -- selbst nach, neuen Code nicht. -- -- --------------------------------------------------------------------------- -- 1. on_vacation / on_holiday sind jetzt dreiwertig -- -- 0 = nie an solchen Tagen laeuft die Automatik nicht -- 1 = egal der Tag aendert nichts (Vorgabe, wie bisher) -- 2 = zusaetzlich zaehlt wie ein passender Wochentag -- -- Die Spalten bleiben, wie sie sind - TINYINT traegt die 2 ohne Weiteres, -- und die vorhandenen Zeilen stehen bereits auf 0 oder 1 und behalten damit -- genau ihre bisherige Bedeutung. Es gibt nichts umzurechnen. -- -- Gebraucht wird die 2 fuer den Fall, den man vorher gar nicht schreiben -- konnte: "an Wochenenden und Feiertagen". Die Wochentagsmaske kennt nur -- Samstag und Sonntag, ein Feiertag am Dienstag ist eben ein Dienstag. Mit -- der 2 genuegt Sa+So angehakt und "Feiertage: zusaetzlich". -- -- 2. once_per_day - nach dem Auslösen bis Mitternacht Ruhe -- -- Fuer alles, was man hinterher von Hand wieder anders stellt. Ein Rollladen, -- den man um acht nochmal zugezogen hat, soll nicht um neun von selbst wieder -- auffahren, nur weil eine Wolke weiterzieht und die Helligkeitsschwelle ein -- zweites Mal steigt. -- -- Die Sperrzeit (lockout_secs) taugt dafuer nicht: sie zaehlt Sekunden und -- muesste auf 86400 stehen, womit sie am naechsten Morgen den Termin knapp -- verfehlen wuerde - eine Automatik, die heute um 07:00:05 lief, waere -- morgen um 07:00:00 noch gesperrt und fiele einen ganzen Tag aus. -- =========================================================================== ALTER TABLE automations MODIFY COLUMN on_vacation TINYINT(1) NOT NULL DEFAULT 1 COMMENT '0=nie, 1=egal, 2=zusaetzlich (zaehlt wie passender Wochentag)', MODIFY COLUMN on_holiday TINYINT(1) NOT NULL DEFAULT 1 COMMENT '0=nie, 1=egal, 2=zusaetzlich (zaehlt wie passender Wochentag)'; -- Idempotent: beim zweiten Lauf steht die Spalte schon da. SET @vorhanden := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'automations' AND COLUMN_NAME = 'once_per_day'); SET @sql := IF(@vorhanden = 0, 'ALTER TABLE automations ADD COLUMN once_per_day TINYINT(1) NOT NULL DEFAULT 0 COMMENT ''nach dem Auslösen bis Mitternacht gesperrt'' AFTER force_once', 'DO 0'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SELECT COLUMN_NAME, COLUMN_DEFAULT, COLUMN_COMMENT FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'automations' AND COLUMN_NAME IN ('on_vacation', 'on_holiday', 'once_per_day');