Google Calendar: Integration in fhem

3,341 views
Skip to first unread message

Dr. Boris Neubert

unread,
May 17, 2012, 3:25:14 PM5/17/12
to fhem-de...@googlegroups.com
Hallo,

ich habe mich heute ein wenig gedanklich mit einer Integration von
Google-Kalendern in fhem befaßt.

Es gibt zwar ein Perl-Modul Net::Google::Calendar auf CPAN, das aber
soviele Abhängigkeiten hat, daß ich es nicht verwenden möchte.

An sich genügt es, über die private URL eines Google-Kalenders alle
Kalendereinträge im ICAL-Format herunterzuladen. Diese lassen sich dann
von einem Kalender-Modul parsen (Fleißarbeit).

Die Frage ist jetzt, wozu die Einbindung in fhem gut sein soll, und wie
die Einbindung logisch dargestellt wird.

Wozu soll es gut sein? Ich möchte mittels fhem Ereignisse auslösen, wenn
ein Termin im Kalender beginnt oder endet oder einen Alarm auslöst.
Außerdem möchte ich Termine im Kalender über den RSS-Feed auf meinem
Bilderrahmen darstellen, und zwar grün in der Zeit zwischen
Benachrichtigung und Start und rot in der Zeit zwischen Start und Ende
und sonst gar nicht. In pgm2 sollen sie natürlich auch angezeigt werden.

Wie kann das in der Logik von fhem funktionieren? Ich stelle mir vor,
alle Minute zu prüfen, ob die Benachrichtung, der Beginn oder das Ende
eines Termins erreicht ist, und generiere ein Event (alarm, start, stop).

Mir fehlt aber noch eine Idee, wie ich die 0..n Termine in fhem
verwalte, die im Zustand alarmed oder running sind, damit man damit was
machen kann.

Vorschläge willkommen!

Viele Grüße
Boris


Rudolf Koenig

unread,
May 19, 2012, 6:54:31 AM5/19/12
to fhem-de...@googlegroups.com
> An sich gen�gt es, �ber die private URL eines Google-Kalenders alle
> Kalendereintr�ge im ICAL-Format herunterzuladen.

Ich habe irgendetwas von einem API key gelesen, der nur bis zu 10.000 Abrufe am
Tag konstenlos ist. Habe ich es falsch gelesen, oder bezieht sich das auf was
anderes?



> Mir fehlt aber noch eine Idee, wie ich die 0..n Termine in fhem
> verwalte, die im Zustand alarmed oder running sind, damit man damit was
> machen kann.

Evtl. kannst Du es mit dem InternalTimer erledigen:

- bei der fhem-definition der KalenderServer das naechste Ereignis abholen
(Ereignis == Anfang oder Ende eines Termins), und diesen Zeitpunkt in
InternalTimer mit den Parameter des Ereignisses und mit einen eigenen
Funktion eintragen.

- beim Aufruf der eigenen Funktion wird ein dem Ereignis entsprechendes Event
generiert bzw. Status gesetzt, und man wiederholt den Vorgang ab Definition.
Falls in der Zwischenzeit andere Ereignisse verstrichen sind, dann werden
fuer diese auch Events generiert.

- parallel dazu laeuft im vom Benutzer definierbaren Abstand (Minuten oder gar
Stunden) ein zweiter "InternalTimer", der auf neue Termine prueft. Falls der
naechste Zeitpunkt frueher ist, als der eingestellte, dann wird er gegen dem
Neuen ausgetauscht.

- ich faende noch ein "get" interessant, das entweder nach dem Start/Ende eines
Termins fragen kann, oder ob zu einem bestimmten Datum/Zeitpunkt was los ist.

Dr. Boris Neubert

unread,
May 19, 2012, 9:50:08 AM5/19/12
to fhem-de...@googlegroups.com
Hallo,

Am 19.05.2012 12:54, schrieb Rudolf Koenig:
>> An sich genügt es, über die private URL eines Google-Kalenders alle
>> Kalendereinträge im ICAL-Format herunterzuladen.
>
> Ich habe irgendetwas von einem API key gelesen, der nur bis zu 10.000 Abrufe am
> Tag konstenlos ist. Habe ich es falsch gelesen, oder bezieht sich das auf was
> anderes?

ich glaube, daß das zum API gehört, mit dem man direkt einzelne Einträge
im Kalender lesen oder manipulieren kann. Ich ziehe im Moment die banale
Variante vor, mir über die URL

https://www.google.com/calendar/ical/EMAIL/private-KEY/basic.ics

mit EMAIL= foo.bar%40googlemail.com und KEY= ein langer Hex-String

den gesamten Kalender im ICAL-Format zu ziehen, und zwar, wie Du
schreibst, mittels InternalTimer in einem bei

define <NAME> Calendar ical <URL> <INTERVAL>

