Calendar, Schulferien und Feiertage

Begonnen von bgewehr, 19 Februar 2013, 21:38:58

Vorheriges Thema - Nächstes Thema

bgewehr

Hallo,

ich brauche mal wieder Hilfe:

Ich möchte per Web-Calendar die Schulferien und die Feiertage abfragen. Dazu nutze ich

define Schulferien Calendar ical url http://www.schulferien.org/iCal/Ferien/icals/Ferien_Nordrhein_Westfalen_2013.ics
und
define Feiertage Calendar ical url http://www.schulferien.org/iCal/Feiertage/icals/Feiertage_Nordrhein_Westfalen_2013.ics

nun möchte ich zwei dummies haben, die anzeigen, ob heute ein Feiertag oder ein Ferientag ist (-> dann schlafen wir nämlich länger!)


define Feiertag dummy
attr Feiertag setList true false

define Ferientag dummy
attr Ferientag setList true false


Damit die dummies informiert werden, brauch ich afaik notifies


define Check_Feiertag notify Feiertage.modestarted.* set Feiertag true
attr Check_Feiertag icon icoMail
attr Check_Feiertag room Z_Notify


Und da verließen Sie mich...

Wie muss ich die notifies formulieren, damit die dummies immer korrekt true oder false sind?
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

bgewehr

Ich hab's weiter versucht. Könnte das hier klappen?


define Check_Feiertag_Start notify Feiertage.modestart.* set Feiertag true
attr Check_Feiertag_Start icon icoMail
attr Check_Feiertag_Start room Z_Notify

define Check_Feiertag_End notify Feiertage.modeended.* set Feiertag false
attr Check_Feiertag_End icon icoMail
attr Check_Feiertag_End room Z_Notify


define Check_Ferientag_Start notify Schulferien.modestart.* Set Ferientag true
attr Check_Ferientag_Start icon icoMail
attr Check_Ferientag_Start room Z_Notify

define Check_Ferientag_End notify Schulferien.modeended.* Set Ferientag false
attr Check_Ferientag_End icon icoMail
attr Check_Ferientag_End room Z_Notify
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

kossmann

Hallo bgewehr,

hast du meinen Artikel im FHEMwiki gesehen?

Die Schulferien funktionieren damit. Ich habe mir den Feiertagskalender nicht angesehen, aber diese wäre wahrscheinlich für mich auch unbrauchbar - ich benötige auch Heiligabend, Silvester und den Rosenmontag. Somit halte ich es für sinnvoller, die Feiertage in einer holiday-Datei zu definieren, welche dann konstant bleiben/sind:

FHEM/NRW_Feiertag.holiday
# festes Datum
1 01-01 Neujahr
1 05-01 Tag der Arbeit
1 10-03 Tag der Deutschen Einheit
1 11-01 Allerheiligen
1 12-24 Heiligabend
1 12-25 1. Weihnachtstag
1 12-26 2. Weihnachtstag
1 12-31 Silvester

# abhängig von Ostersonntag
2 -48 Rosenmontag
2 -2 Karfreitag
2  1 Ostermontag
2 39 Christi Himmelfahrt
2 50 Pfingstmontag
2 60 Fronleichnam

fhem.cfg
# freie Tage

attr global holiday2we NRW_Feiertag

define NRW_Feiertag holiday

# Schulferien NRW

define NRW_Ferientag dummy

define NRW_Ferien Calendar ical url http://www.schulferien.org/iCal/Ferien/icals/Ferien_Nordrhein_Westfalen_2013.ics 86400

define Job_NRW_Ferien_Check notify NRW_Ferien { \
  fhem "set NRW_Ferientag " . (ReadingsVal("NRW_Ferien", "modeStart", "") =~ "schulferien" ? 1: 0) }

# Beispiel-Job mit $we und NRW_Ferientag

define Job_Kinderzimmer_Rollo_hoch at *06:45 { if ( !($we) && !(Value("NRW_Ferientag")) ) { fhem("set Kinderzimmer_Rollo oben");; } }
  attr Job_Kinderzimmer_Rollo_hoch room Kinderzimmer

bgewehr

