[PATCH] Calendar: implement basic handling of reoccuring events

182 views
Skip to first unread message

Matthias Gehre

unread,
Nov 26, 2012, 1:41:58 AM11/26/12
to fhem-de...@googlegroups.com
Hallo,

angehängter Patch implementiert wiederkehrende Events.
Unterstützt:
SECONDLY, MINUTELY, HOURLY, DAILY, WEEKLY, FREQ, COUNT, UNITL, EXDATE
Nicht untersützt:
MONTHLY, YEARLY, BYDAY, BY*

Nicht unterstützte Fälle werden im Log angesagt.

Viele Grüße,
Matthias
CALENDAR-basic-reoccuring.patch

Andreas Schaller

unread,
Nov 27, 2012, 3:33:56 PM11/27/12
to fhem-de...@googlegroups.com
Hallo Matthias,

kann man deine Erweiterung in Zukunft auch über  UPDATE erhalten  ?

Danke
Andreas

Dr. Boris Neubert

unread,
Nov 27, 2012, 3:53:12 PM11/27/12
to fhem-de...@googlegroups.com
Hallo,

ja, wenn ich Zeit gefunden habe, den Patch anzusehen und zu testen und für gut zu befinden.

Viele Grüße
Boris


Von: Andreas Schaller <and...@andreas-schaller.de>
Gesendet: Tue Nov 27 21:33:56 MEZ 2012
An: fhem-de...@googlegroups.com
Betreff: [FHEM-devel] Re: [PATCH] Calendar: implement basic handling of reoccuring events
--
sent from my WePad - apologies for brevity

Dr. Boris Neubert

unread,
Nov 29, 2012, 4:07:41 PM11/29/12
to fhem-de...@googlegroups.com
Hallo Matthias,


Am 26.11.2012 07:41, schrieb Matthias Gehre:
angehängter Patch implementiert wiederkehrende Events.
Unterstützt:
SECONDLY, MINUTELY, HOURLY, DAILY, WEEKLY, FREQ, COUNT, UNITL, EXDATE
Nicht untersützt:
MONTHLY, YEARLY, BYDAY, BY*

Nicht unterstützte Fälle werden im Log angesagt.

das sieht mir nach einer ausgezeichneten Arbeit aus! Die Community wird Dir sehr dankbar sein.

Ich habe das jetzt bei mir im Test. Folgendes ist mir aufgefallen:
- ein täglich um 22:00 wiederkehrendes Event erscheint als Event als um 23:00 in fhem - könnte ein grundsätzliches Problem in tm() sein
- advanceToNextOccurance() sucht immer wieder von vorne; aus Performancegründen sollten wir den letzten Startzeitpunkt merken und ab dort suchen; der letzte Startzeitpunkt muß bei Updates des Calendar Events gelöscht werden
- MONTHLY und YEARLY mit Schaltjahresberücksichtigung müssen noch eingefügt werden

Heute abend mache ich Schluß und werde mich am Wochenende wieder damit befassen. Ich habe aber auch nichts dagegen, wenn Du schonmal weiterbaust, wenn Du Zeit und Lust hast.

Vielen Dank für Deine Arbeit.

Viele Grüße
Boris

Dr. Boris Neubert

unread,
Dec 1, 2012, 3:12:02 PM12/1/12
to fhem-de...@googlegroups.com
Hallo,


Am 29.11.2012 22:07, schrieb Dr. Boris Neubert:

Ich habe das jetzt bei mir im Test. Folgendes ist mir aufgefallen:
- ein täglich um 22:00 wiederkehrendes Event erscheint als Event als um 23:00 in fhem - könnte ein grundsätzliches Problem in tm() sein

Ist gefixt.


- advanceToNextOccurance() sucht immer wieder von vorne; aus Performancegründen sollten wir den letzten Startzeitpunkt merken und ab dort suchen; der letzte Startzeitpunkt muß bei Updates des Calendar Events gelöscht werden

Ist ziehmlich wiggelig in der Realisierung und daher zurückgestellt.


