[gelöst] (kein) Bedarf für 57_Calendar2holiday.pm

Begonnen von Beta-User, 15 März 2018, 10:48:23

Vorheriges Thema - Nächstes Thema

Beta-User

Hmm, da Ferien hier meistens an Freitagen enden, ist mir das noch gar nicht aufgefallen. Aber klar, der Einwand ist berechtigt...

Werde mir das nochmal ansehen, vermutlich wäre es sinnvoll, einfach auch die Uhrzeiten mit anzufordern und dann damit eine insgesamt etwas andere Auswertung zu machen. Sollte nicht zu schwierig sein; evtl. hat ja auch jemand (anderes) Lust?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

So, hab's etwas umgestellt. Jetzt wird einfach die Endezeit in Sekunden angefordert, davon eine Sekunde abgezogen und dann erst nachformatiert.

Erste Tests sehen gut aus, bin mal gespannt, wer den nächsten bug findet ::) :

sub myCalendar2Holiday {
  my $calname    = shift // return;
  my $regexp     = shift // return;
  my $targetname = shift // $calname;
  my $field      = shift // "summary";
  my $limit      = shift // 10;
  my $yearEndRe  = shift;
 
  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) =  localtime(gettimeofday());
  my $getstring = $calname . ' events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%m-%d" limit:count=' . $limit." filter:field($field)=~\"$regexp\"";
  my @holidaysraw = split( /\n/, CommandGet( undef, "$getstring" ));
 
  my @holidays;
  my @singledays;

  for my $holiday (@holidaysraw) {
    my @tokens = split (" ",$holiday);

    my $endsecond = $tokens[2]-1;
    my @end_arr = localtime($endsecond);
   
    my $overYE = $end_arr[5] > $year || $yearEndRe && $tokens[3] =~ m/$yearEndRe/ ? 1 : 0;
   
    $tokens[2] = strftime "%m-%d", localtime($endsecond);

    my $severalDays = $tokens[2] eq $tokens[1] ? 0 : 1;
    $holiday = join(' ', @tokens);
    if (!$severalDays) {
      $tokens[0] = 1;
      splice @tokens, 2, 1;
      $holiday = join(' ', @tokens);
      push (@singledays, $holiday);
    } elsif ( !$overYE ) {
      push (@holidays, $holiday);
    } else {
      $holiday = "4 $tokens[1] 12-31 $tokens[3] $tokens[4] (part 1)";
      push (@holidays,$holiday) if $month > 9;
      $holiday = "4 01-01 $tokens[2] $tokens[3] $tokens[4] (part 2)";
      unshift (@holidays,$holiday);
    }
  }
  push @holidays, @singledays;
  unshift (@holidays, "# get $getstring");
  my $today = strftime "%d.%m.%y, %H:%M", localtime(time);;\
  unshift (@holidays, "# Created by myCalendar2Holiday on $today");
  FileWrite("./FHEM/${targetname}.holiday",@holidays);
}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

dancatt

Zitat von: Beta-User am 26 Januar 2021, 16:17:17
So, hab's etwas umgestellt. Jetzt wird einfach die Endezeit in Sekunden angefordert, davon eine Sekunde abgezogen und dann erst nachformatiert.

Hi,
habe das hier gefunden und konnte damit einiges umstellen. Vielen Dank für das Codeschnipsel.

Hab nun aber mal eine Verständnisfrage:
Ich rufe folgendes auf myCalendar2Holiday('calendar_Familienkalender','.*(Homeoffice Daniel)','holiday_Homeoffice_Daniel','summary',4,'')
In die holiday-Datei wird dann folgender Eintrag geschrieben:

# Created by myCalendar2Holiday on 25.07.21, 23:30
# get calendar_Familienkalender events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%m-%d" limit:count=4 filter:field(summary)=~".*(Homeoffice Daniel)"
1 06-15 Homeoffice Daniel (24h)
1 06-16 Homeoffice Daniel (24h)
1 06-17 Homeoffice Daniel (24h)
1 06-18 Homeoffice Daniel (24h)

In Google handelt es sich um einen ganztägigen Termin (Wöchentlich an Werktagen, bis 30. Sept. 2021).

Warum startet das am 15.06.?

Vielen Dank.

Gruß Daniel
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

Beta-User

#18
Ist von hier aus schwierig zu beantworten ohne die Rückgabe aus dem "calendar-get" im Detail zu kennen bzw. rausfinden zu können, wie die Einstellungen am Calendar sind.

