OpenCalendar

Kalender Konto

Das Modul verwaltet die Verbindung zu einem Online-Kalenderkonto und stellt die Kalender dieses Kontos den untergeordneten Modulen zur Verfügung.

Funktionsumfang

Voraussetzungen

Für Apple iCloud wird ein anwendungsspezifisches Passwort benötigt. Das normale Kennwort des Apple Accounts sollte nicht verwendet werden.

Einrichtung

Unter Instanz hinzufügen das Modul Kalender Konto auswählen.

Eigenschaft Beschreibung
Aktiv Aktiviert die regelmäßige Synchronisation
Anbieter Apple iCloud, Google Calendar, Microsoft 365, generischer CalDAV-Server oder ICS/Webcal
Server-URL Bei Apple vorbelegt; ansonsten URL des CalDAV-Servers. Bei ICS/Webcal bleibt hier ein bereits vorhandenes einzelnes Abonnement aus Kompatibilitätsgründen erhalten
Kalendername Optionale Bezeichnung des bisherigen einzelnen iCalendar-Abonnements
Benutzername Benutzername beziehungsweise E-Mail-Adresse des Kontos; beim bisherigen einzelnen iCalendar-Abonnement optional
Passwort Passwort oder anwendungsspezifisches Passwort; beim bisherigen einzelnen iCalendar-Abonnement optional
iCalendar-Abonnements Liste zusätzlicher Feeds mit Aktivierung, Name, URL, optionalen Zugangsdaten, Titelübersetzung, Aktualisierungsplan und optionaler Farbe
Aktualisierungsplan Vorgegebener Rhythmus von fünf Minuten bis jährlich oder ausschließlich manuelle Synchronisation; bei ICS/Webcal steuert er die erneute Kontosuche
Benutzerdefiniertes Intervall Eigener Abstand in Minuten; wird nur beim Zeitplan „Benutzerdefiniertes Intervall“ angezeigt
TLS-Zertifikat prüfen Nur für eigene CalDAV-Server und ICS/Webcal-Feeds einstellbar; für Apple, Google, Microsoft und Symcon OAuth ist die Prüfung immer aktiv
Zeitlimit der Anfrage Maximale Dauer einer HTTP-Anfrage

Über Verbindung testen wird die Anmeldung geprüft und die Anzahl der gefundenen Kalender ausgegeben. Jetzt synchronisieren aktualisiert den internen Kalendercache und informiert die verbundenen Child-Instanzen.

Bestehende Instanzen behalten ihren bisherigen Minutenwert als benutzerdefiniertes Intervall. Bei ICS/Webcal sollte der Zeitplan des Kontos passend zum Zeitplan der zugehörigen Kalenderinstanz gewählt werden, da beide Instanzen den Feed für unterschiedliche Aufgaben abrufen.

Datenschutz und OAuth

Das Konto-Modul verarbeitet Zugangsdaten, OAuth-Tokens sowie Kalender- und Termindaten. Die Daten werden grundsätzlich lokal in Symcon gespeichert oder zwischengespeichert. Google und Microsoft verwenden den zentralen Symcon-OAuth-Dienst. Die eigentlichen Kalenderdaten werden direkt zwischen der Symcon-Installation und Google Calendar beziehungsweise Microsoft Graph übertragen.

Ausführliche Angaben zu Datenarten, Speicherung, Löschung und Drittanbietern finden sich in den Datenschutzhinweisen. Vor dem Verbinden eines externen Kontos sollten diese Hinweise gelesen werden.

Google Calendar

Nach Auswahl von Google Calendar werden Server-URL, Benutzername und Passwort ausgeblendet. Eine eigene Client-ID oder ein Clientschlüssel ist nicht erforderlich. Mit Google-Konto verbinden öffnet Symcon den zentral registrierten OAuth-Ablauf im Browser.

Einrichtung:

  1. Eine aktive Symcon-Connect-Verbindung sicherstellen.
  2. Google-Konto verbinden aufrufen.
  3. Bei Google anmelden und den Zugriff auf Kalenderliste und Termine bestätigen.
  4. Anschließend das Konto synchronisieren und die gefundenen Kalender über den zugehörigen Kalender Konfigurator anlegen.

Das Modul speichert den benutzerspezifischen Refresh-Token intern und erneuert kurzlebige Access-Tokens über den Symcon-OAuth-Dienst automatisch. Google-Konto trennen widerruft den Token nach Möglichkeit bei Google und entfernt die lokal gespeicherten OAuth-Daten.

