[Widget Calview] Die fünf Termine ab heute

Begonnen von curt, 09 Oktober 2018, 03:21:16

Vorheriges Thema - Nächstes Thema

curt

Hallo,

entweder geht das gar nicht - oder ich stelle mich mal wieder zu blöd an:

Ich habe eine iCal-Datei für Geburtstage von Hand gebaut, ich merke mir die doch nicht wirklich. So ein Geburtstag ist jedes Jahr - die ICS-Datei ist valid: Sie liegt lokal (ich mag keine Google- oder Apple-Dienste). Daran scheitert es nicht, es gibt die ICal-Datei bei mir lokal.

Device myCalView eingebunden - und in FTUI werden auch Termine angezeigt. Prima. Sehr schön.

Nur leider werden die Termine ab dem Dateibeginn (1. Januar) angezeigt. Für eine Geburtstagserinnerung wäre es aber viel schöner, wenn die nächsten fünf Geburtstage ab HEUTE angezeigt werden. Ist doch logisch, ich muss noch eine Karte schreiben oder einen Wein kaufen.

Die "data-start"-Optionen scheinen mein Problem nicht abzubilden. Ich will ja die nächsten fünf Termine wissen, ganz unabhängig davon, wann die genau sind.

Wie mache ich es denn, dass die nächsten fünf Termine (einschließlich heute - da muss ich ja das Geburtstagskind anrufen!) mir gezeigt werden?
RPI 4 - Jeelink HomeMatic Z-Wave

SirBen

Moin,
ich habe zwar keinen lokalen Kalender, sollte ja aber genau so funktionieren:
Dein Calendar device muss das Attribut hideOlderThan haben. Ich habe es auf 1d (1Tag) gestellt.
LG

curt

Danke für Deinen Hinweis.

Leider kennt meine CALVIEW-Device dieses ATTR gar nicht. Von daher kann ich es auch nicht setzen. (Ja, das System ist aktuell.)
RPI 4 - Jeelink HomeMatic Z-Wave

OdfFhem

Hallo,

das Attribut hideOlderThan sowie hideLaterThan muss/kann im Calendar-Device gesetzt werden.

Viele Grüße

SirBen

P.S. Man beachte den Unterschied Calview und Calendar.
Calview hat bei mir auch kein entsprechendes Attr.

LG

curt

Ich bedanke mich für die bisherigen Hinweise.

Ja, ich habe das Attribut nun verstanden. Leider funktioniert das Ganze noch immer nicht: Es wird leider vom 1.Januar beginnend angezeigt. Dabei muss ich zugeben, dass ich Schwierigkeiten habe, das Zusammenspiel von Calendar, Calview, rg-Script, Widget-Calview zu durchdringen - welches auch noch durch nicht mehr zutreffende Forenbeiträge wegen Versionswechseln erschwert wird. Dazu kommt, dass der Wiki-Beitrag vmtl. veraltet ist sowie die CalView-Referenz Optionen zwar nennt, deren Bedeutung aber nicht erklärt. [¹]

Momentan neige ich dazu, alles zu löschen und sodann http://www.juergenstechnikwelt.de/smarthome-2/smarthome-mit-fhem-umsetzung-meines-abfallkalenders/ nachzubauen und schrittweise anzupassen.

Noch viel besser wäre allerdings, wenn jemand einen funktionierenden Geburtstagskalender (am allerbesten mit Altersberechnung) hat - und sagt: "Ok, ich zeige mal im Forum, wie ich das gemacht habe."

Das wäre der Traum. Man wird ja nochmal träumen dürfen.

[¹] Bitte nicht falsch verstehen - mir ist klar, das das ein open-source-Projekt ist, in das die Entwickler Kraft und Zeit investieren - und ich nichts zu fordern habe. Das liegt mir auch fern, ich habe große Hochachtung vor jedem Entwickler dieses Projekts. Und bedanke mich an dieser Stelle! (Ich wollte lediglich meine Schwierigkeiten beschreiben, nicht mehr.)
RPI 4 - Jeelink HomeMatic Z-Wave

OdfFhem

Hallo,

statt alles zu löschen, wäre es wahrscheinlich zielführender, den (evtl. anonymisierten) Ist-Zustand von Calendar- sowie CALVIEW-Device zu posten (list-Kommando oder "Raw definition").

