Hallo,
Ziel ist es folgende Komponenten nach einem Schichtplan zu steuern:
3 HM-CC-TC Funk-Wandthermostate für 3 verschiedene Räume
3 HM-LC-BL1PBU-FM Unterputz-Jalousieaktor für 3 verschiedene Räume.
Für die Jalousieaktoren könnte ich sunrice/sunset benutzen.
Für die Funk-Wandthermostate Zeitpläne.
Jetzt die Besonderheit
Ich habe bei gerader KW Frühschicht, manchmal auch samstags
Heizen 4:00 - 5:00; 13:00 - 21:30; Rolladen hoch 7:30 oder wenn es hell wird; Rolladen zu bei Dämmerung
Ungerader KW Spätschicht, jedoch nicht Freitag
Heizen 7:00 - 13:00; Rolladen hoch 7:30 oder wenn es hell wird; Rolladen zu bei Dämmerung
Wochenende entsprechen später
Wie könnte ich einzelne freie Tage programmieren?
Kann man z.B "morgen frei" setzen?
strike1205
Du baust dir erstmal einen Dummy, z.b.
Schicht_frueh
Ich verwende für sowas sogar immer FS20 Adressen, dann kann man die Schalter tendentiell auch mit einer FS20 FB schalten.
Z.B.:
define Schicht_frueh FS20 22224222 da
attr Schicht_frueh dummy 1
attr Schicht_frueh room Schichtschalter
Jetzt kannst du den per Weboberfläche oder Fernbedienung auf ON oder OFF schalten. (Kannst natürlich auch einen reinen Dummy definieren)
Später in deiner Konfig stellst du irgendwo die Temperatur.
Heizen 4:00 - 5:00
würde man ja z.b. grob so machen:
define Heizen_morgens_an at *04:00:00 set Heizung1 desired-temp 22.0
define Heizen_morgens_aus at *05:00:00 set Heizung1 desired-temp 15.0
und analog für die weiteren Uhrzeiten.
Ein Weg wäre jetzt, zusätzlich zu prüfen, ob Schicht_frueh "on" ist oder nicht und nur dann auch tatsächlich zu heizen:
define Heizen_morgens_an at *04:00:00 {if (Value(" Schicht_frueh") eq "on") { fhem("set Heizung1 desired-temp 22.0") } }
Und das machst du für alle Heizpunkte, bei Spätschicht also
define Heizen_morgens_an_spaet at *07:00:00 {if (Value(" Schicht_frueh") ne "on") { fhem("set Heizung1 desired-temp 22.0") } }
etc.etc.
Das ist der erste Schritt. Wenn das alles läuft kannst du versuchen, "Schicht_frueh" automatisch zu stellen, nämlich über Abfrage der Wochenzahl.
Ich mache z.b. mein Einfahrtstor Mittwochs automatisch auf (Müllabfuhr)
define mi_tor at *06:50:00 {if ($wday == 3) { fhem("set Einfahrt_AUF on") } }
Nach diesem Schema müsste man auch die Woche prüfen können. Da möge jemand der etwas besser in Perl ist als ich mal sagen wie sowas am Besten aussieht.
Ein anderer Weg, der je nach dem mit weniger Code auskommt aber auch komplexer ist ist, mit Betätigen des "Schicht_frueh" Schalters die ganze Heizungssteuerung erst anzulegen.
Dabei wird zuerst das define mit den alten Terminen gelöscht und dann je nach dem ob "Schicht_frueh" on oder nicht on ist "Heizen_morgens_an" mit frühen oder späten Terminen angelegt:
define Heizen notify Schicht_frueh {if (Value("Schicht_frueh") eq "on") { fhem("delte Heizen_morgens_an ;; delte Heizen_morgens_aus ;; define Heizen_morgens_an at *04:00:00 set Heizung1 desired-temp 22.0 ;; define Heizen_morgens_aus at *05:00:00 set Heizung1 desired-temp 15.0") } else { fhem("delte Heizen_morgens_an ;; delte Heizen_morgens_aus ;; define Heizen_morgens_an at *07:00:00 set Heizung1 desired-temp 22.0 ;; define Heizen_morgens_aus at *13:00:00 set Heizung1 desired-temp 15.0") }}
Auch hier kann man das Umschalten dann automatisieren durch Abfrage der Wochenzahl.
Die Rollade zuletzt schaltest du mit Sunset/Sunrise:
define Rollade_hoch at *{sunrise(-600)} set Rollade on
(oder was immer du deiner Rollade sagen musst, damit sie hoch geht.)
-600 heisst, das 600 Sekunde (= 10 Minuten) vor Sunrise geschaltet wird.
So, alles schnell aus dem Kopp hingetippert, ungeprüft nur als Ideengeber und Diskussionssgrundlage.
um deine Schichten zu Automatisieren würde eventuell auch eine holiday Datei Funktionieren für ein Jahr ist es halt ein wenig Arbeit :-) aber ist ja nur einmalig und du kannst auch Ferien und Urlaub berücksichtigen...
Gruß Markus