[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

ThiloG

Zitat von: Beta-User am 07 Juli 2023, 05:58:37Wenn du den aktuellen code verwendet,  solltest du auch die zugehörige Syntax wählen... Die Yearend-regex braucht man nicht mehr!

Stimmt auffällig. Danke dafür.

TomLee

Hallo Beta-User,

bin die Tage erst auf diese Funktion gestossen, spiele mit dem Gedanken die zu nutzen.

Hätte einen Vorschlag für den Fall, das man für Name des zu erstellenden .holiday-Devices ($targetname) den  Name eines bereits existierenden holiday-File angeben möchte, um die Daten zu ergänzen (falls man das so nutzen möchte).
So würde auch verhindert werden das eine holiday-Datei überschrieben wird, falls man aus versehen den Namen eines bereits existierenden File angibt.

Wie auch immer man sowas umsetzt, so klappt es nach wenigem testen wie ich es mir vorgestellt hatte:

Zitatsub 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");
 
 
  my @hfn = glob("/opt/fhem/FHEM/holiday/*.holiday");
  my @mhfn = map { substr($_, 23) } @hfn;
  my ($error, @content) = FileRead({FileName => "./FHEM/$targetname.holiday"});
  if (!$error) {
  push @holidays, @content;
  FileWrite("./FHEM/${targetname}.holiday",@holidays);}
  else {
  FileWrite("./FHEM/${targetname}.holiday",@holidays);

  }
  }

Gruß

Thomas

Beta-User

Hallo zurück,

habe noch ein Verständnisproblem zu deinem Vorschlag: Warum sollte man eine bestehende holiday-Datei NICHT überschreiben wollen? Das Ganze ist bei mir als rollierender update angelegt (idR. 1x pro Woche per at aufgerufen), und das Beibehalten von Alt-Daten wäre ein Problem, weil z.B. die alten Ferientermine aus 2024 ja in 2025 nur stören würden. Daher schaut das auch mehr oder weniger gar nicht in die Vergangenheit.

Übersehe ich da was? Bin grade gedanklich aus dem Thema auch schon länger raus...
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