FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Kalendermodule => Thema gestartet von: betateilchen am 18 Juni 2025, 20:03:54

Titel: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: betateilchen am 18 Juni 2025, 20:03:54
Gegeben ist folgendes:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:Data::ICal 0.24
BEGIN:VEVENT
DESCRIPTION:Description
DTSTAMP:20250618T174801Z
DTSTART:20250618T194000
DURATION:+PT5M
LOCATION:Location
SUMMARY:Summary
UID:6852fbd1-f33f-22e2-1c2c-6ce0189d4a26ee69-fhem
END:VEVENT
END:VCALENDAR

Dieser Eintrag läßt sich problemlos in einem Calendar-device verarbeiten.

Das Attribut cutoffOlderThan mit dem Wert 60s hat aber keine Wirkung.
Nach einem "set <calendar> reload" findet sich mit "get <calender> vevents" immer noch der abgelaufene Eintrag:

7: VEVENT @4 [new]
    DESCRIPTION: Description
    DTSTAMP: 20250618T174801Z
    DTSTART: 20250618T194000
    DURATION: +PT5M
    LOCATION: Location
    SUMMARY: Summary
    UID: 6852fbd1-f33f-22e2-1c2c-6ce0189d4a26ee69-fhem
    >>> Events:
      6852fbd1f33f22e21c2c6ce0189d4a26ee69fhem         end                     18.06.2025 19:40-18.06.2025 19:45 Summary  Location
    >>> Skipped events:

Meine Vermutung nach einem oberflächlichen Blick in den Code:

Es wird zwar für ein event ein Ende berechnet, wenn DURATION angegeben ist:

    } elsif($self->hasKey("DURATION")) {
        my $duration= $self->d($self->value("DURATION"));
        $event->{end}= $nextstart + $duration;

aber bei der Auswertung der VEVENTS wird die Variante mit DURATION nicht berücksichtigt und bei nicht periodischen Einträgen nur nach DTEND gesucht, was es bei Einträgen mit DURATION aber nicht gibt. Deshalb wird das cutoffOlderThan nicht ausgeführt.



Zusatzinfo:
Das Attribut hideOlderThan funktioniert in "get <calendar> events" einwandfrei und filtert die abgelaufenen Einträge aus.
Titel: Aw: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: Dr. Boris Neubert am 18 Oktober 2025, 09:02:50
Hallo,

kannst du bitte mal beigefügte Version bei Dir testen?

Viele Grüße
Boris
Titel: Aw: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: betateilchen am 19 Oktober 2025, 23:18:42
Ja, mache ich. Bin aber jetzt am Wochenende nicht dazu gekommen.
Titel: Aw: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: betateilchen am 20 Oktober 2025, 12:08:49
Hallo Boris,

bis jetzt erkenne ich im Verhalten der Kalendereinträge keine Änderung.

Aber im Logfile habe ich eine "neue" Meldung:

2025.10.20 11:58:32 1: PERL WARNING: Argument "P1D" isn't numeric in addition (+) at ./FHEM/57_Calendar.pm line 3088.
Kann die mit Deiner Änderung zusammenhängen?


EDIT: es gibt noch mehr Meldungen zu einem späteren Zeitpunkt:

2025.10.20 13:00:58 1: PERL WARNING: Argument "+PT5M" isn't numeric in addition (+) at ./FHEM/57_Calendar.pm line 3088.
2025.10.20 13:00:58 1: PERL WARNING: Argument "20251020T120000" isn't numeric in addition (+) at ./FHEM/57_Calendar.pm line 3088.

Titel: Aw: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: Dr. Boris Neubert am 20 Oktober 2025, 20:22:26
Hmmm... Copy & Paste funktioniert also doch nur manchmal beim Programmieren ;-)

Ich muss mir einen Testfall bauen. Oder kannst du mir bitte gezielt die beiden VEVENTS aus der .ics-Datei schicken, die P1D und +PT5M in DURATION stehen haben?
Titel: Aw: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: betateilchen am 21 Oktober 2025, 09:50:44
Zitat von: Dr. Boris Neubert am 20 Oktober 2025, 20:22:26Oder kannst du mir bitte gezielt die beiden VEVENTS aus der .ics-Datei schicken, die P1D und +PT5M in DURATION stehen haben?

Jetzt wird es lustig... P1D habe ich überhaupt nirgends stehen.

