Scripte für den Google Kalender API V3

Hier nun die Anleitung für das Auslesen des Google-Kalenders „Step by step“.

  1. Meldet Euch bei Google mit Eurem Google-Account an.

  2. Geht zu der Seite: https://console.developers.google.com/project
    Dort betätigt Ihr die Taste "Projekt erstellen.

  3. Gebt einen Projektnamen an. Die Projekt-ID wird von Google generiert.
    Google_Developers_Console_2.PNG

  4. Unter „API’s und Authentifizierung“ geht Ihr auf APIs und aktiviert die Calender API

  5. Unter den Zugangsdaten erstellt Ihr eine Client-ID vom Typ Dienstkonto


    Google_Developers_Console_6.PNG

  6. Nach bestätigen mit der Taste Client-ID erstellen erscheint ein neues Fenster mit einem Passwort. Dieses Passwort würde ich mir sicherheitshalber in einer Textdatei speichern. Mit betätigen der Taste OK wird eine p12-Datei herunter geladen.
    Google_Developers_Console_7.PNG

  7. Diese Datei liegt bei mir im IPS-Ordner "scripts unter „certificates“.

  8. Man sieht die Zugangsdaten für das Dienstkonto

  9. Nun muss noch dein Google Kalender frei gegeben werden. Dazu geht Ihr zu Eurem Kalender und Dort zu den Kalenderfreigaben.
    Kalender_1.png

  10. Die Email-Adresse aus den Zugangsdaten für das Dienstkonto (2) muss frei gegeben werden. Es ist wichtig das die Berechtigung mindestens auf „Alle Termindetails anzeigen“ steht. Da ich später auch Termine eintragen möchte steht meine Freigabe auf „Termine ändern“!
    Bild siehe Anhang!!

  11. Für die Skripte wird noch die Kalender-ID des freigegebenen Kalenders benötigt .
    Bild siehe Anhang!!

  12. Folgende Daten müssen in den Skripten angepasst werden:


//#################################### Bitte einstellen #####################################################################

$Client_ID        	=  "12345.apps.googleusercontent.com";
$EMail 	          	=  "12345@developer.gserviceaccount.com";
$key_file_location   =  IPS_GetKernelDir()."scripts\\certificates\\Kalender-af58c75d630b.p12";
$calendar_login 		=	array('Kalender_ID1@googlemail.com',
			           				'Kalender_ID2@group.calendar.google.com');

//###########################################################################################################################

  1. Google PHP API runterladen und im unterordner des script Verzeichnisses speichern.
    Der Ordner muss „google-api-php-client“ heissen!! ggf anpassen

!!Achtung: Aktuell muss der v1-branch genommen werden. Das steht auch so unter dem Repro!!

Edit:

Mit dem Wechsel zu IPS V4.0
entfallen die Punkte 14-16!!
Dieses leidige Thema hat dann ein Ende!!

  1. Aus dem alten OpenSSL Paket (Version 0.9.8zc, Migration (V2.4->V2.5) — IP-Symcon :: Automatisierungssoftware Dateien ssleay32.dll und libeay32.dll in den IPS Ordner (alte umbenennen)

  2. In der PHP-ini die Extension Open ssl aktivieren (extension = php_openssl.dll)

  3. IPS-Dienst stoppen und wieder starten.

Links:

https://www.youtube.com/watch?v=SZj6rAYkYOg
https://developers.google.com/
https://developers.google.com/google-apps/calendar/
https://developers.google.com/accounts/docs/OAuth2
https://developers.google.com/oauthplayground/
https://developers.google.com/apis-explorer/#p/

Es können ein oder mehrere Kalender ausgelesen werden.


<?
/*=============================================================
skrGoogleKalenderLesen - Martin Heinzel - 01.05.2012
Version: 2.0

Beschreibung:
Mit diesem Script werden die nächsten "X" Termine aus den Google Kalendern
gelesen.

Änderungen
----------

07.06.2012 von Version 0.1 -> 1.0

Beschreibung:

Erste Version des Scriptes. Geändert wurde:

-	Es werden nun Start und Endzeit angegeben.
-	Bei ganztägigen Terminen steht anstelle der Zeit der Text „Ganztägig“
-	Vor dem Termin steht in eckigen Klammern der Kalender, aus dem der Termin ist.
   Die Anzahl der angezeigten Zeichen des Kalendernamens kann eingestellt werden.

27.11.2014 von Version 1.0 -> 2.0

Beschreibung:

Script wurde angepasst auf die Google Kalender API V3

================================================================*/

//#################################### Bitte einstellen #####################################################################

$Client_ID        	=  "123.apps.googleusercontent.com";
$EMail 	          	=  "456@developer.gserviceaccount.com";
$key_file_location   =  IPS_GetKernelDir()."scripts\\certificates\\Kalender-af58c75d630b.p12";
$calendar_login 		=	array('irgendwas@googlemail.com',
			           				'schaun_wir_mal0@group.calendar.google.com');

$message_count		= 10;                            //Anzahl der Meldungen
$whoCounts		   = 3;                             //Anzahl der dargestellten Zeichen des Kalenders

//###########################################################################################################################


// Variablen Deklaration --------------------------------------

// Variablen
//--------------

$StartTimes       =  array();
$EndTimes 	      =  array();
$Titles		      =  array();

//-------------------------------------------------------------

//benötigte Funktionen/Klassen
set_include_path(IPS_GetKernelDir()."scripts\\google-api-php-client\\src");
require_once 'google-api-php-client/autoload.php';

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
$client = new Google_Client();
$client->setApplicationName("Kalender");
$service = new Google_Service_Calendar($client);
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($EMail, array('https://www.googleapis.com/auth/calendar'), $key);
$client->setAssertionCredentials($cred);

// Event lesen
//==============

// Die einzelnen Kalender abfragen
foreach ($calendar_login as $Calender_ID)
{

// Übergeben der Daten der Suchanfrage
$optParams = array('singleEvents' 	=> True,
						 'timeMin' 			=> (new DateTime())->format(DateTime::RFC3339),
					    'orderBy' 			=> 'startTime',
					    'maxResults' 	   => $message_count);

// Die Suchanfrage ausführen
$events = $service->events->listEvents($Calender_ID, $optParams);

	// Das Ergebnis durchsuchen
	foreach ($events->getItems() as $event)
	{
		// Auslesen der Startzeit
		If($event->getStart()->dateTime <> "")
		{
	   	$Date_Time_Start 	 = $event->getStart()->dateTime;
	   	$Date_Time_End		 = $event->getEnd()->dateTime;
		}
		else
		{
			$Date_Time_Start 	 = $event->getStart()->date;
	   	$Date_Time_End		 = $event->getEnd()->date;
		}

      $StartTimes[] 	= EventTime_to_TimeStamp($Date_Time_Start);
		$EndTimes[] 	= EventTime_to_TimeStamp($Date_Time_End);

		if(count($calendar_login) > 1)
		{
		   $who           = utf8_decode($event->getOrganizer()->displayName);
		   $who_substr    = substr($who, 0, $whoCounts);
			$Titles[] 	 	= "[".$who_substr."] ".utf8_decode($event->getSummary());
		}
		else
		{
			$Titles[] 	 	= utf8_decode($event->getSummary());
		}
	}
}

array_multisort($StartTimes,SORT_ASC,$Titles,$EndTimes);	//Arrays sortieren
$count   = count($StartTimes);									//Anzahl der Termine

//Max Schleifenzählers
if($count <= $message_count){	$i = $count; }
else                        {	$i = $message_count; }
$sz      = 0; 															//Schleifenzähler

//Terminanzeige zusammenbauen
$event_display = "";                            			// Initialisieren der Anzeige

while($sz < $i)
{
	//Abfrage ganztägiger Termin
	if(Date("H:i:s",(int)$StartTimes[$sz]) === "00:00:00")
	{
		$event_display .= Date("d.m.Y",(int)$StartTimes[$sz])." ---  Ganztägig  ---   ".$Titles[$sz]."
";
	}
	else
	{
		$event_display .= Date("d.m.Y H:i:s",(int)$StartTimes[$sz])." - ".Date("H:i:s",(int)$EndTimes[$sz])."   ".$Titles[$sz]."
";
	}
	$sz++;
}

//echo $event_display;
SetValue(CreateVariableByName($IPS_SELF, "Kalender", 3, "~TextBox"), $event_display);

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

function CreateVariableByName($id, $name, $type, $profile = "")
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}

/**
 * Returns a timestamp of the Google event Time
 *
 * @param  string $eventTime The Google event Time in "2010-06-11T07:30:00.000-07:00"
 * @return int Timestamp of the Google event Time
 */
function EventTime_to_TimeStamp($eventTime)
{

		// Zerlegen der Startzeit
		if(strpos($eventTime, "T")>0)
		{
			//Datum
			$arrDate_Time 	= 	explode("T", $eventTime);
			$Date 			=  $arrDate_Time[0];
			$arrDate 		=  explode("-", $Date);
			$term_jahr     =  (int)$arrDate[0];
			$term_monat    = 	(int)$arrDate[1];
			$term_tag      =  (int)$arrDate[2];

			//Uhrzeit
			$arrTime 		=  explode("+", $arrDate_Time[1]);
			$Time          =  substr($arrTime[0], 0, 8);
			$arrTimeVal		=  explode(":", $Time);
			$term_Stunde   =  (int)$arrTimeVal[0];
			$term_Minute   =  (int)$arrTimeVal[1];
			$term_Sekunde  =  (int)$arrTimeVal[2];

		}
		else
		{
			//Datum
			$arrDate 		=  explode("-", $eventTime);
			$term_jahr     =  (int)$arrDate[0];
			$term_monat    = 	(int)$arrDate[1];
			$term_tag      =  (int)$arrDate[2];

			//Uhrzeit
			$term_Stunde   =  0;
			$term_Minute   =  0;
			$term_Sekunde  =  0;
		}

    return mktime($term_Stunde, $term_Minute, $term_Sekunde, $term_monat, $term_tag, $term_jahr);
}

//--------------------- Funktionen ENDE ------------------------

?>

Termine auslesen mit zusätzlicher HTML-Ausgabe.
In $Keywords werden die Schlüsselworte eingetragen.
In $Style wird die dazugehörige Hintergrundfarbe in HTML-Farbcode eingetragen.


<?
/*=============================================================
skrGoogleKalenderLesen - Martin Heinzel - 01.05.2012
Version: 2.1

Beschreibung:
Mit diesem Script werden die nächsten "X" Termine aus den Google Kalendern
gelesen.

Änderungen
----------

07.06.2012 von Version 0.1 -> 1.0

Beschreibung:

Erste Version des Scriptes. Geändert wurde:

-	Es werden nun Start und Endzeit angegeben.
-	Bei ganztägigen Terminen steht anstelle der Zeit der Text „Ganztägig“
-	Vor dem Termin steht in eckigen Klammern der Kalender, aus dem der Termin ist.
   Die Anzahl der angezeigten Zeichen des Kalendernamens kann eingestellt werden.

27.11.2014 von Version 1.0 -> 2.0

Beschreibung:

Script wurde angepasst auf die Google Kalender API V3

12.12.2014 von Version 2.0 -> 2.1

Beschreibung:

In der neuen Version werden die Termine zusätzlich in HTML ausgegeben
Für diese Ausgabe können Schlüselworte mit entsprechender Hintergrundfarbe
deklariert werden.

================================================================*/

//#################################### Bitte einstellen #####################################################################

$Client_ID        	=  "123.apps.googleusercontent.com";
$EMail 	          	=  "456@developer.gserviceaccount.com";
$key_file_location   =  IPS_GetKernelDir()."scripts\\certificates\\Kalender-af58c75d630b.p12";
$calendar_login 		=	array('irgendwas@googlemail.com',
			           				'schaun_wir_mal0@group.calendar.google.com');

