";
if ($small) { # nur ein Datumfeld umbrechbar
$out .= " ".(($de)?'Start' :'Begin')." | " if($seen{Begin});
$out .= " ".(($de)?'Ende' :'End')." | " if($seen{End});
} else {
$out .= " ".(($de)?'Start' :'Begin')." | " if($seen{Begin});
$out .= " ".(($de)?'----' :'----')." | " if($seen{Begin});
$out .= " ".(($de)?'Ende' :'End')." | " if($seen{End});
$out .= " ".(($de)?'----' :'----')." | " if($seen{End});
}
$out .= " ".(($de)?'Resttage' :'Days left')." | " if($seen{DaysLeft});
$out .= " ".(($de)?'Zeitzone' :'Timezone')." | " if($seen{Timezone});
$out .= " ".(($de)?'Zusammenfassung' :'Summary')." | " if($seen{Summary});
$out .= " ".(($de)?'Beschreibung' :'Description')." | " if($seen{Description});
$out .= " ".(($de)?'Status' :'State')." | " if($seen{Status});
$out .= " ".(($de)?'Erfüllung (%)' :'Completion (%)')." | " if($seen{Completion});
$out .= " ".(($de)?'Ort' :'Location')." | " if($seen{Location});
$out .= " ".(($de)?'Karte' :'Map')." | " if($seen{Map});
$out .= " ".(($de)?'Kalender' :'Calendar')." | " if($seen{Calendar});
$out .= " ".(($de)?'ID' :'ID')." | " if($seen{EventId});
my $maxbnr;
foreach my $key (keys %{$defs{$name}{READINGS}}) {
next if $key !~ /^(\d+)_\d+_EventId$/;
$maxbnr = $1 if(!$maxbnr || $1>$maxbnr);
}
return "" if(!defined $maxbnr);
my $l = length($maxbnr);
my $k;
for ($k=0;$k<=$maxbnr;$k++) {
my $bnr = sprintf("%0$l.0f", $k); # Prestring erstellen
last if(!ReadingsVal($name, $bnr."_98_EventId", "")); # keine Ausgabe wenn es keine EventId mit Blocknummer 0 gibt -> kein Event/Aufgabe vorhanden
($begind,$begint,$endd,$endt,$gps) = ("","","","","");
$summary = ReadingsVal($name, $bnr."_01_Summary", "");
$desc = ReadingsVal($name, $bnr."_03_Description", "");
$begin = ReadingsVal($name, $bnr."_05_Begin", "");
$end = ReadingsVal($name, $bnr."_10_End", "");
$tz = ReadingsVal($name, $bnr."_15_Timezone", "");
$status = ReadingsVal($name, $bnr."_17_Status", "");
$dleft = ReadingsVal($name, $bnr."_20_daysLeft", "");
$location = ReadingsVal($name, $bnr."_35_Location", "");
$gpsa = ReadingsVal($name, $bnr."_40_gpsAddress", "");
$gpsc = ReadingsVal($name, $bnr."_45_gpsCoordinates", "");
$completion = ReadingsVal($name, $bnr."_85_percentComplete", "");
$cal = ReadingsVal($name, $bnr."_90_calName", "");
$id = ReadingsVal($name, $bnr."_98_EventId", "");
$isallday = ReadingsVal($name, $bnr."_50_isAllday", "");
if($gpsc) {
my $micon;
if ($mi eq "icon") {
# Karten-Icon auswählen
my $di = "it_i-net";
my $ui = SSCal_evalTableSpecs ($hash,$di,$hash->{HELPER}{tableSpecs}{columnMapIcon},$bnr);
$micon = FW_makeImage($ui);
} elsif ($mi eq "data") {
$micon = join(" ", split(",", $gpsc));
} elsif ($mi eq "text") {
# Karten-Text auswählen
my $dt = "link";
$micon = SSCal_evalTableSpecs ($hash,$dt,$hash->{HELPER}{tableSpecs}{columnMapText},$bnr);
} else {
$micon = "";
}
my ($lat,$lng) = split(",", $gpsc);
$lat = (split("=", $lat))[1];
$lng = (split("=", $lng))[1];
# Kartenanbieter auswählen
my $up = SSCal_evalTableSpecs ($hash,"",$hash->{HELPER}{tableSpecs}{columnMapProvider},$bnr);
if ($up eq "GoogleMaps") { # Kartenprovider: Google Maps
$gps = " $micon ";
} elsif ($up eq "OpenStreetMap") {
$gps = " $micon "; # Kartenprovider: OpenstreetMap
} else {
$gps = " $micon "; # Kartenprovider default: Google Maps
}
}
if($begin ne "") { # Datum sprachabhängig konvertieren bzw. heute/morgen setzen
my ($ny,$nm,$nd,undef) = split(/[ -]/, TimeNow()); # Jetzt
my ($by,$bm,$bd,$bt) = split(/[ -]/, $begin);
my ($ey,$em,$ed,$et) = split(/[ -]/, $end);
my $ntimes = fhemTimeLocal(00, 00, 00, $nd, $nm-1, $ny-1900);
my $btimes = fhemTimeLocal(00, 00, 00, $bd, $bm-1, $by-1900);
my $etimes = fhemTimeLocal(00, 00, 00, $ed, $em-1, $ey-1900);
if($de) {
$begind = "$bd.$bm.$by";
$endd = "$ed.$em.$ey";
} else {
$begind = "$by-$bm-$bd";
$endd = "$ey-$em-$ed";
}
my($a,$b,undef) = split(":", $bt);
$begint = "$a:$b";
my($c,$d,undef) = split(":", $et);
$endt = "$c:$d";
$edleft = "";
if($etimes >= $ntimes) {
$edleft = int(($etimes - $ntimes)/86400);
}
$begind = (($de)?'heute ':'today ') if($dleft eq "0");
$endd = (($de)?'heute ':'today ') if($edleft eq "0");
$begind = (($de)?'morgen ':'tomorrow ') if($dleft eq "1");
$endd = (($de)?'morgen ':'tomorrow ') if($edleft eq "1");
if (($begind eq $endd) && !$isallday) {
$endd = ""; # bei "Ende" nur Uhrzeit angeben wenn Termin am gleichen Tag beginnt/endet aber kein Ganztagstermin ist
} elsif (($begind eq $endd) && $isallday) {
$begint = "";
$endt = "";
}
}
# Icon für Spalte Resttage spezifizieren
$dleft = SSCal_evalTableSpecs ($hash,$dleft,$hash->{HELPER}{tableSpecs}{columnDaysLeftIcon},$bnr,@allrds);
# Icon für Spalte Status spezifizieren
$status = SSCal_evalTableSpecs ($hash,$status,$hash->{HELPER}{tableSpecs}{columnStateIcon},$bnr,@allrds);
$out .= "