Zusätzlich wäre ein (evtl. anonymisierter) Auszug aus der ics-Datei noch hilfreich.

Viele Grüße

curt

list Calendar

Internals:
   DEF        ical file www/calendar/geburtstage.ics 86400
   NAME       Geburtstage
   NOTIFYDEV  global
   NR         729
   NTFY_ORDER 50-Geburtstage
   STATE      triggered
   TYPE       Calendar
   READINGS:
     2018-10-11 00:49:29   lastUpdate      2018-10-11 00:49:29
     2018-10-08 02:34:42   modeAlarm       
     2018-10-10 00:49:29   modeAlarmOrStart synthetic000009;synthetic000019;synthetic000014;synthetic000004
     2018-10-08 02:34:42   modeAlarmed     
     2018-10-08 02:34:42   modeChanged     
     2018-10-08 02:34:42   modeEnd         
     2018-10-08 02:34:42   modeEnded       
     2018-10-10 00:49:29   modeStart       synthetic000009;synthetic000019;synthetic000014;synthetic000004
     2018-10-08 02:34:42   modeStarted     
     2018-10-08 03:44:53   modeUpcoming    synthetic000024
     2018-10-11 00:49:29   nextUpdate      2018-10-12 00:49:29
     2018-10-11 00:49:29   nextWakeup      2018-10-12 00:49:29
     2018-10-11 00:49:29   state           triggered
Attributes:
   group      Calendar
   hideOlderThan 1d
   room       99_System


list myCalView