$message_count		= 10;                            //Anzahl der Meldungen
$whoCounts		   = 3;                             //Anzahl der dargestellten Zeichen des Kalenders

$Keywords         = array("graue","braun","blau", "geburtstag");
$Style            = array('bgcolor="#808080"','bgcolor="#D2691E"','bgcolor="#87CEFA"', 'bgcolor="#DC143C"');
$Style_Standard   = 'bgcolor="#800080"';

//###########################################################################################################################


// Variablen Deklaration --------------------------------------

// Variablen
//--------------

$StartTimes       =  array();
$EndTimes 	      =  array();
$Titles		      =  array();
$browser          =  "";
$arrStyle_akt     = array();

//-------------------------------------------------------------

//benötigte Funktionen/Klassen
set_include_path(IPS_GetKernelDir()."scripts\\google-api-php-client\\src");
require_once 'google-api-php-client/autoload.php';

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
$client = new Google_Client();
$client->setApplicationName("Kalender");
$service = new Google_Service_Calendar($client);
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($EMail, array('https://www.googleapis.com/auth/calendar'), $key);
$client->setAssertionCredentials($cred);

// Event lesen
//==============

// Die einzelnen Kalender abfragen
foreach ($calendar_login as $Calender_ID)
{

// Übergeben der Daten der Suchanfrage
$optParams = array('singleEvents' 	=> True,
						 'timeMin' 			=> (new DateTime())->format(DateTime::RFC3339),
					    'orderBy' 			=> 'startTime',
					    'maxResults' 	   => $message_count);

// Die Suchanfrage ausführen
$events = $service->events->listEvents($Calender_ID, $optParams);

	// Das Ergebnis durchsuchen
	foreach ($events->getItems() as $event)
	{
		// Auslesen der Startzeit
		If($event->getStart()->dateTime <> "")
		{
	   	$Date_Time_Start 	 = $event->getStart()->dateTime;
	   	$Date_Time_End		 = $event->getEnd()->dateTime;
		}
		else
		{
			$Date_Time_Start 	 = $event->getStart()->date;
	   	$Date_Time_End		 = $event->getEnd()->date;
		}

      $StartTimes[] 	= EventTime_to_TimeStamp($Date_Time_Start);
		$EndTimes[] 	= EventTime_to_TimeStamp($Date_Time_End);

		if(count($calendar_login) > 1)
		{
		   $who           = utf8_decode($event->getOrganizer()->displayName);
		   $who_substr    = substr($who, 0, $whoCounts);
			$Titles[] 	 	= "[".$who_substr."] ".utf8_decode($event->getSummary());
		}
		else
		{
			$Titles[] 	 	= utf8_decode($event->getSummary());
		}
		
	    // title
	 	$title_harm =  strtolower(utf8_decode($event->getSummary()));
	 	$Loop_count = 0;

		// Style
		foreach ($Keywords as $Keyword)
		{
			if(stristr($title_harm, $Keyword) !== false)
			{
	         $arrStyle_akt[]   =  $Style[$Loop_count];
	         break;
			}

	      $Loop_count += 1;

			if($Loop_count >= count($Keywords))
			{
	         $arrStyle_akt[]   =  $Style_Standard;
			}
		}
	}
}

array_multisort($StartTimes,SORT_ASC,$Titles,$EndTimes,$arrStyle_akt);	//Arrays sortieren
$count   = count($StartTimes);									//Anzahl der Termine

//Max Schleifenzählers
if($count <= $message_count){	$i = $count; }
else                        {	$i = $message_count; }
$sz      = 0; 															//Schleifenzähler

//Terminanzeige zusammenbauen
$event_display = "";                            			// Initialisieren der Anzeige
$browser       =  '<table border="1" cellpadding="1" cellspacing="1" summary="Google-Kalender">';

while($sz < $i)
{
	//Abfrage ganztägiger Termin
	if(Date("H:i:s",(int)$StartTimes[$sz]) === "00:00:00")
	{
		$event_display .= Date("d.m.Y",(int)$StartTimes[$sz])." ---  Ganztägig  ---   ".$Titles[$sz]."
";

		//zusammenbauen der HTML-Zeile
      $browser             	.= '<tr>';
      $browser             	.= '<td width="80px" align="center" '.$arrStyle_akt[$sz].'>'.Date("d.m.Y",(int)$StartTimes[$sz]).'</td>';
      $browser             	.= '<td width="150px" align="center" '.$arrStyle_akt[$sz].'>'." ---  Ganztägig  ---   ".'</td>';
      $browser             	.= '<td width="300px" align="left" '.$arrStyle_akt[$sz].'>'.$Titles[$sz].'</td>';
      $browser             	.= '</tr>';

	}
	else
	{
		$event_display .= Date("d.m.Y H:i:s",(int)$StartTimes[$sz])." - ".Date("H:i:s",(int)$EndTimes[$sz])."   ".$Titles[$sz]."
";

		//zusammenbauen der HTML-Zeile
      $browser             	.= '<tr>';
      $browser             	.= '<td width="80px" align="center" '.$arrStyle_akt[$sz].'>'.Date("d.m.Y",(int)$StartTimes[$sz]).'</td>';
      $browser             	.= '<td width="150px" align="center" '.$arrStyle_akt[$sz].'>'.Date("H:i:s",(int)$StartTimes[$sz])." - ".Date("H:i:s",(int)$EndTimes[$sz]).'</td>';
      $browser             	.= '<td width="300px" align="left" '.$arrStyle_akt[$sz].'>'.$Titles[$sz].'</td>';
      $browser             	.= '</tr>';

	}
	$sz++;
}

$browser             .=  '</table>';
//echo $browser;
SetValue(CreateVariableByName($IPS_SELF, "HTML_Kalender", 3, "~HTMLBox"), $browser);
//echo $event_display;
SetValue(CreateVariableByName($IPS_SELF, "Kalender", 3, "~TextBox"), $event_display);

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

function CreateVariableByName($id, $name, $type, $profile = "")
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}

/**
 * Returns a timestamp of the Google event Time
 *
 * @param  string $eventTime The Google event Time in "2010-06-11T07:30:00.000-07:00"
 * @return int Timestamp of the Google event Time
 */
function EventTime_to_TimeStamp($eventTime)
{

		// Zerlegen der Startzeit
		if(strpos($eventTime, "T")>0)
		{
			//Datum
			$arrDate_Time 	= 	explode("T", $eventTime);
			$Date 			=  $arrDate_Time[0];
			$arrDate 		=  explode("-", $Date);
			$term_jahr     =  (int)$arrDate[0];
			$term_monat    = 	(int)$arrDate[1];
			$term_tag      =  (int)$arrDate[2];

			//Uhrzeit
			$arrTime 		=  explode("+", $arrDate_Time[1]);
			$Time          =  substr($arrTime[0], 0, 8);
			$arrTimeVal		=  explode(":", $Time);
			$term_Stunde   =  (int)$arrTimeVal[0];
			$term_Minute   =  (int)$arrTimeVal[1];
			$term_Sekunde  =  (int)$arrTimeVal[2];

		}
		else
		{
			//Datum
			$arrDate 		=  explode("-", $eventTime);
			$term_jahr     =  (int)$arrDate[0];
			$term_monat    = 	(int)$arrDate[1];
			$term_tag      =  (int)$arrDate[2];

			//Uhrzeit
			$term_Stunde   =  0;
			$term_Minute   =  0;
			$term_Sekunde  =  0;
		}

    return mktime($term_Stunde, $term_Minute, $term_Sekunde, $term_monat, $term_tag, $term_jahr);
}

//--------------------- Funktionen ENDE ------------------------

?>


$calendar_login ist ein Array in dem alle Kalender-IDs eingetragen werden müssen.

Bei mir liegt alles im Script Ordner von IPS!!

Hier nun das Script zu schreiben von Terminen:


<?
/*=============================================================
skrGoogleKalenderSchreiben - Martin Heinzel - 24.11.2011
Version: 2.0

Beschreibung:
Mit diesem Script werden Termine in den Google Kalender geschrieben.

Wiederholungen:

0  =  keine
1  =  wöchentlich
2  =  14 Tage
3  =  monatlich
4  =  jährlich

Änderungen
----------

30.11.2011 von Version 0.1 -> 1.0

Beschreibung:

Erste gültige Version des Scripts.
Es wurde noch die Auswahl des Kalenders in dem der Termin eingetragen werden soll
eingefügt. Bleibt der "calendar_user" leer wird der Standard-Kalender genommen.

01.12.2014 von Version 1.0 -> 2.0

Beschreibung:

Script wurde angepasst auf die Google Kalender API V3
Der calender_user wurde ersetzt durch die Calender_ID
==============================================================*/

// Variablen Deklaration --------------------------------------

//Bitte anpassen
//#################################### Bitte einstellen #####################################################################
$Calender_ID   				= 	"Kalender-ID@googlemail.com";
$Client_ID        			=  "1234.apps.googleusercontent.com";
$EMail 	          			=  "1234@developer.gserviceaccount.com";
$key_file_location   		=  IPS_GetKernelDir()."scripts\\certificates\\Kalender-af58c75d630b.p12";
//###########################################################################################################################