- MONTHLY und YEARLY mit Schaltjahresberücksichtigung müssen noch eingefügt werden

Ist erledigt.

Alles eingecheckt im SVN.

Nochmal Danke, Matthias!

Viele Grüße
Boris

Matthias Gehre

unread,
Dec 2, 2012, 2:34:59 AM12/2/12
to fhem-de...@googlegroups.com

Und ich danke dir für die Fixes :-)

> --
> Sie haben diese Nachricht erhalten, weil Sie der Google Groups-Gruppe FHEM developers beigetreten sind.
> Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an fhem-de...@googlegroups.com.
> Wenn Sie aus dieser Gruppe austreten möchten, senden Sie eine E-Mail an fhem-develope...@googlegroups.com.
> Besuchen Sie die Gruppe unter http://groups.google.com/group/fhem-developers?hl=de, um weitere Optionen zu erhalten.

Marcus Terasa

unread,
Dec 6, 2012, 4:17:28 PM12/6/12
to fhem-de...@googlegroups.com
Ich würde mich hier gerne mit einklinken und beim testen etc. helfen, gerne auch beim entwickeln. Bin Programmierer und recht fit in allen möglichen Sprachen, nur leider gerade in Perl nicht. Und kenne mich mit der Struktur von fhem noch nicht wirklich aus. Muss mich da also erst noch einlesen, bzw. benötige Unterstützung.

Ist BYDAY jetzt inzwischen auch schon implementiert? Zumindest wird nichts gegenteiliges geloggt (Du schreibst oben, dass nicht unterstütztes geloggt wird).

Außerdem scheint EXDATE auch noch nicht zu funktionieren.

Wenn ich irgendwie konkret helfen kann, sagt bescheid. Ich werd auch mal im Code stöbern.

Marcus Terasa

unread,
Dec 6, 2012, 4:56:47 PM12/6/12
to fhem-de...@googlegroups.com
Korrektur: EXDATE funktioniert.

Aber nicht, wenn der erste Termin (noch) in der Zukunft liegt und dieser exkludiert ist. Sollte in der Praxis aber nur selten vorkommen, wäre also wohl zu vernachlässigen...

Mal schauen, ob ich das BYDAY implementiert bekomme...

Matthias Gehre

unread,
Dec 6, 2012, 5:51:49 PM12/6/12
to fhem-de...@googlegroups.com
Das Problem der nicht-implementierten Fälle ist, dass sich das nächste Datum nicht durch ein einfaches Offset berechnen lässt.
Dafür muss man dann gmtime/timegm nutzen, und zwischendurch die Änderungen vornehmen.
timegm ist in fhem.pl als fhemTimeGm implementiert.



--
 
 

Marcus Terasa

unread,
Dec 7, 2012, 1:47:10 AM12/7/12
to fhem-de...@googlegroups.com
Oh man, die RRULE scheint ja echt ne Menge "Spaß" zu enthalten...

Ich habe aber einfach mal Google gefragt, wir sind ja sicher nicht die ersten, die das Problem haben. Gefunden habe ich unter anderem dies hier:

http://search.cpan.org/~drolsky/DateTime-Format-ICal-0.09/lib/DateTime/Format/ICal.pm

Wie schon gesagt, tue ich mich mit dem Lesen von Perl (und dem Schreiben erst recht) noch sehr schwer, von daher kann ich gerade auf die Schnelle nicht beurteilen, ob das was taugt... ich werde natürlich dran bleiben, aber vielleicht kann das einer von Euch schneller beurteilen.

Es gibt auch eine Java Implementierung der RRULE, vielleicht kann man die irgendwie einbinden... (auch wenn nicht schön)

http://code.google.com/p/google-rfc-2445/

Matthias Gehre

unread,
Dec 7, 2012, 4:43:38 AM12/7/12
to fhem-de...@googlegroups.com
Die Berechnung zu DataTime::Format::ICal findet in DataTime::Event::ICal statt.
Siehe http://cpan.uwinnipeg.ca/htdocs/DateTime-Event-ICal/DateTime/Event/ICal.pm.html.
Sieht auf den ersten Blick gut aus.



