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?
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
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.)
Hallo,
das Attribut hideOlderThan sowie hideLaterThan muss/kann im Calendar-Device gesetzt werden.
Viele Grüße
P.S. Man beachte den Unterschied Calview und Calendar.
Calview hat bei mir auch kein entsprechendes Attr.
LG
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.)
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
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);
}
}
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.
@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)?
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.
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
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.
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?
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
Ich habe mir schon mal angesehen, was für eine Altersberechnung zu tun ist.
Ganz ohne eigene Perl-Routinen, bietet sich die bereits im CALVIEW-Device integrierte Funktionalität an.
Dazu muss nur das Geburtsjahr in der ics-Datei in einem der Felder SUMMARY oder DESCRIPTION angegeben
und die Attribute isbirthday sowie yobfield im CALVIEW-Device gesetzt werden.
Schon hat man ein zusätzliches Reading pro Geburtstag, in dem das berechnete Alter hinterlegt ist.
Ein lauffähiges Beispiel mit Altersberechnung und FTUI-Darstellung könnte dann z.B. so aussehen:
BEGIN:VCALENDAR
PRODID:-//calcurse//NONSGML v4.0.0//EN
VERSION:2.0
BEGIN:VEVENT
DTSTART:19111111
DTEND:19111111
RRULE:FREQ=YEARLY
SUMMARY: Geburtstag meiner Mutter
DESCRIPTION: 1911
END:VEVENT
END:VCALENDAR
defmod Testkalender Calendar ical file FHEM/test.ics 86400
attr Testkalender hideOlderThan 3600s
defmod TestkalenderView CALVIEW Testkalender 1
attr TestkalenderView isbirthday 1
attr TestkalenderView modes next
attr TestkalenderView yobfield _description
<div data-type="calview" data-device="TestkalenderView" data-get="all"
data-detail='["bdate","summary","age","daysleftLong"]'
data-detailwidth='["15","55","10","20"]'
data-showempty="true"
data-sourcecolor="yes"
data-dateformat="long"
data-timeformat="short"
data-oneline="yes"/>
Zitat von: OdfFhem am 13 Oktober 2018, 05:20:05
Ich habe mir schon mal angesehen, was für eine Altersberechnung zu tun ist.
Du hast doch gerade gesagt, dass wir ganz schrittweise vorgehen wollen? (Ja, ich weiß, dass die Altersberechnung geht.)
Ich habe nun Deine Testversion umgesetzt, vielleicht sogar falsch umgesetzt:
cat geburtstage.ics
BEGIN:VCALENDAR
PRODID:-//calcurse//NONSGML v4.0.0//EN
VERSION:2.0
BEGIN:VEVENT
DTSTART:19111111
DTEND:19111111
RRULE:FREQ=YEARLY
SUMMARY: Geburtstag meiner Mutter
DESCRIPTION: 1911
END:VEVENT
END:VCALENDAR
Ergebnis der Veranstaltung ist, dass ich den Termin weder in FHEM noch in FTUI sehe. Da ist genau NICHTS!
Das Reading selbst scheint zu existieren: list Geburtstage
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-13 05:37:23 lastUpdate 2018-10-13 05:37:23
2018-10-08 02:34:42 modeAlarm
2018-10-13 05:31:43 modeAlarmOrStart
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-13 05:31:43 modeStart
2018-10-08 02:34:42 modeStarted
2018-10-13 05:31:43 modeUpcoming synthetic000004
2018-10-13 05:37:23 nextUpdate 2018-10-14 05:37:23
2018-10-13 05:37:23 nextWakeup 2018-10-14 05:37:23
2018-10-13 05:37:23 state triggered
Attributes:
group Calendar
hideLaterThan 20d
hideOlderThan 2d
room 99_System
<seufzt>
Dass Du nichts siehst, liegt daran, dass Du nicht genau die Testversion übernommen hast.
Das Attribut hideLaterThan blendet alle Geburtstage, die erst in 20 oder mehr Tagen sind, aus.
Darunter fällt dann auch der 11.11.
Also das Attribut entweder auf einen größeren Wert setzen oder (zunächst einmal) löschen.
Edit: Anschließend auf jeden Fall noch einmal das Calendar-Device reloaden.
ZitatIch habe nun Deine Testversion umgesetzt, vielleicht sogar falsch umgesetzt:
Es ist oben bereits eindeutig erklärt worden, dass ein Eintrag
immer ein DTEND-Tag haben muss, das einen anderen (späteren) Wert als den von DTSTART beinhaltet. Entweder später am gleichen Tag, oder an einem beliebigen Folgetag.
Ebenso ist klar gesagt worden, dass das Attribut hideLaterThan im Calender-Device zu setzen ist.
Mein Tipp @curt: Vielleicht einfach genauer lesen, was als Antwort gegeben wurde - das hätte in diesem Thread 2/3 der Nachfragen erspart.
Zu Thema der händischen Erzeugung von ical-Files: Das sollte man bleiben lassen, weil es sehr fehleranfällig ist. Wie wir oben gesehen haben ...
Stattdessen besser eine einfache XML-Datei erzeugen,
<?xml version="1.0" encoding="UTF-8"?>
<birthdays>
<birthday>
<name>X.</name>
<date>29. April 1958</date>
</birthday>
<birthday>
<name>Y...</name>
<date>1. November 1960</date>
</birthday>
<birthday>
<name>R...</name>
<date>27. Dezember 1988</date>
</birthday>
<birthday>
<name>R...</name>
<date>25. November 1991</date>
</birthday>
<birthday>
<name>D..</name>
<date>20. Januar 2000</date>
</birthday>
</birthdays>
Ferner diese Datei hier als calendartransform.xsl abspeichern
<?xml version="1.0" encoding="UTF-8"?>
<!--
########################################################################################
#
# calendartransform.xsl
#
# Prof. Dr. Peter A. Henning 2012
#
########################################################################################
#
# This programm is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# The GNU General Public License can be found at
# http://www.gnu.org/copyleft/gpl.html.
# A copy is found in the textfile GPL.txt and important notices to the license
# from the author is found in LICENSE.txt distributed with these scripts.
#
# This script is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
########################################################################################
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="1.0">
<xsl:template match="/">
BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
PRODID:Prof. Dr. Peter A. Henning
<xsl:apply-templates select="//restmuell">
<xsl:with-param name="text">Restmüllabfuhr</xsl:with-param>
</xsl:apply-templates>
<xsl:apply-templates select="//altpapier">
<xsl:with-param name="text">Altpapiersammlung</xsl:with-param>
</xsl:apply-templates>
<xsl:apply-templates select="//wertstoffmuell">
<xsl:with-param name="text">Wertstoffmüllabfuhr</xsl:with-param>
</xsl:apply-templates>
<xsl:apply-templates select="//birthdays">
<xsl:with-param name="text">Geburtstage</xsl:with-param>
</xsl:apply-templates>
END:VCALENDAR
</xsl:template>
<xsl:template match="termin">
<xsl:param name="text"/>
<xsl:variable name="r1" select="substring-after(.,', ')"/>
<xsl:variable name="d" select="substring-before($r1,'. ')"/>
<xsl:variable name="r2" select="substring-after($r1,'. ')"/>
<xsl:variable name="m" select="substring-before($r2,' ')"/>
<xsl:variable name="mm">
<xsl:choose>
<xsl:when test="$m='Januar'">01</xsl:when>
<xsl:when test="$m='Februar'">02</xsl:when>
<xsl:when test="$m='März'">03</xsl:when>
<xsl:when test="$m='April'">04</xsl:when>
<xsl:when test="$m='Mai'">05</xsl:when>
<xsl:when test="$m='Juni'">06</xsl:when>
<xsl:when test="$m='Juli'">07</xsl:when>
<xsl:when test="$m='August'">08</xsl:when>
<xsl:when test="$m='September'">09</xsl:when>
<xsl:when test="$m='Oktober'">10</xsl:when>
<xsl:when test="$m='November'">11</xsl:when>
<xsl:when test="$m='Dezember'">12</xsl:when>
</xsl:choose>
</xsl:variable>
BEGIN:VEVENT
CREATED:20180207T210000Z
LAST-MODIFIED:20180207T210000Z
DTSTAMP:20180207T210000Z
DTSTART;VALUE=DATE:2018<xsl:value-of select="$mm"/><xsl:value-of select="$d"/>T050000Z
DTEND;VALUE=DATE:2018<xsl:value-of select="$mm"/><xsl:value-of select="$d"/>T160000Z
SUMMARY:<xsl:value-of select="$text"/>
TRANSP:TRANSPARENT
UID:<xsl:text>M_2018</xsl:text><xsl:value-of select="$mm"/><xsl:value-of select="$d"/>
BEGIN:VALARM
TRIGGER:-PT12H
ACTION:DISPLAY
END:VALARM
END:VEVENT
</xsl:template>
<xsl:template match="birthday">
<xsl:param name="text"/>
<xsl:variable name="name" select="name"/>
<xsl:variable name="date" select="date"/>
<xsl:variable name="d" select="substring-before($date,'. ')"/>
<xsl:variable name="r2" select="substring-after($date,'. ')"/>
<xsl:variable name="m" select="substring-before($r2,' ')"/>
<xsl:variable name="mm">
<xsl:choose>
<xsl:when test="$m='Januar'">01</xsl:when>
<xsl:when test="$m='Februar'">02</xsl:when>
<xsl:when test="$m='März'">03</xsl:when>
<xsl:when test="$m='April'">04</xsl:when>
<xsl:when test="$m='Mai'">05</xsl:when>
<xsl:when test="$m='Juni'">06</xsl:when>
<xsl:when test="$m='Juli'">07</xsl:when>
<xsl:when test="$m='August'">08</xsl:when>
<xsl:when test="$m='September'">09</xsl:when>
<xsl:when test="$m='Oktober'">10</xsl:when>
<xsl:when test="$m='November'">11</xsl:when>
<xsl:when test="$m='Dezember'">12</xsl:when>
</xsl:choose>
</xsl:variable>
BEGIN:VEVENT
CREATED:20180207T210000Z
LAST-MODIFIED:20180207T210000Z
DTSTAMP:20180207T210000Z
DTSTART;VALUE=DATE:2018<xsl:value-of select="$mm"/><xsl:value-of select="$d"/>T000000
DTEND;VALUE=DATE:2018<xsl:value-of select="$mm"/><xsl:value-of select="$d"/>T235900
RRULE:FREQ=YEARLY
SUMMARY:<xsl:value-of select="$name"/>
TRANSP:TRANSPARENT
UID:<xsl:text>M_2018</xsl:text><xsl:value-of select="$mm"/><xsl:value-of select="$d"/>
BEGIN:VALARM
TRIGGER:-PT36H
ACTION:DISPLAY
END:VALARM
END:VEVENT
</xsl:template>
</xsl:stylesheet>
und mit dem Mini-Perl-Programm
use XML::LibXSLT;
use XML::LibXML;
my $xml_parser = XML::LibXML->new;
my $xslt_parser = XML::LibXSLT->new;
my $xml = $xml_parser->parse_file('birthday.xml');
my $xsl = $xml_parser->parse_file('calendartransform.xsl');
my $stylesheet = $xslt_parser->parse_stylesheet($xsl);
my $results = $stylesheet->transform($xml);
print $stylesheet->output_string($results);
daraus eine wirklich (!) gültige ical-Datei erzeugen. Geht übrigens auch für Mülltermine...
LG
pah
@OdfFhem
Zitat von: OdfFhem am 13 Oktober 2018, 07:40:33
Dass Du nichts siehst, liegt daran, dass Du nicht genau die Testversion übernommen hast.
Das Attribut hideLaterThan blendet alle Geburtstage, die erst in 20 oder mehr Tagen sind, aus.
Darunter fällt dann auch der 11.11.
Du hast recht. Irgendwann ist es spät und man sieht den Wald vor lauter Bäumen nicht mehr.
Zitat von: OdfFhem am 13 Oktober 2018, 05:20:05
Ich habe mir schon mal angesehen, was für eine Altersberechnung zu tun ist.
Ganz ohne eigene Perl-Routinen, bietet sich die bereits im CALVIEW-Device integrierte Funktionalität an.
Heute habe ich mich schrittweise durchgearbeitet.
Wow. Perfekt. - Danke vor allem, dass nicht nur sagtest, dass das geht, sondern den Code hier öffentlich zeigtest.
Aus meiner Sicht gehört das Codebeispiel #15 in https://wiki.fhem.de/wiki/FTUI_Widget_Calview machst Du das oder soll ich das machen? Oder @chris1284 ?
OdfFhem: Wenn ich meinen Papporden "Selbstloser Helfer" verleihen dürfte, würde ich ihn Dir verleihen. Danke!
P.S: Dein Codebeispiel (sanft verändert) nun in https://wiki.fhem.de/wiki/FTUI_Widget_Calview
@System
Zitat von: Prof. Dr. Peter Henning am 13 Oktober 2018, 10:54:36
Es ist oben bereits eindeutig erklärt worden, dass ein Eintrag immer ein DTEND-Tag haben muss,
Und das sagt wer? Das mag ja für das FHEM-Universum gelten. Aber dann hält es sich nicht an den Standard, dieser heißt RFC 5545. Dort steht klar, dass DTEND nicht zwingend ist. Dort steht darüber hinaus ganz konkret, wie zu verfahren ist, wenn DTEND fehlt.
Aus meiner Sicht bedeutet das, dass FHEM-Calendar sich an diesem Punkt nicht an den Standard hält. Kann man machen. Aber das bedeutet, dass eigentlich valide iCal scheitern.
Und ja: Meine iCal-Datei war valide, erzeugt von calcurse. Nicht von Hand erzeugt, wie Du annahmst.
Zitat von: Prof. Dr. Peter Henning am 13 Oktober 2018, 10:54:36
Ebenso ist klar gesagt worden, dass das Attribut hideLaterThan im Calender-Device zu setzen ist.
Mit welcher Begründung?
Zitat von: Prof. Dr. Peter Henning am 13 Oktober 2018, 10:54:36
Stattdessen besser eine einfache XML-Datei erzeugen,
Interessanter Ansatz. Ändert aber nichts daran, dass externe iCal, die standardkonform kein DTEND haben, bei FHEM-Calendar scheitern.
Nenne dieses Posting halt Bugreport.
@curt
Wenn man helfen kann und gerade Zeit hat, sollte Unterstützung kein Problem sein.
Bzgl. der Wiki-Pflege muss ich derzeit noch passen. Aber ich bin drauf und dran, mir einen Zugang geben zu lassen. Was ich bis dahin anbieten kann, ist das kontrolllesen des abgeänderten Wikis - falls gewünscht.
Übrigens habe ich #15 noch mal korrigiert, da die Prozentangaben in data-detailwidth ein wenig zu großzügig waren. Die neuen Angaben habe ich allerdings nicht getestet.
@curt: Bei dem Tonfall erübrigt sich weitere Unterstützung.
pah
@System
Zitat von: Prof. Dr. Peter Henning am 14 Oktober 2018, 05:12:04
@curt: Bei dem Tonfall erübrigt sich weitere Unterstützung.
Du meinst jetzt Deinen Tonfall?
Ja, den fand ich unangemessen. Das muss ich sehr deutlich sagen. Wir reden auf gleicher Ebene, auf Augenhöhe - oder gar nicht.
Ich habe tatsächlich den Eindruck, dass Du mit sachlicher Kritik nicht umgehen kannst - Du hast keine Unsachlichkeit von mir gelesen. Und wirst die auch nicht lesen. Das wäre weit unter meinem Niveau.
Zurück zur Sache, RFC 5545. Dort steht:
Zitat
If such a "VEVENT" has a "DTEND" property, it MUST be specified as a DATE value also.
If --> falls
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.
Wenn es kein DTEND gibt, hast Du das Ende des gleichen Tages zu codieren. Steht ganz klar da.
Letzte Anmerkung:
Dein Beitrag erschüttert mich.
Schau mal in der cref nach Calendar "on CreateEvent". Da ist ein Plugin beschrieben...
Ich empfehle einfach, die Antworten hier im Forum genauso aufmerksam zu lesen, wie RFCs.
LG
pah
@curt
In #15 war noch ein Schreibfehler.
falsch
date-oneline="yes"
richtig
data-oneline="yes"
Das Attribut data-oneline - steuert, ob eine zu lange Spalte abgeschnitten oder umgebrochen wird - ist im zugehörigen Wiki-Artikel nicht beschrieben. Da ich gesehen habe, dass Du dabei bist, den Wiki-Artikel zu überarbeiten, könntest Du ja vielleicht das fehlende Attribut nachtragen.
Zur weiteren Steuerung von oneline gab es noch folgende zusätzliche Steuerattribute; diese scheinen aber nicht mehr unterstützt zu werden. "..." wird nun wohl standardmäßig beim Abschneiden gesetzt.
data-onelinesum ; Werte=yes/no ; Wird das Feld summary abgeschnitten, dann ... am Ende setzen
data-onelinedesc ; Werte=yes/no ; Wird das Feld description abgeschnitten, dann ... am Ende setzen
data-onelineloc ; Werte= yes/no ; Wird das Feld location abgeschnitten, dann ... am Ende setzen
Daher das Attribut data-onelinesum aus #15 entfernt.
Zitat von: OdfFhem am 14 Oktober 2018, 11:08:58
@curt
In #15 war noch ein Schreibfehler.
Danke für den Hinweis. Bei mir und im Wiki geändert.
Zitat von: OdfFhem am 14 Oktober 2018, 11:08:58
Zur weiteren Steuerung von oneline gab es noch folgende zusätzliche Steuerattribute; diese scheinen aber nicht mehr unterstützt zu werden. "..." wird nun wohl standardmäßig beim Abschneiden gesetzt.
...
Daher das Attribut data-onelinesum aus #15 entfernt.
In der zuständigen *.js steht
"// Modifications chris1284 13.09.2017 19:05 - nur noch oneline yes/no , onlinesum/desc/loc entfernt)" - das ist hier: /opt/fhem/www/tablet/js/widget_calview.js
BTW:
Das ist im Moment meine größte Baustelle. RPi mit offiziellem Display, Mini-X11 und als Browser Midori im Kioskmode.
Dort wird jede Spalte einer Zeile umgebrochen. Nun ist natürlich schwer zu sagen, ob sich Midori oder eher das Widget knapp am Standard vorbei hangelt - mehr Verdächtige sind ja nicht auszumachen.
Midori - weil der nicht nach Hause telefoniert. Daher eigentlich ja das Mittel der Wahl.
Vielleicht kann @chris1284 kann dazu (Zeilenumbruch nach jedem data-detail-Wert etwas sagen. Oder mal schauen, wie er da die nächste Spalte formatiert.
Im Code des Widget hat @OdfFhem ein bislang undokumentiertes "data-sourcecolor" gefunden. Es ist wie bei Calview in FHEM möglich, Einträge verschiedener Kalender unterschiedliche Farben zu geben. Er hat gleich ein Beispiel in Wiki https://wiki.fhem.de/wiki/FTUI_Widget_Calview eingearbeitet.
@chris1284
@OdfFhem
ich denke, dass man sowas öffentlich diskutieren sollte - es gibt wohl ein Problem bei (nicht dokumentiert) weekdayname.
Wir waren an dieser Stelle (fhem.cfg):
attr <CALVIEW-Device> weekdayformat de-long
--> Montag .. Sonntag
attr <CALVIEW-Device> weekdayformat de-short
--> Mo .. So
Und bei FTUI:
data-detail='["weekdayname","bdate","summary"]'
Das fand ich für Geburtstage prima und wollte mir die de-short-Version einbauen ... und stolperte: In FTUI wird mir die long-Version angezeigt. Kannst Du das bei Dir bitte unabhängig testen?
Ich habe bei mir
attr TestkalenderView weekdayformat de-short
und
set TestkalenderView update
eingegeben.
In FTUI wird alles wunschgemäß ausgegeben.
Ohne das set ... update wird die Änderung erst mit der nächsten autom. Aktualisierung wirksam.
Zitat von: OdfFhem am 21 Oktober 2018, 03:17:53
Ohne das set ... update wird die Änderung erst mit der nächsten autom. Aktualisierung wirksam.
Stockfehler ...
Vorher war das Attribut bei mir überhaupt nicht gesetzt. Da nach dem Setzen sofort Resultate kamen, wäre ich nie im Traum darauf gekommen, noch ein Update für CalView anzustoßen.
Danke für den Hinweis.
Mein WidgetCalview-Spaltenproblem habe ich gelöst - und zwar an der Quelle. Wer schreibt, der bleibt - vielleicht hilft es ja anderen.
Basis ist ein Anzeigegerät, bestehend aus Raspberry Pi 3+, offizielles 7"-Touchscreendisplay, offizielles Gehäuse. Weiterhin Raspian sowie (nach Vorschlag C't 19/2018) extrem abgerüstetes X11. Autologin für User pi, dann wird via .bashrc der Browser im Kioskmode hochgezogen. Der Browser sollte schmal sein und insbesondere nicht nach Hause telefonieren wollen.
Als Browser hatte ich Midori. Und der zickte bei einigen Darstellungen rum, siehe oben.
Das Problem löste ich durch Installation des Browsers Vivaldi (deb-Paket für ARM gibt es).
Die Installation war etwas hakelig: dpkg -i scheiterte, da fünf Pakete fehlten. Installation der fünf Pakete scheiterte, da nun wieder die Paketverwaltung Vivaldi schon kannte ... also Vivaldi deinstallieren (dpkg -P). Fünf Pakete installieren (die ziehen noch weitere nach - aber bei weitem nicht so viel wie eine vollständige X11-Umgebung), dann Vivaldi neu installieren. Tut.