definierten Intervall <INTERVAL> (Default: 30 Minuten). Das ist der
Zeitraum, nach dem jeweils wieder nach neuen Ereignissen geschaut wird.

> - bei der fhem-definition der KalenderServer das naechste Ereignis abholen
> (Ereignis == Anfang oder Ende eines Termins), und diesen Zeitpunkt in
> InternalTimer mit den Parameter des Ereignisses und mit einen eigenen
> Funktion eintragen.

Das ist eine gute Idee. Alles eine Frage der geschickten Verwaltung der
Alarme und Ereignisse. Es läuft vermutlich darauf hinaus, daß ich die
Ereignisse in einer internen Datenstruktur des Moduls ablege, eine nach
Zeitpunkten (Alarm, Start, Stop) sortierte Liste generiere, und dann
jeweils für den nächsten Zeitpunkt den Wecker stelle.

> - ich faende noch ein "get" interessant, das entweder nach dem Start/Ende eines
> Termins fragen kann, oder ob zu einem bestimmten Datum/Zeitpunkt was los ist.

So was wie:

get <NAME> start <EVENT>
get <NAME> stop <EVENT>
get <NAME> title <EVENT>
get <NAME> location <EVENT>

Wie findet der Anwender ein Ereignis? Im ICAL-Format sieht das so aus:

BEGIN:VEVENT
DTSTART:20120521T140000Z
DTEND:20120521T150000Z
DTSTAMP:20120519T132328Z
UID:oedehg54uq46m...@google.com
CREATED:20120519T132318Z
DESCRIPTION:Beschreibung des Termins
LAST-MODIFIED:20120519T132318Z
LOCATION:Ort des Termins
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:Titel des Termins
TRANSP:OPAQUE
CATEGORIES:http://schemas.google.com/g/2005#event
END:VEVENT

Das Ereignis hat eine UID. Ob das benutzerfreundlich ist?

Ich sehe, es wird mühsam...


Viele Grüße
Boris

Rudolf Koenig

unread,
May 20, 2012, 3:53:21 AM5/20/12
to fhem-de...@googlegroups.com
> UID:oedehg54uq46m...@google.com
...
> SUMMARY:Titel des Termins
...
> Das Ereignis hat eine UID. Ob das benutzerfreundlich ist?

Weniger. Aber es gibt doch "Titel des Termins", und das muesste doch vom
Benutzer stammen, oder wenigstens lesbar sein.


> Ich sehe, es wird m�hsam...

Es muss doch nicht von Anfang an perfekt sein :)

Prof. Dr. Peter A. Henning

unread,
May 25, 2012, 5:14:22 AM5/25/12
to fhem-de...@googlegroups.com
Wäre es nicht sinnvoller, eine Anbindung an SyncML zu bauen ? Dann kann jeder selbst entscheiden, ob er Google Calendar oder andere Anwendungen mit FEHM synchronisiert. Insbesondere könnte man auch in den meisten richtigen Kalenderprogrammen dafür sorgen, dass nicht alle privaten Termine in FHEM landen.

LG
pah
Message has been deleted

Bernhard

unread,
May 27, 2012, 4:40:28 AM5/27/12
to fhem-de...@googlegroups.com
Hi Boris!
Ich weiss nicht, ob du diese Quelle schon kennst, bin gerade darauf gestoßen: https://developers.google.com/google-apps/calendar/



Dr. Boris Neubert

unread,
May 27, 2012, 3:03:13 PM5/27/12
to fhem-de...@googlegroups.com
Hallo,

Am 27.05.2012 10:40, schrieb Bernhard:
> Ich weiss nicht, ob du diese Quelle schon kennst, bin gerade darauf
> gestoßen: https://developers.google.com/google-apps/calendar/

Danke, das kannte ich schon. Ich werde aber das API nicht nutzen.

Es läuft auf ein Gerät hinaus, das wie folgt definiert wird:

define <name> Calendar ical url <URL> [<interval>]

Das Gerät lädt alle <interval> Sekunden (Default: 3.600) von der URL
<URL> eine Datei im ICal-Format herunter. Die <URL> ist die private URL
des Google-Kalenders, nämlich

https://www.google.com/calendar/ical/EMAIL/private-KEY/basic.ics

mit EMAIL= foo.bar%40googlemail.com und KEY= ein langer Hex-String.

Aus dem Kalender werden dann die Kalendereignisse extrahiert, mit diesen
Informationen:
- UID
- Zusammenfassung (der Titel im Kalender)
- früheste der ggf. mehreren Erinnerungszeiten
- Startzeit
- Endzeit

Das ist bis jetzt bereits implementiert, wobei ich nur eine Abhängigkeit
zu Time::Local habe (die mir bekannten Implementierungen von ICal in
perl sind entweder dysfunktional oder ziehen einen Rattenschwanz an
Abhängigkeiten hinter sich her, die nie im Leben auf den kleinen
Systemen verfügbar sind).