Meine Vermutung wäre, dass die Daten-Limits am Calendar-Device so gesetzt sind, dass auch (zu viele) alte Termine mitkommen
Zitat von: Beta-User am 11 Januar 2019, 21:29:27
Dessen Attribute "hideOlderThan" und "hideLaterThan" sind großzügig gesetzt (010d/0100d).

Wenn du das Beispiel mit den 10 Tagen "rückwärts" übernimmst, wäre hier aber auch der limit-Parameter noch zu kurz gegriffen, denn die ersten 4 Tage liegen bei der Vorgabe "alle Werktage" (Mo-Sa?) immer in der Vergangenheit (8-9 Werktage/10 Kalendertage). Würde da also eher 30 statt 4 als "limit" festlegen und dann mal schauen, ob das paßt.

PS: Danke für die nette Rückmeldung!
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

dancatt

Zitat von: Beta-User am 26 Juli 2021, 10:29:53
Ist von hier aus schwierig zu beantworten ohne die Rückgabe aus dem "calendar-get" im Detail zu kennen bzw. rausfinden zu können, wie die Einstellungen am Calendar sind.

Meine Vermutung wäre, dass die Daten-Limits am Calendar-Device so gesetzt sind, dass auch (zu viele) alte Termine mitkommen
Wenn du das Beispiel mit den 10 Tagen "rückwärts" übernimmst, wäre hier aber auch der limit-Parameter noch zu kurz gegriffen, denn die ersten 4 Tage liegen bei der Vorgabe "alle Werktage" (Mo-Sa?) immer in der Vergangenheit (8-9 Werktage/10 Kalendertage). Würde da also eher 30 statt 4 als "limit" festlegen und dann mal schauen, ob das paßt.

PS: Danke für die nette Rückmeldung!

Hi, ja klar. Lag an "hideOlderThan". Hätte ich selbst drauf kommen können.
Viele  Dank.
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

dancatt

Eine Sache habe ich nun doch noch. Im Falle von Ferien bin ich noch nicht so glücklich.

Folgende Abfrage:
myCalendar2Holiday('calendar_Familienkalender','.*[fF]erie.*','holiday_Ferien','summary',5,'[Ww]eihnacht');

Folgendes wird generiert:

# Created by myCalendar2Holiday on 26.07.21, 11:49
# get calendar_Familienkalender events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%m-%d" limit:count=5 filter:field(summary)=~".*erie.*"
4 01-01 04-22 Osterferien (10d) (part 2)
4 01-01 02-25 Winterferien (5d) (part 2)
4 01-01 12-31 Weihnachtsferien (9d) (part 2)
4 07-19 08-27 Sommerferien (40d)
4 10-11 10-22 Herbstferien (12d)


Das hat nun zur Folge dass im Holiday Device im Reading state "Weihnachtsferien (9d) (part 2), Sommerferien (40d)" drin steht.
Wenn nun die Sommerferien vorbei sind bleiben da leider noch die Weihnachtsferien drin stehen, obwohl ja eigentlich garkeine sind.
Wenn ich '[Ww]eihnacht' als Parameter weglasse werden die Weihnachtsferien  korrekt generiert. Aber dann funktioniert das vermutlich nicht mit dem Jahreswechsel wenn mal sein sollte. Die Weihnachtsferien gehen dieses Jahr nicht über das Jahr hinaus.
Ich könnte Limit auch heruntersetzen um nicht zuviele Einträge zu generieren oder oder...

Was wäre hier die vernünftigste Lösung? Mich stört so ein bisschen das "01-01". Das Anfgangsdatum ist ja eigentlich bekannt.

Erneut vielen Dank.
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

Beta-User

Wie sind denn jetzt die Grenzen gesetzt?