--
 
 

Matthias Gehre

unread,
Dec 7, 2012, 5:46:40 AM12/7/12
to fhem-de...@googlegroups.com
Meistens gibt's Probleme, wenn man Packages benutzt, die nicht standardmäßig auf den Fritz!Boxen o.ä. installiert sind.
Daher würde ich vorschlagen, dass man die beiden Packages von DataTime::*::ICal mit FHEM ausliefert, z.B.
in einem thirdparty/ Verzeichnis.

Marcus Terasa

unread,
Dec 7, 2012, 8:03:54 AM12/7/12
to fhem-de...@googlegroups.com
Sowas könnt Ihr besser beurteilen. Allerdings wirbt AVM bei seinen DECT Steckdosen ja auch damit, dass man sie per Google Kalender steuern kann. Vielleicht könnte man ja heraus finden, womit die parsen. Sollte es auch Perl sein, ist das Package ja vielleicht sogar drauf.

Ich nutze FHEM auf nem Linux-Rechner, da wärs mir egal. Vielleicht kann man das ja auch irgendwie optional machen?

Matthias Gehre

unread,
Dec 7, 2012, 4:19:15 PM12/7/12
to fhem-de...@googlegroups.com
Ich würds statt optional machen einfach mitliefern. Also mit ins FHEM svn (z.B. in einem extra Ordner "thirdparty"), dann wirds per update automatisch mit ausgeliefert. Vielleicht kann einer der FHEM Älteren dazu was sagen.

Bis dahin kannst du das schon mal anfangen zu implementieren. Funktionierender Code wird schwer abgewiesen :-)



Am 7. Dezember 2012 14:03 schrieb Marcus Terasa <marcus...@gmail.com>:
Sowas könnt Ihr besser beurteilen. Allerdings wirbt AVM bei seinen DECT Steckdosen ja auch damit, dass man sie per Google Kalender steuern kann. Vielleicht könnte man ja heraus finden, womit die parsen. Sollte es auch Perl sein, ist das Package ja vielleicht sogar drauf.

Ich nutze FHEM auf nem Linux-Rechner, da wärs mir egal. Vielleicht kann man das ja auch irgendwie optional machen?

--
 
 

Dr. Boris Neubert

unread,
Dec 8, 2012, 12:58:22 PM12/8/12
to fhem-de...@googlegroups.com
Hallo,

Am 06.12.2012 22:56, schrieb Marcus Terasa:
>
> Mal schauen, ob ich das BYDAY implementiert bekomme...

was fehlt denn an der aktuellen Implementierung von BYDAY? Wir
ignorieren zwar beim BYDAY den angegebenen Wochentag aber in der Praxis
funktioniert es doch trotzdem, weil der erste Termin der Serie doch auf
dem Wochentag liegt, oder?

Viele Grüße
Boris

Marcus Terasa

unread,
Dec 11, 2012, 3:11:32 AM12/11/12
to fhem-de...@googlegroups.com
Das Problem sind Mo-Fr Termine.

Wenn ich den Code richtig lese, addierst Du bei einer WEEKLY Frequenz jeweils eine Woche auf den Termin drauf.

Wenn ich aber im Google Calender einen Termin "Mo-Fr" anlege, legt Google den als:

RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR

an. Wenn dann BYDAY einfach ignoriert wird, kann das meiner Meinung nach nicht funktionieren?!

Leider geht es mir genau darum (hab ich auch im anderen Thread bei fhem geschrieben), meinen "Lichtwecker" Mo-Fr einzuschalten.

Hab z.B. testweise einen Mo-Fr Termin angelegt, der Montag (also gestern) gestartet ist. Nächster upcoming Termin ist laut fhem jetzt der 17.12.

Ich hab ja das RFC gelesen und diese RRULE ist teilweise echt gruselig... ich denke, da bleibt nur, eine fertige Implementation zu nehmen, oder es wird echt komplex...

Bei der obigen Rolle müsste man ja so vorgehen, oder?