Wenn eine der drei o.g. Zeiten erreicht wird, löst der Kalender ein
Event aus, das mit Notify aufgefangen und ausgewertet werden kann. Wie
das aussehen soll, muß ich mir noch überlegen.

Die erste Version, die ich in die Freiheit entlassen werde, wird erstmal
keine Unterstützung für wiederkehrende Ereignisse haben.

Viele Grüße
Boris

Bernhard

unread,
May 28, 2012, 3:23:10 AM5/28/12
to fhem-de...@googlegroups.com
Hi Boris!
Toll, das du schon so konzeptionell an der Sache dran bist und wegen einer Nutzung auf der FRITZ!Box kann ein minimaler Overhead ja nur besser sein.
Man kann ja in Google mehrere Kalender anlegen und dort separate Termine eingeben die im Gesamtkalender entweder angezeigt oder ausgeblendet werden. Im InfoFrame-Projekt wurden diese unterschiedlichen Kalender über die jeweilige Kalenderfarbe auseinander gehalten. Für die FHEM Benutzung wäre das sicher auch sinnvoll, um nicht Termine zu vermischen oder unnütz zu verwalten.
Vielleicht kannst (solltest) du das berücksichtigen.

Am Sonntag, 27. Mai 2012 21:03:13 UTC+2 schrieb Boris Neubert:

Dr. Boris Neubert

unread,
May 28, 2012, 4:16:57 AM5/28/12
to fhem-de...@googlegroups.com
Hallo,

Am 28.05.2012 09:23, schrieb Bernhard:
> über die jeweilige Kalenderfarbe auseinander gehalten. Für die FHEM
> Benutzung wäre das sicher auch sinnvoll, um nicht Termine zu vermischen
> oder unnütz zu verwalten.
> Vielleicht kannst (solltest) du das berücksichtigen.

Du wirst beliebig viele Kalender simultan nutzen können.

Viele Grüße
Boris

Bernhard

unread,
May 28, 2012, 11:39:25 AM5/28/12
to fhem-de...@googlegroups.com
Genial!


Andreas Schaller

unread,
May 29, 2012, 1:27:29 AM5/29/12
to fhem-de...@googlegroups.com
Hallo Boris, tolle Nachrichten. Klingt sehr vielversprechend und ich würde mich gerne zum testen anmelden. Vielen Dank für die schnelle Realisierung.
Andreas

Heiermann

unread,
May 31, 2012, 5:14:20 PM5/31/12
to FHEM developers
Hallo,

nachdem heute via updatefhem eine neue Version des Kalendermoduls
eingetroffen ist, habe ich mal meinen Googlekalender konfiguriert.
Nach einem Neustart von Fhem erhalte ich nun folgende Fehlermeldungen:

2012.05.31 23:06:12 1: reload: Error:Modul 57_Calendar deactivated:
Type of arg 1 to push must be array (not hash element) at ./FHEM/
57_Calendar.pm line 87, near "$entry;"
Type of arg 1 to keys must be hash or array (not hash element) at ./
FHEM/57_Calendar.pm line 351, near "};"
Type of arg 1 to values must be hash or array (not hash element) at ./
FHEM/57_Calendar.pm line 356, near "};"

Fhem käuft bei mir auf einer Fritzbox 7390.

Bernhard

unread,
Jun 1, 2012, 8:48:41 AM6/1/12
to fhem-de...@googlegroups.com
Hi!
Auch bei mir wurde 57_Calendar.pm geladen.

Wenn ich den Kalender mit: define Calendar ical https://www.google.com/calendar/ical/... definiere (SuSE Rechner), dann kommt als Fehlermeldung: Unknown module ical,

Im .log ist kein Eintrag.
Vielleicht kann Boris einen Hinweis geben.



Dr. Boris Neubert

unread,
Jun 1, 2012, 1:25:39 PM6/1/12
to fhem-de...@googlegroups.com

Am 01.06.2012 14:48, schrieb Bernhard:
> Vielleicht kann Boris einen Hinweis geben.

Das Modul ist nicht fertig. Ihr müßt noch abwarten :-)

Grüße
Boris

Viktor Valkov

unread,
Nov 1, 2012, 9:15:39 AM11/1/12
to fhem-de...@googlegroups.com
I just discovered the Calender module in 5.3. Thanks Boris! Is it possible to add functionality for adding and deleting events to a Google calender? That would be really useful for logging events (i.e. when somebody entered and left the house, etc) or adding reminders. And from there you could also easily have google notify you by e-mail or sms. 
I'm not familiar with ical which seems to be your approach. 

Dr. Boris Neubert

unread,
Nov 1, 2012, 3:04:51 PM11/1/12
to fhem-de...@googlegroups.com
Dear Viktor,