Was das mit der YE-Regex angeht, meine ich mich zu erinnern, dass das eigentlich zwischenzeitlich obsolet geworden ist, weil der Code erkennen müßte, dass das Endedatum vor dem Anfangsdatum (bzw. uU. auch vor heute) liegt. Wir sowas erkannt, passiert genau das, was hier zu beobachten ist: da der (vermeintlich) in diesem Jahr liegende Teil bereits "um" ist, wird nur das angezeigt, was scheinbar im neuen Jahr ist (Teil 2). (War mir aber neu, dass das die ganze Logik auch für andere Termine über den Haufen wirft

Du kannst auch sehen, was jeweils abgerufen wird, der get-Befehl wird ja mit in der .holiday hinterlegt (wenn man es geringfügig ändert, bekommt man auch die Jahresangabe).

Habe mal in die Doku zu Calendar gesehen. Da gibt es die Option, nicht nur "count" zu limitieren, sondern auch die Zeitgrenzen nach vorne und hinten. Evtl. wäre es hilfreich(er), diese Parameter noch mit angeben zu können bzw. sinnvoll (10d/100d sind m.E. ganz ok) vorzubelegen?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

dancatt

Ok. Im Calendar habe ich keine Grenzen mehr drin.
Hab den Code nun mal etwas angepasst.


sub myCalendar2Holiday {
  my $calname    = shift // return;
  my $regexp     = shift // return;
  my $targetname = shift // $calname;
  my $field      = shift // "summary";
  my $limit      = shift // 10;
  my $from      = shift // "-10d";
  my $to      = shift // "+100d";
 
  Log 3, "myCalendar2Holiday calname: '".$calname."' regexp: '".$regexp."' targetname: '".$targetname."' field: '".$field."' limit: '".$limit."' from: '".$from."' to: '".$to."'";

  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) =  localtime(gettimeofday());
  my $getstring = $calname . ' events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%Y-%m-%d" limit:count='.$limit.",from=".$from.",to=".$to." filter:field($field)=~\"$regexp\"";
  my @holidaysraw = split( /\n/, CommandGet( undef, "$getstring" ));

  my @holidays;
  my @singledays;

  for my $holiday (@holidaysraw) {
    my @tokens = split (" ",$holiday);

    my $endsecond = $tokens[2]-1;
    my @end_arr = localtime($endsecond);

my $overYE = $end_arr[5] > $year ? 1 : 0;
   
    $tokens[2] = strftime "%Y-%m-%d", localtime($endsecond);

    my $severalDays = $tokens[2] eq $tokens[1] ? 0 : 1;
    $holiday = join(' ', @tokens);
    if (!$severalDays) {
      $tokens[0] = 1;
      splice @tokens, 2, 1;
      $holiday = join(' ', @tokens);
      push (@singledays, $holiday);
    } elsif ( !$overYE ) {
      push (@holidays, $holiday);
    } else {
  my $Y = strftime "%Y", localtime(time);
      $holiday = "4 $tokens[1] $Y-12-31 $tokens[3] $tokens[4] (part 1)";
      push (@holidays,$holiday) if $month > 9;
      $holiday = "4 ".($Y+1)."-01-01 $tokens[2] $tokens[3] $tokens[4] (part 2)";
      unshift (@holidays,$holiday);
    }
  }
 
  push @holidays, @singledays;
  unshift (@holidays, "# get $getstring");
  my $today = strftime "%d.%m.%y, %H:%M", localtime(time);
  unshift (@holidays, "# Created by myCalendar2Holiday on $today");
  FileWrite("./FHEM/${targetname}.holiday",@holidays);
}


Folgendes wird nun generiert:

# Created by myCalendar2Holiday on 26.07.21, 13:53
# get calendar_Familienkalender events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%Y-%m-%d" limit:count=5,from=-10d,to=+400d filter:field(summary)=~".*erie.*"
4 2022-01-01 2022-04-22 Osterferien (10d) (part 2)
4 2022-01-01 2022-02-25 Winterferien (5d) (part 2)
4 2021-07-19 2021-08-27 Sommerferien (40d)
4 2021-10-11 2021-10-22 Herbstferien (12d)
4 2021-12-23 2021-12-31 Weihnachtsferien (9d)


Für die Osterferien und die Winterferien wird anscheinend in den else-Fall gesprungen der für den Jahreswechsel verantwortlich ist. Das sollte eigentlich nur der Fall sein wenn Begin und Ende in unterschiedlichen Jahren liegen vermute ich.

Folgende Codestelle erkennt den Jahreswechsel und geht dann in den else Fall:

my $endsecond = $tokens[2]-1;
my @end_arr = localtime($endsecond);

my $overYE = $end_arr[5] > $year ? 1 : 0;

$overYE ist somit true und für die Ferien wird 2022-01-01 statt dem echten Beginn gesetzt.