Mensch, super, das löst mein Problem, vielen Dank!
FritzBox 7590, Synology DS216+II mit Docker
Docker: FHEM mit hmlan, Homebridge, node-red, mosquitto, ems-collector für Buderus EMS mit AVR Net-IO
Gartenwasser über MQTT auf R/Pi A+
Volkszaehler.org auf R/Pi 2B mit Pi_Erweiterung
Raspberrymatic auf R/Pi 4B mit RPI-RF-MOD u. CUL868

Joana F.

Hallo kossman,

gehe ich recht in der Annahme, dass der Job_NRW_Ferien_Check notify NRW_Ferien-Aufruf in Verbindung mit dem Abruf der *.ics Dateien bei schulferien.org "nur" funktioniert, weil die Ersteller dieser iCAL-Dateien das Wort 'schulferien' in die UID "exportiert" haben ?

Hintergrund ist:
Ich möchte meine eigene iCal-Datei mit Thunderbird+Lightning per eigenem Hosting anlegen.

Soweit ich dies überblicken kann, habe ich jedoch - komfortabel (= unter ausschliesslicher Nutzung des Lightning-Kalenders) - keine Einflussmöglichkeit die in Lightning erzeugte UID beispielsweise zusätzlich mit dem Summary-, Category- oder Description-Wert zu versehen, so wie es bei den schulferien.org iCAL-Dateien der Fall ist.

Möglicherweise sollte ich hierfür die im Wiki beschriebene Google-Variante zur Steuerung von Dummies in Erwägung ziehen ?

Ich kann es mir im Moment nur leider nicht anschauen, da die Wiki-Seite down ist.

Dank im voraus für entsprechende Denkanstösse.

kossmann

Hallo Joana,

ich bin z.Zt. einen Kontinent südlicher (Afrika) und kann nur bedingt antworten ;-) Du hast aber (glaube ich) bedingt Recht - "schulferien" taucht in der ICS-Datei auf, ich meine mich aber zu erinnern, da der Betreff der einzelnen "Termine" auch "schulferien" enthält. Mit "exportieren" hat dies demnach nichts zu tun, sondern wäre eine logische Schlussfolgerung.

Das müsste man sich noch mal angucken, was ich gerne in 2 Wochen machen kann.

Joana F.

Hello Mr. or Mrs. kossman ;-),

zunächst Grüsse nach Afrika und Dank für die Rückmeldung selbst aus der Ferne.

Für meinen Anwendungsfall (= Eintragen von Urlaub@home, Urlaub@reise, "Frei"-tag, etc) musste ich zur Google-Kalender Wiki-Lösung greifen und etwas modifizieren.

Ich füge daher mal zu meiner Frage die inzwischen gewonnene Erkenntnis kurz an:

Die iCAL-Dateien von schulferien.org haben (mit Status Zeitpunkt der Verfassung) folgenden Aufbau:

BEGIN:VEVENT
CREATED:20130104T150429Z
LAST-MODIFIED:20130104T150429Z
DTSTAMP:20130104T150429Z
SUMMARY:Winterferien Bayern
DTSTART;VALUE=DATE:20130211
DTEND;VALUE=DATE:20130216
URL:http://www.schulferien.org
DESCRIPTION:Alle Termine auf www.schulferien.org
TRANSP:TRANSPARENT
UID:Winterferien-Bayern-201302161327888568@schulferien.org
END:VEVENT
[/color]

Von der 57_Calender.pm werden die 'UID' + zugehörige Werte 'DTSTART', 'DTEND', 'LAST-MODIFIED', 'SUMMARY' und (wenn vorhanden) 'LOCATION' ausgelesen.

Bei Selbsterstellung der iCAL-Datei kann ich per GUI alle Felder - bis auf die 'UID' - eigens mit Werten versehen.

Daraus folgt, folgendes zu bedenken ;-) :
Sollte schulferien.org einmal auf die Idee kommen, ihr Kürzel "schulferien" aus ihrer selbst generierten 'UID' (-> Winterferien-Bayern-201302161327888568(at)schulferien.org zu entfernen, wird der 'Event' zumindest kalenderabfrage-technisch ;-) leider ins Leere laufen.

Nicht, dass dann nachher die Heizung runterfährt und die Lichter zum falschen Zeitpunkt aktiviert oder deaktiviert werden.

Vielleicht könnte man ja einmal die 57_Calender.pm um den abzufragenden value 'DESCRIPTION' erweitern, ...in Anlehnung an folgende iCAL *.ics-Variante:


*
SUMMARY:Winterferien Bayern
DESCRIPTION:Alle Termine auf www.schulferien.org
UID:Winterferien-Bayern-201302161327888568@schulferien.org
*
[/color]

...oder bei Selbsterstellung der iCAL (...denn ich hege da so meine Zweifel, ob es coding-konform Sinn macht, einen Unique Identifier mit Textpassagen anzureichern):


*
SUMMARY:Winterferien Bayern
DESCRIPTION:Schulferien
UID:995955541528568089210891218122
*
[/color]

Steffen

Hallo!

Versuche aus meinem in Fhem angelegte Kalender ein Notify zu Basteln der Papier,Müll usw. aus GoogleCalendar auswertet, hier mein versuch:

define Müll notify Kalender_Lindenhof { \
  my $Z = ReadingsVal("Kalender_Lindenhof","modeStart","" =~ "Papier" ? 1: 0);;\
  if(($Z) eq "Papier"){\
    fhem("set notify_test on");;\
  }\
}

aber es klappt nicht...
Wie könnte man das am besten umsetzten??ß?

Mfg Steffen

Steffen

Zitat von: Steffen schrieb am So, 19 Mai 2013 12:20Hallo!

Versuche aus meinem in Fhem angelegte Kalender ein Notify zu Basteln der Papier,Müll usw. aus GoogleCalendar auswertet, hier mein versuch:

define Müll notify Kalender_Lindenhof { \
  my $Z = ReadingsVal("Kalender_Lindenhof","modeStart","" =~ "Papier" ? 1: 0);;\
  if(($Z) eq "Papier"){\
    fhem("set notify_test on");;\
  }\
}

aber es klappt nicht...
Wie könnte man das am besten umsetzten??ß?

Mfg Steffen


Kann man überhaupt einen text in modul Calender über Readings auslesen???

Mfg Steffem



Wolle02

Ich habe das bei mir auch zuerst wie im Wiki-Artikel von Kossmann beschrieben versucht und es hat bei mir ebenfalls nicht funktioniert. Mit ReadingsVal kann ich den Klartext des Kalendereintrages bei mir nicht auslesen. Deshalb habe ich das jetzt wie folgt gelöst:

define Urlaubskalender_n notify Urlaubskalender {my $termin=fhem("get Urlaubskalender summary modeStart");;if(($termin) eq "Urlaub") {fhem("set Urlaubstag 1")} else {fhem("set Urlaubstag 0")}}

So kann ich den Klartext des Kalendereintrages auslesen, der aktuell begonnen hat und prüfe ihn auf das Wort "Urlaub". Abhängig davon wird mein Dummy geschaltet.

Gruß
Wolle

Steffen

Zitat von: Wolle02 schrieb am So, 19 Mai 2013 23:18Ich habe das bei mir auch zuerst wie im Wiki-Artikel von Kossmann beschrieben versucht und es hat bei mir ebenfalls nicht funktioniert. Mit ReadingsVal kann ich den Klartext des Kalendereintrages bei mir nicht auslesen. Deshalb habe ich das jetzt wie folgt gelöst:

define Urlaubskalender_n notify Urlaubskalender {my $termin=fhem("get Urlaubskalender summary modeStart");;if(($termin) eq "Urlaub") {fhem("set Urlaubstag 1")} else {fhem("set Urlaubstag 0")}}

So kann ich den Klartext des Kalendereintrages auslesen, der aktuell begonnen hat und prüfe ihn auf das Wort "Urlaub". Abhängig davon wird mein Dummy geschaltet.

Gruß
Wolle

Super danke, so klappt es bei mir auch.

Nur eine frage hätte ich da noch, sind die vielen log Einträge normal:
2013.05.20 08:43:29 3: get Kalender_Lindenhof summary modeStart : Papier
2013.05.20 08:43:29 3: get Kalender_Lindenhof summary modeStart : Papier
2013.05.20 08:43:29 3: get Kalender_Lindenhof summary modeStart : Papier
2013.05.20 08:43:29 3: get Kalender_Lindenhof summary modeStart : Papier
2013.05.20 08:43:29 3: get Kalender_Lindenhof summary modeStart : Papier
2013.05.20 08:43:29 3: get Kalender_Lindenhof summary modeStart : Papier
2013.05.20 08:43:29 3: get Kalender_Lindenhof summary modeStart : Papier
2013.05.20 08:43:29 3: get Kalender_Lindenhof summary modeStart : Papier
2013.05.20 08:43:29 3: get Kalender_Lindenhof summary modeStart : Papier
2013.05.20 08:43:29 3: get Kalender_Lindenhof summary modeStart : Papier
2013.05.20 08:43:29 3: get Kalender_Lindenhof summary modeStart : Papier
2013.05.20 08:45:00 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:00 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:00 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:00 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:00 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:00 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:00 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:00 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:00 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:00 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:00 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:45:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:47:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll
2013.05.20 08:49:29 3: get Kalender_Lindenhof summary modeStart : Papier
Müll