// ID's
//--------------
// Kontrolle der ID's
$id_StartDay		      = 	@IPS_GetObjectIDByName("StartDay", $IPS_SELF);
// Wenn es diese Variable noch nicht gibt dann wird das Script
// zum ersten mal aufgerufen und muss eingerichtet werden.
if($id_StartDay === false)
{

	// erstellen der Integer-Variablen
	//=================================
	//erzeugen und initialisieren der Variablen "Recur"
   $id_Recur             =  IPS_CreateVariable(1);
	IPS_SetName($id_Recur, "Recur");
	IPS_SetParent($id_Recur, $IPS_SELF);
	SetValueInteger($id_Recur, 0);

	// erstellen der String-Variablen
	//=================================
	//erzeugen und initialisieren der Variablen "StartDay"
   $id_StartDay	         =  IPS_CreateVariable(3);
	IPS_SetName($id_StartDay, "StartDay");
	IPS_SetParent($id_StartDay, $IPS_SELF);
	SetValueString($id_StartDay, date("d", time()+86400));

	//erzeugen und initialisieren der Variablen "StartMonth"
   $id_StartMonth	         =  IPS_CreateVariable(3);
	IPS_SetName($id_StartMonth, "StartMonth");
	IPS_SetParent($id_StartMonth, $IPS_SELF);
	SetValueString($id_StartMonth, date("m", time()+86400));

	//erzeugen und initialisieren der Variablen "StartYear"
   $id_StartYear           =  IPS_CreateVariable(3);
	IPS_SetName($id_StartYear, "StartYear");
	IPS_SetParent($id_StartYear, $IPS_SELF);
	SetValueString($id_StartYear, date("Y", time()+86400));

	//erzeugen und initialisieren der Variablen "StartHour"
   $id_StartHour           =  IPS_CreateVariable(3);
	IPS_SetName($id_StartHour, "StartHour");
	IPS_SetParent($id_StartHour, $IPS_SELF);
	SetValueString($id_StartHour, date("H", time()+86400));

	//erzeugen und initialisieren der Variablen "StartMinute"
   $id_StartMinute         =  IPS_CreateVariable(3);
	IPS_SetName($id_StartMinute, "StartMinute");
	IPS_SetParent($id_StartMinute, $IPS_SELF);
	SetValueString($id_StartMinute, date("i", time()+86400));

	//erzeugen und initialisieren der Variablen "EndDay"
   $id_EndDay	         =  IPS_CreateVariable(3);
	IPS_SetName($id_EndDay, "EndDay");
	IPS_SetParent($id_EndDay, $IPS_SELF);
	SetValueString($id_EndDay, date("d", time()+90000));

	//erzeugen und initialisieren der Variablen "EndMonth"
   $id_EndMonth	         =  IPS_CreateVariable(3);
	IPS_SetName($id_EndMonth, "EndMonth");
	IPS_SetParent($id_EndMonth, $IPS_SELF);
	SetValueString($id_EndMonth, date("m", time()+90000));

	//erzeugen und initialisieren der Variablen "EndYear"
   $id_EndYear           =  IPS_CreateVariable(3);
	IPS_SetName($id_EndYear, "EndYear");
	IPS_SetParent($id_EndYear, $IPS_SELF);
	SetValueString($id_EndYear, date("Y", time()+90000));

	//erzeugen und initialisieren der Variablen "EndHour"
   $id_EndHour           =  IPS_CreateVariable(3);
	IPS_SetName($id_EndHour, "EndHour");
	IPS_SetParent($id_EndHour, $IPS_SELF);
	SetValueString($id_EndHour, date("H", time()+90000));

	//erzeugen und initialisieren der Variablen "EndMinute"
   $id_EndMinute         =  IPS_CreateVariable(3);
	IPS_SetName($id_EndMinute, "EndMinute");
	IPS_SetParent($id_EndMinute, $IPS_SELF);
	SetValueString($id_EndMinute, date("i", time()+90000));

	//erzeugen und initialisieren der Variablen "Titel"
   $id_Titel  	          =  IPS_CreateVariable(3);
	IPS_SetName($id_Titel, "Titel");
	IPS_SetParent($id_Titel, $IPS_SELF);
	SetValueString($id_Titel, "Das ist ein Termin von IPS");

	//erzeugen und initialisieren der Variablen "Description"
   $id_Description  	    =  IPS_CreateVariable(3);
	IPS_SetName($id_Description, "Description");
	IPS_SetParent($id_Description, $IPS_SELF);
	SetValueString($id_Description, "Beschreibung für den IPS Testtermin");

	//erzeugen und initialisieren der Variablen "Where"
   $id_Where  	          =  IPS_CreateVariable(3);
	IPS_SetName($id_Where, "Where");
	IPS_SetParent($id_Where, $IPS_SELF);
	SetValueString($id_Where, "Bocholt");

	// erstellen der Bool-Variablen
	//=================================
	//erzeugen und initialisieren der Variablen "AllDay"
   $id_AllDay  	         =  IPS_CreateVariable(0);
	IPS_SetName($id_AllDay, "AllDay");
	IPS_SetParent($id_AllDay, $IPS_SELF);
	SetValueBoolean($id_AllDay, False);

	// nach dem Anlegen das Script beenden
	return;
}
else
{

   $id_StartMonth       =  IPS_GetObjectIDByName("StartMonth", $IPS_SELF);
   $id_StartYear        =  IPS_GetObjectIDByName("StartYear", $IPS_SELF);
   $id_StartHour        =  IPS_GetObjectIDByName("StartHour", $IPS_SELF);
   $id_StartMinute      =  IPS_GetObjectIDByName("StartMinute", $IPS_SELF);
   $id_EndDay           =  IPS_GetObjectIDByName("EndDay", $IPS_SELF);
   $id_EndMonth         =  IPS_GetObjectIDByName("EndMonth", $IPS_SELF);
   $id_EndYear          =  IPS_GetObjectIDByName("EndYear", $IPS_SELF);
   $id_EndHour          =  IPS_GetObjectIDByName("EndHour", $IPS_SELF);
   $id_EndMinute        =  IPS_GetObjectIDByName("EndMinute", $IPS_SELF);
 	$id_Recur            =  IPS_GetObjectIDByName("Recur", $IPS_SELF);
   $id_Titel            =  IPS_GetObjectIDByName("Titel", $IPS_SELF);
   $id_Description      =  IPS_GetObjectIDByName("Description", $IPS_SELF);
   $id_Where            =  IPS_GetObjectIDByName("Where", $IPS_SELF);
   $id_AllDay           =  IPS_GetObjectIDByName("AllDay", $IPS_SELF);

}


// Variablen
//--------------
$StartDay         =  GetValueString($id_StartDay);
if(strlen($StartDay)< 2)
{
   $StartDay      =  "0".$StartDay;
   SetValueString($id_StartDay, $StartDay);
}

$StartMonth       =  GetValueString($id_StartMonth);
if(strlen($StartMonth)< 2)
{
   $StartMonth      =  "0".$StartMonth;
   SetValueString($id_StartMonth, $StartMonth);
}

$StartYear        =  GetValueString($id_StartYear);
if(strlen($StartYear)< 4)
{
   $StartYear      =  "20".$StartYear;
   SetValueString($id_StartYear, $StartYear);
}

$StartHour        =  GetValueString($id_StartHour);
if(strlen($StartHour)< 2)
{
   $StartHour      =  "0".$StartHour;
   SetValueString($id_StartHour, $StartHour);
}

$StartMinute      =  GetValueString($id_StartMinute);
if(strlen($StartMinute)< 2)
{
   $StartMinute      =  "0".$StartMinute;
   SetValueString($id_StartMinute, $StartMinute);
}

$EndDay           =  GetValueString($id_EndDay);
if(strlen($EndDay)< 2)
{
   $EndDay      =  "0".$EndDay;
   SetValueString($id_EndDay, $EndDay);
}

$EndMonth         =  GetValueString($id_EndMonth);
if(strlen($EndMonth)< 2)
{
   $EndMonth      =  "0".$EndMonth;
   SetValueString($id_EndMonth, $EndMonth);
}

$EndYear          =  GetValueString($id_EndYear);
if(strlen($EndYear)< 4)
{
   $EndYear      =  "20".$EndYear;
   SetValueString($id_EndYear, $EndYear);
}

$EndHour          =  GetValueString($id_EndHour);
if(strlen($EndHour)< 2)
{
   $EndHour      =  "0".$EndHour;
   SetValueString($id_EndHour, $EndHour);
}

$EndMinute        =  GetValueString($id_EndMinute);
if(strlen($EndMinute)< 2)
{
   $EndMinute      =  "0".$EndMinute;
   SetValueString($id_EndMinute, $EndMinute);
}

$Recur            =  GetValueInteger($id_Recur);
$Titel            =  GetValueString($id_Titel);
$Description      =  GetValueString($id_Description);
$Where            =  GetValueString($id_Where);
$AllDay           =  GetValueBoolean($id_AllDay);

//-------------------------------------------------------------

//benötigte Funktionen/Klassen
set_include_path(IPS_GetKernelDir()."scripts\\google-api-php-client\\src");
require_once 'google-api-php-client/autoload.php';

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
$client = new Google_Client();
$client->setApplicationName("Kalender");
$service = new Google_Service_Calendar($client);
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($EMail, array('https://www.googleapis.com/auth/calendar'), $key);
$client->setAssertionCredentials($cred);

// Event schreiben
//================

$event = new Google_Service_Calendar_Event();
$event->setSummary($Titel);
$event->setLocation($Where);
$event->setDescription($Description);

$start = new Google_Service_Calendar_EventDateTime();
$end = new Google_Service_Calendar_EventDateTime();

if($AllDay)
{
	$start = new Google_Service_Calendar_EventDateTime();
	$start->setDate($StartYear."-".$StartMonth."-".$StartDay);
	$start->setTimeZone('Europe/Berlin');
	$event->setStart($start);
	$end = new Google_Service_Calendar_EventDateTime();
	$end->setDate($EndYear."-".$EndMonth."-".$EndDay);
	$end->setTimeZone('Europe/Berlin');
	$event->setEnd($end);
}
else
{
	$start = new Google_Service_Calendar_EventDateTime();
	$start->setDateTime($StartYear."-".$StartMonth."-".$StartDay."T".$StartHour.":".$StartMinute.":00.000+01:00");
	$start->setTimeZone('Europe/Berlin');
	$event->setStart($start);
	$end = new Google_Service_Calendar_EventDateTime();
	$end->setDateTime($EndYear."-".$EndMonth."-".$EndDay."T".$EndHour.":".$EndMinute.":00.000+01:00");
	$end->setTimeZone('Europe/Berlin');
	$event->setEnd($end);
}

//Auswahl der Wiederholung
Switch($Recur)
{
	// keine
	case 0:
		break;

	// wöchentlich
	case 1:
		$event->setRecurrence(array('RRULE:FREQ=WEEKLY;INTERVAL=1'));
		break;

	// 14 Tage
	case 2:
		$event->setRecurrence(array('RRULE:FREQ=WEEKLY;INTERVAL=2'));
		break;

	// monatlich
	case 3:
		$event->setRecurrence(array('RRULE:FREQ=MONTHLY;INTERVAL=1'));
		break;

	// jährlich
	case 4:
		$event->setRecurrence(array('RRULE:FREQ=YEARLY;INTERVAL=1'));
}

$createdEvent = $service->events->insert($Calender_ID, $event);

//------------------------- Main ENDE --------------------------
?>

Beim ersten Starten des Scripts werden alle benötigten Variablen angelegt.
Beim zweiten Starten des Scripts geht ein Testtermin raus.

Beschreibung der Variablen:

StartDay = Terminstart „Tag“ in zwei Zeichen also: 01 für 1
StartMonth = Terminstart „Monat“ in zwei Zeichen also: 01 für 1
StartYear = Terminstart „Jahr“ in vier Zeichen also: 2014
StartHour = Terminstart „Stunde“ in zwei Zeichen also: 01 für 1
StartMinute = Terminstart „Minute“ in zwei Zeichen also: 01 für 1

EndDay = Terminende „Tag“ in zwei Zeichen also: 01 für 1
EndMonth = Terminende „Monat“ in zwei Zeichen also: 01 für 1
EndYear = Terminende „Jahr“ in vier Zeichen also: 2014
EndHour = Terminende „Stunde“ in zwei Zeichen also: 01 für 1
EndMinute = Terminende „Minute“ in zwei Zeichen also: 01 für 1

Titel = Titel des Termins
Description = Beschreibung des Termins
Where = Ort des Termins

AllDay = True = Ganztagestermin

Recur = Termin-Wiederholung

0= keine
1= wöchentlich
2= 14 Tage
3= monatlich
4= Jährlich

Hier nun der HTML-Monatskalender.


