Scripte für den Google Kalender API V3

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!

Die Termine werden ja alle in eine Variable geschrieben.

Ich möchte allerdings gerne jede Information in eine einzelne Variable schreiben, in etwa so wie auf dem Bild:


Leider habe ich deutlich zu wenig php Kenntnisse um das irgendwie bewerkstelligen zu können.
Kann mir da jemand ein paar Hinweise geben wie ich das anstellen muß?

Ich sehe, du verwendest noch das gleiche Script wie ich. Verm. auch noch für den Designer?
Das ist auch der Grund, warum ich das noch nach Schlüsselwörtern selektiert haben möchte.
Aber auf Dauer soll das mal durchs Webfront komplett übernommen werden.
Dann sind auch damit noch weitere Aktionen möglich.

Grüße,
Doc

Der HTML-Monatskalender mit Keywords ist fertig.