openHAB mit CalDAV Binding
Wer kennt das nicht, Termine, Termine über Termine und sie bestimmen unseren gesamten Alltag, egal ob privat oder beruflich, alles voll mit Terminen. Wieso sollen Termine nur uns steuern, lassen wir unser Smart Home auch mit Terminen steuern.
In diesem Artikel möchte ich kurz beschreiben, wie openHAB mit CalDAV Binding konfiguriert wird und ein Verwendungsbeispiel anhand der Heizungssteuerung geben.
Ok, was ist CalDAV eigentlich?
„CalDAV (Calender Distributed Authoring and Versioning) ist ein Netzwerkprotokoll, das es ermöglicht, auf Kalenderdateien über WebDAV zuzugreifen und zu synchronisieren.“
So schreibt es die Wikipedia, also kurz um, ein Netzwerkprotokoll zum Austausch von Kalenderdaten, was Herstellerneutral ist und damit für nahe zu alle Kalenderdienste anwendbar ist. Dieser Standard ist im RFC 4791 spezifiziert und kann von jedem Kalenderdienst implementiert werden.
Und was können wir damit anstellen?
In der kalten Jahreszeit fällt mir gleich wieder die Heizungssteuerung ein, aber auch eine Anwesenheitssimulation im Urlaub und vieles andere ist denkbar. Im Grunde ist es die Schnittstelle für eine individuelle GUI zur Zeitsteuerung.
Was brauchen wir dafür?
Wir brachen das CalDAV Addon, was aus folgenden Bestandteilen besteht:
- org.openhab.io.caldav-<version>.jar (wird immer benötigt)
- org.openhab.binding.caldav-command-<version>.jar (zum Ausführen von Befehlen, wie cron)
- org.openhab.binding.caldav-personal-<version>.jar (für Anwesenheit oder Anzeige von Terminen)
- org.openhab.persistence.caldav-<version>.jar (für Logging und Aufzeichnung von Events)
Wie konfiguriert man das jetzt in openHAB?
Zunächst muss die Kalenderanbindung für das CalDAV Binding in der openhab.cfg konfiguriert werden, damit das Addon weis, wie es auf den Kalender zugreifen kann. Da es diverse Kalendersysteme gib, hier nur zwei Beispiele anhand von ownCloud und Google Calendar, aber das Prinzip ist immer das Gleiche, nur die URL ändert sich. Bei mir kommt ownCloud auf dem Raspberry Pi zum Einsatz, so ist alles zusammen auf einem Gerät.
Allgemein
################################ CalDav Binding ####################################### # caldavio:<calendar-id>:url= caldavio:<calendar-id>:username= caldavio:<calendar-id>:password= caldavio:<calendar-id>:reloadInterval=<minutes> caldavio:<calendar-id>:preloadTime=<minutes> caldavio:heat:disableCertificateVerification=true caldavio:timeZone=<e. g. Europe/Berlin> # Additionally needed binding: org.openhab.binding.caldav-command-<version>.jar # used to execute commands by a triggered event # multiple calendars (calerdar-id) can be seperated by commas caldavCommand:readCalendars=<calendar-id> # Additionally needed binding: org.openhab.binding.caldav-personal-<version>.jar # used to record and simulate presence and to show upcoming/active events # multiple calendars (calerdar-id) can be seperated by commas caldavPersonal:usedCalendars=<calendar-id> # If one of these identifiers can be found inside the place of the event, # this event will not be used for presence caldavPersonal:homeIdentifiers=<values seperated by commas>
ownCloud
################################ CalDav Binding ####################################### # caldavio:heat:url=https://<IP|Hostname>/remote.php/caldav/calendars/<username>/<calendar> caldavio:heat:username=<username> caldavio:heat:password=<password> caldavio:heat:reloadInterval=30 caldavio:heat:preloadTime=1440 caldavio:timeZone=Europe/Berlin caldavCommand:readCalendars=heat
Google Calendar
################################ CalDav Binding ####################################### # caldavio:openhab_tasks:url=https://www.google.com/calendar/dav/<Google Account>/events caldavio:openhab_tasks:username=<Google Account> caldavio:openhab_tasks:password=<password> caldavio:openhab_tasks:reloadInterval=30 caldavio:openhab_tasks:preloadTime=1440 caldavio:timeZone=Europe/Berlin caldavCommand:readCalendars=openhab_tasks
So, damit ist der entsprechende Kalender erstmal angebunden. Die Definition von Items können wir uns eigentlich sparen, wenn wir nur Items steuern wollen. Da ich hier das Beispiel der Heizungssteuerung nehme, brauche ich doch ein Item, um die automatische Terminverarbeitung von Befehlen abschalten zu können. Das sieht dann so aus:
Switch heat_swi_OpMo_liv "heat_swi_OpMo_liv" <clock> (gr_heat,gr_swi_OpMo) {caldavCommand="itemName:heat_swi_OpMo_liv type:<DISABLE>"} Switch heat_swi_OpMo_bed "heat_swi_OpMo_bed" <clock> (gr_heat,gr_swi_OpMo) {caldavCommand="itemName:heat_swi_OpMo_bed type:<DISABLE>"} Switch heat_swi_OpMo_bat "heat_swi_OpMo_bat" <clock> (gr_heat,gr_swi_OpMo) {caldavCommand="itemName:heat_swi_OpMo_bat type:<DISABLE>"}
Damit kann ich bequem jeden Raum von Automatik auf manuell stellen oder über ein Hauptschalter für alle die Automatik komplett deaktivieren. Die eigentliche Steuerung der Items und deren Werte tragen wir in die Termine ein, es muss in openHAB nichts weiter vorbereitet werden.
Ein Termin besteht in der Regel aus einem Betreff, einer Start- und Endzeit, einem Ort und einer Beschreibung. Für die Steuerung in openHAB sind nur Start- und Endzeit und die Beschreibung entscheidend, alle anderen Werte können frei beschriftet werden. Die eigentlichen Befehle für die Steuerung kommen in die Beschreibung eines jeden Termins. Die Syntax dafür sieht wie folgt aus:
<BEGIN|END>:<Item-Name>:<Command>
Am Beispiel meiner Heizung im Wohnzimmer sieht dass dann so aus:
BEGIN:heat_SetP_liv:24 END:heat_SetP_liv:16
Damit wir zum Start-Zeitpunkt des Termins die Heizung auf 24°C gestellt und nach Ablauf des Termins auf 16°C, der Betreff ist nur fürs Augen, damit es schön aussieht.
Und kaum macht man ein Serientermin daraus, hat man ein fertigen Heizplan, den man bequem von jedem Endgerät aus mittel GUI einstellen kann.
Das war’s auch schon, mehr braucht es nicht um mittels CalDAV die Heizung mit openHAB zu steuern. Weitere Details findet ihr im openHAB Wiki.
Was interessiert euch an openHAB, welche Anleitung soll ich als nächste schreiben? Lasst einfach ein kommentar da und ich werd sehen was möglich ist.
Hey,
ich versuche deine Heizungssteuerung in einer abgewandelten Form bei mir zu implementieren. Ich verstehe aber den Teil mit der Deaktivierung der automatischen Terminverarbeitung nicht und werde auch nicht aus der WIKI von openHAB schlau ?
Switch TEST { caldavCommand=“itemName:Heizung_Kueche_Set type:“ }
Wenn ich das richtig verstehe müsste ich jetzt mit dem Item „Test“ die automatische Ausführung von dem Item Heizung_Kueche_Set verhindern können?! Klappt leider nicht ? Oder mache ich da was komplett falsch?
Gruß
Richard