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.

  • Produkt
  • Features
  • Fotos

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

Last update was on: 27. März 2023 23:06

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.

47 Comments
  1. 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

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

      caldavPersonal:usedCalendars= trash

    • 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?

    • 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?

      • 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)

        • 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

        • 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. 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….

    • 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. 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. 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 🙂

    • 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

    • 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. Did anyone get it to work now?

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

  7. 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.

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

  9. 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!

    • Hallo.
      Ich hab auch das Problem, das ich alle 4 Wochen 3 Abholungen an einem Tag habe (Gelber Säcke/Tonne, Grüne Tonne und Blaue Tonne).
      Über die zu zeigende Farbe habe ich mir noch keine Gedanken gemacht, aber wie greife ich die Termine ab oder fasse diese zu einem zusammen?

  10. Hallo,

    ich habe alles nach der Anleitung erledigt und es funktioniert. Vielen Dank erstmal dafür.
    Ich habe nur ein Problem mit dem Format beim HABPanel. Es wird als Datum 2018-01-10T00:00:00.000+0100 angezeigt und nicht wie in der Anleitung nur das Datum.
    Habe die Item definition genauso wie in der Anleitung. Wass kann hier falsch sein?

    Danke
    lg. Manuel

  11. Hi,
    da ich meinen Usernamen & Passwort nicht hinterlegen wollte habe ich einen „öffentlichen“ Google-Kalender mit den Terminen erzeugt.
    Dessen öffentliche URL sieht aber etwas anders aus:
    https://calendar.google.com/calendar/embed?src=rfn4ft0uqbiarm66om2bqckns4%40group.calendar.google.com&ctz=Europe%2FAmsterdam

    (kein @group.calendar…)

    … und tatsächlich geht’s auch nicht:

    [WARN ] [caldav.internal.job.EventReloaderJob] – Sardine error while loading calendar entries: Unexpected response (501 – Method PROPFIND is not defined in RFC 2068 and is not supported by the Servlet API)

    Sprich meine Frage: kann ich das Binding nur mit einem persönlichen Kalender nutzen oder habe ich einen Fehler gemacht?

    Gruß
    Tom

  12. Hallo,
    mit deiner Beschreibung funktioniert alles prima.
    Ich habe nur eine Verständnisfrage zu dem Datumsvergleich.
    Wie kann ich einstellen das z.B. am Tag vor der Abholung Abends von 22-0 Uhr und am Tag der Abholung von Morgens 5-10 Uhr die Leuchte an ist ?
    Mit deinem Beispiel ist die Leuchte ab 0 Uhr am Tag der Abholung an bis 0 Uhr nächster Tag als 24 Stunden.
    Was mache ich falsch?

    Gruß Chris

  13. Hallo, ich habe eine Frage zum CalDAV Binding. Habe deine Anleitung als Grundlage für einen Geburtsatagskalender verwendet. Es sollen kommende Geburtstage angezeigt werden. Was zunächst auch funktioniert. 🙂 Aber einmal verbunden und Kalender eingelesen ändert sich nichts mehr. D.h. gelöschte Events werden angezeigt und auch noch Tage nach dem Geburtstag wird dieser angezeigt.

    Items:
    String Calendar_home_Event1 "Nächster Geburtstag [%s]" { caldavPersonal="calendar:Geburtstage type:UPCOMING eventNr:1 value:NAME" }
    DateTime Calendar_home_Start_Time1 "Start Time [%s]" { caldavPersonal="calendar:Geburtstage type:UPCOMING eventNr:1 value:START" }

    So müsste doch immer das nächste Event angezeigt werden, oder

  14. Hallo zusammen,

    ich bin hier schier am verzweifeln, denn meine items bleiben leer 🙁
    Nach Installation von openhab 2 und dem caldav binding habe ich die o.g. super Anleitung befolgt. In den logs sehe ich, dass das caldav Binding ohne Fehler geladen wird und auch die Events vom owncloud Kalender werden (irgendwie) verarbeitet. Wenn ich dann allerdings die items wie o.g. definiere, beiben sie leer:

    2018-02-22 12:59:13.325 [DEBUG] [.io.caldav.internal.CalDavLoaderImpl] - return event list for CalDavQuery [calendarIds=[muellkalender], from=2018-02-22T12:59:13.325+01:00, to=null, sort=ASCENDING, filterName=null] with 0 entries

    caldavio.cfg
    caldavio:muellkalender:url=XXX
    caldavio:muellkalender:username=XXX
    caldavio:muellkalender:password=XXX
    caldavio:muellkalender:reloadInterval=60
    caldavio:muellkalender:preloadTime=10
    caldavio:muellkalender:disableCertificateVerification=false

    caldavio:timeZone=Europe/Berlin

    caldavPersonal.cfg
    caldavPersonal:usedCalendars=caldavio:muellkalender

    items file:
    String CalDav_Muelltonne „Tonne [%s]“ { caldavPersonal=“calendar:muellkalender type:ACTIVE eventNr:1 value:NAME“ }
    DateTime CalDav_Date „Datum der Abholung [%1$td.%1$tm.%1$tY]“ { caldavPersonal=“calendar:muellkalender type:EVENT eventNr:1 value:START“ }

    Was übersehe ich hier??? Bin für jeden Hinweis dankbar!

  15. Hi,

    danke für die Anleitung funktioniert seit einigen Wochen gut. Jetzt habe ich aber festgestellt, dass bei uns oft Montags Papiertonne und Dienstags Restmüll abgeholt wird. Da er den ganzen Montag die Papiertonne anzeigt habe ich jetzt schon zweimal deshalb verpasst abends die Restmülltonne rauszustellen.

    Jetzt wollte ich es etwas abändern bekomme es aber nicht zu ändern in dem ich mit der Option filter-name, die in der Doku mehr schlecht als Recht dokumentiert ist, versucht habe zwei Items drauss zu machen:


    DateTime restmuellDatum "Datum der Abholung [%1$tA, %1$td.%1$tm.%1$tY]" {caldavPersonal="calendar:muell type:EVENT eventNr:1 value:START filter-name:'Restmuell_Biotonne'"}

    DateTime papiermuellDatum "Datum der Abholung [%1$tA, %1$td.%1$tm.%1$tY]" {caldavPersonal="calendar:muell type:EVENT eventNr:1 value:START filter-name:'Papiertonne_gelberSack'"}

    Leider geht dies nicht die beiden Items gehen immer auf UNDEF

    Irgendwer ne Idee was ich falsch mache?

    Danke schon mal

    Johannes

    • Hallo Johannes,

      ich finde aktuell leider keine Zeit. Bin zu stark in andere Themen eingebunden.

      Melde mich, wenn ich Zeit habe. Sorry
      Thomas

      • Hallo Thomas,

        danke dir ich habe den Fehler inzwischen selbst gefunden. Ich hatte die preloadTime beim service zu kurz eingestellt. Da sind mir wohl 2 Nuller abhanden gekommen. Deswegen konnte er nicht soweit in die Zukunft abrufen.

        Jetzt gehen meine Items wie oben beschrieben. Getrennt für Restmüll und Papiertonne.

        Viele Grüße und viel Erfolg mit deinem anderem Projekt
        Johannes

  16. Hallo Zusammen,

    habe seit dem hinzufügen der neuen Kalender Daten für 2018 ein Problem mit der Anzeige.
    Jetzt werden mir erste die Mülltonnen angezeigt wenn sie schon abgeholt werden. Wo könnte hier der Fehler liegen.

    Gruß

    René

  17. Schön wäre eine Benachrichtigung z.B. per Telegram

  18. Hallo Thomas,
    danke erstmal für die Antwort,hab es jetzt so gelöst hoffe das passt
    Sollte dann am Abend vor der Abholung um 20:00 eine Nachricht bekommen

    rule „Abfallerinnerung morgen“

    when
    Item date_today changed

    then
    if (now.isBefore(new DateTime((CalDav_Date.state as DateTimeType).getCalendar().getTime()).minusHours(4)))
    {

    sendTelegram(„Kai“, „Morgen Abfall rausstellen “ + CalDav_Tonne.state)

  19. Hallo Thomas,

    vielen Dank für diesen tollen Artikel! Ich konnte alles gut umsetzen.

    Bei einem Teil der Regel erhalte ich aber von Visual Studio Code eine Warnmeldung, welche auch in den Logs von openHAB angezeigt wird.

    Hier der Ausschnitt aus der Regel:
    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()))) {

    Es kommt folgende Meldung:
    The method getCalendar() from the type DateTimeType is deprecated

    Anscheinend ist die Methodik mittlerweile veraltet. Weißt Du, wie die aktualisierte Version des Codes aussehen würde?

    Viele Grüße
    Timo

  20. Hallo Thomas,

    ich hatte Dir gestern einen post zum Thema CalDAV-binding und Google-Kalender geschickt (weiß nicht, warum der jetzt hier nicht auftaucht…- egal). OH konnte sich trotz richtiger Autorisierung nicht anmelden. Das gleiche passierte, wenn ich die URL direkt in den Browser eingegeben habe. Ich habe die Ursache gefunden. Da ich bisher noch nirgend woanders darauf gestoßen bin, hier vielleicht ein Hinweis, der anderen weiterhilft: Google stuft OH als „nicht sichere App“ ein. Um den Zugriff zu erlauben, muß man im Menüpunkt „Sicherheit“ den „Zugriff durch weniger sichere Apps“ erlauben. Ansonsten lehnt google den Zugriff ohne weiteren Kommentar ab. Das kann ein Sicherheitsrisiko sein, wenn man noch andere Google-Dienste mit dem gleichen Passwort nutzt. Da ich aber nur diesen einen Kalender nutze, ist es erstmal egal.
    Im Moment sind meine items trotzdem immer noch leer. openhab.log zeigt keine Fehler oder Warnungen mehr an. Da suche ich aber erst noch selbst mal ein bischen, bevor ich um Hilfe schreie….
    Viele Grüße
    Uli

    • Hallo Uli,

      hm komisch, hab keinen Kommentar gefunden. Auch nicht im Spam.

      Danke für die Rückmeldung. Wie hast Du das Aktualisierungsintervall gesetzt? Falls es hoch ist, setzt es mal auf jede Minute.

      BG
      Thomas

  21. Hallo Thomas,
    erstmal Vielen Dank für deinen super Blog. Nachdem ich jetzt doch etwas gebraucht habe um den Kalender zum Laufen zu bekommen wollte ich mal meine Erfahrung mitteilen. Vielleicht hilft es ja Anderen weiter.

    1. caldavPersonal.cfg wird benötigt
    Damit die Caldav Items bei einer Änderung im Google Kalender geupdatet werden muss der Kalender in der caldavPersonal.cfg konfiguriert werden. Ich musste bei mir jedenfalls zwingend folgende Zeile hinzufügen:
    caldavPersonal:usedCalendars=Muellkalender

    2. Wenn erstmal gar nichts mehr geht hat bei mir folgendes funktioniert
    – Alle caldav bindings über die PaperUi deinstallieren
    – Openhab stoppen (z.B. in der Konsole mit „sudo systemctl stop openhab2.service“
    – Anschließend /var/lib/openhab2/etc/caldav/ löschen
    – caldav Dateien in /var/lib/openhab2/config/org/openhab/ und /etc/openhab2/services/ löschen
    – Openhab starten (z.B. in der Konsole mit „sudo systemctl start openhab2.service“
    – Beide caldav bindings wieder über die PaperUi installieren
    – Caldav wie oben beschrieben neu konfigurieren.

    Gut möglich, dass das alles wesentlich einfacher geht oder weniger Schritte nötig sind. Bei mir hatte es so zumindest funktioniert.

    3. Fehlermeldung „The method getCalendar() from the type DateTimeType is deprecated“
    Wenn man anstelle von
    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()))) {
    folgendes verwendet
    if (now.isBefore(new DateTime((CalDav_Date.state as DateTimeType).getZonedDateTime.toInstant.toEpochMilli).plusHours(24)) &&
    now.isAfter(new DateTime((CalDav_Date.state as DateTimeType).getZonedDateTime.toInstant.toEpochMilli)))
    {

    bekommt man keinen Fehler mehr.

    Viele Grüße
    Thomas

  22. Die Anleitung war für mich als Anfänger sehr gut nachzuvollziehen. Einmal bin ich gestolpert, als es um die .items-Datei ging. Die gab es noch nicht. Aber unter dem Stichwort habe ich schnell eine Anleitung gefunden, wie und wo man sie anlegt.

    Ganz funktioniert es aber noch nicht. Er liest jetzt jede Menge Einträge nach /var/lib/openhab2/etc/caldav/kalendername. Wenn man die Dateien öffnet, sind darin uralte Termine von vor Jahren. Einmal habe ich aber auch schon eine Anzeige gehabt, aber nach einem Neustart war es erst einmal wieder weg. Ist das normal, daß er die ganzen alten Termine einliest?

    Außerdem ist die Cloud unheimlich langsam. Im Log habe ich schon Meldungen über ein Timeout gesehen. Kann man die Timeout-Zeit irgendwo einstellen?

  23. Moin Thomas,
    funktioniert das CalDav-Binding in beide Richtungen? OpenHAB schreibt in den Kalender und liest nicht nur. Wenn ja, könnte man mit Openhab direkt Kalendereinträge erzeugen. Leider finde ich keine Beispiele dafür. Derzeit schalte ich Testweise Steckdosen über den Kalender und möchte Ein-/Ausschaltzeiten anlegen, ändern, etc.
    Grüße aus B.O.
    Andreas

    • Moin Andreas,

      darüber hab ich mir noch keine Gedanken gemacht. Wofür benötigst du das Schreiben der Kalendereinträge?

      Beste Grüße
      Thomas

  24. Kann es sein dass es nicht mehr funktioniert?

  25. Hallo zusammen, habe es nach dem zulassen von „Zugriff durch weniger sichere Apps“ zum Laufen bekommen, allerdings erhalte ich fast durchgängig 300 Warnings der folgenden Art im Log bei jedem Aufruf.
    2020-08-25 23:45:09.190 [WARN ] [caldav.internal.job.EventReloaderJob] – Sardine exception reading ics file: 5f4575d3260c6

    com.github.sardine.impl.SardineException: Unexpected response

    at com.github.sardine.impl.handler.ValidatingResponseHandler.validateResponse(ValidatingResponseHandler.java:48) ~[sardine-5.6.jar:5.6]

    at com.github.sardine.impl.handler.VoidResponseHandler.handleResponse(VoidResponseHandler.java:34) ~[sardine-5.6.jar:5.6]

    at com.github.sardine.impl.SardineImpl.get(SardineImpl.java:756) ~[sardine-5.6.jar:5.6]

    at com.github.sardine.impl.SardineImpl.get(SardineImpl.java:741) ~[sardine-5.6.jar:5.6]

    at com.github.sardine.impl.SardineImpl.get(SardineImpl.java:732) ~[sardine-5.6.jar:5.6]

    at com.github.sardine.impl.SardineImpl.get(SardineImpl.java:145) ~[sardine-5.6.jar:5.6]

    at org.openhab.io.caldav.internal.job.EventReloaderJob.loadEvents(EventReloaderJob.java:323) [bundleFile:?]

    at org.openhab.io.caldav.internal.job.EventReloaderJob.execute(EventReloaderJob.java:141) [bundleFile:?]

    at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [bundleFile:?]

    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [bundleFile:?]

    Jemand eine Idee, woran das liegen kann?

    Hinterlasse einen Kommentar

    Smarthome Training and Tutorials
    Logo