+ Antworten
Seite 1 von 22 1 2 3 11 ... LetzteLetzte
Ergebnis 1 bis 10 von 219
  1. #1
    Registriert seit
    Sep 2009
    Ort
    Bocholt
    Beiträge
    1,126

    Standard 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.
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Google_Developers_Console_2.PNG 
Hits:	1172 
Größe:	12.4 KB 
ID:	27604

    4. Unter "API's und Authentifizierung" geht Ihr auf APIs und aktiviert die Calender API
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Google_Developers_Console_4.PNG 
Hits:	1276 
Größe:	115.0 KB 
ID:	27605

    5. Unter den Zugangsdaten erstellt Ihr eine Client-ID vom Typ Dienstkonto
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Google_Developers_Console_5.PNG 
Hits:	1308 
Größe:	88.3 KB 
ID:	27606
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Google_Developers_Console_6.PNG 
Hits:	1202 
Größe:	30.4 KB 
ID:	27607

    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.
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Google_Developers_Console_7.PNG 
Hits:	1078 
Größe:	24.9 KB 
ID:	27608

    7. Diese Datei liegt bei mir im IPS-Ordner "scripts unter "certificates".
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IPS_Script.PNG 
Hits:	1122 
Größe:	44.8 KB 
ID:	27609

    8. Man sieht die Zugangsdaten für das Dienstkonto
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Google_Developers_Console_9.PNG 
Hits:	1197 
Größe:	116.9 KB 
ID:	27610

    9. Nun muss noch dein Google Kalender frei gegeben werden. Dazu geht Ihr zu Eurem Kalender und Dort zu den Kalenderfreigaben.
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Kalender_1.png 
Hits:	1123 
Größe:	16.4 KB 
ID:	27611

    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:

    PHP-Code:
    //#################################### 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');

    //########################################################################################################################### 
    13. 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!!
    [/EDIT]

    14. 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)

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

    16. 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/
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Kalender_3.png 
Hits:	1111 
Größe:	17.6 KB 
ID:	27612   Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Kalender_4.png 
Hits:	878 
Größe:	13.8 KB 
ID:	27613  
    Geändert von Schablone (31.01.16 um 09:14 Uhr)
    Bis dann

    Martin

  2. #2
    Registriert seit
    Sep 2009
    Ort
    Bocholt
    Beiträge
    1,126

    Standard Termine Lesen

    Es können ein oder mehrere Kalender ausgelesen werden.
    PHP-Code:
    <?
    /*=============================================================
    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($who0$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]."\r\n";
        }
        else
        {
            
    $event_display .= Date("d.m.Y H:i:s",(int)$StartTimes[$sz])." - ".Date("H:i:s",(int)$EndTimes[$sz])."   ".$Titles[$sz]."\r\n";
        }
        
    $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], 08);
                
    $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.

    PHP-Code:
    <?
    /*=============================================================
    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($who0$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]."\r\n";

            
    //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]."\r\n";

            
    //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], 08);
                
    $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!!

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IPS_Script.PNG 
Hits:	789 
Größe:	44.8 KB 
ID:	27570
    Geändert von Schablone (11.12.14 um 06:58 Uhr) Grund: Script geändert
    Bis dann

    Martin

  3. #3
    Registriert seit
    Sep 2009
    Ort
    Bocholt
    Beiträge
    1,126

    Standard Termine schreiben

    Hier nun das Script zu schreiben von Terminen:


    PHP-Code:
    <?
    /*=============================================================
    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_Recur0);

        
    // 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_StartDaydate("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_StartMonthdate("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_StartYeardate("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_StartHourdate("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_StartMinutedate("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_EndDaydate("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_EndMonthdate("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_EndYeardate("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_EndHourdate("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_EndMinutedate("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_AllDayFalse);

        
    // 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
    Geändert von Schablone (07.12.14 um 15:50 Uhr)
    Bis dann

    Martin

  4. #4
    Registriert seit
    Sep 2009
    Ort
    Bocholt
    Beiträge
    1,126

    Standard HTML-Monatskalender

    Hier nun der HTML-Monatskalender.

    PHP-Code:
    <?
    /*=============================================
    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&auml;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(000$month1$year));
    //an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
    $day_offset = (date('w'mktime(000$month1$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

    PHP-Code:
    <?
    /*=============================================
    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(000date("m")+11date("Y")))."-01T00:00:00+01:00";
    $end_date date("Y-m"mktime(000date("m")+11date("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(000date("m")+11date("Y")));
    $year    =  date('Y'mktime(000date("m")+11date("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&auml;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(000$month1$year));
    //an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
    $day_offset = (date('w'mktime(000$month1$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

    PHP-Code:
    <?
    /*=============================================
    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&auml;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(000$month1$year));
    //an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
    $day_offset = (date('w'mktime(000$month1$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

    PHP-Code:
    <?
    /*=============================================
    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(000date("m")+11date("Y")))."-01T00:00:00+01:00";
    $end_date date("Y-m"mktime(000date("m")+11date("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(000date("m")+11date("Y")));
    $year    =  date('Y'mktime(000date("m")+11date("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&auml;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(000$month1$year));
    //an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
    $day_offset = (date('w'mktime(000$month1$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.
    Geändert von Schablone (08.12.14 um 19:47 Uhr)
    Bis dann

    Martin

  5. #5
    Registriert seit
    Sep 2009
    Ort
    Bocholt
    Beiträge
    1,126

    Standard HTML-Jahreskalender

    Hier nun der HTML-Jahreskalender.

    PHP-Code:
    <?
    /*=============================================
    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&auml;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(000$month1$year));
       
    //an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
        
    $day_offset = (date('w'mktime(000$month1$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

    PHP-Code:
    <?
    /*=============================================
    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&auml;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(000$month1$year));
       
    //an welchem Tag beginnt der Monat -> Da die Woche mit Montag beginnt muss 1 subtrahiert werden
        
    $day_offset = (date('w'mktime(000$month1$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 ------------------------

    ?>
    Geändert von Schablone (10.12.14 um 18:19 Uhr)
    Bis dann

    Martin

  6. #6
    Registriert seit
    Apr 2010
    Ort
    Meppen
    Beiträge
    146

    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

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	2014-11-27 21_04_04-Scripte für den Google Kalender API V3.jpg 
Hits:	480 
Größe:	13.5 KB 
ID:	27575

    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/...Events=true&am............
    Gruß, teebeutel

    WAGO, PCE-FWS 20, FS20, Homematic, 868

  7. #7
    Registriert seit
    Sep 2009
    Ort
    Bocholt
    Beiträge
    1,126

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

    Martin

  8. #8
    Registriert seit
    Apr 2010
    Ort
    Meppen
    Beiträge
    146

    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.
    Gruß, teebeutel

    WAGO, PCE-FWS 20, FS20, Homematic, 868

  9. #9
    Registriert seit
    Feb 2010
    Ort
    Bamberg
    Beiträge
    128

    Funktioniert Super, danke erst mal. Wie auch der Kollege juwo1811 hatte auch ich Probleme mit den Dateien
    Zitat Zitat von juwo1811 Beitrag anzeigen
    @stele99

    Danke für deine gute Erklärung! => Läuft auf Anhieb

    Bei Punkt 6, Besorgen der beiden Dateien, bin ich leider gescheitert... wo sollen diese sein, hab sie so nicht gefunden.
    Hab dann die Dateien aus diesem Link genommen:

    http://www.ip-symcon.de/files/service/OpenSSL-0.9.8.zip

    Insgesamt ist es alles ein wenig tricky....Wenn ich mir das nicht aufschreibe und in einem Jahr ist wieder was.. seh ich alt aus.

    Ansonsten lief es auf Anhieb. Fehlt nur noch aufhübschen für das WFE.

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

    gruß
    goran

  10. #10
    Registriert seit
    Sep 2009
    Ort
    Bocholt
    Beiträge
    1,126

    Zitat Zitat von goran Beitrag anzeigen
    Wie bekomme ich die denn aus dem ssl-Paket? Wenn ich nicht aus dem Link hätte?
    Weis ich nicht. Ich lade sie selber immer da her.
    Bis dann

    Martin

Ähnliche Themen

  1. Google Kalender Zugriff und OAUTH 2.0
    Von APieroth im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 19
    Letzter Beitrag: 30.11.14, 19:46
  2. Scripte für den Google Kalender. (Ehemals Termine eintragen)
    Von Schablone im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 137
    Letzter Beitrag: 27.11.14, 11:27
  3. Anzeige Google Kalender
    Von kronos im Forum WebFront
    Antworten: 0
    Letzter Beitrag: 12.10.12, 08:53
  4. Google Kalender einbinden?
    Von fschult2001 im Forum Dashboard
    Antworten: 2
    Letzter Beitrag: 08.10.12, 19:09
  5. Heizen mit Google Kalender
    Von drapple im Forum HomeMatic
    Antworten: 5
    Letzter Beitrag: 01.10.12, 18:52