Google Kalender Termine im WebFront anzeigen

Super,

werde ich später mal testen.

Was mir aufgefallen ist, das einige mit unterschiedlichen Kalendern arbeiten, um verschiedene Termine zu verwalten.
Ich selber nutzte nur einen Kalender für alle Termin, was ich eigentlich einfacher finde.
In den alten Scripts wurde das dann durch Schlüsselwörter gefiltert, und so die Farben im Dashboard dargestellt.

Könntet ihr so eine Option nicht mit in eure Scripte einpflegen um z.B. bei Tonne, Geburtstag, Arzt usw. im Ereigniss ein Farbe zu definieren oder evtl. Variablen damit gezielt füttern zu können?

Viele Grüße,
Doc

Ich habe den HTML-Jahreskalender fertig.

@Doctor Snuggles
Das ist eine super Idee. Das kann aber was dauern.

Ich habe noch das Script für Termine schreiben vor der Brust.
Dann hat noch jemand Probleme Termine zu lesen.

Hallo Martin,

ich kann warten :smiley:

Mal im ernst, ich möchte auch nur ungern jetzt wieder selber für mich anfangen in bestehenden Scripten zu basteln und würde das begrüßen, wenn das gezeilt in den für alle Leute verfügbaren Scripten umgesetzt werden könnte.
Das wäre dann bei einem Update deinerseits dann wieder ohne großen Aufwand einzupflegen und du machst dir hier eh schon so viel arbeit damit.
Wäre toll wenn du da eine Möglichkeit siehst.
Der alte Code geistert hier fürs Dashboard im Forum herum. Glaube aber nicht, das sich das jetzt so noch übernehmen lässt.

Viele Grüße,
Doc

Das Script zum schreiben von Terminen ist fertig.

Hallo paresy,

gibt es ein aktuelles Skript für diesen Zweck, da es den Magi Cookie für XML ja nicht mehr gibt?

MfG
Lars

Hallo Stephan, dein Googlekalender Skript gefällt mir. Ist es möglich das aktuelle Skript hier nochmal zu veröffentlichen? ich weiß nicht genau welches du jetzt verwendet hast.

Grüße
Ringo

Hi,

ich hätte auch Interesse an dem Skript.

LG Izack

Hallo Zusammen

anbei das Script was aktuell bei mir läuft. Wobei das Script nicht von mir persönlich ist.
Habe das Script hier im Forum gefunden und umgebaut bzw. angepasst.

<?


/*=============================================================
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            =  "4654213511-q04rbdr3ckadb9fkpaji59vta5n40lq4.apps.googleusercontent.com";
$EMail                   =  "455465464864021-q04rbdr3ckadb9fkpaji59vta5n40lq4@developer.gserviceaccount.com";
$key_file_location   =  IPS_GetKernelDir()."scripts\\certificates\\IPS-Kalender-9de3f4b5ae3c.p12";
$calendar_login         =    array('E-MAil@googlemail.com',);

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

//Hier die Farbe für die ShortCuts angeben
$SC_Farbe[1] = "gray";
$SC_Farbe[2] = "#00AD00";
$SC_Farbe[3] = "darkred";
$SC_Farbe[4] = "lightblue";

//Hier den Style wählen
$blinkToday = false; // (true/false) blinken des heutigen Kalendereintrages An/Aus

/******** Farbnamen, RGB-Formatierung, Hex-Zahlen möglich *********/
$StyleText[1] = "white"; // Textfarbe Datum
$StyleText[2] = "gray"; // Textfarbe Wochentag

/*** xx-small, x-small, small, normal, large, x-large, xx-large ***/
/************** oder Angabe in pt - z.B. "12pt" *******************/
$StyleText[3] = "large"; // Textgröße Datum
$StyleText[4] = "normal"; // Textgröße Wochentag
$StyleText[5] = "normal"; // Textgröße Eintrag


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


// 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("IPS");
$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);

// Wochentage auf Deutsch
$tag[0] = "Sonntag";
$tag[1] = "Montag";
$tag[2] = "Dienstag";
$tag[3] = "Mittwoch";
$tag[4] = "Donnerstag";
$tag[5] = "Freitag";
$tag[6] = "Samstag";
$deco = "";
if($blinkToday)$deco = "blink";

$calDataTxt = "<table style='border-spacing:0px; width:100%'>"; // Starte Tabellenansicht
$check_date = "";

