Werbung
Hinweis: Diese Seite enthält Werbelinks

SmartHome – openHAB 2 CalDAV Binding

Hier ist der versprochene Beitrag mit dem openHAB 2 CalDAV Binding. Tja, wofür kann man so ein Binding nutzen? Auch hier sind meiner Meinung nach der Phantasie keine Grenzen gesetzt. Mir geht es heute nicht darum eine Anwesenheitssimulation oder eine automatische Drosselung der Heizung im Urlaub zu beschreiben. Nein, mal was ganz anderes. Wäre es nicht schön, wenn die Mülltonne fällig ist über eine Philips Hue Lampe mit einer entsprechenden Farbe informiert zu werden? So wisst ihr gleich, wenn ihr nach Hause kommt, dass ihr noch kurz die Tonne rausstellen müsst. Auch die Nachbarn freuen sich sicher, über das Signal =).

Ich habe mir hierfür das Philips Hue Starter Set bestellt.

Ihr habt noch keine Erfahrung mit openHAB 2 oder einem Server? Dann lest Euch den Beitrag Smart Home – openHAB 2 Installation und Konfiguration durch. Hier ist auch beschrieben wie ihr die Hue Lampen integriert.

openHAB 2 CalDAV Binding – Installation CalDAV Binding

Installiert über die PaperUI wie gehabt das Binding. Wie ihr sehen werdet, gibt es zwei CalDAV Bindings. Das CalDAV Binding (personal) und CalDAV Binding (command). Mit CalDAV Binding (personal) könnt ihr Anwesenheiten ermitteln und kommende und aktive Events in openHAB 2 anzeigen. Das CalDAV Binding (command) dient zur Ausführung von Ereignissen beim Start oder am Ende von Terminen. Da ich in einem späteren Beitrag noch das Thema Anwesenheitssimulation beschreiben möchte, installiere ich bereits beide Bindings. Nach der Installation sieht die PaperUI wie folgt aus.

openHAB-2-CalDAV-Binding-Installation

openHAB 2 CalDAV Binding – Google Kalender vorbereiten

Bevor wir in die SmartHome Designer Konfiguration einsteigen, brauchen wir natürlich einen Kalender mit CalDAV Anbindung und den Abfuhrterminen. Ich verwende in diesem Beispiel einen Google Kalender. Es funktioniert aber genau so gut mit anderen CalDAV Kalendern, so lange die Konfiguration richtig ist. Dazu später mehr.

Google Kalender vorbereiten – Müll – Kalender anlegen

Als erstes empfehle ich Euch einen eigenen Kalender für die Mülltermine anzulegen. Einen eigenen Kalender solltet ihr auch für andere Logiken in Eurem SmartHome nutzen. So ist der Nuztzungszweck gleich klar abgegrenzt. Es geht auch über Filter im Binding, aber ich habe lieber gleich eine klare Struktur und Trennung für die Ereignisse.

Geht also in Euren Google Account oder anderen CalDAV fähigen Kalender und legt einen Kalender an. Im Google Kalender klickt auf das kleine Dreieck bei „Meine Kalender“ und wählt den Eintrag „Neuen Kalender erstellen“.

openhab-2-caldav-binding-google-kalender-erstelllen

Vergebt einen Kalendernamen und eine optionale Beschreibung und klickt auf Kalender erstellen.

openhab-2-caldav-binding-google-kalender-einrichtung

Ihr kommt nun wieder in die Kalender – Ansicht. Klickt nun wieder auf das kleine Dreieck bei „Meine Kalender“ und geht auf die Option Einstellungen. In den Einstellungen klickt ihr auf Kalender importieren. Im Fenster „Kalender importieren“ wählt die Datei mit den Abfuhrterminen und den Kalender und drückt anschließend Importieren.

openhab-2-caldav-binding-google-kalender-importieren

