57_Calendar: Zombie-Termine

Begonnen von Herby, 11 Juni 2014, 16:56:33

Vorheriges Thema - Nächstes Thema

Herby

Hallo zusammen,
ich bin neu hier; schöne Grüße and die Entwickler- und Anwendergemeinde.
Vor wenigen Wochen war ich noch blutiger Anfänger mit FHEM.
Dennoch konnte ich jetzt ein recht umfangreiches FHEM-Projekt erfolgreich abschließen. FHEM ist schon cool  :)

Bei dem Projekt verwende ich das Modul 57_Calendar recht exzessiv; parktisch die gesamte Zeitsteuerung für alle Aktoren läuft darüber.
Bin von der Stabilität begeistert; Hut ab vor den Entwicklern!

Bei der exzessiven Nutzung des Google Kalender in Verbindung mit 57_Calendar konnte ich feststellen, dass Ausnahmen bei Serienterminen von 57_Calendar im Grunde nicht ausgewertet werden (z.B. Verschieben von Einzelterminen aus der Serie, Umbenennen von Einzelterminen aus der Serie).
Was aber (meist) funktioniert ist das Löschen einzelner Termine aus einer Terminserie.

Meist..., aber nicht immer.
Manchmal führt 57_Calender einen im Google-Kalender gelöschten und im ics-File als EXDATE eingetragenen Termin weiter. Ich nenne derartige Termine "Zombie-Termine"  :-\
FHEM führt dann leider auch die damit verbundene Aktion aus...  :(

Nach viel rumprobieren konnte ich nun den Fehler mit einem minimalen Kalender und einer mini-fhem.cfg reproduzieren.
Leider reichen meine perl-Kenntnisse noch nicht aus, um den Code selbst zu modifizieren.
Daher poste ich mal meine Erkenntnisse und Dateien hier, in der Hoffnung, dass einer der Experten den Fehler finden und fixen möge  8)

Viele Grüße,
Herby



betateilchen

Das Problem ist schon länger bekannt und Boris hatte auch schon vor einiger Zeit zugesagt, sich um das Problem zu kümmern, wenn er Zeit hat.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Herby

OK, vielleicht helfen ihm ja die bereitgestellten Dateien dabei, die Zombies zu finden ...

Herby

Ich konnte die ics-Konfiguration zur Erzeugung von Zombies noch weiter vereinfachen. Ein einziger VEVENT-Eintrag reicht aus, um den Fehler zu provozieren:

BEGIN:VEVENT
DTSTART;TZID=Europe/Berlin:20140713T091800
DTEND;TZID=Europe/Berlin:20140713T101800
RRULE:FREQ=WEEKLY;BYDAY=SU;UNTIL=20140719T215959Z
EXDATE;TZID=Europe/Berlin:20140713T091800
DTSTAMP:20140613T060542Z
UID:qdeuavr4umthgsp7r355gn0dtc@google.com
CREATED:20140605T190358Z
DESCRIPTION:
LAST-MODIFIED:20140613T055436Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Brauchwasser desinfizieren
TRANSP:OPAQUE
END:VEVENT


EXDATE (weist darauf hin, dass der spezifizierte Termin gelöscht wurde) wird von 57_Calendar nicht erkannt, damit wird der eigentlich gelöschte Termin weiter ausgewertet...

get MyCalendar full all liefert dann auch brav:

Zitatqdeuavr4umthgsp7r355gn0dtcgooglecom new upcoming 13.07.2014 09:18:00-13.07.2014 10:18:00 Brauchwasser desinfizieren

Mit der Beseitigung des Fehlers wäre bereits viel gewonnen...

ICS-Datei liegt bei.

betateilchen

Dir fehlt es an innerer Ruhe und Geduld.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Herby

Zitat von: betateilchen am 13 Juni 2014, 19:27:18
Dir fehlt es an innerer Ruhe und Geduld.
... es reicht ja, wenn einer von uns beiden mehr als genug davon besitzt...  ;D ::) 8)

Herby

Es stimmt schon, Geduld ist nicht meine größte Stärke...

Deshalb hab ich mir jetzt den Code von 57_Calendar mal etwas genauer angeschaut und einen Patch zum oben beschriebenen Problem gemacht.
In meinen Tests funktioniert der Patch einwandfrei.

Hier der Patch:


Datei: fhem/FHEM/57_Calendar.pm

suche

while($self->{end} < $t and $self->advanceToNextOccurance()) { ; }


ersetze durch

# Zombie-Patch of Herby : 14.06.2014
if ($self->{start} ~~ $self->{exdate}) {
if (!$self->advanceToNextOccurance()) {
   $self->{start} = $t -2;
   $self->{end} = $t -1;
}   
} else {

    while($self->{end} < $t and $self->advanceToNextOccurance()) { ; }
}
# End Zombie-Patch of Herby : 14.06.2014


Wäre toll, wenn der eine oder andere, der ebenfalls ein Problem mit den Zombies hat, den Patch testet und berichtet.

Dr. Boris Neubert

Hallo,

genau, die exdates werden schon eingelesen aber bei den recurring events ignoriert.

Ich habe im Moment nicht die Muße, mich darum zu kümmern.

Die Lösung sollte aber sein, Termine aus den exdates zu überspringen statt sie in die Vergangenheit zu beamen.

Einen funktionierenden Patch, der dieser. Anforderung genügt, nehme ich entgegen.

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

Dr. Boris Neubert

Hallo,

es gibt eine neue Version im alpha-Test. Lies bitte hier:

http://forum.fhem.de/index.php/topic,46609.0.html

Diese Version kann EXDATE verarbeiten.

Viele Grüße
Boris

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