<?
/*=============================================
skrGoogleMonatskalender - Martin Heinzel - 29.11.2011
Version: 0.1

Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google Kalender
in Form eines Farbumschlag. Der aktuelle Tag wird an hand
eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

27.11.2014 von Version 1.0 -> 2.0

Beschreibung:

Script wurde angepasst auf die Google Kalender API V3

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$Calender_ID   				= 'Kalender-ID@googlemail.com';
$Client_ID        			= "1234.apps.googleusercontent.com";
$EMail 	          			= "1234@developer.gserviceaccount.com";
$key_file_location   		= IPS_GetKernelDir()."scripts\\certificates\\Kalender-af58c75d630b.p12";
$arrEvent_Time_akt         = array();
$arrEvent_Titel_akt        = array();
//-------------------------------------------------------------

//benötigte Funktionen/Klassen
set_include_path(IPS_GetKernelDir()."scripts\\google-api-php-client\\src");
require_once 'google-api-php-client/autoload.php';

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
$client = new Google_Client();
$client->setApplicationName("Kalender");
$service = new Google_Service_Calendar($client);
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($EMail, array('https://www.googleapis.com/auth/calendar'), $key);
$client->setAssertionCredentials($cred);

// Event lesen
//==============

// Event ab dem aktuellem Datum
$start_date = date("Y-m")."-01T00:00:00+01:00";
$end_date = date("Y-m")."-".date('t')."T23:59:59+01:00";

// Übergeben der Daten der Suchanfrage
$optParams = array('singleEvents' 	=> True,
						 'timeMin' 			=> $start_date,
						 'timeMax' 			=> $end_date,
					    'orderBy' 			=> 'startTime',
					    'maxResults' 	   => 30);

// Die Suchanfrage ausführen
$events = $service->events->listEvents($Calender_ID, $optParams);

// Das Ergebnis durchsuchen
foreach ($events->getItems() as $event)
{
    // title
    $arrEvent_Titel_akt[]    =    utf8_decode($event->getSummary());

	// Auslesen der Startzeit
	If($event->getStart()->dateTime <> "")
	{
   	$Date_Time = $event->getStart()->dateTime;
	}
	else
	{
		$Date_Time = $event->getStart()->date;
	}

    // Zerlegen der Startzeit
    if(strpos($Date_Time, "T")>0)
    {
        $arrDate_Time             =     explode("T", $Date_Time);
        $arrEvent_Time_akt[]         =  $arrDate_Time[0];
    }
    else
    {
       $arrEvent_Time_akt[]         =  $Date_Time;
    }

}

$month   =  date('n');
$year    =  date('Y');
$browser = calender_month($month, $year, $arrEvent_Time_akt);
//echo $browser;
SetValue(CreateVariableByName($IPS_SELF, "Monatskalender", 3, "~HTMLBox"), $browser);

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

function calender_month($month, $year, $arrEvent_Time)
{
/*=============================================
calender_year - Martin Heinzel - 13.07.2010
Version: 1.0

Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google
Kalender in  Form eines  Farbumschlag. Der aktuelle
Tag wird  an hand eines  gesonderten Farbumschlages
dargestellt.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$arr_Month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$key          = $month -1;
$act_day     = date('j');
$act_month     = date('n');

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Bitte anpassen
//------------------------------------------
//Hintergrundfarbe Monat
$Style_MonthHeader     = 'bgcolor="#C0C0C0"';

//Hintergrundfarbe der Kopfdaten -> Wochentage
$Style_DayHeader      = 'bgcolor="#808080"';

//Hintergrundfarbe des aktuellen Tages
$Style_Today           = 'bgcolor="#FF00FF"';

//Hintergrundfarbe der Termine
$Style_Appointment   = 'bgcolor="#800080"';

//Hintergrundfarbe gesamt
$Style_background       = 'background-color:#F6F6F6';
//------------------------------------------


//zusammenstellen des Kopfes
$DayHeader = '<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mo</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Di</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mi</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Do</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Fr</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Sa</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">So</font></th>';

//Aussehen der Zellen
$Style_DayCell     = 'width="20" height="20" align="center"';

//erstellen der Monatsansicht mit dem Monat und den Tageskopfdaten
$Monatskalender ='<table border="1" summary="Kalender '.$arr_Month[$key].'">
<tr>
      <th colspan="7" '.$Style_MonthHeader.'>'.$arr_Month[$key].'</th>
</tr>
<tr>'.$DayHeader.'</tr>';

//wie viele Tage hat dieser Monat
$total_days = date('t', mktime(0, 0, 0, $month, 1, $year));
//an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
$day_offset = (date('w', mktime(0, 0, 0, $month, 1, $year)))-1;
//Das Ergebnis kann negativ sein. In diesem Fall ist der Tag "Sonntag"
if($day_offset < 0)
{
    $day_offset = 6;
}

//initialisieren des Tageszählers
$Day_Count = 1;

//ein Kalenderblatt (ein Monat) bekommt 6 Wochenreihen
for($week = 0; $week < 6; $week++)
{
    $Monatskalender .='<tr>';

    //eine Woche hat immer noch 7 Tage
    for($day = 0; $day < 7; $day++)
    {
        //Die Tage vor dem ersten müssen mit leeren Zellen aufgefüllt werden
        if($day_offset > 0)
        {
            $Monatskalender .='<td '.$Style_DayCell.'>*</td>';
             $day_offset -= 1;
        }
        else
        {
            //ausfüllen der Tage mit Tageszahlen
            if($Day_Count <= $total_days)
            {
                //Der aktuelle Tag wird eingefärbt
                if($month == $act_month and $Day_Count == $act_day)
                {
                    $Monatskalender .='<td '.$Style_DayCell.' '.$Style_Today.'>'.($Day_Count).'</td>';
                }
                else
                {
                             //Tage mit einem Termin werden eingefärbt
                             $StartDay      =  $Day_Count;
                            if(strlen($StartDay)< 2)        $StartDay      =  "0".$StartDay;

                     $StartMonth    =  $month;
                            if(strlen($StartMonth)< 2)        $StartMonth    =  "0".$StartMonth;

                            $Appointment           =  False;
                     $Appointment_Time    =  $year."-".$StartMonth."-".$StartDay;

                     foreach ($arrEvent_Time as $Event_Time)
                            {
                                If($Event_Time == $Appointment_Time)   $Appointment           =  True;
                            }

                    if($Appointment)
                    {
                        $Monatskalender .='<td '.$Style_DayCell.' '.$Style_Appointment.'>'.($Day_Count).'</td>';
                    }
                    else
                    {
                        //alle anderen Tagen sind ohne färbung
                        $Monatskalender .='<td '.$Style_DayCell.'>'.($Day_Count).'</td>';
                    }
                }
                $Day_Count += 1;
            }
            else
            {
                //alle Tage die über die maximalen Monatstage gehen werden mit leeren Zellen aufgefüllt
                $Monatskalender .='<td '.$Style_DayCell.'>*</td>';
            }

        }
    }
    //Ende der Wochenreihe
    $Monatskalender .='</tr>';
}
//Ende des Monats
$Monatskalender .='</table>';

//nur noch was schickes drum herum
$browser='
<html>
<head>
<style type="text/css" media="screen">
body  { '.$Style_background.';
         font-family: Arial;
      }
</style>
</head>
<body scroll="no">'
.$Monatskalender.
'</body>
</html>';

//und ablegen
return $browser;
}

function CreateVariableByName($id, $name, $type, $profile = "")
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}

//--------------------- Funktionen ENDE ------------------------

?>

Der HTML-Monatskalender für zwei Monate


<?
/*=============================================
skrGoogleMonatskalender - Martin Heinzel - 29.11.2011
Version: 2.0

Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google Kalender
in Form eines Farbumschlag. Der aktuelle Tag wird an hand
eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

27.11.2014 von Version 1.0 -> 2.0

Beschreibung:

Script wurde angepasst auf die Google Kalender API V3

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$Calender_ID   				= 'Kalender-ID@googlemail.com';
$Client_ID        			= "1234.apps.googleusercontent.com";
$EMail 	          			= "1234@developer.gserviceaccount.com";
$key_file_location   		= IPS_GetKernelDir()."scripts\\certificates\\Kalender-af58c75d630b.p12";
$arrEvent_Time_akt         = array();
$arrEvent_Titel_akt        = array();
$arrEvent_Time_naechste    = array();
$arrEvent_Titel_naechste   = array();
//-------------------------------------------------------------

//benötigte Funktionen/Klassen
set_include_path(IPS_GetKernelDir()."scripts\\google-api-php-client\\src");
require_once 'google-api-php-client/autoload.php';

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
$client = new Google_Client();
$client->setApplicationName("Kalender");
$service = new Google_Service_Calendar($client);
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($EMail, array('https://www.googleapis.com/auth/calendar'), $key);
$client->setAssertionCredentials($cred);

// Event lesen
//==============
//2014-11-27T20:09:15+01:00

// Event ab dem aktuellem Datum
$start_date = date("Y-m")."-01T00:00:00+01:00";
$end_date = date("Y-m")."-".date('t')."T23:59:59+01:00";

// Übergeben der Daten der Suchanfrage
$optParams = array('singleEvents' 	=> True,
						 'timeMin' 			=> $start_date,
						 'timeMax' 			=> $end_date,
					    'orderBy' 			=> 'startTime',
					    'maxResults' 	   => 30);

// Die Suchanfrage ausführen
$events = $service->events->listEvents($Calender_ID, $optParams);

// Das Ergebnis durchsuchen
foreach ($events->getItems() as $event)
{
    // title
    $arrEvent_Titel_akt[]    =    utf8_decode($event->getSummary());

	// Auslesen der Startzeit
	If($event->getStart()->dateTime <> "")
	{
   	$Date_Time = $event->getStart()->dateTime;
	}
	else
	{
		$Date_Time = $event->getStart()->date;
	}

    // Zerlegen der Startzeit
    if(strpos($Date_Time, "T")>0)
    {
        $arrDate_Time             =     explode("T", $Date_Time);
        $arrEvent_Time_akt[]         =  $arrDate_Time[0];
    }
    else
    {
       $arrEvent_Time_akt[]         =  $Date_Time;
    }

}

$month   =  date('n');
$year    =  date('Y');
$browser = calender_month($month, $year, $arrEvent_Time_akt);
//echo $browser;
SetValue(CreateVariableByName($IPS_SELF, "Monatskalender", 3, "~HTMLBox"), $browser);

// Event lesen
//==============

// Event ab dem aktuellem Datum
$start_date = date("Y-m", mktime(0, 0, 0, date("m")+1, 1, date("Y")))."-01T00:00:00+01:00";
$end_date = date("Y-m", mktime(0, 0, 0, date("m")+1, 1, date("Y")))."-".date('t')."T23:59:59+01:00";

// Übergeben der Daten der Suchanfrage
$optParams = array('singleEvents' 	=> True,
						 'timeMin' 			=> $start_date,
						 'timeMax' 			=> $end_date,
					    'orderBy' 			=> 'startTime',
					    'maxResults' 	   => 30);

// Die Suchanfrage ausführen
$events = $service->events->listEvents($Calender_ID, $optParams);

// Das Ergebnis durchsuchen
foreach ($events->getItems() as $event)
{
    // title
    $arrEvent_Titel_naechste[]    =    utf8_decode($event->getSummary());

	// Auslesen der Startzeit
	If($event->getStart()->dateTime <> "")
	{
   	$Date_Time = $event->getStart()->dateTime;
	}
	else
	{
		$Date_Time = $event->getStart()->date;
	}

    // Zerlegen der Startzeit
    if(strpos($Date_Time, "T")>0)
    {
        $arrDate_Time             =     explode("T", $Date_Time);
        $arrEvent_Time_naechste[]         =  $arrDate_Time[0];
    }
    else
    {
       $arrEvent_Time_naechste[]         =  $Date_Time;
    }

}

$month   =  date('n', mktime(0, 0, 0, date("m")+1, 1, date("Y")));
$year    =  date('Y', mktime(0, 0, 0, date("m")+1, 1, date("Y")));
$browser = calender_month($month, $year, $arrEvent_Time_naechste);
//echo $browser;
SetValue(CreateVariableByName($IPS_SELF, "Monatskal_naechster", 3, "~HTMLBox"), $browser);

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

function calender_month($month, $year, $arrEvent_Time)
{
/*=============================================
calender_year - Martin Heinzel - 13.07.2010
Version: 1.0

Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google
Kalender in  Form eines  Farbumschlag. Der aktuelle
Tag wird  an hand eines  gesonderten Farbumschlages
dargestellt.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$arr_Month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$key          = $month -1;
$act_day     = date('j');
$act_month     = date('n');

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Bitte anpassen
//------------------------------------------
//Hintergrundfarbe Monat
$Style_MonthHeader     = 'bgcolor="#C0C0C0"';

//Hintergrundfarbe der Kopfdaten -> Wochentage
$Style_DayHeader      = 'bgcolor="#808080"';

//Hintergrundfarbe des aktuellen Tages
$Style_Today           = 'bgcolor="#FF00FF"';

//Hintergrundfarbe der Termine
$Style_Appointment   = 'bgcolor="#800080"';

//Hintergrundfarbe gesamt
$Style_background       = 'background-color:#F6F6F6';
//------------------------------------------


//zusammenstellen des Kopfes
$DayHeader = '<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mo</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Di</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mi</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Do</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Fr</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Sa</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">So</font></th>';

//Aussehen der Zellen
$Style_DayCell     = 'width="20" height="20" align="center"';

//erstellen der Monatsansicht mit dem Monat und den Tageskopfdaten
$Monatskalender ='<table border="1" summary="Kalender '.$arr_Month[$key].'">
<tr>
      <th colspan="7" '.$Style_MonthHeader.'>'.$arr_Month[$key].'</th>
</tr>
<tr>'.$DayHeader.'</tr>';

//wie viele Tage hat dieser Monat
$total_days = date('t', mktime(0, 0, 0, $month, 1, $year));
//an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
$day_offset = (date('w', mktime(0, 0, 0, $month, 1, $year)))-1;
//Das Ergebnis kann negativ sein. In diesem Fall ist der Tag "Sonntag"
if($day_offset < 0)
{
    $day_offset = 6;
}

//initialisieren des Tageszählers
$Day_Count = 1;

//ein Kalenderblatt (ein Monat) bekommt 6 Wochenreihen
for($week = 0; $week < 6; $week++)
{
    $Monatskalender .='<tr>';

    //eine Woche hat immer noch 7 Tage
    for($day = 0; $day < 7; $day++)
    {
        //Die Tage vor dem ersten müssen mit leeren Zellen aufgefüllt werden
        if($day_offset > 0)
        {
            $Monatskalender .='<td '.$Style_DayCell.'>*</td>';
         	$day_offset -= 1;
        }
        else
        {
            //ausfüllen der Tage mit Tageszahlen
            if($Day_Count <= $total_days)
            {
                //Der aktuelle Tag wird eingefärbt
                if($month == $act_month and $Day_Count == $act_day)
                {
                    $Monatskalender .='<td '.$Style_DayCell.' '.$Style_Today.'>'.($Day_Count).'</td>';
                }
                else
                {
     						//Tage mit einem Termin werden eingefärbt
     						$StartDay      =  $Day_Count;
							if(strlen($StartDay)< 2)		$StartDay      =  "0".$StartDay;

                     $StartMonth    =  $month;
							if(strlen($StartMonth)< 2)		$StartMonth    =  "0".$StartMonth;

							$Appointment   		=  False;
                     $Appointment_Time    =  $year."-".$StartMonth."-".$StartDay;

                     foreach ($arrEvent_Time as $Event_Time)
							{
								If($Event_Time == $Appointment_Time)   $Appointment   		=  True;
							}

                    if($Appointment)
                    {
                        $Monatskalender .='<td '.$Style_DayCell.' '.$Style_Appointment.'>'.($Day_Count).'</td>';
                    }
                    else
                    {
                        //alle anderen Tagen sind ohne färbung
                        $Monatskalender .='<td '.$Style_DayCell.'>'.($Day_Count).'</td>';
                    }
                }
                $Day_Count += 1;
            }
            else
            {
                //alle Tage die über die maximalen Monatstage gehen werden mit leeren Zellen aufgefüllt
                $Monatskalender .='<td '.$Style_DayCell.'>*</td>';
            }

        }
    }
    //Ende der Wochenreihe
    $Monatskalender .='</tr>';
}
//Ende des Monats
$Monatskalender .='</table>';

//nur noch was schickes drum herum
$browser='
<html>
<head>
<style type="text/css" media="screen">
body  { '.$Style_background.';
         font-family: Arial;
      }
</style>
</head>
<body scroll="no">'
.$Monatskalender.
'</body>
</html>';

//und ablegen
return $browser;
}

function CreateVariableByName($id, $name, $type, $profile = "")
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}

//--------------------- Funktionen ENDE ------------------------

?>


Der HTML-Monatskalender mit Keywords


<?
/*=============================================
skrGoogleMonatskalender - Martin Heinzel - 29.11.2011
Version: 0.1

Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google Kalender
in Form eines Farbumschlag. Der aktuelle Tag wird an hand
eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

27.11.2014 von Version 1.0 -> 2.0

Beschreibung:

Script wurde angepasst auf die Google Kalender API V3

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$Calender_ID   				= 'Kalender-ID@googlemail.com';
$Client_ID        			= "1234.apps.googleusercontent.com";
$EMail 	          			= "1234@developer.gserviceaccount.com";
$key_file_location   		= IPS_GetKernelDir()."scripts\\certificates\\Kalender-af58c75d630b.p12";
$arrEvent_Time_akt         = array();
$arrEvent_Titel_akt        = array();
$arrStyle_akt              = array();
$Keywords                  = array("graue","braun","blau", "geburtstag");
$Style                     = array('bgcolor="#808080"','bgcolor="#D2691E"','bgcolor="#87CEFA"', 'bgcolor="#DC143C"');

//-------------------------------------------------------------

//benötigte Funktionen/Klassen
set_include_path(IPS_GetKernelDir()."scripts\\google-api-php-client\\src");
require_once 'google-api-php-client/autoload.php';

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
$client = new Google_Client();
$client->setApplicationName("Kalender");
$service = new Google_Service_Calendar($client);
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($EMail, array('https://www.googleapis.com/auth/calendar'), $key);
$client->setAssertionCredentials($cred);

// Event lesen
//==============
//2014-11-27T20:09:15+01:00

// Event ab dem aktuellem Datum
$start_date = date("Y-m")."-01T00:00:00+01:00";
$end_date = date("Y-m")."-".date('t')."T23:59:59+01:00";

// Übergeben der Daten der Suchanfrage
$optParams = array('singleEvents' 	=> True,
						 'timeMin' 			=> $start_date,
						 'timeMax' 			=> $end_date,
					    'orderBy' 			=> 'startTime',
					    'maxResults' 	   => 30);

// Die Suchanfrage ausführen
$events = $service->events->listEvents($Calender_ID, $optParams);

// Das Ergebnis durchsuchen
foreach ($events->getItems() as $event)
{
    // title
    $arrEvent_Titel_akt[]    =    utf8_decode($event->getSummary());
	 $title_harm =  strtolower(utf8_decode($event->getSummary()));
	 $Loop_count = 0;
	 
    // Style
	foreach ($Keywords as $Keyword)
	{
		if(stristr($title_harm, $Keyword) !== false)
		{
         $arrStyle_akt[]   =  $Style[$Loop_count];
         break;
		}
		
      $Loop_count += 1;

		if($Loop_count >= count($Keywords))
		{
         $arrStyle_akt[]   =  'bgcolor="#800080"';
		}
	}

	// Auslesen der Startzeit
	If($event->getStart()->dateTime <> "")
	{
   	$Date_Time = $event->getStart()->dateTime;
	}
	else
	{
		$Date_Time = $event->getStart()->date;
	}

    // Zerlegen der Startzeit
    if(strpos($Date_Time, "T")>0)
    {
        $arrDate_Time             =     explode("T", $Date_Time);
        $arrEvent_Time_akt[]         =  $arrDate_Time[0];
    }
    else
    {
       $arrEvent_Time_akt[]         =  $Date_Time;
    }

}

$month   =  date('n');
$year    =  date('Y');
$browser = calender_month($month, $year, $arrEvent_Time_akt, $arrStyle_akt);
//echo $browser;
SetValue(CreateVariableByName($IPS_SELF, "Monatskalender", 3, "~HTMLBox"), $browser);

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

function calender_month($month, $year, $arrEvent_Time, $arrStyle)
{
/*=============================================
calender_year - Martin Heinzel - 13.07.2010
Version: 1.0

Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google
Kalender in  Form eines  Farbumschlag. Der aktuelle
Tag wird  an hand eines  gesonderten Farbumschlages
dargestellt.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$arr_Month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$key          = $month -1;
$act_day     = date('j');
$act_month     = date('n');

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Bitte anpassen
//------------------------------------------
//Hintergrundfarbe Monat
$Style_MonthHeader     = 'bgcolor="#C0C0C0"';

//Hintergrundfarbe der Kopfdaten -> Wochentage
$Style_DayHeader      = 'bgcolor="#808080"';

//Hintergrundfarbe des aktuellen Tages
$Style_Today           = 'bgcolor="#FF00FF"';

//Hintergrundfarbe gesamt
$Style_background       = 'background-color:#F6F6F6';
//------------------------------------------


//zusammenstellen des Kopfes
$DayHeader = '<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mo</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Di</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mi</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Do</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Fr</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Sa</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">So</font></th>';

//Aussehen der Zellen
$Style_DayCell     = 'width="20" height="20" align="center"';

//erstellen der Monatsansicht mit dem Monat und den Tageskopfdaten
$Monatskalender ='<table border="1" summary="Kalender '.$arr_Month[$key].'">
<tr>
      <th colspan="7" '.$Style_MonthHeader.'>'.$arr_Month[$key].'</th>
</tr>
<tr>'.$DayHeader.'</tr>';

//wie viele Tage hat dieser Monat
$total_days = date('t', mktime(0, 0, 0, $month, 1, $year));
//an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
$day_offset = (date('w', mktime(0, 0, 0, $month, 1, $year)))-1;
//Das Ergebnis kann negativ sein. In diesem Fall ist der Tag "Sonntag"
if($day_offset < 0)
{
    $day_offset = 6;
}

//initialisieren des Tageszählers
$Day_Count = 1;

//ein Kalenderblatt (ein Monat) bekommt 6 Wochenreihen
for($week = 0; $week < 6; $week++)
{
    $Monatskalender .='<tr>';

    //eine Woche hat immer noch 7 Tage
    for($day = 0; $day < 7; $day++)
    {
        //Die Tage vor dem ersten müssen mit leeren Zellen aufgefüllt werden
        if($day_offset > 0)
        {
            $Monatskalender .='<td '.$Style_DayCell.'>*</td>';
             $day_offset -= 1;
        }
        else
        {
            //ausfüllen der Tage mit Tageszahlen
            if($Day_Count <= $total_days)
            {
                //Der aktuelle Tag wird eingefärbt
                if($month == $act_month and $Day_Count == $act_day)
                {
                    $Monatskalender .='<td '.$Style_DayCell.' '.$Style_Today.'>'.($Day_Count).'</td>';
                }
                else
                {
                     //Tage mit einem Termin werden eingefärbt
                     $StartDay      =  $Day_Count;
                     if(strlen($StartDay)< 2)        $StartDay      =  "0".$StartDay;

                     $StartMonth    =  $month;
                     if(strlen($StartMonth)< 2)        $StartMonth    =  "0".$StartMonth;

                     $Appointment           =  False;
                     $Appointment_Time    =  $year."-".$StartMonth."-".$StartDay;

                     $Event_Time_LC       =  0;
                     foreach ($arrEvent_Time as $Event_Time)
                            {
                                	If($Event_Time == $Appointment_Time)
										  	{
										  		$Appointment           	=  True;
                                    $Style_Appointment      =  $arrStyle[$Event_Time_LC];
											}
                                $Event_Time_LC  += 1;
                            }

                    if($Appointment)
                    {
                        $Monatskalender .='<td '.$Style_DayCell.' '.$Style_Appointment.'>'.($Day_Count).'</td>';
                    }
                    else
                    {
                        //alle anderen Tagen sind ohne färbung
                        $Monatskalender .='<td '.$Style_DayCell.'>'.($Day_Count).'</td>';
                    }
                }
                $Day_Count += 1;
            }
            else
            {
                //alle Tage die über die maximalen Monatstage gehen werden mit leeren Zellen aufgefüllt
                $Monatskalender .='<td '.$Style_DayCell.'>*</td>';
            }

        }
    }
    //Ende der Wochenreihe
    $Monatskalender .='</tr>';
}
//Ende des Monats
$Monatskalender .='</table>';

//nur noch was schickes drum herum
$browser='
<html>
<head>
<style type="text/css" media="screen">
body  { '.$Style_background.';
         font-family: Arial;
      }
</style>
</head>
<body scroll="no">'
.$Monatskalender.
'</body>
</html>';

//und ablegen
return $browser;
}

function CreateVariableByName($id, $name, $type, $profile = "")
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}

//--------------------- Funktionen ENDE ------------------------

?>


Der HTML-Monatskalender für zwei Monate mit Keywords


<?
/*=============================================
skrGoogleMonatskalender - Martin Heinzel - 29.11.2011
Version: 2.0

Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google Kalender
in Form eines Farbumschlag. Der aktuelle Tag wird an hand
eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

27.11.2014 von Version 1.0 -> 2.0

Beschreibung:

Script wurde angepasst auf die Google Kalender API V3

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$Calender_ID   				= 'Kalender-ID@googlemail.com';
$Client_ID        			= "1234.apps.googleusercontent.com";
$EMail 	          			= "1234@developer.gserviceaccount.com";
$key_file_location   		= IPS_GetKernelDir()."scripts\\certificates\\Kalender-af58c75d630b.p12";

$arrEvent_Time_akt         = array();
$arrEvent_Titel_akt        = array();
$arrEvent_Time_naechste    = array();
$arrEvent_Titel_naechste   = array();
$arrStyle_akt              = array();
$arrStyle_naechste         = array();
$Keywords                  = array("graue","braun","blau", "geburtstag");
$Style                     = array('bgcolor="#808080"','bgcolor="#D2691E"','bgcolor="#87CEFA"', 'bgcolor="#DC143C"');

//-------------------------------------------------------------

//benötigte Funktionen/Klassen
set_include_path(IPS_GetKernelDir()."scripts\\google-api-php-client\\src");
require_once 'google-api-php-client/autoload.php';

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
$client = new Google_Client();
$client->setApplicationName("Kalender");
$service = new Google_Service_Calendar($client);
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($EMail, array('https://www.googleapis.com/auth/calendar'), $key);
$client->setAssertionCredentials($cred);

// Event lesen
//==============
//2014-11-27T20:09:15+01:00

// Event ab dem aktuellem Datum
$start_date = date("Y-m")."-01T00:00:00+01:00";
$end_date = date("Y-m")."-".date('t')."T23:59:59+01:00";

// Übergeben der Daten der Suchanfrage
$optParams = array('singleEvents'     => True,
                         'timeMin'             => $start_date,
                         'timeMax'             => $end_date,
                        'orderBy'             => 'startTime',
                        'maxResults'        => 30);

// Die Suchanfrage ausführen
$events = $service->events->listEvents($Calender_ID, $optParams);

// Das Ergebnis durchsuchen
foreach ($events->getItems() as $event)
{
    // title
    $arrEvent_Titel_akt[]    =    utf8_decode($event->getSummary());
	 $title_harm =  strtolower(utf8_decode($event->getSummary()));
	 $Loop_count = 0;

    // Style
	foreach ($Keywords as $Keyword)
	{
		if(stristr($title_harm, $Keyword) !== false)
		{
         $arrStyle_akt[]   =  $Style[$Loop_count];
         break;
		}

      $Loop_count += 1;

		if($Loop_count >= count($Keywords))
		{
         $arrStyle_akt[]   =  'bgcolor="#800080"';
		}
	}

    // Auslesen der Startzeit
    If($event->getStart()->dateTime <> "")
    {
       $Date_Time = $event->getStart()->dateTime;
    }
    else
    {
        $Date_Time = $event->getStart()->date;
    }

    // Zerlegen der Startzeit
    if(strpos($Date_Time, "T")>0)
    {
        $arrDate_Time             =     explode("T", $Date_Time);
        $arrEvent_Time_akt[]         =  $arrDate_Time[0];
    }
    else
    {
       $arrEvent_Time_akt[]         =  $Date_Time;
    }

}

$month   =  date('n');
$year    =  date('Y');
$browser = calender_month($month, $year, $arrEvent_Time_akt, $arrStyle_akt);
//echo $browser;
SetValue(CreateVariableByName($IPS_SELF, "Monatskalender", 3, "~HTMLBox"), $browser);

// Event lesen
//==============

// Event ab dem aktuellem Datum
$start_date = date("Y-m", mktime(0, 0, 0, date("m")+1, 1, date("Y")))."-01T00:00:00+01:00";
$end_date = date("Y-m", mktime(0, 0, 0, date("m")+1, 1, date("Y")))."-".date('t')."T23:59:59+01:00";

// Übergeben der Daten der Suchanfrage
$optParams = array('singleEvents'     => True,
                         'timeMin'             => $start_date,
                         'timeMax'             => $end_date,
                        'orderBy'             => 'startTime',
                        'maxResults'        => 30);

// Die Suchanfrage ausführen
$events = $service->events->listEvents($Calender_ID, $optParams);

// Das Ergebnis durchsuchen
foreach ($events->getItems() as $event)
{
    // title
    $arrEvent_Titel_naechste[]    =    utf8_decode($event->getSummary());
	 $title_harm =  strtolower(utf8_decode($event->getSummary()));
	 $Loop_count = 0;

    // Style
	foreach ($Keywords as $Keyword)
	{
		if(stristr($title_harm, $Keyword) !== false)
		{
         $arrStyle_naechste[]   =  $Style[$Loop_count];
         break;
		}

      $Loop_count += 1;

		if($Loop_count >= count($Keywords))
		{
         $arrStyle_naechste[]   =  'bgcolor="#800080"';
		}
	}

    // Auslesen der Startzeit
    If($event->getStart()->dateTime <> "")
    {
       $Date_Time = $event->getStart()->dateTime;
    }
    else
    {
        $Date_Time = $event->getStart()->date;
    }

    // Zerlegen der Startzeit
    if(strpos($Date_Time, "T")>0)
    {
        $arrDate_Time             =     explode("T", $Date_Time);
        $arrEvent_Time_naechste[]         =  $arrDate_Time[0];
    }
    else
    {
       $arrEvent_Time_naechste[]         =  $Date_Time;
    }

}

$month   =  date('n', mktime(0, 0, 0, date("m")+1, 1, date("Y")));
$year    =  date('Y', mktime(0, 0, 0, date("m")+1, 1, date("Y")));
$browser = calender_month($month, $year, $arrEvent_Time_naechste, $arrStyle_naechste);
//echo $browser;
SetValue(CreateVariableByName($IPS_SELF, "Monatskal_naechster", 3, "~HTMLBox"), $browser);

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

function calender_month($month, $year, $arrEvent_Time, $arrStyle)
{
/*=============================================
calender_year - Martin Heinzel - 13.07.2010
Version: 1.0

Beschreibung:
Mit diesem Skript wird ein Monatskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google
Kalender in  Form eines  Farbumschlag. Der aktuelle
Tag wird  an hand eines  gesonderten Farbumschlages
dargestellt.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$arr_Month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$key          = $month -1;
$act_day     = date('j');
$act_month     = date('n');

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Bitte anpassen
//------------------------------------------
//Hintergrundfarbe Monat
$Style_MonthHeader     = 'bgcolor="#C0C0C0"';

//Hintergrundfarbe der Kopfdaten -> Wochentage
$Style_DayHeader      = 'bgcolor="#808080"';

//Hintergrundfarbe des aktuellen Tages
$Style_Today           = 'bgcolor="#FF00FF"';

//Hintergrundfarbe gesamt
$Style_background       = 'background-color:#F6F6F6';
//------------------------------------------


//zusammenstellen des Kopfes
$DayHeader = '<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mo</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Di</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mi</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Do</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Fr</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Sa</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">So</font></th>';

//Aussehen der Zellen
$Style_DayCell     = 'width="20" height="20" align="center"';

//erstellen der Monatsansicht mit dem Monat und den Tageskopfdaten
$Monatskalender ='<table border="1" summary="Kalender '.$arr_Month[$key].'">
<tr>
      <th colspan="7" '.$Style_MonthHeader.'>'.$arr_Month[$key].'</th>
</tr>
<tr>'.$DayHeader.'</tr>';

//wie viele Tage hat dieser Monat
$total_days = date('t', mktime(0, 0, 0, $month, 1, $year));
//an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
$day_offset = (date('w', mktime(0, 0, 0, $month, 1, $year)))-1;
//Das Ergebnis kann negativ sein. In diesem Fall ist der Tag "Sonntag"
if($day_offset < 0)
{
    $day_offset = 6;
}

//initialisieren des Tageszählers
$Day_Count = 1;

//ein Kalenderblatt (ein Monat) bekommt 6 Wochenreihen
for($week = 0; $week < 6; $week++)
{
    $Monatskalender .='<tr>';

    //eine Woche hat immer noch 7 Tage
    for($day = 0; $day < 7; $day++)
    {
        //Die Tage vor dem ersten müssen mit leeren Zellen aufgefüllt werden
        if($day_offset > 0)
        {
            $Monatskalender .='<td '.$Style_DayCell.'>*</td>';
             $day_offset -= 1;
        }
        else
        {
            //ausfüllen der Tage mit Tageszahlen
            if($Day_Count <= $total_days)
            {
                //Der aktuelle Tag wird eingefärbt
                if($month == $act_month and $Day_Count == $act_day)
                {
                    $Monatskalender .='<td '.$Style_DayCell.' '.$Style_Today.'>'.($Day_Count).'</td>';
                }
                else
                {
                     //Tage mit einem Termin werden eingefärbt
                     $StartDay      =  $Day_Count;
                     if(strlen($StartDay)< 2)        $StartDay      =  "0".$StartDay;

                     $StartMonth    =  $month;
                     if(strlen($StartMonth)< 2)        $StartMonth    =  "0".$StartMonth;

                     $Appointment           =  False;
                     $Appointment_Time    =  $year."-".$StartMonth."-".$StartDay;

                     $Event_Time_LC       =  0;
                     foreach ($arrEvent_Time as $Event_Time)
                            {
                                	If($Event_Time == $Appointment_Time)
										  	{
										  		$Appointment           	=  True;
                                    $Style_Appointment      =  $arrStyle[$Event_Time_LC];
											}
                                $Event_Time_LC  += 1;
                            }

                    if($Appointment)
                    {
                        $Monatskalender .='<td '.$Style_DayCell.' '.$Style_Appointment.'>'.($Day_Count).'</td>';
                    }
                    else
                    {
                        //alle anderen Tagen sind ohne färbung
                        $Monatskalender .='<td '.$Style_DayCell.'>'.($Day_Count).'</td>';
                    }
                }
                $Day_Count += 1;
            }
            else
            {
                //alle Tage die über die maximalen Monatstage gehen werden mit leeren Zellen aufgefüllt
                $Monatskalender .='<td '.$Style_DayCell.'>*</td>';
            }

        }
    }
    //Ende der Wochenreihe
    $Monatskalender .='</tr>';
}
//Ende des Monats
$Monatskalender .='</table>';

//nur noch was schickes drum herum
$browser='
<html>
<head>
<style type="text/css" media="screen">
body  { '.$Style_background.';
         font-family: Arial;
      }
</style>
</head>
<body scroll="no">'
.$Monatskalender.
'</body>
</html>';

//und ablegen
return $browser;
}

function CreateVariableByName($id, $name, $type, $profile = "")
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}

//--------------------- Funktionen ENDE ------------------------

?>

In $Keywords werden die Schlüsselworte eingetragen.
In $Style wird die dazugehörige Hintergrundfarbe in HTML-Farbcode eingetragen.

Die entsprechende Farbe kann man sich hier zusammensuchen.

Hier nun der HTML-Jahreskalender.


<?
/*=============================================
skrGoogleJahreskalender - Martin Heinzel - 02.12.2011
Version: 2.0

Beschreibung:
Mit diesem Skript wird ein Jahreskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google Kalender
in Form eines Farbumschlag. Der aktuelle Tag wird an hand
eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

27.11.2014 von Version 1.0 -> 2.0

Beschreibung:

Script wurde angepasst auf die Google Kalender API V3

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$Calender_ID   				= 'Kalender-ID@googlemail.com';
$Client_ID        			= "1234.apps.googleusercontent.com";
$EMail 	          			= "1234@developer.gserviceaccount.com";
$key_file_location   		= IPS_GetKernelDir()."scripts\\certificates\\Kalender-af58c75d630b.p12";
$arrEvent_Time_akt         = array();
$arrEvent_Titel_akt        = array();
//-------------------------------------------------------------

//benötigte Funktionen/Klassen
set_include_path(IPS_GetKernelDir()."scripts\\google-api-php-client\\src");
require_once 'google-api-php-client/autoload.php';

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
$client = new Google_Client();
$client->setApplicationName("Kalender");
$service = new Google_Service_Calendar($client);
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($EMail, array('https://www.googleapis.com/auth/calendar'), $key);
$client->setAssertionCredentials($cred);

// Event lesen
//==============

// Event ab dem aktuellem Datum
$start_date = date("Y")."-01"."-01T00:00:00+01:00";
$end_date = date("Y")."-12"."-31T00:00:00+01:00";

// Übergeben der Daten der Suchanfrage
$optParams = array('singleEvents' 	=> True,
						 'timeMin' 			=> $start_date,
						 'timeMax' 			=> $end_date,
					    'orderBy' 			=> 'startTime',
					    'maxResults' 	   => 365);

// Die Suchanfrage ausführen
$events = $service->events->listEvents($Calender_ID, $optParams);

// Das Ergebnis durchsuchen
foreach ($events->getItems() as $event)
{
    // title
    $arrEvent_Titel_akt[]    =    utf8_decode($event->getSummary());

	// Auslesen der Startzeit
	If($event->getStart()->dateTime <> "")
	{
   	$Date_Time = $event->getStart()->dateTime;
	}
	else
	{
		$Date_Time = $event->getStart()->date;
	}

    // Zerlegen der Startzeit
    if(strpos($Date_Time, "T")>0)
    {
        $arrDate_Time             =     explode("T", $Date_Time);
        $arrEvent_Time_akt[]         =  $arrDate_Time[0];
    }
    else
    {
       $arrEvent_Time_akt[]         =  $Date_Time;
    }

}

$browser = calender_year($arrEvent_Time_akt);
//echo $browser;
SetValue(CreateVariableByName($IPS_SELF, "Jahreskalender", 3, "~HTMLBox"), $browser);

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

function calender_year($arrEvent_Time)
{
/*=============================================
calender_year - Martin Heinzel - 13.07.2010
Version: 1.0

Beschreibung:
Mit diesem Skript wird ein Jahreskalender erstellt.
Dieser Kalender enthält alle Termine aus der
Ferengi-Master Terminverwaltung in Form eines Farbumschlag.
Der aktuelle Tag wird an hand eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$arr_Month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$rawCount_Month = 0;
$year         = date('Y');
$act_day     = date('j');
$act_month     = date('n');

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Bitte anpassen
//------------------------------------------
//Hintergrundfarbe Monat
$Style_MonthHeader     = 'bgcolor="#C0C0C0"';

//Hintergrundfarbe der Kopfdaten -> Wochentage
$Style_DayHeader      = 'bgcolor="#808080"';

//Hintergrundfarbe des aktuellen Tages
$Style_Today           = 'bgcolor="#FF00FF"';

//Hintergrundfarbe der Termine
$Style_Appointment   = 'bgcolor="#800080"';

//Hintergrundfarbe gesamt
$Style_background       = 'background-color:#F6F6F6';
//------------------------------------------


//zusammenstellen des Kopfes
$DayHeader = '<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mo</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Di</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mi</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Do</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Fr</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Sa</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">So</font></th>';

//Aussehen der Zellen
$Style_DayCell     = 'width="20" height="20" align="center"';

//erstellen des Jahreskalenders beginnend mit der Monatsaufteilung
$Jahreskalender = '<table border="0" summary="Jahreskalender" ><tr>';

//durchlaufen der einzelnen Monate
foreach($arr_Month as $key => $Month)
{
    //erstellen der Monatsansicht mit dem Monat und den Tageskopfdaten
    $Jahreskalender .='<td><table border="1" summary="Kalender '.$Month.'">
   <tr>
       <th colspan="7" '.$Style_MonthHeader.'>'.$Month.'</th>
   </tr>
   <tr>'.$DayHeader.'</tr>';

    //berechnen des aktuellen Monats
    $month = $key+1;
    //wie viele Tage hat dieser Monat
   $total_days = date('t', mktime(0, 0, 0, $month, 1, $year));
   //an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
    $day_offset = (date('w', mktime(0, 0, 0, $month, 1, $year)))-1;
    //Das Ergebnis kann negativ sein. In diesem Fall ist der Tag "Sonntag"
    if($day_offset < 0)
    {
      $day_offset = 6;
    }

    //initialisieren des Tageszählers
   $Day_Count = 1;

    //ein Kalenderblatt (ein Monat) bekommt 6 Wochenreihen
    for($week = 0; $week < 6; $week++)
    {
        $Jahreskalender .='<tr>';

        //eine Woche hat immer noch 7 Tage
        for($day = 0; $day < 7; $day++)
        {
            //Die Tage vor dem ersten müssen mit leeren Zellen aufgefüllt werden
            if($day_offset > 0)
            {
                $Jahreskalender .='<td '.$Style_DayCell.'>*</td>';
            $day_offset -= 1;
            }
            else
            {
                //ausfüllen der Tage mit Tageszahlen
                if($Day_Count <= $total_days)
                {
                    //Der aktuelle Tag wird eingefärbt
                    if($month == $act_month and $Day_Count == $act_day)
                    {
                        $Jahreskalender .='<td '.$Style_DayCell.' '.$Style_Today.'>'.($Day_Count).'</td>';
                    }
                    else
                    {
                        //Tage mit einem Termin werden eingefärbt
        						 $StartDay      =  $Day_Count;
								 if(strlen($StartDay)< 2)		$StartDay      =  "0".$StartDay;

	                      $StartMonth    =  $month;
								 if(strlen($StartMonth)< 2)		$StartMonth    =  "0".$StartMonth;

								 $Appointment   		=  False;
	                      $Appointment_Time    =  $year."-".$StartMonth."-".$StartDay;

	                      foreach ($arrEvent_Time as $Event_Time)
								 {
									 If($Event_Time == $Appointment_Time)   $Appointment   		=  True;
								 }

  	                     if($Appointment)
                        {
                            $Jahreskalender .='<td '.$Style_DayCell.' '.$Style_Appointment.'>'.($Day_Count).'</td>';
                        }
                        else
                        {
                            //alle anderen Tagen sind ohne färbung
                            $Jahreskalender .='<td '.$Style_DayCell.'>'.($Day_Count).'</td>';
                        }
                    }
                    $Day_Count += 1;
                }
                else
                {
                    //alle Tage die über die maximalen Monatstage gehen werden mit leeren Zellen aufgefüllt
                    $Jahreskalender .='<td '.$Style_DayCell.'>*</td>';
                }

            }
        }
        //Ende der Wochenreihe
        $Jahreskalender .='</tr>';
    }
    //Ende des Monats
    $Jahreskalender .='</table></td>';

    //aufaddieren der Monate in einer Reihe
   $rawCount_Month += 1;
   //nach 4 Monaten wird eine neue Monatsreihe begonnen
    if($rawCount_Month == 4)
    {
        $Jahreskalender .='</tr><tr>';
      $rawCount_Month = 0;
    }
}
//Beenden des Jahreskalenders
$Jahreskalender .= '</tr></table>';

//nur noch was schickes drum herum
$browser='
<html>
<head>
<style type="text/css" media="screen">
body  { '.$Style_background.';
         font-family: Arial;
      }
</style>
</head>
<body scroll="no">'
.$Jahreskalender.
'</body>
</html>';

//und ablegen
return $browser;
}

function CreateVariableByName($id, $name, $type, $profile = "")
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}

//--------------------- Funktionen ENDE ------------------------

?>


Der HTML-Jahreskalender mit Keywords


<?
/*=============================================
skrGoogleJahreskalender - Martin Heinzel - 02.12.2011
Version: 2.0

Beschreibung:
Mit diesem Skript wird ein Jahreskalender erstellt.
Dieser Kalender enthält alle Termine aus dem Google Kalender
in Form eines Farbumschlag. Der aktuelle Tag wird an hand
eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

27.11.2014 von Version 1.0 -> 2.0

Beschreibung:

Script wurde angepasst auf die Google Kalender API V3

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$Calender_ID   				= 'Kalender-ID@googlemail.com';
$Client_ID        			= "1234.apps.googleusercontent.com";
$EMail 	          			= "1234@developer.gserviceaccount.com";
$key_file_location   		= IPS_GetKernelDir()."scripts\\certificates\\Kalender-af58c75d630b.p12";
$arrEvent_Time_akt         = array();
$arrEvent_Titel_akt        = array();
$arrStyle_akt              = array();
$Keywords                  = array("graue","braun","blau", "geburtstag");
$Style                     = array('bgcolor="#808080"','bgcolor="#D2691E"','bgcolor="#87CEFA"', 'bgcolor="#DC143C"');

//-------------------------------------------------------------

//benötigte Funktionen/Klassen
set_include_path(IPS_GetKernelDir()."scripts\\google-api-php-client\\src");
require_once 'google-api-php-client/autoload.php';

//--------------------------- Main ----------------------------

// Die Verbindung zum Kalender aufbauen
$client = new Google_Client();
$client->setApplicationName("Kalender");
$service = new Google_Service_Calendar($client);
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($EMail, array('https://www.googleapis.com/auth/calendar'), $key);
$client->setAssertionCredentials($cred);

// Event lesen
//==============

// Event ab dem aktuellem Datum
$start_date = date("Y")."-01"."-01T00:00:00+01:00";
$end_date = date("Y")."-12"."-31T00:00:00+01:00";

// Übergeben der Daten der Suchanfrage
$optParams = array('singleEvents' 	=> True,
						 'timeMin' 			=> $start_date,
						 'timeMax' 			=> $end_date,
					    'orderBy' 			=> 'startTime',
					    'maxResults' 	   => 365);

// Die Suchanfrage ausführen
$events = $service->events->listEvents($Calender_ID, $optParams);

// Das Ergebnis durchsuchen
foreach ($events->getItems() as $event)
{
    // title
    $arrEvent_Titel_akt[]    =    utf8_decode($event->getSummary());
	 $title_harm =  strtolower(utf8_decode($event->getSummary()));
	 $Loop_count = 0;

    // Style
	foreach ($Keywords as $Keyword)
	{
		if(stristr($title_harm, $Keyword) !== false)
		{
         $arrStyle_akt[]   =  $Style[$Loop_count];
         break;
		}

      $Loop_count += 1;

		if($Loop_count >= count($Keywords))
		{
         $arrStyle_akt[]   =  'bgcolor="#800080"';
		}
	}

	// Auslesen der Startzeit
	If($event->getStart()->dateTime <> "")
	{
   	$Date_Time = $event->getStart()->dateTime;
	}
	else
	{
		$Date_Time = $event->getStart()->date;
	}

    // Zerlegen der Startzeit
    if(strpos($Date_Time, "T")>0)
    {
        $arrDate_Time             =     explode("T", $Date_Time);
        $arrEvent_Time_akt[]         =  $arrDate_Time[0];
    }
    else
    {
       $arrEvent_Time_akt[]         =  $Date_Time;
    }

}

$browser = calender_year($arrEvent_Time_akt, $arrStyle_akt);
//echo $browser;
SetValue(CreateVariableByName($IPS_SELF, "Jahreskalender", 3, "~HTMLBox"), $browser);

//------------------------- Main ENDE --------------------------

//------------------------ Funktionen -------------------------

function calender_year($arrEvent_Time, $arrStyle)
{
/*=============================================
calender_year - Martin Heinzel - 13.07.2010
Version: 1.0

Beschreibung:
Mit diesem Skript wird ein Jahreskalender erstellt.
Dieser Kalender enthält alle Termine aus der
Ferengi-Master Terminverwaltung in Form eines Farbumschlag.
Der aktuelle Tag wird an hand eines gesonderten Farbumschlages dargestellt.

Änderungen
----------

tt.mm.yyyy von Version x.x -> x.x

Berschreibung:

================================================*/