Ihr fragt Euch sicher wo ich die Abfuhrtermine her habe? Viele Entsorgungsbetriebe bieten inzwischen ICS Dateien zum Download an. Googelt einfach nach „Abfuhrtermine ics <EUER_ORT>“. Bei meiner Suche „Abfuhrtermine ics Ahrensburg“ kam so als erstes die Seite der AWSH.  Auf der Seite der AWSH habe ich dann meinen Ort, die Straße und unsere Abfallarten ausgewählt. Durch einen Klick auf „Nächste Termine  anzeigen“ gab es dann den Kalender als ICS zum Download. Die ICS Datei wird wie oben beschrieben importiert.

openhab-2-caldav-binding-abfallkalender-erstellen

Im Anschluss seht ihr bereits die importierten Termine im Muellkalender.openhab-2-caldav-binding-google-kalender-termine

Nun ermittelt noch die Kalender ID des neuen Kalender. Diese braucht ihr für die  Konfiguration. Klickt neben dem Kalender auf das kleine Dreieck und wählt den Eintrag „Kalendereinstellungen“.

openhab-2-caldav-binding-google-kalendereinstellungen

Die Kalender ID findet ihr unter dem Punkt Kalenderadresse. Ihr braucht den Kalender nicht freigeben!

openhab-2-caldav-binding-google-kalender-id

openHAB 2 CalDAV Binding – SmartHome Designer Konfiguration

Nach der Installation steht wieder die Konfiguration mittels SmartHome Designer an. Ich muss zugeben die Installation ist schon recht eigenwillig und geht nicht so leicht von der Hand. Der Grund liegt an den verschiedenen Config Dateien und dem genauen setzen der Parameter. Ist hier etwas nicht korrekt, werdet ihr keine Termine sehen. Aber dafür folgt nun die schrittweise Anleitung. Mit einer neuen Version mag sich dies ändern.

SmartHome Designer Konfiguration – openHAB 2 CalDAV Binding CalDAVIO Configuration

Als erstes pflegt die caldavio.cfg, in dem ihr den Ordner Services öffnet und die folgenden Zeilen ergänzt.

openhab-2-caldav-binding-caldavio-cfg

Wichtig hierbei:

  1. Gebt die Kalender ID (Ermittlung siehe oben) an.
  2. Euren Mailnamen ohne @GMAIL.COM
  3. Euer GMAIL Passwort

Das ReloadIntervall setzt nach dem Test der Konfiguration bitte hoch. Es reicht schließlich ein Update am Tag.

caldavio:Muellkalender:url=https://www.google.com/calendar/dav/<KALENDER_ID>@group.calendar.google.com/events
caldavio:Muellkalender:username=<EUER_MAIL_NAME => OHNE_@GMAIL.COM>
caldavio:Muellkalender:password=<PASSWORT>
caldavio:Muellkalender:reloadInterval=1
caldavio:Muellkalender:preloadTime=20000
caldavio:Muellkalender:disableCertificateVerification=true

SmartHome Designer Konfiguration – openHAB 2 CalDAV Binding Items

Die Verbindung zu Eurem Google Kalender steht nun. Jetzt werden die nötigen Items definiert. Ich werde zwei Items nutzen. Ein Item vom Typ String wird den Namen des Termins entgegennehmen. Dieser wird für die Auswertung der Abfallart verwendet. Das zweite Item vom Typ DateTime wird für das Datum verwendet. Das Datum verwende ich zum Abgleich, ob der Termin für die Abholung erreicht ist.

Tragt hierzu folgende Zeilen in Eure .items Datei.

/* Müllkalender */
String CalDav_Muelltonne   "Tonne [%s]"  <calendar> { caldavPersonal="calendar:Muellkalender type:EVENT eventNr:1 value:NAME" }
DateTime    CalDav_Date "Datum der Abholung [%1$td.%1$tm.%1$tY]"    <calendar>    { caldavPersonal="calendar:Muellkalender type:EVENT eventNr:1 value:START" }

Als Binding  im Item nutzt ihr nun caldavPersonal. Gebt die Parameter für Euren Kalender (calendar:<Kalendername>) an. Als Typ wählt ihr Event (type:EVENT) und wählt die EventNr 1 (eventNr:1). So erhaltet ihr als Rückgabe das ersten Event Eures Kalender. Über value:NAME bekommt ihr den Namen des Termins. In diesem Fall die Abfallart und über value:TIME entsprechend die Zeit.