Internals:
   DEF        Geburtstage next
   INTERVAL   43200
   KALENDER   Geburtstage
   NAME       myCalView
   NR         731
   NTFY_ORDER 50-myCalView
   STATE      t: 9 td: 0 tm: 0
   TYPE       CALVIEW
   READINGS:
     2018-10-11 12:49:29   c-term          9
     2018-10-11 12:49:29   c-today         0
     2018-10-11 12:49:29   c-tomorrow      0
     2018-10-11 12:49:29   state           t: 9 td: 0 tm: 0
     2018-10-11 12:49:29   t_001_bdate     26.01.2018
     2018-10-11 12:49:29   t_001_btime     00:00
     2018-10-11 12:49:29   t_001_categories 
     2018-10-11 12:49:29   t_001_daysleft  -258
     2018-10-11 12:49:29   t_001_daysleftLong in -258 Tagen
     2018-10-11 12:49:29   t_001_description 
     2018-10-11 12:49:29   t_001_location   
     2018-10-11 12:49:29   t_001_mode      next
     2018-10-11 12:49:29   t_001_source    Geburtstage
     2018-10-11 12:49:29   t_001_sourcecolor red
     2018-10-11 12:49:29   t_001_summary    A Geburtstag
     2018-10-11 12:49:29   t_001_timeshort 00:00 -
     2018-10-11 12:49:29   t_001_weekday   5
     2018-10-11 12:49:29   t_001_weekdayname Freitag
     2018-10-11 12:49:29   t_002_bdate     30.04.2018
     2018-10-11 12:49:29   t_002_btime     00:00
     2018-10-11 12:49:29   t_002_categories 
     2018-10-11 12:49:29   t_002_daysleft  -164
     2018-10-11 12:49:29   t_002_daysleftLong in -164 Tagen
     2018-10-11 12:49:29   t_002_description 
     2018-10-11 12:49:29   t_002_location   
     2018-10-11 12:49:29   t_002_mode      next
     2018-10-11 12:49:29   t_002_source    Geburtstage
     2018-10-11 12:49:29   t_002_sourcecolor red
     2018-10-11 12:49:29   t_002_summary   Frank Geburtstag
     2018-10-11 12:49:29   t_002_timeshort 00:00 -
     2018-10-11 12:49:29   t_002_weekday   1
     2018-10-11 12:49:29   t_002_weekdayname Montag
     2018-10-11 12:49:29   t_003_bdate     06.08.2018
     2018-10-11 12:49:29   t_003_btime     00:00
     2018-10-11 12:49:29   t_003_categories 
     2018-10-11 12:49:29   t_003_daysleft  -66
     2018-10-11 12:49:29   t_003_daysleftLong in -66 Tagen
     2018-10-11 12:49:29   t_003_description 
     2018-10-11 12:49:29   t_003_location   
     2018-10-11 12:49:29   t_003_mode      next
     2018-10-11 12:49:29   t_003_source    Geburtstage
     2018-10-11 12:49:29   t_003_sourcecolor red
     2018-10-11 12:49:29   t_003_summary   B Geburtstag
     2018-10-11 12:49:29   t_003_timeshort 00:00 -
     2018-10-11 12:49:29   t_003_weekday   1
     2018-10-11 12:49:29   t_003_weekdayname Montag
     2018-10-11 12:49:29   t_004_bdate     21.09.2018
     2018-10-11 12:49:29   t_004_btime     00:00
     2018-10-11 12:49:29   t_004_categories 
     2018-10-11 12:49:29   t_004_daysleft  -20
     2018-10-11 12:49:29   t_004_daysleftLong in -20 Tagen
     2018-10-11 12:49:29   t_004_description 
     2018-10-11 12:49:29   t_004_location   
     2018-10-11 12:49:29   t_004_mode      next
     2018-10-11 12:49:29   t_004_source    Geburtstage
     2018-10-11 12:49:29   t_004_sourcecolor red
     2018-10-11 12:49:29   t_004_summary   E Geburtstag
     2018-10-11 12:49:29   t_004_timeshort 00:00 -
     2018-10-11 12:49:29   t_004_weekday   5
     2018-10-11 12:49:29   t_004_weekdayname Freitag
     2018-10-11 12:49:29   t_005_bdate     13.12.2018
     2018-10-11 12:49:29   t_005_btime     00:00
     2018-10-11 12:49:29   t_005_categories 
     2018-10-11 12:49:29   t_005_daysleft  63
     2018-10-11 12:49:29   t_005_daysleftLong in 63 Tagen
     2018-10-11 12:49:29   t_005_description 
     2018-10-11 12:49:29   t_005_location   
     2018-10-11 12:49:29   t_005_mode      next
     2018-10-11 12:49:29   t_005_source    Geburtstage
     2018-10-11 12:49:29   t_005_sourcecolor red
     2018-10-11 12:49:29   t_005_summary   D Geburtstag
     2018-10-11 12:49:29   t_005_timeshort 00:00 -
     2018-10-11 12:49:29   t_005_weekday   4
     2018-10-11 12:49:29   t_005_weekdayname Donnerstag
     2018-10-11 12:49:29   t_006_bdate     26.01.2019
     2018-10-11 12:49:29   t_006_btime     00:00
     2018-10-11 12:49:29   t_006_categories 
     2018-10-11 12:49:29   t_006_daysleft  107
     2018-10-11 12:49:29   t_006_daysleftLong in 107 Tagen
     2018-10-11 12:49:29   t_006_description 
     2018-10-11 12:49:29   t_006_location   
     2018-10-11 12:49:29   t_006_mode      next
     2018-10-11 12:49:29   t_006_source    Geburtstage
     2018-10-11 12:49:29   t_006_sourcecolor red
     2018-10-11 12:49:29   t_006_summary    A Geburtstag
     2018-10-11 12:49:29   t_006_timeshort 00:00 -
     2018-10-11 12:49:29   t_006_weekday   6
     2018-10-11 12:49:29   t_006_weekdayname Samstag
     2018-10-11 12:49:29   t_007_bdate     30.04.2019
     2018-10-11 12:49:29   t_007_btime     00:00
     2018-10-11 12:49:29   t_007_categories 
     2018-10-11 12:49:29   t_007_daysleft  201
     2018-10-11 12:49:29   t_007_daysleftLong in 201 Tagen
     2018-10-11 12:49:29   t_007_description 
     2018-10-11 12:49:29   t_007_location   
     2018-10-11 12:49:29   t_007_mode      next
     2018-10-11 12:49:29   t_007_source    Geburtstage
     2018-10-11 12:49:29   t_007_sourcecolor red
     2018-10-11 12:49:29   t_007_summary   C Geburtstag
     2018-10-11 12:49:29   t_007_timeshort 00:00 -
     2018-10-11 12:49:29   t_007_weekday   2
     2018-10-11 12:49:29   t_007_weekdayname Dienstag
     2018-10-11 12:49:29   t_008_bdate     06.08.2019
     2018-10-11 12:49:29   t_008_btime     00:00
     2018-10-11 12:49:29   t_008_categories 
     2018-10-11 12:49:29   t_008_daysleft  299
     2018-10-11 12:49:29   t_008_daysleftLong in 299 Tagen
     2018-10-11 12:49:29   t_008_description 
     2018-10-11 12:49:29   t_008_location   
     2018-10-11 12:49:29   t_008_mode      next
     2018-10-11 12:49:29   t_008_source    Geburtstage
     2018-10-11 12:49:29   t_008_sourcecolor red
     2018-10-11 12:49:29   t_008_summary   B GeburtstagMutti Annelies
     2018-10-11 12:49:29   t_008_timeshort 00:00 -
     2018-10-11 12:49:29   t_008_weekday   2
     2018-10-11 12:49:29   t_008_weekdayname Dienstag
     2018-10-11 12:49:29   t_009_bdate     21.09.2019
     2018-10-11 12:49:29   t_009_btime     00:00
     2018-10-11 12:49:29   t_009_categories 
     2018-10-11 12:49:29   t_009_daysleft  345
     2018-10-11 12:49:29   t_009_daysleftLong in 345 Tagen
     2018-10-11 12:49:29   t_009_description 
     2018-10-11 12:49:29   t_009_location   
     2018-10-11 12:49:29   t_009_mode      next
     2018-10-11 12:49:29   t_009_source    Geburtstage
     2018-10-11 12:49:29   t_009_sourcecolor red
     2018-10-11 12:49:29   t_009_summary   E Geburtstag
     2018-10-11 12:49:29   t_009_timeshort 00:00 -
     2018-10-11 12:49:29   t_009_weekday   6
     2018-10-11 12:49:29   t_009_weekdayname Samstag