Sofern ich richtig liege würde doch ausreichen in den else-Fall zu springen wenn "Begin-Jahr == Ende-Jahr-1". Dann liegen die Ferien über dem Jahreswechsel.
Da muss ich wohl meine Perlkenntisse mal auffrischen :-(
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

Beta-User

Hmm, da muss ich mich auch erst eindenken.

Grundsätzlich darf in .holiday das Jahr nicht drinstehen, und dass da fälschlich ein YE erkannt wurde, sagt eigentlich schon das (part 2).

Du solltest das mit engeren Zeitgrenzen versuchen,
get calendar_Familienkalender events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%Y-%m-%d" limit:count=5,from=-10d,to=+400d filter:field(summary)=~".*erie.*"+400d ist nicht gut zur Fehlersuche.

Was liefert (FHEM-Kommandofeld):
get calendar_Familienkalender events timeFormat:"%Y-%m-%d" limit:count=5,from=-10d,to=+100d filter:field(summary)=~".*erie.*"
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

dancatt

Zitat von: Beta-User am 26 Juli 2021, 14:38:45
Grundsätzlich darf in .holiday das Jahr nicht drinstehen, und dass da fälschlich ein YE erkannt wurde, sagt eigentlich schon das (part 2).
In der Beschreibung von holiday steht aber folgendes:
MM-TT kann auch als JJJJ-MM-TT geschrieben werden.

Zitat von: Beta-User am 26 Juli 2021, 14:38:45
Du solltest das mit engeren Zeitgrenzen versuchen,
get calendar_Familienkalender events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%Y-%m-%d" limit:count=5,from=-10d,to=+400d filter:field(summary)=~".*erie.*"+400d ist nicht gut zur Fehlersuche.
+400d mache ich aktuell mit Absicht damit ich da mehrere Ferien bekommen und das testen kann.

Zitat von: Beta-User am 26 Juli 2021, 14:38:45
Was liefert (FHEM-Kommandofeld):
get calendar_Familienkalender events timeFormat:"%Y-%m-%d" limit:count=5,from=-10d,to=+100d filter:field(summary)=~".*erie.*"
4 2021-07-19 1630101600 Sommerferien (40d)
4 2021-10-11 1634940000 Herbstferien (12d)
4 2021-12-23 1641337200 Weihnachtsferien (13d)
4 2022-02-21 1645830000 Winterferien (5d)
4 2022-04-13 1650664800 Osterferien (10d)


Habe die Weihnachtsferien mal in den Januar gehen lassen. Dann wird aktuell folgendes generiert:
# Created by myCalendar2Holiday on 26.07.21, 14:41
# get calendar_Familienkalender events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%Y-%m-%d" limit:count=5,from=-10d,to=+400d filter:field(summary)=~".*erie.*"
4 2021-07-19 2021-08-27 Sommerferien (40d)
4 2021-10-11 2021-10-22 Herbstferien (12d)
4 2021-12-23 2022-01-04 Weihnachtsferien (13d)
4 2022-02-21 2022-02-25 Winterferien (5d)
4 2022-04-13 2022-04-22 Osterferien (10d)

Für mich sieht das so aus als benötigt man den else-Fall für den Jahreswechsel garnicht.
Cubietruck: FHEM-Server 6.0

Homematic: HM-USB-CFG2, HM-CFG-LAN, HM-LC-SW1-FM, HM-LC-Sw1-Pl-DN-R1, HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-SEC-SC-2, HM-SEC-SD, HM-PB-6-WM55

Beta-User

Zitat von: dancatt am 26 Juli 2021, 14:50:41
In der Beschreibung von holiday steht aber folgendes:
MM-TT kann auch als JJJJ-MM-TT geschrieben werden.
...https://svn.fhem.de/trac/changeset/21878/trunk/fhem/FHEM/95_holiday.pm (06.05.2020) war mir bisher entgangen...

Damit kann man sich den ganzen Zinnober weitgehend schenken :) , der Code sollte daher mal grundlegend renoviert werden ::) ... Damit könnte man gleich passend abrufen, und Probleme mit "zu langen Zeiträumen" gibt es auch nicht mehr. Vermutlich muss man nur noch darauf achten, dass das Endedatum passt (also Sekunde -1, wenn genau 00:00 Uhr).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Hier dann mal die renovierte und aktualisierte Fassung, die YE-regex entfällt, dafür gibt es jetzt die Option, die Zeitgrenzen mitzugeben:
sub myCalendar2Holiday {
  my $calname    = shift // return;
  my $regexp     = shift // return;
  my $targetname = shift // $calname;
  my $field      = shift // "summary";
  my $limit      = shift // 10;
  my $from       = shift // q{-10d};
  my $to         = shift // q{100d};

  my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) =  localtime(gettimeofday());
  my $getstring = $calname . ' events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%Y-%m-%d" limit:count=' . "${limit},from=${from},to=$to filter:field($field)=~\"$regexp\"";
  my @holidaysraw = split m{\n}xms, CommandGet( undef, $getstring );

  my @holidays;
  my @singledays;

  for my $holiday (@holidaysraw) {
    my @tokens = split (" ",$holiday);

    my $endsecond = $tokens[2]-1;
    my @end_arr = localtime($endsecond);


    $tokens[2] = strftime "%Y-%m-%d", localtime($endsecond);

    my $severalDays = $tokens[2] eq $tokens[1] ? 0 : 1;
    $holiday = join(' ', @tokens);
    if (!$severalDays) {
      $tokens[0] = 1;
      splice @tokens, 2, 1;
      $holiday = join(' ', @tokens);
      push (@singledays, $holiday);
    } else {
      push (@holidays, $holiday);
    }
  }
  push @holidays, @singledays;
  unshift (@holidays, "# get $getstring");
  my $today = strftime "%d.%m.%y, %H:%M", localtime(time);
  unshift (@holidays, "# Created by myCalendar2Holiday on $today");
  FileWrite("./FHEM/${targetname}.holiday",@holidays);
}

