Hallo zusammen,
leider setzt es sich mehr und mehr durch, dass ganztägige Termine in ics Kalendern nur noch ein DTSTART aber kein DTEND mehr haben. Das Calendar Modul erzeugt in diesem Fall leider Termine, die sich durch hideOlderThan nicht filtern lassen. Dieses Problem wurde u.a. hier https://forum.fhem.de/index.php/topic,75308.0.html (https://forum.fhem.de/index.php/topic,75308.0.html) schon diskutiert aber bisher noch nicht gelöst.
Eine minimale ics Datei die das Problem zeigt ist folgende (Abfallabholungstermine der Berliner Stadtreinigung):
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
PRODID:-//SabreDAV//SabreDAV//EN
X-WR-CALNAME:Müll
X-APPLE-CALENDAR-COLOR:#e7e774
BEGIN:VEVENT
UID:20170824T125906UTC-1187BdlIVl@www.bsr.de
DTSTAMP:20170824T125906Z
CATEGORIES:BSR Abholung
DESCRIPTION:Abholung Hausmüll
DTSTART;VALUE=DATE:20170927
LOCATION:Adresse. 48\,
SUMMARY:Abholung Hausmüll
END:VEVENT
END:VCALENDAR
Eine mögliche Lösung wäre das automatische Setzen des Endzeitpunktes auf 00:00:00 des Folgetages (analog zur Startzeit, die automatisch auf 00:00:00 gesetzt wird wenn sie fehlt).
Ich habe bereits einen Blick in den Quelltext geworfen, muss aber ehrlich gestehen, dass mein Perl eindeutig zu lange her ist ;-). Wenn es etwas zu testen gibt, helfe ich aber sehr gerne.
Viele Grüße aus Berlin
ebk
kannst du bitte folgenden patch testen bei dir?
habe auch noch die gesamte datei angehängt.
für eine änderung am modul müsste dann Boris drüber gucken. (ich hab da nur etwas rumgespielt)
weil im grunde passt es nicht zur vorgabe, das DTEND bzw. DURATION fehlen.
Hallo nils_,
vielen Dank für den Patch. Nach dem erneuten einlesen des Kalenders können die Einträge jetzt korrekt mit hideOlderThan gefiltert werden! Das Enddatum der Termine wurde jeweils auf 00:00:00 des Folgetages gesetzt.
Für mich und meinen Anwendungsfall funktioniert das hervorragend.
Viele Grüße
ebk
ok gut,
dann muss Boris mal schauen ob er es einbaut :-*
Hallo,
zu dem Problem hier gibt es als Lösung (auch im Forum aufzufinden) die Möglichkeit, onCreateEvent zu benutzen, um ein Ende-Datum zu setzen.
Die Luxus-Alternative wäre ein Attribut defaultDuration, welches bei Terminen ohne Ende-Zeitpunkt automatisch den Ende-Zeitpunkt auf Start-Zeitpunkt plus defaultDuration setzt.
Meinungen?
Grüße
Boris
Zitat von: Dr. Boris Neubert am 23 März 2018, 10:01:26
zu dem Problem hier gibt es als Lösung (auch im Forum aufzufinden) die Möglichkeit, onCreateEvent zu benutzen, um ein Ende-Datum zu setzen.
ah ok.... hab ich so nicht gefunden bzw. falsch gesucht ::)
Zitat von: Dr. Boris Neubert am 23 März 2018, 10:01:26
Die Luxus-Alternative wäre ein Attribut defaultDuration, welches bei Terminen ohne Ende-Zeitpunkt automatisch den Ende-Zeitpunkt auf Start-Zeitpunkt plus defaultDuration setzt.
ja das wäre auch ne idee.
wegen der "Tages-Lösung" hatte ich mich nach dem Zitat aus dem RFC gerichtet:
https://forum.fhem.de/index.php/topic,75308.msg671685.html#msg671685
jetzt auch nochmal in genauer gelesen ( https://tools.ietf.org/html/rfc5545 ).
da müsste man ja eigentlich ne unterscheidung reinbauen ob DTSTART ein "DATE value type" oder "DATE-TIME value type" ist.
beim ersten 1 Tag addieren, beim zweiten wäre Beginn und Ende-Zeit identisch.
Zitat von: Dr. Boris Neubert am 23 März 2018, 10:01:26
Meinungen?
meine bescheidene Meinung dazu:
- keine Fallunterscheidung
- fix 1 Tag addieren
(optional: Luxus-Erweiterung mittels Attribut)
- per Attribut steuern ob DTEND hinzugefügt werden soll oder nicht (siehe unten!)
frage:
gibt es seiteneffekte durch das hinzufügen des DTEND an jeden Termin
ZitatcutoffOlderThan <timespec>
Dieses Attribut schneidet alle nicht wiederkehrenden Termine weg, die eine Zeitspanne cutoffOlderThan vor der letzten Aktualisierung des Kalenders endeten. Der Zweck dieses Attributs ist es Speicher zu sparen. Auf solche Termine kann gar nicht mehr aus FHEM heraus zugegriffen werden. Serientermine und Termine ohne Endezeitpunkt (DTEND) werden nicht weggeschnitten.
evtl. nutzt das jemand genau aus diesem Grund??
also das sie _nicht_ entfernt werden, ist genauso gewollt !?
Auch hier danke für deine Rückmeldung!
Grüße
Nils
OK, habe gerade beschlossen, dass ich das Attribut nicht einbaue, weil ich an der Stelle, wo ich es brauche, nicht darauf zugreifen kann. Bitte mal
attr MyCalendar onCreateEvent { $e->{end}= $e->{start} unless(defined($e->{end}) }
ausprobieren.
Hallo Boris,
leider bekomme ich mit dem onCreateEvent Attribut nur eine Fehlermeldung im Log:
2018.04.29 11:38:51 2: Erroneous onCreateEvent { $e->{end}= $e->{start} unless(defined($e->{end}) }: syntax error at (eval 14414) line 1, at EOF
Letzte Klammer fehlt.
Stimmt, danke!
Hallo nochmal,
irgendetwas scheint bei mir nicht zu stimmen, denn heute wird mir kein Feiertag angezeigt:
Internals:
DEF ical file feiertage.ics 86400
NAME Feiertage_ICS
NOTIFYDEV global
NR 1135
NTFY_ORDER 50-Feiertage_ICS
STATE triggered
TYPE Calendar
Helper:
DBLOG:
changed:
logdb:
TIME 1525125600.03276
VALUE fd850f20a1324634b86331bf5c993a23 end
end:
logdb:
TIME 1525125600.03276
VALUE fd850f20a1324634b86331bf5c993a23
lastUpdate:
logdb:
TIME 1525164154.02627
VALUE 2018-05-01 10:42:33
modeChanged:
logdb:
TIME 1525125600.03276
VALUE fd850f20a1324634b86331bf5c993a23
modeEnd:
logdb:
TIME 1525164154.05207
VALUE fd850f20a1324634b86331bf5c993a23;aac39ac17bf64bfeb1ac56448c042d76;be4fa6ed5ede42c28e565fe980c7eec4;b464a746c37646d6b1c7ba16bc5450af
modeEnded:
logdb:
TIME 1525125600.03276
VALUE fd850f20a1324634b86331bf5c993a23
modeUpcoming:
logdb:
TIME 1525164154.05207
VALUE 8e46224844d14591aefb3ea70b4c8354;8fa9e7f623f44b409a0d5f4ec79b3925;f3f185902c66411ebd6bffc1aaa27bb7;016380fd32b94f2a81c9146dc04f2a5c;efdbce5c674c4e86bf9a254c0a86bb0c
nextUpdate:
logdb:
TIME 1525164154.02627
VALUE 2018-05-02 10:42:33
nextWakeup:
logdb:
TIME 1525164154.0775
VALUE 2018-05-02 10:42:33
state:
logdb:
TIME 1525164154.05207
VALUE triggered
READINGS:
2018-04-29 10:49:03 calname Feiertage
2018-05-01 10:42:34 lastUpdate 2018-05-01 10:42:33
2017-11-20 13:32:04 modeAlarm
2018-04-29 13:18:38 modeAlarmOrStart
2017-11-20 13:32:04 modeAlarmed
2018-05-01 10:42:34 modeChanged
2018-05-01 10:42:34 modeEnd fd850f20a1324634b86331bf5c993a23;aac39ac17bf64bfeb1ac56448c042d76;be4fa6ed5ede42c28e565fe980c7eec4;b464a746c37646d6b1c7ba16bc5450af
2018-05-01 10:42:34 modeEnded
2018-04-29 13:18:38 modeStart
2018-04-02 02:37:44 modeStarted
2018-05-01 10:42:34 modeUpcoming 8e46224844d14591aefb3ea70b4c8354;8fa9e7f623f44b409a0d5f4ec79b3925;f3f185902c66411ebd6bffc1aaa27bb7;016380fd32b94f2a81c9146dc04f2a5c;efdbce5c674c4e86bf9a254c0a86bb0c
2018-05-01 10:42:34 nextUpdate 2018-05-02 10:42:33
2018-05-01 10:42:34 nextWakeup 2018-05-02 10:42:33
2018-05-01 10:42:34 state triggered
Attributes:
group Kalender
onCreateEvent { $e->{end}= $e->{start} unless(defined($e->{end})) }
room System
sortby 11
get Feiertage_ICS events:
01.01 00:00 Neujahr
30.03 00:00 Karfreitag
02.04 00:00 Ostermontag
01.05 00:00 Tag der Arbeit
10.05 00:00 Christi Himmelfahrt
21.05 00:00 Pfingstmontag
03.10 00:00 Tag der Deutschen Einheit
25.12 00:00 1. Weihnachtstag
26.12 00:00 2. Weihnachtstag
get Feiertage_ICS text modeEnd:
01.01.18 00:00 Neujahr
30.03.18 00:00 Karfreitag
02.04.18 00:00 Ostermontag
01.05.18 00:00 Tag der Arbeit
Ende einen Tag nach Anfang setzen:
onCreateEvent { $e->{end}= $e->{start}+86400 unless(defined($e->{end})) }
Danke, jetzt passt es.