Weiterhin nutze ich als Trigger für die Regel die aktuelle Zeit, die über NTP ermittelt wird. Wollt ihr dies auch so lösen, ergänzt eine weitere Zeile in der Itemdatei. Diese könnt ihr übrigens auch direkt Nutzen, um das Aktuelle Datum in der Sitemap anzuzeigen.

DateTime date_today "Heute [%1$td.%1$tm.%1$tY]"   <calendar>  { channel="ntp:ntp:local:dateTime" }

SmartHome Designer Konfiguration – openHAB 2 CalDAV Binding Sitemap

Ruft nun Eure Sitemap auf, um zu testen, ob der Abruf auch wie gewünscht funktioniert.  Ich habe mir die Daten in einem eigenen Frame gesetzt.

Frame {
   Text item=CalDav_Muelltonne
   Text item=CalDav_Date
      }

openhab-2-caldav-binding-sitemap

SmartHome Designer Konfiguration – openHAB 2 CalDAV Binding Rule

Jetzt kommen wir zur eigentlichen Steuerung der Hue Lampe in Abhängigkeit von der Abfallart und dem Datum. Öffnet die entsprechende .rule Datei im SmartHome Designer und pflegt folgende Zeilen. Die Regel wird ausgeführt sobald das Item date_today sich ändert.

rule "MUELL_HUE_LICHT"
when
  Item date_today changed
then

	var String ColorHue
	var String abfallart
	abfallart = CalDav_Muelltonne.state.toString
	if (abfallart.substring(0,3)=="Bio") { 
  	ColorHue = "134,100,38" 
   	} else if (abfallart.substring(0,4)=="Gelb") {
   	ColorHue = "62,100,50"   	
   	} else if (abfallart.substring(0,4)=="Rest") {
   	ColorHue = "32,82,30" 
   	} else if (abfallart.substring(0,6)=="Papier") {
   	ColorHue = "240,100,50"  
   	}
  
	if (now.isBefore(new DateTime((CalDav_Date.state as DateTimeType).getCalendar().getTime()).plusHours(24)) && 
		now.isAfter(new DateTime((CalDav_Date.state as DateTimeType).getCalendar().getTime()))) {
		
  		Licht_WZ_Ecklampe_C.sendCommand(ColorHue) 
		
  	}
  	
end

Ausgeführt wird dann folgendes. Die Abfallart, die vorher an das Item übergeben wurde, wird in eine lokale Variable abfallart übergeben. Über einen Substring werden im Anschluss die verschiedenen Abfallarten unterschieden. Die Variable ColorHue nimmt den HSL Farbcode entgegen.

Nun wird noch das Datum der Abholung mit dem aktuellen Datum verglichen. Diese funktioniert durch eine Und Bedingung. Die erste Bedingung prüft, ob das aktuelle Datum vor dem Abfalldatum + 24 Stunden liegt. Die zweite Bedingung prüft, ob das aktuelle Datum nach dem Datum der Abholung liegt. Warum diese Bedingung? Nun das Datum der Abholung ist ein ganztägiges Ereignis und beginnt um 00:00 Uhr (Beispiel 20.09.2016 00:00). Durch das addieren von 24 Stunden ist das Vergleichsdatum nun der 21.09.2016 00:00. Die aktuelle Zeit, die mit now. ermittelt wird, ist z.B. 20.09.2016 21:57. Durch die Bedingung liegt now. zwischen 20.09.2016 00:00 und 21.09.2016 00:00. Ihr könnt die Stunden natürlich anpassen, so dass Lampe z.B. nur zwischen 18 Uhr – 22 Uhr leuchtet.

An ein definiertes Hue Item wird nun der Farbcode übergeben.

Habt ihr alles erfolgreich durchgetestet, dann vergesst nicht das ReloadIntervall zu ändern!

Im nächsten Beitrag erfahrt ihr, wie ihr mit NFC Tags Euer Smart Home optimiert.

Smarthome Training and Tutorials
Logo