Hab's kurz getestet, scheint in meinem Umfeld zu funktionieren.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

mähschaf

Klasse, Danke Euch für die tolle Anregung und Arbeit!

Jetzt können die Kids in den Schulferien endlich länger schlafen  ;)

Eine Ergänzung noch für Leute, die so wie ich eine Stunde auf der Leitung stehen: Die WriteFile-Funktion schreibt - bei Verwendung dieser - in die configdb. Ich hab' eine geschlagene Stunde die .holiday-Datei im Filesystem gesucht...  ::)  :-*

Frohes Osterfest!

ThiloG

#28
Moin,

ich hab das eigentlich soweit passend eingerichtet, allerdings ist der Inhalt der .holiday nicht korrekt und sieht so aus:

# Created by myCalendar2Holiday on 06.07.23, 22:41
# get NRW_Ferien events format:custom="4 $T1 $t2 $S ($D)" timeFormat:"%Y-%m-%d" limit:count=10,from=[Ww]eihnacht,to=100d filter:field(summary)=~".*[fF]erie.*"
NRW_Ferien: Wrong 1970-01-01 specification [Ww]eihnacht

Internals:
   DEF        ical url https://www.ferienwiki.de/exports/ferien/2023/de/nordrhein-westfalen 86400
   FUUID      5fc24873-f33f-a58d-5eb7-9b68c03f74270c90
   NAME       NRW_Ferien
   NOTIFYDEV  global
   NR         715
   NTFY_ORDER 50-NRW_Ferien
   STATE      triggered
   TYPE       Calendar
   eventCount 5
   READINGS:
     2023-07-06 22:41:32   lastUpdate      2023-07-06 22:41:31
     2023-07-06 22:41:32   nextUpdate      2023-07-07 22:41:31
     2023-07-06 22:41:32   nextWakeup      2023-07-07 22:41:31
     2023-07-06 22:41:32   state           triggered
Attributes:
   DbLogExclude .*
   room       Ferien

get events ergibt:

03.04.2023 00:00 13d Osterferien
30.05.2023 00:00 24h Pfingstferien
22.06.2023 00:00 44d Sommerferien
02.10.2023 00:00 13d Herbstferien
21.12.2023 00:00 16d Weihnachtsferien


Internals:
  COMMAND    { return undef  if !$wday == 5; myCalendar2Holiday('NRW_Ferien','.*[fF]erie.*','ferien','summary',10,'[Ww]eihnacht');  }
  DEF        *23:30 { return undef  if !$wday == 5; myCalendar2Holiday('NRW_Ferien','.*[fF]erie.*','ferien','summary',10,'[Ww]eihnacht');  }
  FUUID      649d138f-f33f-a58d-fe15-85403851b0390415
  NAME      a_make_holiday
  NR        762
  PERIODIC  yes
  RELATIVE  no
  REP        -1
  STATE      Next: 23:30:00
  TIMESPEC  23:30
  TRIGGERTIME 1688679000
  TRIGGERTIME_FMT 2023-07-06 23:30:00
  TYPE      at
  eventCount 1
  READINGS:
    2023-07-06 22:41:19  state          Next: 23:30:00
Attributes:
  DbLogExclude .*

Any hints?

Beta-User

Wenn du den aktuellen code verwendet,  solltest du auch die zugehörige Syntax wählen... Die Yearend-regex braucht man nicht mehr!

PS:
Einen starren Kalender alle Woche zu holen ist eigentlich unnötig....
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files