das Müllt ja ordentlich den Log voll ;-)???


cornelius fillmore

Zitat von: kossmann schrieb am Mi, 20 Februar 2013 10:27Hallo bgewehr,

hast du meinen Artikel im FHEMwiki gesehen?

Die Schulferien funktionieren damit. Ich habe mir den Feiertagskalender nicht angesehen, aber diese wäre wahrscheinlich für mich auch unbrauchbar - ich benötige auch Heiligabend, Silvester und den Rosenmontag. Somit halte ich es für sinnvoller, die Feiertage in einer holiday-Datei zu definieren, welche dann konstant bleiben/sind:

FHEM/NRW_Feiertag.holiday
# festes Datum
1 01-01 Neujahr
1 05-01 Tag der Arbeit
1 10-03 Tag der Deutschen Einheit
1 11-01 Allerheiligen
1 12-24 Heiligabend
1 12-25 1. Weihnachtstag
1 12-26 2. Weihnachtstag
1 12-31 Silvester

# abhängig von Ostersonntag
2 -48 Rosenmontag
2 -2 Karfreitag
2  1 Ostermontag
2 39 Christi Himmelfahrt
2 50 Pfingstmontag
2 60 Fronleichnam

fhem.cfg
# freie Tage

attr global holiday2we NRW_Feiertag

define NRW_Feiertag holiday

# Schulferien NRW

define NRW_Ferientag dummy

define NRW_Ferien Calendar ical url http://www.schulferien.org/iCal/Ferien/icals/Ferien_Nordrhein_Westfalen_2013.ics 86400

define Job_NRW_Ferien_Check notify NRW_Ferien { \
  fhem "set NRW_Ferientag " . (ReadingsVal("NRW_Ferien", "modeStart", "") =~ "schulferien" ? 1: 0) }

# Beispiel-Job mit $we und NRW_Ferientag

define Job_Kinderzimmer_Rollo_hoch at *06:45 { if ( !($we) && !(Value("NRW_Ferientag")) ) { fhem("set Kinderzimmer_Rollo oben");; } }
  attr Job_Kinderzimmer_Rollo_hoch room Kinderzimmer

Hallo Kossmann,

ich greife deinen post noch mal auf.

Dazu folgende Frage: wie greift dem Fhem auf die FHEM/NRW_Feiertag.holiday - Datei zu.
Ich sehe da keine Abfrage oder Bezug?

Kann du mich aufklären
3 x Fhem 5.9 mit RPI

kossmann

Durch

define NRW_Feiertag holiday
wird FHEM angewiesen, die Datei einzulesen, siehe dazu auch hier in der Command Reference.

cornelius fillmore

Zitat von: kossmann schrieb am Mi, 20 Februar 2013 10:27# Beispiel-Job mit $we und NRW_Ferientag

define Job_Kinderzimmer_Rollo_hoch at *06:45 { if ( !($we) && !(Value("NRW_Ferientag")) ) { fhem("set Kinderzimmer_Rollo oben");; } }
  attr Job_Kinderzimmer_Rollo_hoch room Kinderzimmer[/code]

Hallo Kossmann,

ich hab trotzdem noch ein Verständnis (Funktions) Problem.

Wenn ich den {}-Klammerausdruck richtig deute, schaltet diese Funktion doch nur wenn beide Abfragen 1 bzw. true sind oder?

Bei mir funktioniert es jedenfalls einzeln aber nicht mit dem &&
3 x Fhem 5.9 mit RPI

det.

hallo,

die Lösung kennt wie so oft Tante Google: http://de.selfhtml.org/perl/sprache/operatoren.htm#logisch

versuch mal anstatt && - ||
LG
det.