// Variablen Deklaration --------------------------------------

// Variablen
//--------------
$arr_Month = array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$rawCount_Month = 0;
$year         = date('Y');
$act_day     = date('j');
$act_month     = date('n');

//-------------------------------------------------------------

//--------------------------- Main ----------------------------

//Bitte anpassen
//------------------------------------------
//Hintergrundfarbe Monat
$Style_MonthHeader     = 'bgcolor="#C0C0C0"';

//Hintergrundfarbe der Kopfdaten -> Wochentage
$Style_DayHeader      = 'bgcolor="#808080"';

//Hintergrundfarbe des aktuellen Tages
$Style_Today           = 'bgcolor="#FF00FF"';

//Hintergrundfarbe gesamt
$Style_background       = 'background-color:#F6F6F6';
//------------------------------------------


//zusammenstellen des Kopfes
$DayHeader = '<th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mo</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Di</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Mi</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Do</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Fr</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">Sa</font></th>
              <th width="20" height="20" align="center" '.$Style_DayHeader.'><font color="#FFFFFF">So</font></th>';

//Aussehen der Zellen
$Style_DayCell     = 'width="20" height="20" align="center"';

//erstellen des Jahreskalenders beginnend mit der Monatsaufteilung
$Jahreskalender = '<table border="0" summary="Jahreskalender" ><tr>';