Bestehende Verbindungen aus Versionen mit persönlicher Google-Client-ID müssen nach dem Modulupdate einmal über Google-Konto verbinden neu autorisiert werden. Das Modul erkennt solche älteren Tokens und verwendet sie nicht am zentralen Symcon-OAuth-Endpunkt.

Der zentrale Google-Client verwendet die Redirect-URI https://oauth.ipmagic.de/forward/opencalendar_google und die Scopes https://www.googleapis.com/auth/calendar.calendarlist.readonly sowie https://www.googleapis.com/auth/calendar.events. Der Identifier opencalendar_google muss einmalig vom Modulautor beim Symcon-OAuth-Dienst registriert werden. Die gegebenenfalls notwendige Google-Verifizierung richtet sich nach Nutzerkreis und angeforderten Berechtigungen. Da die Redirect-URI auf der Symcon-Domain ipmagic.de liegt, ist die Einrichtung einschließlich der Google-Domainprüfung mit Symcon abzustimmen.

Eine externe Google-App im Status Testing eignet sich nur für die Entwicklung: Das verwendete Google-Konto muss als Testnutzer eingetragen sein und das Refresh-Token läuft bei den angeforderten Kalenderscopes nach sieben Tagen ab. Für den dauerhaften Einsatz muss die App in den Produktivstatus überführt und gegebenenfalls von Google verifiziert werden.

Kalender mit den Google-Rollen owner und writer werden als les- und schreibbar erkannt. reader wird schreibgeschützt angeboten. Einträge mit ausschließlich freeBusyReader werden nicht angelegt, weil sie keine Termindetails liefern.

Microsoft 365 / Outlook.com

Nach Auswahl von Microsoft 365 werden keine Client-ID und kein Clientschlüssel abgefragt. Mit Microsoft-Konto verbinden öffnet Symcon den zentral registrierten OAuth-Ablauf im Browser. Der Anwender meldet sich direkt bei Microsoft an und bestätigt ausschließlich den Zugriff auf seine Kalender.

Unterstützt werden Microsoft-365-Geschäfts-/Schulkonten und persönliche Microsoft-Konten wie Outlook.com. Das Modul verwendet delegierten Calendars.ReadWrite-Zugriff und einen Refresh-Token für den Hintergrundbetrieb. Mail, Kontakte, OneDrive oder andere Microsoft-Graph-Bereiche werden nicht angefordert.

Nach erfolgreicher Anmeldung genügt Jetzt synchronisieren. Die gefundenen Kalender werden danach wie gewohnt im zugehörigen Kalender Konfigurator angeboten. Microsofts canEdit-Angabe bestimmt, ob eine Kalenderinstanz schreibbar oder schreibgeschützt angelegt wird.

Für Terminabfragen verwendet das Modul calendarView, sodass einzelne Vorkommen von Terminserien im angeforderten Zeitraum aufgelöst geliefert werden. Für Outlook-Ressourcen wird Prefer: IdType="ImmutableId" gesendet, damit gespeicherte Termin-IDs möglichst stabil bleiben. HTTP-Weiterleitungen und von Graph gelieferte Folgeseiten werden auf die vertrauenswürdige Origin https://graph.microsoft.com beschränkt.

Bei bestehenden Microsoft-Onlinebesprechungen wird die Beschreibung in der Kalenderansicht bewusst nicht bearbeitbar angeboten. Microsoft legt darin Besprechungsinformationen ab, die bei einem unvollständigen Überschreiben verloren gehen könnten. Titel, Ort und Zeit können weiterhin geändert werden.

Der Refresh-Token wird als internes Attribut gespeichert; Access-Tokens liegen nur kurzzeitig im Instanzpuffer. Microsoft-Konto trennen löscht die lokal gespeicherten Microsoft-Zugangsdaten.

Für die zentrale OAuth-Anbindung muss der Modulautor den Identifier opencalendar_microsoft einmalig beim Symcon-OAuth-Dienst registrieren lassen. Die zugehörige Microsoft-Entra-App verwendet als Redirect-URI https://oauth.ipmagic.de/forward/opencalendar_microsoft. Diese Einrichtung findet einmalig für das Modul statt und ist keine Aufgabe des Endanwenders.

ICS/Webcal

Nach Auswahl von ICS/Webcal können in der Liste iCalendar-Abonnements mehrere private oder öffentliche Feeds gemeinsam verwaltet werden. Jeder Eintrag besitzt:

Bleibt die Farbe leer, verwendet das Modul – sofern vorhanden – die Farbe aus dem Feed. webcal:// wird automatisch über HTTPS abgerufen. Ein eingetragener Kalendername überschreibt die im Feed enthaltene Eigenschaft X-WR-CALNAME.

