57_Calendar.pm Problem mit ganztägigen Terminen ohne DTEND

Begonnen von ebk, 22 Januar 2018, 09:05:54

Vorheriges Thema - Nächstes Thema

ebk

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 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

nils_

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.
viele Wege in FHEM es gibt!

ebk

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

nils_

ok gut,
dann muss Boris mal schauen ob er es einbaut  :-*
viele Wege in FHEM es gibt!

Dr. Boris Neubert

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


Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

nils_

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
viele Wege in FHEM es gibt!

Dr. Boris Neubert

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.

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Nighthawk

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


Dr. Boris Neubert

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!


Nighthawk

#10
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

Dr. Boris Neubert

Ende einen Tag nach Anfang setzen:

   onCreateEvent { $e->{end}= $e->{start}+86400 unless(defined($e->{end})) }

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Nighthawk