Mit diesem Adapter können .ics-Dateien von einer bestimmten URL gelesen und analysiert werden (Google Kalender oder iCal). Alternativ ist es möglich, eine lokale ".ics" -Datei zu verwenden (verwenden Sie den absoluten Pfad zur Datei anstelle der URL)
Basierend auf iCal Adapter für (CCU.IO) [https://github.com/hobbyquaker/ccu.io/tree/master/adapter/ical] von vader722
Der iCal-Adapter für ioBroker liest Kalenderdateien im ".ics" -Format von der angegebenen URL und schreibt Ereignisse, die sich im vordefinierten Zeitintervall befinden, in die ioBroker-Variable. Alternativ ist es möglich, eine lokale .ics-Datei zu verwenden (verwenden Sie den absoluten Pfad zur Datei anstelle der URL).
Sie können in VIS mit dem Widget basic html - String (unescaped)
angezeigt werden.
Es werden 2 Variablen angelegt:
iCalReadTrigger
iCalEvents
Die Variable iCalReadTrigger
dient zum Triggern des Einlesevorgangs.
In den Settings können mehrere URLs hinterlegt werden, von welchen der Kalender eingelesen wird.
Die Kalender werden dann nacheinander eingelesen und das Ergebnis zusammengefasst.
Alternativ kann dem Lesebefehl auch eine URL mitgegeben werden, um z.B. zeitweilig einen anderen Kalender einzulesen.
Zum Einlesen von den defaultURLs
muss der String read
in die Variable iCalReadTrigger
geschrieben werden.
Zum Einlesen von einer beliebigen URL muss der String read https://...
in die Variable iCalReadTrigger
geschrieben werden.
Das Ergebnis liefert der iCal Adapter in die Variable iCalEvents
.
Durch schreiben von check
in iCalReadTrigger
wird der Check-Vorgang auf Events auf die gelesenen Daten ohne erneutes einlesen der Daten ausgelöst.
Alternativ kann der Adapter auch automatisch in einem definierbaren Intervall die Kalender abfragen (nur mit der defaultURL
).
Dazu in den Settings mit der Variablen runEveryMinutes das Abfrageintervall (in Minuten) einstellen.
Bedeutung der Optionen im Konfigfile:
-
preview
: 7 heisst, dass Termine 7 Tage im voraus angezeigt werden -
runEveryMinutes
: 30 bedeutet dass der Adapter automatisch alle 30min den Kalender neu einliesst. Bei 0 wird nicht automatisch eingelesen -
colorize
: true Termine am heutigen Tag werden rot gefärbt, Termine am morgigen Tag orange, diese Option überstimmt die Option everyCalOneColor -
debug
: false bei true werden erweiterte Ausgaben ins CCU.IO Log geschrieben -
defColor
:white
legt die Standardfarbe der Kalendereinträge fest -
fulltime
: -
replaceDates
: true Bei true wird bei heutigen Terminen das heutige Datum durch den String todayString ersetzt (z.B. "Heute"). Bei morgigen Terminen durch den String tomorrowString -
everyCalOneColor
: false Bei true wird bei mehreren Kalendern jeder Kalender in einer festzulegenden Farbe eingefärbt. Ist die Option colorize gesetzt, funktioniert dies nicht! -
Calendar1
:- "calURL": "http://11111.ics", URL des Kalenders
- "calColor": "white" Farbe des Kalenders, wenn die Option "everyCalOneColor" gesetzt ist.
Es können beliebig viele Kalender eingetragen werden. Im Standard Konfigfile sind 2 Kalender eingetragen.
-
Events
:name
: "Urlaub":enabled
: true # legt fest, ob das Event bearbeitet wirddisplay
: false # legt fest, ob das Event auch in dem iCalEvents angezeigt wird, oder nur ausgewertet wird
Durch setzen eines Events (in diesem Beispiel „Urlaub“), werden die Kalender nach dem String „Urlaub“ durchsucht. Sollte ein Termin mit dem Stichwort „Urlaub“ in einem Kalender stehen, so wird automatisch eine State mit dem Namen Urlaub auf True gesetzt. Ist der Termin vorbei, wird der State wieder auf false gesetzt. Es wird für jeden Tag des preview Zeitraums ein Status angelegt. Achtung! Es wird nach einem Substring gesucht, d.h. ein Eintrag im Kalender „Urlaub“ wird genauso erkannt wie ein Eintrag „Urlaub Eltern“. Dies ist beim festlegen der Ereignisse zu berücksichtigen.
Durch Anpassen der CSS im VIS können die Styles von heutigen (Standard rot) und morgigen Terminen (Standard Orange) festegelegt werden:
iCalWarn
- Zeilenanfang Kalendereintrag heuteiCalPreWarn
- Zeilenanfang Kalendereintrag morgeniCalNormal
- Zeilenende von heuteiCalNormal2
- Zeilenende von morgen
Apple iCloud Kalender können angezeigt werden, wenn sie vorher freigegeben werden. Am besten einen eigenen Kalender für die Homematic anlegen, da der Kalender fuer alle freigegeben wird.
Dazu mit der rechten Maustaste auf dem Kalender in der Kalender App klicken und Freigabeeinstellungen auswählen. Jetzt einen Haken bei "Öffentlicher Kalender" setzen und die angezeigte URL kopieren. WICHTIG: die Url beginnt mit webcal://p0X-cale.....
webcal
muss durch http
ersetzt werden. Diese URL dann entweder in den Settings bei defaultURL eintragen, oder sie bei read URL
angeben, also z.B. readURL http://p-03-calendarws.icloud.com/xxxxxxxxx
Zum Einbinden eines Google Kalenders muss die Kalendereinstellung des Google Kalenders aufgerufen werden (mit der Maus auf "runter Pfeil" neben dem Kalender klicken). Die URL des Kalenders bekommt man durch klicken auf das ICAL
Symbol neben dem Feld "Privatadresse". Diese URL dann entweder in den Settings bei defaultURL eintragen, oder sie bei read URL
angeben, also z.B. readURL https://www.google.com/calendar/ical/xxxxxxxx/basic.ics
.
Zum Einbinden von gesharten Kalendern einer OwnCloud muss man dort in der Kalenderansicht in OwnCloud diesen Kalender als gesharten Kalender freigeben und dort den Link zum Kalender anzeigen lassen und diese URL (https://owncloud.xxxxxx.de/remote.php/dav/calendars/USER/xxxxxxx_shared_by_xxxxxx?export) entsprechend in den ioBroker.ical Adapter mit Nutzername und Passwort angeben.
Zum Einbinden eines NextCloud Kalenders muss in der Kalenderansicht in NextCloud der Herunterladen-Link des einzelnen gewünschte Kalender eines Anwenders kopiert werden. Dazu als Anwender in Nextcloud einloggen und zum 'Kalender' wechseln. In der linken Spalte den gewünschten Kalender bei dem Kreis mit den drei Punkten anklicken. Im Menu mit der Maus über 'Herunterladen' schweben und mittels Rechtsklick den Link kopieren. Bsp.: https://192.168.1.234/remote.php/dav/calendars/MEINCALENDER/personal/?export (wichtig ist, dass hier "?export" im Link enthalten ist).
Diese URL in den ioBroker.ical Adapter mit Nutzername und Passwort angeben. Dieses muss für alle gewünschten Kalender aller User einzeln erfolgen.
Der Baikal-Server bringt das "ics-export"-Plugin mit welches den Export eines Kalenders in eine gesammelte ICal-Datei erlaubt. Dieses Plugin wird direkt über die URL ausgewählt und erlaubt eine problemlose Zusammenarbeit mit dem vorliegenden ioBroker-Adapter. Wichtig ist der Exportfilter, welcher einfach an die Kalender-URL angehangen zu werden braucht (https://SERVER/baikal/cal.php/calendars/path/to/calendar?export&accept=ical
). Bei Anmeldeproblemen bitte in den Admin-Einstellungen der Web-UI des Baikal-Servers unter Settings
den WebDAV authentication type
von DIGEST
auf BASIC
stellen.
In dem generierten HTML sind zwei Arten von CSS-Klassen enthalten, um Gestaltungsfreiheit zu ermöglichen.
- iCalNormal _ / _ iCalNormal2: Das Ereignis wurde vor dem heutigen Tag gestartet (und wird noch ausgeführt) oder später, wie in 3 Tagen. Standardfarbe ohne CSS und ohne Kalenderfarbe ist die konfigurierte Adapterfarbe
- iCalWarn _ / _ iCalWarn2: Das Event startet heute, Standardfarbe ohne CSS und ohne Kalenderfarbe ist
rot
- iCalPreWarn _ / _ iCalPreWarn2: Das Event startet morgen, Standardfarbe ohne CSS und ohne Kalenderfarbe ist
orange
- iCalPrePreWarn _ / _ iCalPrePreWarn2: Das Event startet übermorgen, Standardfarbe ohne CSS und ohne Kalenderfarbe ist
gelb
Die erste CSS-Klasse (z. B. iCalNormal) wird für Datum und Uhrzeit des HTML-Codes verwendet, und die zweite CSS-Klasse (z. B. iCalNormal2) wird für den Ereignisnamen verwendet.
CSS-Beispiel für diese CSS-Klassen, um die Ausgabe etwas anders zu formatieren (z. B. Datum / Uhrzeit links + fett und Ereignisname rechts ...):
.icalWarn{
color:red;
float:left;
font-size:12px;
font-weight:bold;
}
.icalWarn2{
color:white;
float:right;
font-size:12px;
font-weight:normal;
}
.icalPreWarn{
color:yellow;
float:left;
font-size:12px;
font-weight:bold;
}
.icalPreWarn2{
color:white;
float:right;
font-size:12px;
font-weight:normal;
}
.icalPrePreWarn{
color:white;
float:left;
font-size:12px;
font-weight:bold;
}
.icalPrePreWarn2{
color:white;
float:right;
font-size:12px;
font-weight:normal;
}
.icalNormal{
color:green;
float:left;
font-size:12px;
font-weight:bold;
}
.icalNormal2{
color:white;
float:right;
font-size:12px;
font-weight:normal;
}
Jeder Bereich hat auch eine CSS-Klasse, die auf dem Namen des Kalenders basiert, in dem sich das Ereignis befindet. Der in der Adapterkonfiguration definierte "Kalendername" wird dafür verwendet (Leerzeichen werden durch Unterstriche ersetzt).
- _iCal- _: Diese Klasse wird für Datum und Uhrzeit des HTML-Codes verwendet
- _iCal-> calendername2> _: Diese Klasse wird für den Ereignisnamen verwendet
Um diese CSS-Klassen festzulegen, müssen Sie auch die zeitbasierte CSS-Klasse verwenden, z. .icalNormal2.iCal- 2:
.icalNormal2.iCal-Google2{
color:white;
float:right;
font-size:12px;
font-weight:normal;
}
<span style="font-weight: bold; color:white"><span class="icalNormal iCal-calendar-today">→ 3.1.2018 2:00</span></span><span style="font-weight: normal; color:white"><span class='icalNormal2 iCal-calendar-today2'> TestEvent</span></span><br/>
<span style="font-weight: bold; color: red"><span class="icalWarn iCal-calendar-today">1.1.2018 ganzer Tag</span></span><span style="font-weight:normal;color:red"><span class='icalWarn2 iCal-calendar-today2'> Today Event</span></span><br/>
In Instanzoptionen ist es möglich, einen Filter pro Kalender zu verwalten. Es muss eine durch Semikolons getrennte Liste sein. Wenn Sie die Option "Als regulären Ausdruck filtern" aktivieren, wird der Filter als regulärer Ausdruck interpretiert. Während der Kalenderaktualisierung werden alle Ereignisse ausgeschlossen, die nach Beschreibung, Ort oder Zusammenfassung übereinstimmen.
Das Suchmuster ist:
SUMMARY:MySummary
DESCRIPTION:MyDescription
LOCATION:Mein Standort
Blacklist: Wenn Sie alle Ereignisse eines bestimmten Ortes ausschließen möchten, verwenden Sie LOCATION: MyLocation
oder MyLocation
oder 2 Orte LOCATION:MyLocation;LOCATION:SomewhereElse
.
Whitelist: Wenn Sie nur Ereignisse einer bestimmten Position einschließen möchten, verwenden Sie reguläre Ausdrücke wie /^(SUMMARY:.*)\s*(DESCRIPTION:.*)\s*(LOCATION:(?!MyLocation).*)$/
oder für 2 Standorte /^(SUMMARY:.*)\s*(DESCRIPTION:.*)\s*(LOCATION:(?!((MyHomeLocation)|(MyWorkLocation))).*)$/