Zeitsteuerung und Feiertage

Mingarer
Beiträge: 41
Registriert: So 23. Okt 2016, 12:07

Mi 28. Dez 2016, 19:12

Servus Marioir,

wollte mich nur noch mal bedanken - mit der Anleitung hat alles funktioniert. Die Syntax bei manchen FHEM Befehlen ist zwar noch etwas ungewohnt, aber das wird noch...

Musste lediglich bei den http Befehlen noch user und pass ergänzen. Dann lief's. Heute wurde gleich mal automatisch der Urlaubsmodus aktiviert :D

Nachdem da so gut geklappt hat, gleich mal Max! Komponenten für die Heizung bestellt. Zum Glück gibt's dazu auch schon ein Tutorial von Dir :lol:
Mal sehen was mich dabei erwartet. Die Meinungen zu Max! gehen ja ziemlich auseinander.

Viele Grüße, der Mingarer
Marioir
Beiträge: 1147
Registriert: Mi 24. Feb 2016, 15:36
Wohnort: Offenbach

Do 29. Dez 2016, 23:50

Nachdem da so gut geklappt hat, gleich mal Max! Komponenten für die Heizung bestellt. Zum Glück gibt's dazu auch schon ein Tutorial von Dir :lol:
Mal sehen was mich dabei erwartet. Die Meinungen zu Max! gehen ja ziemlich auseinander.
Also habe bisher noch nichts Negatives drüber gehört.
Ich habe die schon seit einen Jahr im Einsatz, noch nie Probleme gehabt.
WupperTaler
Beiträge: 17
Registriert: Di 25. Okt 2016, 19:08

Sa 17. Mär 2018, 16:02

So, erstmal feucht durchwischen hier, der Thread ist ja schon ein wenig angestaubt... ;)

Da ich jetzt auch Szenen angelegt habe, die aber eben nur in Abhängigkeit von Feier- und Ferientagen sowie Sommer-/Winterzeit ablaufen sollen, bin ich auf der Suche nach Lösungen hier gelandet.

Zum Einsteigen sehr gut geeignet, aber ich habe die ganze Geschichte dann nach viel lesen noch ein wenig auf meine Bedürfnisse umgebaut.
Dabei ist die ganze Geschichte nicht nur kürzer sondern in meinen Augen auch deutlich übersichtlicher geworden, da notify durch DOIF ersetzt und damit das Anlegen von dummys komplett eingespart wurde.

FHEM-Profis werden alles Folgende in diesem Post wahrscheinlich nur müde als Kinderkram belächeln, aber den FHEM-Dummys wie ich selber einer bin, will ich das Ergebnis natürlich nicht vorenthalten.
Ich bin in solchen Fällen nämlich auch immer heilfroh wenn ich so etwas "vorgekautes" in irgendeinem Forum finde, was ich nur noch an ein paar Stellen an meine persönlichen Gegebenheiten anpassen muss :mrgreen:

Als Erstes muss natürlich die holiday-Datei angelegt werden, bei mir heißt sie HNG.holiday, liegt in /opt/fhem/FHEM und sieht so aus:

Code: Alles auswählen

# Feiertage NRW
# Format: 1 <Monat-Tag> <Text>
# Neujahr
1 01-01 Feiertag
# Tag der Arbeit
1 05-01 Feiertag
# Tag der Deutschen Einheit
1 10-03 Feiertag
# Allerheiligen
1 11-01 Feiertag
# Heiligabend
1 12-24 Feiertag
# 1. Weihnachtstag
1 12-25 Feiertag
# 1. Weihnachtstag
1 12-26 Feiertag
# Silvester
1 12-31 Feiertag
# Osterbezogene Feiertage
# Format: 2 <Anzahl relative Tage von Ostersonntag> <Text>
# Karfreitag
2 -2 Feiertag
# Ostermontag
2 1 Feiertag
# Christi Himmelfahrt
2 39 Feiertag
# Pfingsten
2 50 Feiertag
# Fronleichnam
2 60 Feiertag

