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.
Philips Hue LED Lampe 10 W A60 E27 Starter Set inklusive Bridge,...
- Funktioniert mit Amazon Alexa für Sprachsteuerung (Alexa Gerät separat erhältlich)
- Wählen Sie eine aus 16 Millionen Farben in der Hue App und synchronisieren Sie Licht mit Musik und Filmen
- Hochwertiges, weißes Licht zum Konzentrieren, Lesen, Energie tanken und Entspannen
- Funktioniert mit Amazon Alexa für Sprachsteuerung (Alexa Gerät separat erhältlich)
- Wählen Sie eine aus 16 Millionen Farben in der Hue App und synchronisieren Sie Licht mit Musik und Filmen
- Hochwertiges, weißes Licht zum Konzentrieren, Lesen, Energie tanken und Entspannen
- Philips Hue ist kompatibel mit Amazon Echo, Amazon Echo Dot und Amazon Tap - so können Sie Ihre Beleuchtung ganz einfach mit Ihrer Stimme steuern
- Eine Steuerung über Ihr Smartgerät mit Hilfe der Philips Hue App ist natürlich ebenfalls möglich
- Licht, dass Ihre täglichen Routinen unterstützt: entspannt aufwachen und einschlafen; Programmieren Sie das automatische An- und Ausschalten Ihrer Heimbeleuchtung
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 – 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“.
Vergebt einen Kalendernamen und eine optionale Beschreibung und klickt auf Kalender erstellen.
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.
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.
Im Anschluss seht ihr bereits die importierten Termine im Muellkalender.
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“.
Die Kalender ID findet ihr unter dem Punkt Kalenderadresse. Ihr braucht den Kalender nicht freigeben!
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.
Wichtig hierbei:
- Gebt die Kalender ID (Ermittlung siehe oben) an.
- Euren Mailnamen ohne @GMAIL.COM
- 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 }
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.
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]
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 ��‘
Hm, kann ich dir auch nicht sagen was das bedeutet.
[…] SmartHome – openHAB 2 CalDAV Binding […]
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
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.
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.
Did anyone get it to work now?
My event will not trigger it seems that DateTime in Rules is a probelem
[…] SmartHome – openHAB 2 CalDAV Binding […]
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.
Danke für die Info.
Zur Info,
In Gmail, die ‚allow less secure login‘ muss aktiviert werden
Danke für die Info.
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?
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
Hallo Manuel,
schau mal hier.
https://community.openhab.org/t/template-widget-tutorial-examples-make-your-own-widget/14211
Beste Grüße
Thomas
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
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
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
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!
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
Hallo Johannes,
Klasse. Danke für die Rückmeldung.
Beste Grüße
Thomas
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é
Schön wäre eine Benachrichtigung z.B. per Telegram
Hallo Kai,
Im Grunde musst du nur diesen Beitrag mit Push Nachrichten per openHAB versenden. kombinieren.
Beste Grüße
Thomas
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)
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
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
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
Hallo Thomas,
perfekt, ich danke für die Ergänzungen.
Viele Grüße
Thomas
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?
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
Kann es sein dass es nicht mehr funktioniert?
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?
Hallo Bei mir hat es geholfen ein ganztägiges Ereignis daraus zu machen