Wenn WEEKLY && BYDAY, dann ist das Intervall doch wieder DAILY, allerdings muss geprüft werden ob das nächste eintreffende Element auf einen passenden Wochentag fällt.

Ich werd mal versuchen, ob ich das umgesetzt bekomme. Muss ich wohl doch noch mehr Perl lernen...

Marcus Terasa

unread,
Dec 11, 2012, 4:59:54 AM12/11/12
to fhem-de...@googlegroups.com
Noch etwas: Google schreibt für jeden exkludierten Termin eine eigene EXDATE Zeile.

Bsp:
BEGIN:VEVENT
DTSTART;TZID=Europe/Berlin:20121210T100000
DTEND;TZID=Europe/Berlin:20121210T110000
RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
EXDATE;TZID=Europe/Berlin:20121214T100000
EXDATE;TZID=Europe/Berlin:20121213T100000
EXDATE;TZID=Europe/Berlin:20121212T100000
EXDATE;TZID=Europe/Berlin:20121211T100000
DTSTAMP:20121211T091922Z
UID:s67scot@google...
CREATED:20121211T080521Z
DESCRIPTION:
LAST-MODIFIED:20121211T080521Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Test
TRANSP:OPAQUE
END:VEVENT

Ich versuche mich gerade durchzukämpfen, aber Perl ist ja echt so ziemlich anders als C++, Java, PHP, ... die ganzen "seltsamen" Operatoren und Konstrukte bereiten mir gerade echt Kopfschmerzen... :)

Marcus Terasa

unread,
Dec 11, 2012, 9:15:04 AM12/11/12
to fhem-de...@googlegroups.com
So, ich hab mich mal ein wenig durchgequält... ich dachte schon, Objective-C ist gruselig, aber Perl toppt das irgendwie noch... egal.

Hiermit sollten WEEKLY Termine mit BYDAY funktionieren. Außerdem unterstützt es jetzt die mehrzeiligen EXDATEs von Google.

Das ganze ist sicher noch mit viel Vorsicht zu genießen und schließt z.B. noch nicht ein, wenn zu WEEKLY & BYDAY auch noch ein Intervall kommen sollte.

Außerdem sind meine Perl-Kenntnisse wie erwäht sehr mangelhaft, daher geht der Code sicher auch schöner... sollte also von den Profis noch überprüft und ggf. schön gemacht werden.
cal.patch

Matthias Gehre

unread,
Dec 11, 2012, 2:56:41 PM12/11/12
to fhem-de...@googlegroups.com
Habs nicht getestet, der Code sieht aber gut aus.



--
 
 

Dr. Boris Neubert

unread,
Dec 11, 2012, 4:26:19 PM12/11/12
to fhem-de...@googlegroups.com
Am 11.12.2012 15:15, schrieb Marcus Terasa:
> Hiermit sollten WEEKLY Termine mit BYDAY funktionieren. Außerdem
> unterstützt es jetzt die mehrzeiligen EXDATEs von Google.
>
Danke schonmal für Deinen Beitrag!

Ich schau mir den Patch vsl. am Wochenende an.

Viele Grüße
Boris

Dr. Boris Neubert

unread,
Dec 16, 2012, 12:53:13 PM12/16/12
to fhem-de...@googlegroups.com
Hallo Marcus,

Am 11.12.2012 15:15, schrieb Marcus Terasa:
> Hiermit sollten WEEKLY Termine mit BYDAY funktionieren. Außerdem
> unterstützt es jetzt die mehrzeiligen EXDATEs von Google.
>
> Das ganze ist sicher noch mit viel Vorsicht zu genießen und schließt
> z.B. noch nicht ein, wenn zu WEEKLY & BYDAY auch noch ein Intervall
> kommen sollte.
>
ich habe es eingecheckt. Kommt morgen per Update.

Grüße
Boris

Marcus Terasa

unread,
Dec 17, 2012, 5:11:45 PM12/17/12
to fhem-de...@googlegroups.com
Cool, freut mich, dass ich was beisteuern konnte.
Reply all
Reply to author
Forward
0 new messages