Das Profil Öffentliche Google-Kalender - Deutsch übersetzt ausschließlich bekannte englische Termintitel der Google-Kalender für Mondphasen und Kalendertage. Beispielsweise werden Full Moon zu Vollmond und Day 205 of 2026 zu Tag 205 von 2026. Eine gegebenenfalls angehängte englische Uhrzeit wird in das deutsche 24-Stunden-Format umgewandelt. Andere Termintitel bleiben unverändert. Bei übersetzten Terminen enthält originalSummary weiterhin den Originaltitel. Der heruntergeladene Feed und sein persistenter Cache werden nicht verändert.

Die bisherigen Felder iCalendar-URL, Kalendername, Benutzername, Passwort und Titelübersetzung bleiben für bereits eingerichtete Einzel-Feed-Konten rückwärtskompatibel. Der dort konfigurierte Feed wird zusätzlich zu den Listeneinträgen angeboten. Ist dieselbe URL bereits in der Liste enthalten, wird sie nicht doppelt angelegt.

Nach der Kontosynchronisation zeigt der zugehörige Konfigurator alle aktiven Abonnements als einzelne Kalender an. Die Kalender-Instanzen müssen dort erstellt werden. Der für einen Listeneintrag gewählte Aktualisierungsplan wird als Anfangskonfiguration der neu erzeugten Kalender-Instanz übernommen. Spätere Änderungen des Instanzzeitplans erfolgen in der jeweiligen Kalender-Instanz.

iCalendar-Abonnements sind grundsätzlich schreibgeschützt. Die Feed-URL kann – etwa bei Googles „Privatadresse im iCal-Format“ – selbst ein Zugangsgeheimnis enthalten und sollte daher wie ein Passwort behandelt werden.

Terminserien aus einem Feed werden lokal für den von der Kalenderinstanz angeforderten Zeitraum aufgelöst. Unterstützt werden tägliche, wöchentliche, monatliche und jährliche RRULE-Serien einschließlich INTERVAL, COUNT, UNTIL, BYDAY, BYMONTH, BYMONTHDAY, BYSETPOS und WKST. RDATE ergänzt einzelne Vorkommen, EXDATE entfernt sie und über RECURRENCE-ID gelieferte Änderungen oder Absagen ersetzen das zugehörige Serienvorkommen. Lokale Uhrzeiten werden in der angegebenen Zeitzone erzeugt, sodass sie auch über Sommer- und Winterzeitwechsel konstant bleiben.

Geheime Feed-Adressen werden nicht in die Terminvariable oder die Konfiguration einer erzeugten Kalenderinstanz übernommen. Sie verbleiben in der zugehörigen Konto-Instanz.

Robuste Feed-Aktualisierung

Jedes aktive iCalendar-Abonnement besitzt einen eigenen persistenten Feed-Cache:

Verbindung testen prüft immer den aktuellen Serverzustand. Der Test meldet einen Fehler, selbst wenn noch eine verwendbare ältere Feed-Version vorhanden ist. Dadurch bleibt die Kalenderanzeige robust, ohne Konfigurations- oder Zugriffsprobleme zu verschleiern.

Kontostatus anzeigen enthält je Abonnement lastCheck, lastDownload, lastChange, stale und lastError. Feed-Adressen und Feed-Inhalte werden dabei nicht ausgegeben. Cache leeren entfernt sowohl die gefundenen Kalender als auch sämtliche gespeicherten Feed-Versionen.

Datenfluss

Unterstützte Anforderungen von Child-Modulen:

Nach einer erfolgreichen Synchronisation sendet das Konto CalendarsUpdated an seine Children.

Beispiel einer Anforderung:

{
    "DataID": "{4E535B1D-69C7-AC77-1372-0282B21BAEC9}",
    "Operation": "GetCalendars",
    "RequestID": "example-1"
}

PHP-Befehlsreferenz

string IPSKALACC_TestConnection(int $InstanzID);
bool IPSKALACC_Synchronize(int $InstanzID);
string IPSKALACC_GetCalendars(int $InstanzID);
string IPSKALACC_GetAccountStatus(int $InstanzID);
void IPSKALACC_ClearCache(int $InstanzID);
string IPSKALACC_ConnectGoogle(int $InstanzID);
bool IPSKALACC_DisconnectGoogle(int $InstanzID);
string IPSKALACC_ConnectMicrosoft(int $InstanzID);
bool IPSKALACC_DisconnectMicrosoft(int $InstanzID);

Die Methoden mit komplexen Rückgabewerten liefern JSON. Passwörter und OAuth-Tokens werden weder in Rückgabewerte noch in Debugmeldungen geschrieben.