Zum Testen hatte ich einen Calendar angelegt, der nur aus dem vcalendar aus dem ersten Beitrag hier im Thread bestand. Ich hatte lediglich DTSTART auf das gestrige Datum geändert.
Titel: Aw: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: betateilchen am 01 November 2025, 13:04:58
Zitat von: betateilchen am 21 Oktober 2025, 09:50:44
Zitat von: Dr. Boris Neubert am 20 Oktober 2025, 20:22:26Oder kannst du mir bitte gezielt die beiden VEVENTS aus der .ics-Datei schicken, die P1D und +PT5M in DURATION stehen haben?

Jetzt wird es lustig... P1D habe ich überhaupt nirgends stehen.

Ok, das P1D kommt aus dem Abfallkalender des Landkreises hier.

BEGIN:VEVENT
UID:38643731-3131-4233-a130-326163383566
DTSTAMP:20251101T115824Z
DESCRIPTION:Abfuhrtermine und aktuelle Störungsmeldungen auf https://abfall
 .landkreis-stade.de/abfuhrkalender/
DTSTART;VALUE=DATE:20251114
DURATION:P1D
LOCATION:Fredenbeck\, Alle anderen Straßen
SUMMARY:Restabfalltonne(14-täglich)
TRANSP:TRANSPARENT
URL:https://abfall.landkreis-stade.de/abfuhrkalender/
X-MICROSOFT-CDO-BUSYSTATUS:FREE
END:VEVENT

Titel: Aw: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: Dr. Boris Neubert am 09 Dezember 2025, 20:51:38
Some years later...
Titel: Aw: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: betateilchen am 11 Dezember 2025, 13:01:52
Hallo Boris,
mit dem Event im ersten Beitrag habe ich heute getestet und das Verhalten scheint sich grundsätzlich verändert zu haben. Mit gesetztem Attribut cutoffOlderThan 60s wird mir von "get ... vevents" kein Event mehr zurückgeliefert.

Aber ich habe neue perl Warnungen im Log:

2025.12.11 12:58:11 1: PERL WARNING: Argument "20250618T194000" isn't numeric in addition (+) at ./FHEM/57_Calendar.pm line 3088.
2025.12.11 12:58:11 1: stacktrace:
2025.12.11 12:58:11 1:     main::__ANON__                      called by ./FHEM/57_Calendar.pm (3088)
2025.12.11 12:58:11 1:     main::Calendar_UpdateCalendar       called by ./FHEM/57_Calendar.pm (2913)
2025.12.11 12:58:11 1:     main::Calendar_PollChild            called by fhem.pl (3514)
2025.12.11 12:58:11 1:     main::HandleTimeout                 called by fhem.pl (710)

2025.12.11 12:58:14 1: PERL WARNING: Use of uninitialized value in addition (+) at fhem.pl line 5266.
2025.12.11 12:58:14 1: stacktrace:
2025.12.11 12:58:14 1:     main::__ANON__                      called by fhem.pl (5266)
2025.12.11 12:58:14 1:     main::fhemTimeGm                    called by fhem.pl (5272)
2025.12.11 12:58:14 1:     main::fhemTimeLocal                 called by ./FHEM/57_Calendar.pm (1186)
2025.12.11 12:58:14 1:     ICal::Entry::tm                     called by ./FHEM/57_Calendar.pm (1198)
2025.12.11 12:58:14 1:     ICal::Entry::before                 called by ./FHEM/57_Calendar.pm (3088)
2025.12.11 12:58:14 1:     main::Calendar_UpdateCalendar       called by ./FHEM/57_Calendar.pm (2913)
2025.12.11 12:58:14 1:     main::Calendar_PollChild            called by fhem.pl (3514)
2025.12.11 12:58:14 1:     main::HandleTimeout                 called by fhem.pl (710)

Titel: Aw: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: Dr. Boris Neubert am 14 Dezember 2025, 12:02:44
 :-\

Kalenderarithmetik mit Zeiten gemischt im ISO-Format und als Unix-Zeitstempel geht schief.

Neuer Versuch, getestet mit der Datei aus dem ersten Beitrag, geschrieben in ausreichendem Wachzustand :-)
Titel: Aw: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: betateilchen am 14 Dezember 2025, 18:26:03
Bisher keine Fehlermeldungen mehr im Log.

Danke!
Titel: Aw: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: Dr. Boris Neubert am 15 Dezember 2025, 17:36:15
Danke für deine Geduld. Ist eingecheckt.
Titel: Aw: [bug] 57_Calendar.pm: cutoffOlderThan funktioniert nicht mit DURATION
Beitrag von: betateilchen am 15 Dezember 2025, 19:33:58
Danke.