Attributes:
   group      _KalenderView_
   maxreadings 300
   modes      next
   room       06 Kalender
   sourcecolor Feiertage:blue,Ferien:brown,Geburtstage:red


cat www/calendar/geburtstage.ics

BEGIN:VCALENDAR
PRODID:-//calcurse//NONSGML v4.0.0//EN
VERSION:2.0
BEGIN:VEVENT
DTSTART:20180126
RRULE:FREQ=YEARLY;BYMONTH=0;BYMONTHDAY=26
SUMMARY: A Geburtstag
END:VEVENT
BEGIN:VEVENT
DTSTART:20180430
RRULE:FREQ=YEARLY;BYMONTH=04;BYMONTHDAY=30
SUMMARY:C Geburtstag
END:VEVENT
BEGIN:VEVENT
DTSTART:20180806
RRULE:FREQ=YEARLY;BYMONTH=08;BYMONTHDAY=06
SUMMARY:B Geburtstag
END:VEVENT
BEGIN:VEVENT
DTSTART:20180921
RRULE:FREQ=YEARLY;BYMONTH=09;BYMONTHDAY=21
SUMMARY:E Geburtstag
END:VEVENT
BEGIN:VEVENT
DTSTART:20181213
RRULE:FREQ=YEARLY;BYMONTH=12;BYMONTHDAY=13
SUMMARY:D Geburtstag
END:VEVENT
END:VCALENDAR


Das hier habe ich noch, in fhem.cfg