// 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)
    {
//       print_r($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);
       $who           = utf8_decode($event->getOrganizer()->displayName);
       $who_substr    = substr($who, 0, $whoCounts);
        $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

// Starte Tabellenansicht
$event_display  = "<table style='border-spacing:0px; width:100%'>"; 

while($sz < $i)
{
	  $Startzeit = Date("H:i",(int)$StartTimes[$sz]);
	  $Endzeit= Date("H:i",(int)$EndTimes[$sz]);
	  $StartDatum = Date("d.m.Y",(int)$StartTimes[$sz]);
	  $EndDatum = Date("d.m.Y",(int)$EndTimes[$sz]);
	  $Beschreibung = $Titles[$sz];

if(Date("d.m.Y",(int)$EndTimes[$sz]) != date("d.m.Y", strtotime("yesterday"))){

   If($check_date != "" and Date("d.m.Y",(int)$StartTimes[$sz]) != $check_date){
             $event_display .= "</table></th></tr>";}
             
   If(Date("d.m.Y",(int)$StartTimes[$sz]) != $check_date){
   
			  If(Date("d.m.Y",(int)$StartTimes[$sz]) == date("d.m.Y")){
               $headerTxt = "Heute:<br>";}
			  elseif(Date("d.m.Y",(int)$StartTimes[$sz]) == date("d.m.Y", strtotime("+1 day"))){
                $headerTxt = "Morgen:";
           }else{
               $headerTxt = Date("d.m.Y",(int)$StartTimes[$sz]);
               }
               
               // Tabelle Erstellen
               $event_display .= "<tr><td style='  padding:4px;
                                       backgroun-color:#213245;
                                       background: -moz-linear-gradient(left, rgba(31,50,79,0) 40%, #213245 100%);
                                       background: -webkit-gradient(linear, left top, right top, color-stop(4%,rgba(31,50,79,0)), color-stop(100%,#213245));
                                       background: -webkit-linear-gradient(left, rgba(31,50,79,0) 40%, #213245 100%);
                                       background: -o-linear-gradient(left, rgba(31,50,79,0) 40%, #213245 100%);
                                       background: -ms-linear-gradient(left, rgba(31,50,79,0) 40%, #213245 100%);
                                       background: linear-gradient(to right, rgba(31,50,79,0) 40%), #213245 100%;'>
                                       <span style='color:".$StyleText[1].";font-weight:200;font-size:".$StyleText[3]."'>"
                                       .$headerTxt.
                                       "</span></td>
                               <td style='text-align:right; width:100px; padding:4px;background-color:#213245'>"
                                       ."<span style='color:".$StyleText[2].";font-weight:normal;font-size:".$StyleText[4]."'>"
                                       .$tag[date("w", strtotime(Date("d.m.Y",(int)$StartTimes[$sz])))].
                                       "<span>".
                                       "</td>
                                        </tr>
                                        <tr>
                                        <th colspan='2' style='text-align:left;padding-left:20px;padding-right:0px;padding-bottom:10px;padding-top:0px;'>
                                        <table style='border-spacing:0px; width:100%;padding:5px; border:1px solid #1f3247;'>";

     $check_date = Date("d.m.Y",(int)$StartTimes[$sz]);
	  $event_display .= SetEintrag($event_display);
	  }else {
    $event_display .= SetEintrag($event_display);
	 
   }
  }

 $sz++; // Duchlauf hoch zählen
}

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

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

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

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

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

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

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

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

            //Uhrzeit
            $term_Stunde   =  0;
            $term_Minute   =  0;
            $term_Sekunde  =  0;
        }
        
    return mktime($term_Stunde, $term_Minute, $term_Sekunde, $term_monat, $term_tag, $term_jahr);
}


function SetEintrag($event_display)
{
    global $tag, $SC_Farbe, $deco, $StyleText, $Startzeit, $StartDatum, $EndDatum, $EndTimes, $sz, $Beschreibung, $event_display, $Endzeit ;

    if($Startzeit == "00:00"){

			  $Endday = (Date("d",(int)$EndTimes[$sz])-1);
			  $Endmonth = (Date("m",(int)$EndTimes[$sz]));
			  $Endyear = (Date("Y",(int)$EndTimes[$sz]));
			  $EndDatum_1 = Date ("d.m.Y",  strtotime("$Endday-$Endmonth-$Endyear"));

//			  print "Startzeit: $StartDatum Endzeit: $EndDatum_1 
";

		     if($StartDatum == $EndDatum_1
			  and $Startzeit == $Endzeit) {$Startzeit = "Ganztägig";} // Ganztägig
      	  else {$Startzeit =" bis ".substr($tag[date("w", strtotime($EndDatum))],0,2).", ".$EndDatum;}
	 }else {$Startzeit .= " - ".Date("H:i",(int)$EndTimes[$sz])." Uhr";}

	 if($StartDatum  == date("d.m.Y")){
      	 $event_display .= "<tr><td><span style='font-weight:normal;font-size:".$StyleText[5].";text-decoration:".$deco.";;color:".$SC_Farbe[4]."'>".$Beschreibung."</span></td>
          <td style='text-align:right;'>
          <span style='font-weight:normal;font-size:".$StyleText[5].";text-decoration:".$deco.";color:".$SC_Farbe[4]."'>".$Startzeit."</span></td></tr>";
		}else{
       $event_display .= "<tr><td><span style='font-weight:normal;font-size:".$StyleText[5].";color:".$SC_Farbe[4]."'>".$Beschreibung."</span></td>
       <td style='text-align:right'><span style='font-weight:normal;font-size:".$StyleText[5].";color:".$SC_Farbe[4]."'>".$Startzeit."</span></td></tr>";}
}

IPS_LogMessage($_IPS['SELF'], "Googel Termine wurden abgerufen");
//--------------------- Funktionen ENDE ----------------------

?>

Gruß Stephan

HI,

danke für das Skript, leider gibt es den XML Link nicht mehr bei google…

Habt ihr eine Alternative?

LG Izack

hay,

Stimmt, XML gibt es nicht mehr. Wie funktioniert dann aktuell die Einbindung des google Kalenders im Webfront?

Gruß oekomat

Hallo,

Gibt es hier schon was neues? Würde auch gerne den Google Kalender ins Dashboard einbinden.

Nimm das doch solange.:wink:

Der Fred ist von 2014!!

Hallo Martin,

Danke für den Link, werde ich mal versuchen.

Das geht auch sehr gut, und auch die Optik passt.
https://www.symcon.de/forum/threads/35728-Modul-iCal-Calender-in-IP-Symcon-lesen-und-verarbeiten