SmartHome – openHAB 2 CalDAV Binding

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.

  • Produkt
  • Features
  • Fotos

Philips Hue LED Lampe 10 W A60 E27 Starter Set inklusive Bridge,...

Gewöhnlich versandfertig in 24 Stunden & Versandkostenfrei
Last update was in: 19. August 2017 15:20

189,37 199,95

Kaufen
Amazon amazon.de

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

Werbung

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.

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.

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.

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.

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.

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.

Werbung
23 Comments
  1. Reply
    Fabian 9. Oktober 2016 at 12:00

    Hallo hab deine Anleitung ausprobiert bekomm es aber nicht zum laufen!
    Opelhab 2 Beta 4.

    anscheinend wird der Kalender erkannt. Den der Log sagt: 03:07:06.677 [INFO ] [nhab.io.caldav.internal.job.EventJob] - event BEGIN for:... (... @09.10.2016/02:00-09.10.2016/08:00)

    Leider wird aber kein Item ausgelöst!

    caldavio.cfg
    caldavio:trash:url=https://www.google.com/calendar/dav/... /events
    #caldavio:trash:url=https://www.google.com/calendar/dav/... /events
    caldavio:trash:username=...
    caldavio:trash:password=...
    caldavio:trash:reloadInterval=1
    caldavio:trash:preloadTime=2
    caldavio:trash:disableCertificateVerification=true

    caldavPersonal.cfg
    ############################# CalDAV Personal Binding ################################
    # see CalDAV IO Binding
    # Used to toggle switch items for presence. Switched to ON if an event in the calendar occurs.
    # And back to OFF if the event ends.
    # Can also be used to show upcoming or active events
    #
    # Which calendars should be used to detect presence (comma separated)
    usedCalendars= trash
    #
    # If the location of the event is one of this identifiers, the presence will not be changed.
    # Can be used for events which are at home or are just reminders. (comma separated, optional)
    # homeIdentifiers=

    Item
    String CalDav_Muelltonne "Tonne [%s]" { caldavPersonal="calendar:trash type:EVENT eventNr:1 value:NAME" }
    DateTime CalDav_Date "Datum der Abholung [%1$td.%1$tm.%1$tY]" { caldavPersonal="calendar:trash type:EVENT eventNr:1 value:START" }

    String OfficeCalName "Termin jetzt [%s]" { caldavPersonal="calendar:trash type:ACTIVE eventNr:1 value:NAME" } //eventNr for concurrent events
    DateTime OfficeCalTime "Beginn [%1$tT, %1$td.%1$tm.%1$tY]" { caldavPersonal="calendar:trash type:ACTIVE eventNr:1 value:START" } //eventNr for concurrent events

    Muss den die „caldavPersonal.cfg“ ausgefüllt werden?

    Danke

    • Reply
      Michel 16. November 2016 at 17:20

      Du musst in deiner CaldavPersonal.cfg den Parameter mit dem Prefix setzen:

      caldavPersonal:usedCalendars= trash

    • Reply
      Thomas Schwarz 10. Oktober 2016 at 19:36

      Hi, hab gerade geschaut. Die caldavPersonal.cfg muss nicht gepflegt sein. Gibt es sonst was neues? Hat eine frische Installation was gebracht und kannst Du den Kalender über den Link abrufen?

    • Reply
      Thomas Schwarz 9. Oktober 2016 at 12:50

      Hab den Rechner gerade nicht im Zugriff.. Muss ich noch mal prüfen. Setze mal caldavPersonal: vor usedcalendars in der caldavPersonal.cfg. Geht es dann?

      • Reply
        Fabian 9. Oktober 2016 at 14:42

        Danke für die schnelle Antwort.
        Also wenn ich es so abändere wie von dir beschrieben kommt folgende Fehlermeldung in der Konsole!

        14:39:33.444 [ERROR] [org.apache.felix.configadmin ] – [org.osgi.service.cm.ManagedService, org.openhab.io.caldav.CalDavLoader, id=111, bundle=215/mvn:org.openhab.io/org.openhab.io.caldav/1.9.0.b4]: Updating property usedCalendars of configuration org.openhab.caldavio caused a problem: unknown identifier
        org.osgi.service.cm.ConfigurationException: usedCalendars : unknown identifier
        at org.openhab.io.caldav.internal.CalDavLoaderImpl.updated(CalDavLoaderImpl.java:166)[215:org.openhab.io.caldav:1.9.0.b4]
        at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)[7:org.apache.felix.configadmin:1.8.8]
        at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152)[7:org.apache.felix.configadmin:1.8.8]
        at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85)[7:org.apache.felix.configadmin:1.8.8]
        at org.apache.felix.cm.impl.ConfigurationManager$UpdateConfiguration.run(ConfigurationManager.java:1753)[7:org.apache.felix.configadmin:1.8.8]
        at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:143)[7:org.apache.felix.configadmin:1.8.8]
        at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:110)[7:org.apache.felix.configadmin:1.8.8]
        at java.lang.Thread.run(Thread.java:745)[:1.8.0_65]

        Sieht aus als würde er den Kalender dann nicht finden (usedCalendars : unknown identifier)

        • Fabian 9. Oktober 2016 at 14:49

          Jetzt hab ich den versuch noch gemacht einfach mal das Passwort oder den Benutzernamen auf ein falschen Wert zu setzen um zu sehen was passiert!
          Mit beiden Konfigurationen also mit oder ohne caldavPersonal: bringt der diese Fehlermeldung!

          14:46:05.258 [ERROR] [org.apache.felix.configadmin ] – [org.osgi.service.cm.ManagedService, org.openhab.io.caldav.CalDavLoader, id=111, bundle=215/mvn:org.openhab.io/org.openhab.io.caldav/1.9.0.b4]: Updating property usedCalendars of configuration org.openhab.caldavio caused a problem: unknown identifier
          org.osgi.service.cm.ConfigurationException: usedCalendars : unknown identifier
          at org.openhab.io.caldav.internal.CalDavLoaderImpl.updated(CalDavLoaderImpl.java:166)[215:org.openhab.io.caldav:1.9.0.b4]
          at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updated(ManagedServiceTracker.java:189)[7:org.apache.felix.configadmin:1.8.8]
          at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:152)[7:org.apache.felix.configadmin:1.8.8]
          at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:85)[7:org.apache.felix.configadmin:1.8.8]
          at org.apache.felix.cm.impl.ConfigurationManager$UpdateConfiguration.run(ConfigurationManager.java:1753)[7:org.apache.felix.configadmin:1.8.8]
          at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:143)[7:org.apache.felix.configadmin:1.8.8]
          at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:110)[7:org.apache.felix.configadmin:1.8.8]
          at java.lang.Thread.run(Thread.java:745)[:1.8.0_65]

        • Thomas Schwarz 9. Oktober 2016 at 15:59

          Hatte ich auch mal war aber nach einer frischen Installation weg. Versuch mal zwei Dinge.
          1. Werf mal deine URL des Kalenders in einen Browser. Wird nach einer Anmeldung der Kalender runtergeladen? Wenn ja,
          2. Entpacke openhab 2 in einen neuen Ordner und installier nur die caldav bindings und teste

        • Fabian 9. Oktober 2016 at 14:44

          Was mir noch aufgefallen ist das beim speichern der Datei caldavio und caldavPersonal folgende Meldung in der Konsole kommt.
          Leider hab ich noch nicht gefunden was das bedeutet!

          14:39:52.736 [WARN ] [g.dispatch.internal.ConfigDispatcher] – Could not parse line ‚Mac OS X 2��ATTR���Y�com.apple.TextEncoding�Jde.codingmonkeys.seestateutf-8;134217984d1:pd1:yi80e1:wi1280e1:xi313e1:hi679ee1:sd1:pi1320e1:li0ee1:ei1e1:li1433eeThis resource fork intentionally left blank ��‘
          14:39:52.747 [WARN ] [g.dispatch.internal.ConfigDispatcher] – Could not parse line ‚Mac OS X 2��ATTR���Y�com.apple.TextEncoding�Jde.codingmonkeys.seestateutf-8;134217984d1:pd1:yi80e1:wi1280e1:xi313e1:hi679ee1:sd1:pi1320e1:li0ee1:ei1e1:li1433eeThis resource fork intentionally left blank ��‘

        • Thomas Schwarz 9. Oktober 2016 at 15:53

          Hm, kann ich dir auch nicht sagen was das bedeutet.

  2. […] SmartHome – openHAB 2 CalDAV Binding […]

  3. Reply
    Dieter 6. Februar 2017 at 20:44

    String CalDav_Muelltonne „Tonne [%s]“ { caldavPersonal=“calendar:Muellkalender type:EVENT eventNr:1 value:NAME“ }

    Sind caldavPersonal und calendar: als Prefix korrekt, wenn die Datei caldavio.cfg verwendet wird? Bei mir sind nämlich leider die Items leer….

    • Reply
      Thomas Schwarz 6. Februar 2017 at 21:00

      Hallo Dieter,

      ja, genau so ist es auch bei mir konfiguriert. Bitte setze dein Reload Intervall runter auf eine Minute und starte openHAB neu.

      Beste Grüße
      Thomas

  4. Reply
    Dieter 6. Februar 2017 at 22:47

    Hallo Thomas,
    danke. Ich wollte den Punkt nur ausschließen. Möglicherweise liegt es daran, dass ich owncloud statt google Calendar verwende.. ich muss mal schauen, wie man da debuggen kann.. Bin da noch recht neu bei openHAB.

  5. Reply
    Frank 16. Februar 2017 at 9:33

    Auch bei mir waren die Items leer: –:–

    Ich habe in der .items Datei
    type:EVENT in type:ACTIVE

    geändert wie in
    http://docs.openhab.org/addons/bindings/caldav-command1/readme.html
    beschrieben, danach wurde mir alles richtig angezeigt.

    Ansonsten eine tolle Anleitung hier 🙂

    • Reply
      Thomas Schwarz 16. Februar 2017 at 20:18

      Hallo Frank,

      danke, für deinen Hinweis

      Ich schau mal drauf, ob ich etwas ändern muss. Bei mir lief es immer mit dieser Anleitung.

      Beste Grüße
      Thomas

    • Reply
      Frank 16. Februar 2017 at 10:07

      Nachdem ich die Anleitung in meinem Link nochmal gelesen habe, sollte es aber eigentlich mit EVENT auch gehen. Leider kann ich es gerade nicht testen, weil ich nicht zuhause bin.

  6. Reply
    Frits 1. März 2017 at 19:37

    Did anyone get it to work now?

    My event will not trigger it seems that DateTime in Rules is a probelem

  7. […] SmartHome – openHAB 2 CalDAV Binding […]

  8. Reply
    Andre 4. Mai 2017 at 11:08

    Er hat bei mir auch den Termin gemeldet der aber erst in 2 Tagen ist. Musste es ändern auf
    if (now.isAfter(new DateTime((MuellCalTime0.state as DateTimeType).getCalendar().getTime()).minusHours(24))
    Damit er nur den Termin der morgen ist meldet.

    • Reply
      Thomas Schwarz 5. Mai 2017 at 8:01

      Danke für die Info.

  9. Reply
    Hakam 24. Mai 2017 at 19:38

    Zur Info,
    In Gmail, die ‚allow less secure login‘ muss aktiviert werden

    • Reply
      Thomas Schwarz 27. Mai 2017 at 13:24

      Danke für die Info.

  10. Reply
    Marc 7. August 2017 at 10:35

    Habt ihr eine Idee, wie man mehrere Kalendereinträge eines Tages anzeigen lassen kann? Ich hatte vermutet, einfach ein weiteres Item CalDav_MuelltonneZwei + CalDav_DateZwei anzulegen aber in der Sitemap wird dann der Termin eines weiter entfernten Tages angezeigt und nicht wie gewollt das zweite Event eines Tages.

    Danke im Voraus!

Hinterlasse einen Kommentar

One Smart Home - Ein Smart Home Blog