//durchlaufen der einzelnen Monate
foreach($arr_Month as $key => $Month)
{
    //erstellen der Monatsansicht mit dem Monat und den Tageskopfdaten
    $Jahreskalender .='<td><table border="1" summary="Kalender '.$Month.'">
   <tr>
       <th colspan="7" '.$Style_MonthHeader.'>'.$Month.'</th>
   </tr>
   <tr>'.$DayHeader.'</tr>';

    //berechnen des aktuellen Monats
    $month = $key+1;
    //wie viele Tage hat dieser Monat
   $total_days = date('t', mktime(0, 0, 0, $month, 1, $year));
   //an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
    $day_offset = (date('w', mktime(0, 0, 0, $month, 1, $year)))-1;
    //Das Ergebnis kann negativ sein. In diesem Fall ist der Tag "Sonntag"
    if($day_offset < 0)
    {
      $day_offset = 6;
    }

    //initialisieren des Tageszählers
   $Day_Count = 1;

    //ein Kalenderblatt (ein Monat) bekommt 6 Wochenreihen
    for($week = 0; $week < 6; $week++)
    {
        $Jahreskalender .='<tr>';

        //eine Woche hat immer noch 7 Tage
        for($day = 0; $day < 7; $day++)
        {
            //Die Tage vor dem ersten müssen mit leeren Zellen aufgefüllt werden
            if($day_offset > 0)
            {
                $Jahreskalender .='<td '.$Style_DayCell.'> </td>';
            $day_offset -= 1;
            }
            else
            {
                //ausfüllen der Tage mit Tageszahlen
                if($Day_Count <= $total_days)
                {
                    //Der aktuelle Tag wird eingefärbt
                    if($month == $act_month and $Day_Count == $act_day)
                    {
                        $Jahreskalender .='<td '.$Style_DayCell.' '.$Style_Today.'>'.($Day_Count).'</td>';
                    }
                    else
                    {
                        //Tage mit einem Termin werden eingefärbt
        						 $StartDay      =  $Day_Count;
								 if(strlen($StartDay)< 2)		$StartDay      =  "0".$StartDay;

	                      $StartMonth    =  $month;
								 if(strlen($StartMonth)< 2)		$StartMonth    =  "0".$StartMonth;

								 $Appointment   		=  False;
	                      $Appointment_Time    =  $year."-".$StartMonth."-".$StartDay;

  	                      $Event_Time_LC       =  0;
	                      foreach ($arrEvent_Time as $Event_Time)
								 {
                         		If($Event_Time == $Appointment_Time)
										{
											$Appointment           	=  True;
                                 $Style_Appointment      =  $arrStyle[$Event_Time_LC];
          							}
                              $Event_Time_LC  += 1;
								 }

  	                     if($Appointment)
                        {
                            $Jahreskalender .='<td '.$Style_DayCell.' '.$Style_Appointment.'>'.($Day_Count).'</td>';
                        }
                        else
                        {
                            //alle anderen Tagen sind ohne färbung
                            $Jahreskalender .='<td '.$Style_DayCell.'>'.($Day_Count).'</td>';
                        }
                    }
                    $Day_Count += 1;
                }
                else
                {
                    //alle Tage die über die maximalen Monatstage gehen werden mit leeren Zellen aufgefüllt
                    $Jahreskalender .='<td '.$Style_DayCell.'> </td>';
                }

            }
        }
        //Ende der Wochenreihe
        $Jahreskalender .='</tr>';
    }
    //Ende des Monats
    $Jahreskalender .='</table></td>';

    //aufaddieren der Monate in einer Reihe
   $rawCount_Month += 1;
   //nach 4 Monaten wird eine neue Monatsreihe begonnen
    if($rawCount_Month == 4)
    {
        $Jahreskalender .='</tr><tr>';
      $rawCount_Month = 0;
    }
}
//Beenden des Jahreskalenders
$Jahreskalender .= '</tr></table>';