define rg_KALENDER readingsGroup <Datum>,<Tag>,<Zeit>,<Termin>,<Ort>\
myCalView:t_001_bdate,t_001_weekday,t_001_timeshort,t_001_summary,t_001_location\
myCalView:t_002_bdate,t_002_weekday,t_002_timeshort,t_002_summary,t_002_location\
myCalView:t_003_bdate,t_003_weekday,t_003_timeshort,t_003_summary,t_003_location\
myCalView:t_004_bdate,t_004_weekday,t_004_timeshort,t_004_summary,t_004_location\
myCalView:t_005_bdate,t_005_weekday,t_005_timeshort,t_005_summary,t_005_location\
myCalView:t_006_bdate,t_006_weekday,t_006_timeshort,t_006_summary,t_006_location\
myCalView:t_007_bdate,t_007_weekday,t_007_timeshort,t_007_summary,t_007_location\
myCalView:t_008_bdate,t_008_weekday,t_008_timeshort,t_008_summary,t_008_location\
myCalView:t_009_bdate,t_009_weekday,t_009_timeshort,t_009_summary,t_009_location\
myCalView:t_010_bdate,t_010_weekday,t_010_timeshort,t_010_summary,t_010_location\
myCalView:t_011_bdate,t_011_weekday,t_011_timeshort,t_011_summary,t_011_location\
myCalView:t_012_bdate,t_012_weekday,t_012_timeshort,t_012_summary,t_012_location\
myCalView:t_013_bdate,t_013_weekday,t_013_timeshort,t_013_summary,t_013_location\
myCalView:t_014_bdate,t_014_weekday,t_014_timeshort,t_014_summary,t_014_location\
myCalView:t_015_bdate,t_015_weekday,t_015_timeshort,t_015_summary,t_015_location\
myCalView:t_016_bdate,t_016_weekday,t_016_timeshort,t_016_summary,t_016_location\
myCalView:t_017_bdate,t_017_weekday,t_017_timeshort,t_017_summary,t_017_location\
myCalView:t_018_bdate,t_018_weekday,t_018_timeshort,t_018_summary,t_018_location\
myCalView:t_019_bdate,t_019_weekday,t_019_timeshort,t_019_summary,t_019_location\
myCalView:t_020_bdate,t_020_weekday,t_020_timeshort,t_020_summary,t_020_location
attr rg_KALENDER nameStyle style="font-weight:bold;;text-decoration:underline;;"
attr rg_KALENDER nonames 1
attr rg_KALENDER notime 1
attr rg_KALENDER room 06 Kalender
attr rg_KALENDER valueFormat {\
  if ($READING =~ /bdate$/)\
  {\
    my $readingStart = $READING;;\
    $readingStart =~ s/bdate$//;;\
    if (0 == ReadingsVal($DEVICE, $readingStart.'daysleft', -1))\
    {\
      "Heute";;\
    }\
    elsif (1 == ReadingsVal($DEVICE, $readingStart.'daysleft', -1))\
    {\
      "Morgen";;\
    }\
    else\
    {\
      # the follwoing line strips the year of the date (remove it if needed)\
      substr($VALUE, 0, 5);;\
    }\
  }\
  elsif ($READING =~ /weekday$/)\
  {\
    my $readingStart = $READING;;\
    $readingStart =~ s/weekday$//;;\
    \
     # the follwoing line strips the weekday down to 3 chars (remove it if needed)\
    substr($VALUE, 0, 3);;\
  }\
  elsif ($READING =~ /summary$/)\
  {\
    my $readingStart = $READING;;\
    $readingStart =~ s/summary$//;;\
    my $age = ReadingsVal($DEVICE, $readingStart.'age', undef);;\
    if (defined($age))\
    {\
      $VALUE.' ('.$age.')';;\
    }\
    else\
    {\
      $VALUE;;\
    }\
  }\
}
attr rg_KALENDER valueStyle {\
  my $readingStart = $READING;;\
  $readingStart =~ s/(t_\d+_).+/$1/;;\
  'style="color:'.ReadingsVal($DEVICE, $readingStart."sourcecolor", "white").'"'\
}


Und in 99_myUtils.pm

# https://forum.fhem.de/index.php/topic,36244.0.html
sub getCalendar(){
   my $ret;
   my $year=strftime("%Y",localtime);
   $ret = system("wget -O feiertage.ics http://www.schulferien.org/iCal/Feiertage/icals/Feiertage_Baden_Wuerttemberg_".$year.".ics");
   $ret = system("wget -O ferien.ics http://www.schulferien.org/iCal/Ferien/icals/Ferien_Baden_Wuerttemberg_".$year.".ics");

};   

