FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Thema gestartet von: Herby am 11 Juni 2014, 16:56:33

Titel: 57_Calendar: Zombie-Termine
Beitrag von: Herby am 11 Juni 2014, 16:56:33
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


Titel: Antw:57_Calendar: Zombie-Termine
Beitrag von: betateilchen am 11 Juni 2014, 16:59:34
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.
Titel: Antw:57_Calendar: Zombie-Termine
Beitrag von: Herby am 11 Juni 2014, 17:02:51
OK, vielleicht helfen ihm ja die bereitgestellten Dateien dabei, die Zombies zu finden ...
Titel: Antw:57_Calendar: Zombie-Termine
Beitrag von: Herby am 13 Juni 2014, 15:12:38
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.
Titel: Antw:57_Calendar: Zombie-Termine
Beitrag von: betateilchen am 13 Juni 2014, 19:27:18
Dir fehlt es an innerer Ruhe und Geduld.
Titel: Antw:57_Calendar: Zombie-Termine
Beitrag von: Herby am 14 Juni 2014, 00:32:34
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)
Titel: Antw:57_Calendar: Zombie-Termine
Beitrag von: Herby am 14 Juni 2014, 08:54:35
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.
Titel: Antw:57_Calendar: Zombie-Termine
Beitrag von: Dr. Boris Neubert am 14 Juni 2014, 17:11:14
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
Titel: Antw:57_Calendar: Zombie-Termine
Beitrag von: Dr. Boris Neubert am 02 Januar 2016, 19:19:20
Hallo,

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

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

Diese Version kann EXDATE verarbeiten.

Viele Grüße
Boris