Am 01.11.2012 14:15, schrieb Viktor Valkov:
> I just discovered the Calender module in 5.3. Thanks Boris! Is it
> possible to add functionality for adding and deleting events to
> a Google calender? That would be really useful for logging events
> (i.e. when somebody entered and left the house, etc) or adding
> reminders. And from there you could also easily have google notify you
> by e-mail or sms.
> I'm not familiar with ical which seems to be your approach.
the module is based on a download of the Google Calendar in ICAL format.
It does not support making changes to the Calendar as this requires the
use of the Calendar API. I have no plans to do so.

Kind regards
Boris

Torsten Widlitzki

unread,
Nov 16, 2012, 12:08:59 PM11/16/12
to fhem-de...@googlegroups.com
Hallo an die Gruppe,

bin neu bei fhem und taste mich so langsam ran, aber die Kalenderfunktion erscheint mir sehr interessant.
Meine Idee ist mit tasker und Android einen google-Kalendereintrag zu schreiben, sobald ich mich in mein Wlan einlogge oder in die Nähe der Wohnung komme.
Der Kalendereintrag soll jetzt benutzt werden um Licht zu schalten.
Was ich noch nicht verstehe ist wie ich an die UID des Eintrags komme. Die UID variiert ja.
Werde leider aus den Beispielen in der commandref zum Calender nicht ganz schlau.

Gruss Torsten

Andreas Schaller

unread,
Nov 16, 2012, 1:35:38 PM11/16/12
to fhem-de...@googlegroups.com
Hallo Thorsten,

fuer deine Anwendung brauchst du den Kalender nicht. Sobald du im WLAN bist schaltest du den Dummy Thorstenathome auf 1 und danach schaltest du durch ein notify in Abhaengigkeit von Thorstenathome =1 das Licht An. Die WLAN Anleitung steht im Wiki.

Den Kalender benutze ich um einmalige Ereignisse festzulegen oder um Arbeits-Termine als "Blocker" nach Hause weiterzuleiten, dieser unterbindet oder verschiebt dann zeitgebundene Ereignisse.

Andreas

Torsten Widlitzki

unread,
Nov 16, 2012, 1:42:22 PM11/16/12
to fhem-de...@googlegroups.com
Hallo Andreas,
Danke für die prompte Antwort. Habe inzwischen auch gemerkt, dass ich aus ganz anderen Gründen hing.
Habe IO::Socket::SSL nicht installiert und somit wurde der Kalender gar nicht geladen.
Leider funktioniert der einfache workaround "if your Google Calendar URL starts with https:// and the perl module IO::Socket::SSL is not installed on your system, you can replace it by http://." nicht.
Beim Versuch MyCalender im Beispiel nach http umzubennen oder neu anzulegen haengt sich fhem reproduzierbar auf, obwohl der Zugriff auf http://...gogglekalender im explorer läuft.
Ich schaue mir aber jetzt Deine Variante an, sieht vielversprechend aus...
Danke !
Torsten

Dr. Boris Neubert

unread,
Nov 16, 2012, 4:41:35 PM11/16/12
to fhem-de...@googlegroups.com
Hallo,

es würde mich interessieren, was Dein Log in dem Fall mitteilt, daß sich fhem aufhängt (verbose 5 bitte).

Danke
Boris


Von: Torsten Widlitzki <gregr...@googlemail.com>
Gesendet: Fri Nov 16 19:42:22 MEZ 2012
An: fhem-de...@googlegroups.com
Betreff: Re: [FHEM-devel] Re: Google Calendar: Integration in fhem
--
sent from my WePad - apologies for brevity

Torsten Widlitzki

unread,
Nov 17, 2012, 8:59:29 AM11/17/12
to fhem-de...@googlegroups.com
Hallo Boris,
muss ich nachreichen. fhem laeuft auf nem raspberry pi und den hats mir gestern so zerschossen, das ich das system neu einspielen musste. Die logdatei ist also weg. Ich mache aber heute abend ne Sicherung vom System und probiere das ganze nochmal.
Wenn der Fehler wieder kommt poste ich den logeintrag.
Bin schon noch an einer lauffähigen Lösung interessiert, Andreas' Vorschlag geht ja nur für die Fritzbox (oder übersehe ich was?)
Gruss Torsten

Torsten Widlitzki

unread,
Nov 17, 2012, 2:36:50 PM11/17/12
to fhem-de...@googlegroups.com
Hallo Boris,
nehme alles zurück. Läuft super. Macht jetzt Licht aus,wenn Erna kommt. Hatte nicht damit gerechnet dass der raspberry soo langsam ist (oder mein Terminkalender ist zu voll).
Tolle Sache, bin begeistert, das eröffnet Möglichkeiten...
Gruss Torsten
Reply all
Reply to author
Forward
0 new messages