Die Anzeige der Geburtstage der Kontakte in einem iPhone oder Android-Device ist mittlerweile sehr einfach: Sind die Geburtstage korrekt in den Eigenschaften der angelegten Kontakte korrekt gepflegt, lässt sich in der Kalender-Liste der Kalender-APP meist mit dem Namen „Geburtstage“ ein Kalender aktivieren, der die Geburtstage der Kontakte anzeigt. Möchte man diesen Kalender aber an anderer Stelle nutzen, z.B. in einem Kalender-Widget auf einer VIS-Oberfläche in ioBroker, benötigt man einen ical-URL für den Import der Einträge.

Schnell stellen wir fest, dass sowohl bei Apple unter icloud.com, als auch bei calendar.google.com der Geburtstagskalender keine ical-URL für den Import anbietet.

Geburtstagskalender in Google ohne ical-URL

Geburtstagskalender in Google ohne ical-URL

Legt man hingegen eigene Kalender bei Apple oder Google an, findet sich in den Freigabe-Funktionen die öffentliche ical-URL, die wir z.B. im ical-Adapter in ioBroker einlesen können.

Die folgende Anleitung nutzt die Script-Funktionen des Google Drives, d.h. wir müssen zunächst sicherstellen, dass alle Kontakte mit den Geburstagsinformationen auf einem Google-Konto unter contacts.google.com liegen. Besitzt man ein Apple-Produkt, lassen sich die Kontakte mit APPs sehr einfach mit dem Google-Konto synchronisieren (z.B. hier).

Wie schon beschrieben können wir sofort mit dem Standard-Geburtstags-Kalender die Geburtstage zwar anzeigen, aber nicht über eine ical-URL einbinden. Um dies zu ermöglichen legen wir zunächst einen neuen Kalender im Konto an, z.B. mit dem Namen „Geburtstagskalender“.

Neuen Google Kalender für Geburtstage erstellen

Neuen Google Kalender für Geburtstage erstellen

Nach der erfolgreichen Anlage des neuen Geburtstagskalenders ist dieser natürlich leer. Die Idee ist einfach: Wir kopieren alle Geburtstage aus dem google-eigenen Geburtstagskalender in unseren eigenen.

Dies können wir mit einem Script im Google Drive erledigen, also direkt auf drive.google.com gehen und ein neues Google APPs Script anlegen:

In Google Drive ein neues Google Apps Script anlegen

In Google Drive ein neues Google Apps Script anlegen

Zuvor sollten wir uns im Google-Kalender noch die beiden Kalender-IDs unseres eigenen Geburtstagskalenders und des google-eigenen Geburstagskalenders notieren, diese finden wir in den Einstellungen der Kalender unter dem Punkt „Kalender ID“.

Nach der Anlage eines neuen Google APPs Scripts können wir folgenden Code in das Script kopieren:

function Sync_Birth_Cal() {

  // Calendars adress (ID)
  
  var calendarSource = CalendarApp.getCalendarById("Kalender ID google-eigener Geburstagskalender@group.v.calendar.google.com");
  var calendarDestination = CalendarApp.getCalendarById("Kalender ID eigener Geburstagskalender@group.calendar.google.com");
  
  // Start and End Date definition
  
  var Today = new Date();
  var StartDeleteDate = new Date();
  var EndDeleteDate = new Date();
  var StartCopyDate = new Date();
  var EndCopyDate = new Date();
  
  StartDeleteDate.setDate(Today.getDate()-400); 
  EndDeleteDate.setDate(Today.getDate()+400);
  StartCopyDate.setDate(Today.getDate()-360);
  EndCopyDate.setDate(Today.getDate()+360);
 
  
  // first deletes all datas in calendar
  
  
  var eventToDelete = calendarDestination.getEvents(StartDeleteDate, EndDeleteDate);
  
   for (var i = 0; i < eventToDelete.length; i++) {  
    eventToDelete[i].deleteEvent();
    }  


  // then copy everything again
  
  var eventToCopy = calendarSource.getEvents(StartCopyDate, EndCopyDate);

  for (var t in eventToCopy){
    var newEvent = calendarDestination.createEvent(eventToCopy[t].getTitle(), eventToCopy[t].getStartTime(), eventToCopy[t].getEndTime());
  }
  
}

Das Script synchronisiert, genauer überträgt 1:1 die Einträge des google-Geburtstagskalenders in unseren Kalender, dies sollte natürlich regelmäßig passieren, also sollten wir einen Trigger anlegen, der die Übertragung der Einträge regelmäßig vornimmt:

Trigger für Google App Script anlegen

Trigger für Google App Script anlegen

Neuen Trigger für Google App Script anlegen

Neuen Trigger für Google App Script anlegen

Der Trigger kann individuell ähnlich einen Cron-Jobs konfiguriert werden, von minütlich bis täglich ist möglich, wir haben eine Synchronisierung 1x am Tag konfiguriert.

Anschließend können wir die ical-URL unseres gefüllten Geburtstagskalenders kopieren und im ical-Adapter in ioBroker einfügen:

ioBroker iCal-Adapter Konfiguration für Geburtstagskalender

ioBroker iCal-Adapter Konfiguration für Geburtstagskalender

Alle 30 Minuten werden die Kalendereinträge mit ioBroker synchronisiert und in den ioBroker-Objekten gespeichert:

Kalendereinträge in ioBroker iCal-Objekten

Kalendereinträge in ioBroker iCal-Objekten

Der Adapter legt die Daten bereits HTML-formatiert, in json-Objekten oder als Text-Objekt ab. Je nach Integration in VIS kann man eine der Varianten nutzen. Wir nutzen die HTML-formatierte Variante, weil in diese Fall die im Kalender-Feed angegeben Farben dargestellt werden:

Kalendereinträge in ioBroker VIS-Oberfläche

Kalendereinträge in ioBroker VIS-Oberfläche