//nur noch was schickes drum herum
$browser='
<html>
<head>
<style type="text/css" media="screen">
body  { '.$Style_background.';
         font-family: Arial;
      }
</style>
</head>
<body scroll="no">'
.$Jahreskalender.
'</body>
</html>';

//und ablegen
return $browser;
}

function CreateVariableByName($id, $name, $type, $profile = "")
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}

//--------------------- Funktionen ENDE ------------------------

?>


Danke schon mal dafür, jetzt sehe ich wieder Licht am Ende des Tunnels,
Ich hab da nur ein kleines Problem mit den Parametern, was muß denn bei

2014-11-27 21_04_04-Scripte für den Google Kalender API V3.jpg

schaun_wir_mal@group.calendar.google.com eingetragen werden?

Ich hab da schon alles probiert, ich bekomme immer eine Fehlermeldung um die Ohren gehauen die da sagt:

Fatal error: Uncaught exception ‚Google_Service_Exception‘ with message 'Error calling GET https://www.googleapis.com/calendar/v3/calendars/schaun_wir_mal@group.calendar.google.com/events?singleEvents=true&am
:confused:

Das Script ist für Leute die mehr als ein Kalender haben. Das ist die zweite Kakender-ID.

Yeah, es geht, ich werd bekloppt.
Danke danke, du hast mir mindestens das ganze Wochenende gerettet.
Wenn ich es jetzt noch hinbekomme das ganze im Dashboard anzeigen zu lassen kann ist quasi Weihnachten.
:smiley:

Funktioniert Super, danke erst mal. Wie auch der Kollege juwo1811 hatte auch ich Probleme mit den Dateien

Wie bekomme ich die denn aus dem ssl-Paket? Wenn ich nicht aus dem Link hätte?

gruß
goran

Weis ich nicht. Ich lade sie selber immer da her.

Danke für die tolle Anleitung - hat auf Anhieb funktioniert.

Gruß
Boris

Hallo Martin,

habe heute mal den Monatskalender getestet, funktioniert problemlos, vielen Dank.

Wenn ich das so sehe, wird der Wunsch nach einer „Erkennung“ der Art der Termine in einem Kalender noch größer (Tonne, Arzt, Geburtstage …), um eine Farbe zuzuordnen und evtl. sogar die Größe der Terminlänge im Kästchen darzustellen.
So sehe ich zwar, das ich jeden Tag mind. einen Termin habe, aber nicht was.
Das filtern nach Schlüsselwörtern wird verm. dabei gar nicht so das Problem sein, ich sehe da eher ein Problem, das vernünftig mit der Lange im Kästchen dazustellen. Kenne mich aber mit HTML auch nicht wirklich aus.

Viele Grüße,
Doc

Da bin ich ganz bei Dir.

Man könnte eventuell ein Array machen in dem der User selber ein „Schlüsselwort“
mit der entsprechenden Farbe definiert.

Das Problem ist für mich im Moment wenn man zwei Termine an einem Tag hat.
Dann wäre der letzte Termin ausschlaggebend für die Farbe des Tages.
Das muss aber nicht zwangsläufig der wichtigste Termin sein.

In den Kästchen noch einen Text rein zu bringen sehe ich nicht als machbar an.
Ich meine aber das es in HTML so eine Art „Tool tip text“ gibt.
D.h. wenn man mit der Maus auf einem „Tag“ steht kommt ein Text (Termin/e).

Hallo Martin,

das mit dem „Schlüsselwort“ und der Farbe wäre auch schon interessant in der Listenansicht der Termine und nicht nur im Monatskalender.
Oder meintest du das schon in der Listenansicht?

Grüße,
Doc

Missverständnis!!

Ich dachte Du meinst den Monatskalender.
Die Listenansicht ist kein HTML. Das ist einfach nur Text.

Da könnte man natürlich HTML von machen.

Ich benutze die Listenansicht z.Zt. von Swifty.

Ich dachte, deine wäre ähnlich aufgebaut per html.
Dort wird im Array glaube ich unterschieden, welcher Kalender abgefragt wird und dann eine Farbe zugeordnet.
Dachte das könnte man so abändern, das ein Schlüsselwort die unterschiedlichen Kalender ersetzt.

Ich weiss nicht wie aufwändig es ist und ob es überhaupt in HTML so funktioniert ein Icon im Kastchen des Monatskalenders zu positionieren.
Evtl. liessen sich so Standardtermin wie Arzt und Tonnen usw. markieren?

Grüße,
Doc

Sei mir bitte nicht böse, ich habe es immer noch nicht verstanden.

Sprichst Du vom HTML-Monatskalender?
Oder von Termine auslesen und anzeigen?

ist doch ganz einfach - beides :smiley:

Also erstens den Kalender auslesen und anzeigen. Ich nutze z.B. das zuvor angegebene Script dafür, welches eine Terminliste auf HTML Basis ausgibt. Hier werden die Termin farblich unterschieden, da sie in versch. Kalendern geführt werden. Das wäre schöner, wenn das auf Basis von Schlüsselwörtern geschehen würde um nur einen Kalender haben zu müssen. Evtl. könnte man das Array noch erweitern, 0 für Standardtermine und andere Werte für Termin die bestimmte Wörter enthalten und so farblich gekennzeichnet werden können.

Und der Monatskalender. Es ist sehr undurchsichtig nur zu sehen, das Termine da sind. Man sollte dort schon unterscheiden können, ob Tonne, Arzt, Geburtstag oder was man sonst noch vergessen könnte.
Eben so, wie es in vielen Handykalenderansichten auch gemacht wird. Weiss nur nicht, wie und ob das mit html gehen könnte.

Weisst du, was ich meine?
Doc

Servus
erstmal herzlichen Danke für deine Mühe.

Aaaber, da wir ja in anderen Threads immer mal wieder über die Sicherheit von IPS diskutieren:
Kann eigentlich jemand beurteilen was man sich damit so alles einfängt ?

  • ich mein da wird ein riesen Verzeichnis mit irgendwelchen Dateien und Scripten direkt ins allerheiligste, den IPS/Script
    Ordner kopiert. - hmm, ist das gut ?
  • weiters werden da .dll mit anderen Versionen überschrieben, - ist das unbedenklich ?
    Naja, und was passiert mit den .dll bei einem IPS Update ?

Vielleicht kann ja ein Wissender dazu was sagen, und gibt eine Unbedenklichkeitsbescheinigung oder so :cool:
Persönlich kann ich ja ganz gut Scripten, aber das ganze Sicherheitszeug ist mir fremd.

schönen Dank
bb

Hallo Bernhard,
die Dll Dateien sind von der IPS-Seite. Ich hoffe die wissen was Sie ins Netz stellen. Alles andere kommt von Google.
Mehr kann ich dir leider nicht sagen.

Liebe Grüße nach Österreich!