sub getDayStatus(){
   my $ret;
   my $msg;
   my @lines;
   my $date;
   my $desc;
   #strftime "%d-%m",localtime
   
   $ret = fhem("get Feiertage text modeAlarmOrStart");
   if( $ret ne ""){
     @lines = split('\n',$ret);
     $date  = substr($lines[0],0,8);
     $desc  = substr($lines[0],15);
     $msg = "$desc $date";
     fhem("set Tagesstatus $desc");
     fhem("set Tagesmode Feiertag");
   }else{
     $ret = fhem("get Ferien text modeAlarmOrStart");
     if( $ret ne ""){
       @lines = split('\n',$ret);
       $date  = substr($lines[0],0,8);
       $desc  = substr($lines[0],15);
       $msg = "$desc $date";
       fhem("set Tagesstatus $desc");
       fhem("set Tagesmode Ferien");
     }else{
       if( strftime("%u",localtime) > 5 ){
         $msg = "Wochenende";
         fhem("set Tagesstatus $msg");
         fhem("set Tagesmode $msg");
       }else{
         $msg = "Arbeitstag";
         fhem("set Tagesstatus $msg");
         fhem("set Tagesmode $msg");
       }
     }
   }
   return $msg;
}

sub checkCalendars($){

  my ($period) = @_;

  #-- Start oder Alarm stündlich
  if( ($period eq 'hour') || ($period eq '') ){
    my $text;
    my $hash = $defs{'Termin'};
    $text = fhem("get Muell text modeAlarmOrStart");
    $text = "--" if (!$text);
    $text = "--" if ($text eq "");
    #fhem("set Termin ".$text);
    return $text;
   
  #-- Vorschau täglich oder wenn neu gestartet
  }elsif( ($period eq 'day') || (ReadingsVal("Termin","today",0) eq "today") ){
    my $stoday    = strftime('%2d.%2m.%2y', localtime(time));
    my $stomorrow = strftime('%2d.%2m.%2y', localtime(time+86400));
    my $stwodays  = strftime('%2d.%2m.%2y', localtime(time+2*86400));
    my @today     = ();
    my @tomorrow  = ();
    my @twodays   = ();
    my (@lines,$line,@linarr);

    @lines = split('\n',fhem("get Muell text modeAlarmOrStart"));
    foreach $line (@lines){
      #-- line looks as
      #   18.05.15 07:00 Restmüllabfuhr
      chomp($line);
      @linarr = split(' ',$line);
      if( $linarr[0] eq $stoday ){
        push(@today,$linarr[1]." ".$linarr[2]);
      }elsif( $linarr[0] eq $stomorrow ){
        push(@tomorrow,$linarr[1]." ".$linarr[2]);
      }elsif( $linarr[0] eq $stwodays ){
        push(@twodays,$linarr[1]." ".$linarr[2]);
      }     
    }
   
    @lines = split('\n',fhem("get Muell text modeUpcoming"));
    foreach $line (@lines){
      #-- line looks as
      #   18.05.15 07:00 Restmüllabfuhr
      chomp($line);
      @linarr = split(' ',$line);
      if( $linarr[0] eq $stoday ){
        push(@today,$linarr[1]." ".$linarr[2]);
      }elsif( $linarr[0] eq $stomorrow ){
        push(@tomorrow,$linarr[1]." ".$linarr[2]);
      }elsif( $linarr[0] eq $stwodays ){
        push(@twodays,$linarr[1]." ".$linarr[2]);
      }     
    }
    $defs{'Termin'}{READINGS}{'today'}{VAL}    = join(" ",@today);
    $defs{'Termin'}{READINGS}{'tomorrow'}{VAL} = join(" ",@tomorrow);
    $defs{'Termin'}{READINGS}{'twodays'}{VAL}  = join(" ",@twodays);
   
    return "today: ".join(" ",@today)."\ntomorrow: ".join(" ",@tomorrow)."\ntwodays: ".join(" ",@twodays);
  }
}

RPI 4 - Jeelink HomeMatic Z-Wave

OdfFhem

Ich kann zwar erst heute Abend etwas testen, aber ich vermute, dass in der ics-Datei die DTEND-Angaben "fehlen". Ohne scheint der Termin kein Ende zu haben.

curt

@OdfFhem
DTEND ist es möglicherweise nicht: Jährlich wiederkehrende Geburtstage haben haben kein Ende. Der ical-Generator hat das vermutlich richtig gemacht.

Ich vermute, dass es schon viel früher scheitert, dass meine gesamte Konfiguration hinkt. Daher habe ich folgendes gemacht:

1) Kalender für Tests gewechselt - nun Feiertage Sachsen-Anhalt 2018 von schulferien.org. Da dürfte die Kodierung des iCal-Files korrekt sein.

