Autor Thema: [gelöst] (kein) Bedarf für 57_Calendar2holiday.pm  (Gelesen 604 mal)

Online Beta-User

  • Hero Member
  • *****
  • Beiträge: 4327
[gelöst] (kein) Bedarf für 57_Calendar2holiday.pm
« am: 15 März 2018, 10:48:23 »
Hallo zusammen,

beim Review meiner alten Codes und Geräte aus der ersten Zeit ist mir eine Sache aufgefallen, von der ich noch nicht so richtig weiß, wie ich damit umgehen soll. Ich vereinfache daher mal etwas:

Es soll jeder Ferientag wie ein Tag am Wochenende behandelt werden. Dafür bestehen (mindestens) folgende Möglichkeiten:

- Abfrage bei jedem Befehl, ob (neben $we auch) die Variable "Ferientag" (gesetzt über ein Calendar-notify, z.B. in einem Dummy) wahr ist
- Erstellen einer entsprechenden "holiday"-Datei ("ferien.holiday") und Einbinden über eine 2. holiday2we-Angabe ("attr global holiday2we bw,ferien")
- Ersetzen der $we-Abfrage durch eine eigene Variable/perl-Funktion, wie z.B. hier beschrieben (habe noch nicht getestet, ob z.B. ein WeekdayTimer das einfach so akzeptieren würde).
- Einsatz von HOMEMODE&Co - das ist mir aber eigentlich zu viel drumrum für den eigentlich simplen task

Bislang besteht zwischen den Lösungen Calendar und holiday jedenfalls nur sowas wie eine Art friedlicher Koexistenz, den ziemlich letzten Stand der Dinge sehe ich hier gut zusammengefasst, auch im Wiki oder hier steht nichts, was auf anderes hinweist.

Die Idee: Ein Modul, das ähnlich wie CALVIEW und MÜLL aus einem (oder mehreren) Calendardevices die erforderlichen Daten entnimmt und so in eine holiday-Datei schreibt, dass holiday2we was damit anfangen kann. Im Prinzip würde ja immer heute und (sicherheitshalber) morgen ausreichen (analyzePerlCommand() in fhem.pl scheint das ja immer bei einem entsprechenden Aufruf zu prüfen, es reicht insoweit eigentlich, wenn der aktuelle Tag paßt). Aber man könnte genauso gut natürlich immer bis zum YE nehmen, mind. aber die nächsten 30 Tage usw..
Über die Definition bzw. entsprechende Attribute wäre zu steuern, welche Schlüsselwörter wo enthalten sein müssen ("Urlaub", aber das z.B. nur, wenn im Ort auch "zuhause" steht usw.).

Fragen dazu:
- Fehlt da was und die Aufgabe ist viel einfacher zu lösen?
- Gibt es evtl. jemanden, der mich beim Entwickeln eines solchen Moduls coachen wollte (oder das als so einfach empfindet, dass der Aufwand geringer wäre, das selbst direkt zu erledigen ::) )?

Gruß, Beta-User
« Letzte Änderung: 16 September 2018, 08:54:07 von Beta-User »
Server: HP-T5740 mit Debian stretch (i386) + aktuellem FHEM | ConfigDB | VCCU mit einiger HM-Hardware | MySensors seriell (2.3.1-beta@RS485, div. konkrete Hardware, u.a. einige DS18B20) | Milight@ESP-GW@MQTT2 | zigbee2mqtt@MQTT2 | SIGNALduino | MapleCUN

Online Beta-User

  • Hero Member
  • *****
  • Beiträge: 4327
Antw:Bedarf für 57_Calendar2holiday.pm?
« Antwort #1 am: 16 September 2018, 08:53:26 »
Hallo zusammen,

habe das "Problem" zwischenzeitlich mit einem "at" gelöst.

Das liest jeden Freitag einen Kalender ein, in dem u.A. die Ferientermine drin sind.

defmod a_make_holiday at *23:30 {return undef unless($wday == 5);;\
my @holidaysraw = split(/\n/,(fhem 'get Familienkalender events format:custom="4 $T1 $T2 $S" timeFormat:"%m-%d" limit:count=10 filter:field(summary)=~".*[fF]erien.*"'));;\
my @holidays;;\
foreach (@holidaysraw) {\
    unless ($_ =~ /[Ww]eihnacht/) {\
        push (@holidays, $_);; \
    } else { my @tokens = split (" ",$_);;\
        my $lines = "4 $tokens[1] 12-31 $tokens[3]";;\
        push (@holidays,$lines);;\
        $lines = "4 01-01 $tokens[2] $tokens[3]";;\
        unshift (@holidays,$lines);;\
    }\
} \
my $today = strftime "%d.%m.%y, %H:%M", localtime(time);;\
my $idstring = "# Created by at a_make_holiday on $today";;\
unshift (@holidays, $idstring);; \
my $filename ="./FHEM/ferien.holiday";;\
FileDelete($filename);;\
FileWrite($filename,@holidays);;\
}
Die Datenlimits am Calendar-Device sollten natürlich sinnvoll (< 1 Jahr gesamt) gesetzt sein. Die so erzeugte holiday-Datei muss holiday-Device definiert und in global mit holiday2we zusätzlich eingebunden werden, Beispiel:

defmod ferien holiday
attr global holiday2we bw,ferien

Wie immer: Nutzung des Codes auf eigene Gefaht, Verbesserungsvorschläge sind willkommen.

Viel Spaß damit!

Beta-User
Server: HP-T5740 mit Debian stretch (i386) + aktuellem FHEM | ConfigDB | VCCU mit einiger HM-Hardware | MySensors seriell (2.3.1-beta@RS485, div. konkrete Hardware, u.a. einige DS18B20) | Milight@ESP-GW@MQTT2 | zigbee2mqtt@MQTT2 | SIGNALduino | MapleCUN