# Schulferien NRW 2018
# Format: 4 <Monat-Tag> <Monat-Tag> <Text>
# Weihnachstferien 2017/18 (Januar)
4 01-01 01-06 Schulferien
# Osterferien 2018
4 03-26 04-07 Schulferien
# Pfingstferien 2018
4 05-22 06-01 Schulferien
# Sommerferien 2018
4 07-16 08-28 Schulferien
# Herbstferien 2018
4 10-15 10-27 Schulferien
# Weihnachtsferien 2018/19 (Dezember)
4 12-21 12-31 Schulferien

# Urlaub
# Format: 4 <Monat-Tag> <Monat-Tag> <Text>
# Urlaub Ostern
4 03-26 03-29 Urlaub

# Sommerzeit
# Format: 3 <X> <Wochentag> <Monat> <Text>
# letzter Sonntag im März
3 -1 Sun 03 Beginn Sommerzeit
# letzter Sonntag im Oktober
3 -1 Sun 10 Ende Sommerzeit
Wie so eine holiday-Datei aufgebaut ist, ist in der Commandref von FHEM sehr gut beschrieben.

Als Nächstes dann der Teil, der in die fhem.cfg gehört.
Ich habe mir alles in einem Texteditor vorgeschrieben und dann in die fhem.cfg reinkopiert.
Ich weiß inzwischen, dass von den Profis eine direkte Bearbeitung der fhem.cfg ausdrücklich nicht empfohlen wird, aber für mich war es so einfacher und es funktioniert einwandfrei. :roll:

Code: Alles auswählen

# Markersteuerung für LM-Air mittels holiday-Datei
# DOIF überwacht die holiday-Datei und schaltet im LM-Air die Marker ein/aus
# holiday-Datei
define HNG holiday
attr HNG room LMAir
# DOIF Feiertag
define Marker_Feiertag_ein_aus DOIF ([HNG] =~ "Feiertag") ({GetHttpFile("192.168.xxx.xx", "/control?key=212&user=x&pass=x")}) DOELSE ({GetHttpFile("192.168.xxx.xx", "/control?key=213&user=x&pass=x")})
attr Marker_Feiertag_ein_aus room LMAir
attr Marker_Feiertag_ein_aus devStateIcon cmd_1:ios-on-green:cmd_2 cmd_2:ios-off:cmd_1
# DOIF Schulferien
define Marker_Schulferien_ein_aus DOIF ([HNG] =~ "Schulferien") ({GetHttpFile("192.168.xxx.xx", "/control?key=214&user=x&pass=x")}) DOELSE ({GetHttpFile("192.168.xxx.xx", "/control?key=215&user=x&pass=x")})
attr Marker_Schulferien_ein_aus room LMAir
attr Marker_Schulferien_ein_aus devStateIcon cmd_1:ios-on-green:cmd_2 cmd_2:ios-off:cmd_1
# DOIF Urlaub
define Marker_Urlaub_ein_aus DOIF ([HNG] =~ "Urlaub") ({GetHttpFile("192.168.xxx.xx", "/control?key=216&user=x&pass=x")}) DOELSE ({GetHttpFile("192.168.xxx.xx", "/control?key=217&user=x&pass=x")})
attr Marker_Urlaub_ein_aus room LMAir
attr Marker_Urlaub_ein_aus devStateIcon cmd_1:ios-on-green:cmd_2 cmd_2:ios-off:cmd_1
# DOIF Sommerzeit ein
define Marker_Sommerzeit_ein DOIF ([HNG] =~ "Beginn Sommerzeit") ({GetHttpFile("192.168.xxx.xx", "/control?key=210&user=x&pass=x")})
attr Marker_Sommerzeit_ein room LMAir
attr Marker_Sommerzeit_ein devStateIcon cmd_1:ios-on-green:cmd_2 cmd_2:ios-off:cmd_1
# DOIF Sommerzeit aus
define Marker_Sommerzeit_aus DOIF ([HNG] =~ "Ende Sommerzeit") ({GetHttpFile("192.168.xxx.xx", "/control?key=211&user=x&pass=x")})
attr Marker_Sommerzeit_aus room LMAir
attr Marker_Sommerzeit_aus devStateIcon cmd_1:ios-on-green:cmd_2 cmd_2:ios-off:cmd_1
Für FHEM-Dummys wie mich erkläre ich den Aufbau mal:
Zuerst bringt man FHEM die angelegte holiday-Datei bei, bei mir also HNG (es geht natürlich auch ein anderer Name).
Damit das Ganze in FHEM übersichtlich bleibt, wird die Datei wie später auch die DOIFs in einem "Raum" zusammengefasst (hier LMAir, kann aber ebenfalls beliebig benannt werden).