2) Alles mit Cal in Zusammenhang stehende aus 99_myUtils.pm gelöscht - da gibt es nun KEINE Perl-Funktionen in Zusammenhang mit Calendar, CalView, 57_CalView mehr. Null. Njete. (Das hatte ich kopiert, Jahr 2015, vermutlich obsolent. Also nun weg.)

Ergebnis der Veranstaltung ist:
* FHEM selbst zeigt in meinem Kalender-Raum alle Feiertage an, auch die vergangenen. Beginnend mit Neujahr 2018.
* FTUI-Tablet zeigt gar keine Feiertage an - nicht einmal falsche.

Ist die grundsätzliche Definition define myCalView CALVIEW Feiertage next überhaupt korrekt? Oder muss da 0 oder 1 oder 2 stehen? (Referenz und Wiki sind sich da nicht einig.)

Fehlt mir da irgend etwas? Eine PERL-Funktion? Ein Trigger? Oder was ganz anderes?

Magst Du mir mal Deine Konfiguration zeigen (gern als PN)?
RPI 4 - Jeelink HomeMatic Z-Wave

OdfFhem

Ich habe es jetzt mal in meiner Testinstanz ausprobiert.

Szenario #1: Ich habe die ics-Datei aus #7 auf einen Eintrag reduziert, dann ein Calendar-Device angelegt und abschließend ein CALVIEW-Device.


BEGIN:VCALENDAR
PRODID:-//calcurse//NONSGML v4.0.0//EN
VERSION:2.0
BEGIN:VEVENT
DTSTART:20180126
RRULE:FREQ=YEARLY;BYMONTH=01;BYMONTHDAY=26
SUMMARY: A Geburtstag
END:VEVENT
END:VCALENDAR


defmod Testkalender Calendar ical file FHEM/test.ics 86400
attr Testkalender hideOlderThan 3600s


defmod TestkalenderView CALVIEW Testkalender 1
attr TestkalenderView modes next


--> Ergebnis: 26.01.2018 sowie 26.01.2019 werden im CALVIEW-Device angezeigt.

Szenario #2: Ich habe die ics-Datei aus #7 auf einen Eintrag reduziert und ein DTEND hinzugefügt, dann ein Calendar-Device angelegt und abschließend ein CALVIEW-Device.


BEGIN:VCALENDAR
PRODID:-//calcurse//NONSGML v4.0.0//EN
VERSION:2.0
BEGIN:VEVENT
DTSTART:20180126
DTEND:20180127
RRULE:FREQ=YEARLY;BYMONTH=01;BYMONTHDAY=26
SUMMARY: A Geburtstag
END:VEVENT
END:VCALENDAR


defmod Testkalender Calendar ical file FHEM/test.ics 86400
attr Testkalender hideOlderThan 3600s


defmod TestkalenderView CALVIEW Testkalender 1
attr TestkalenderView modes next


--> Ergebnis: nur der 26.01.2019 wird im CALVIEW-Device angezeigt.

==> Die ics-Datei aus #7 scheint zwar korrekt, aber das Calendar-Device erwartet wohl auf jeden Fall eine DTEND-Angabe.


Laut RFC5545 gilt
Zitat
The "DTEND" property for a "VEVENT" calendar component specifies the non-inclusive end of the event. For cases where a "VEVENT" calendar component specifies a "DTSTART" property with a DATE value type but no "DTEND" nor "DURATION" property, the event's duration is taken to be one day.

Daher habe ich noch ein drittes und viertes Szenario getestet.


BEGIN:VCALENDAR
PRODID:-//calcurse//NONSGML v4.0.0//EN
VERSION:2.0

BEGIN:VEVENT
DTSTART;VALUE=DATE:20180101
RRULE:FREQ=YEARLY
SUMMARY:Geburtstag #1
END:VEVENT

END:VCALENDAR


--> Ergebnis: 01.01.2018 sowie 01.01.2019 werden im CALVIEW-Device angezeigt.


BEGIN:VCALENDAR
PRODID:-//calcurse//NONSGML v4.0.0//EN
VERSION:2.0

BEGIN:VEVENT
DTSTART;VALUE=DATE:20180101T000000
DTEND;VALUE=DATE:20180101T235959
RRULE:FREQ=YEARLY
SUMMARY:Geburtstag #1
END:VEVENT