Dann kommt auch schon die Auswertung der holiday-Datei und die Markersteuerung mittels DOIF ohne den Umweg über notify und dummys.
Als Beispiel nehme ich jetzt das Feiertags-DOIF:
Die Bezeichnung des DOIF (in diesem Beispiel also Marker_Feiertag_ein_aus) kann auch wieder beliebig gewählt werden.

Als nächstes wird geprüft, ob im aktuellen Status des "Gerätes" HNG das Wort "Feiertag" vorkommt.
Wenn ja, wird der Teil hinter DOIF ausgeführt und das DOIF nimmt den Zustand cmd_1 an.
Wenn nicht, wird der Teil hinter DOELSE ausgeführt und das DOIF nimmt den Zustand cmd_2 an.

Die IP bei GetHttpFile muss natürlich der IP des zu steuernden LM-Air entsprechen, die key-Nr. entspricht der Szene im LM-Air, mit welcher der entsprechende Marker in den gewünschten Zustand geschaltet wird.
&user= und &pass= sind natürlich nur notwendig, wenn für das WebIF des LM-Air Nutzer und Passwort vergeben wurden.

Der Übersichtlichkeit wegen wird, wie schon erwähnt, auch das DOIF in den "Raum" LMAir geschoben.

Das Attribut devStateIcon ist nicht unbedingt notwenig, aber hilfreich.
Zum einen kann man direkt sehen ob die holiday-Datei richtig ausgewertet wurde, zum anderen kann man den Zustand des DOIF schnell durch einen Klick auf das Icon toggeln, um die GetHttpFile-Befehle auf richtige Funktion zu überprüfen.

Und da Bilder manchmal mehr sagen als tausend Worte...
Screenshot-2018-3-17 Home, Sweet Home.png
Screenshot-2018-3-17 Home, Sweet Home.png (47.75 KiB) 7484 mal betrachtet
Feiertag und Beginn Sommerzeit sind natürlich nur zu Demozwecken gesetzt !

Man muss übrigens nicht immer bis Mitternacht warten, um eine Änderung an der holiday-Datei und somit ein Triggern der DOIFs auf Erfolg zu testen.
Folgendes in der FHEM-Befehlszeile lädt die HNG.holiday sofort neu ;)

Code: Alles auswählen

modify HNG
So wie jetzt hier in meinem Post beschrieben müssen in der holiday-Datei natürlich die Termine für Schulferien und Urlaub jedes Jahr händisch angepasst werden.
Das i-Tüpfelchen wäre natürlich das Auslesen eines Kalenders in dem diese Termine eingetragen werden, z.B. auf dem Smartphone.
Soweit bin ich aber noch nicht. :oops:

Als kleiner Tipp noch, weil ich selber fast graue Haare dabei bekommen habe... unbedingt auf das richtige Setzen der runden, eckigen und geschweiften Klammern achten, das ist manchmal recht unübersichtlich.
Aber eine falsche, vergessene oder zuviel gesetzte Klammer und nix funktioniert so wie es soll... ich weiß, wovon ich rede ! :evil:

Ich hoffe, der Ein oder Andere kann mit meinen Ausführungen hier etwas Nützliches anfangen :D
Antworten