END:VCALENDAR


--> Ergebnis: nur der 01.01.2019 wird im CALVIEW-Device angezeigt.


==> Ohne DTEND scheint das Calendar-Device nicht (korrekt) zu funktionieren. Entweder muss also eine DTEND-Angabe in der ics-Datei enthalten sein oder der Modulautor muss eine Modulanpassung vornehmen.

curt

Der Teil war mir klar. Ich nehme aber mal @Dr. Boris Neubert @System rein:
Boris, das Modul Calendar behandelt wiederkehrende Termine falsch: Siehe oben.

@OdfFhem
Das ist aber gar nicht meine Baustelle - notfalls bekommt jeder Termin ein DTEND 2068-12-31, da sind wir nicht zimperlich.

Mein Problem ist, dass die Geburtstage (andere Termine) nicht "ab heute" dargestellt werden. Und das betrifft sowohl CalView (vergangene Termine werden dargestellt) als auch FTUI Widget Calview (gar kein Termin wird dargestellt.

Ohne Frage sitzt das Problem vor dem Bildschirm - und das bin ich. Ich finde leider keine so einigermaßen nachvollziehbare Anleitung, lediglich vermutlich veraltete solche. Lies bitte meinen Beitrag #9 nochmals, da versuchte die die Problemlage darzustellen.

Ich danke Dir für Deine selbstlosen Mühen.

P.S: @chris1284
RPI 4 - Jeelink HomeMatic Z-Wave

OdfFhem

Scheinbar existiert hier tatsächlich ein Verständnisproblem.

DTEND gibt nicht das Ende des Geburtstagszyklus an - also das Ende der Wiederholungen, sondern nur das Ende des Geburtstages des ersten Jahres.

DTEND 2068-12-31 bringt also gar nichts, da der erste und alle Geburtstage der Folgejahre dann bis zum 31.12.2068 dauern würden.

Also eher

DTSTART:20180126
DTEND:20180127


statt


DTSTART:20180126
DTEND:20680127


Die Wiederholungen laufen automatisch so lange, bis der Geburtstag aus der Datei entfernt wird.

curt

Zitat von: OdfFhem am 13 Oktober 2018, 03:49:37
Scheinbar existiert hier tatsächlich ein Verständnisproblem.

Eins?
Wenn ich das könnte, würde ich Dich hier nicht nerven. Ich kann es nicht - und das hat wohl weniger mit DTEND zu tun.

Aber kurz zum Thema DTSTART/DTEND:
Meine Mutter ist am 11.11.1911 geboren - beispielhaft. Also setze ich DTSTART/DTEND auf genau diesen Tag? In der zusätzlichen Hoffnung, dass die im Forum schon besprochene Altersberechnung dann klappen wird?
RPI 4 - Jeelink HomeMatic Z-Wave

OdfFhem

#14
Um das gesamte Problem zu lösen, sollten wir das Problem in mehrere Schritte unterteilen.

Dein erstes Problem ist ja schon mal, dass die definierten Geburtstage nicht enden.
Damit Geburtstage enden und bereits vergangene Geburtstage nicht mehr angezeigt werden, ist es notwendig, in der ics-Datei eine DTEND-Angabe je Geburtstag einzupflegen.

Zur Lösung gibt es u.a. zwei Möglichkeiten:
1) DTEND als Folgetag (11.11.1911,00:00:00 - 12.11.1911,00:00:00)

DTSTART:19111111
DTEND:19111112


oder

2) DTSTART und DTEND am gleichen Tag, aber mit expliziter Start- und Endezeit (11.11.1911,00:00:00 - 11.11.1911,23:59:59)

DTSTART;VALUE=DATE:19111111T000000
DTEND;VALUE=DATE:19111111T235959


Wenn die ics-Datei entsprechend angepasst und der Kalender neu geladen wurde, sollten keine vergangenen Geburtstage mehr angezeigt werden.


Erst wenn dieses erste Teilproblem gelöst ist, sollten wir uns um FTUI und Altersberechnung kümmern.



Edit: Folgende Kombination scheint  auch zu funktionieren

DTSTART:19111111
DTEND:19111111