Google Kalender Termine im WebFront anzeigen

Folgendes Skript kann Termine aus dem Google Kalender auslesen und als TextBox im WebFront anzeigen lassen. Es sieht nicht unbedingt toll aus, es kann auch nicht viel, aber es erfüllt den Zweck für den ich es brauchte.

> Einfach die nächsten 10 Termine untereinander mit Datum, Titel und Ort anzeigen zu lassen.

Installation:
-Skript in IP-Symcon hinzufügen und Code reinkopieren
-Mail Adresse bei UserID angeben
-Magic Cookie in Google herausfinden (Einstellungen -> Kalender -> Kalendername anklicken -> Privatadresse -> XML -> Cookie rauskopieren)
-Skript ausführen
-Link erstellen und auf „Kalender“ Variable zeigen lassen (Tipp: Nicht die Kalender Variable verschieben!)
-Erstellten Link an gewünschte Stelle schieben, Icon angeben.
-Fertig.

-> Damit das Skript ab und zu die Variable aktualisiert, habe ich ein zyklisches Ereignis hinzugefügt, dass das Skript immer um 03:00 Nachts aufruft.


<?php

$userid = 'adresse%40googlemail.com';
$magicCookie = 'aaaabbbbccccddddeeeeffff0000000';

$feedURL = "http://www.google.com/calendar/feeds/$userid/private-$magicCookie/full";
$feedParams = "?singleevents=true&max-results=10&orderby=starttime&start-min=".urlencode(date("c"))."&sortorder=a";
$sxml = simplexml_load_file($feedURL.$feedParams);
$today = 0;

$date = "";
foreach ($sxml->entry as $entry) {
    $title = stripslashes(utf8_decode($entry->title));
    $gd = $entry->children('http://schemas.google.com/g/2005');

    $startTime = '';
    if ( $gd->when ) {
        $startTime = $gd->when->attributes()->startTime;
    } elseif ( $gd->recurrence ) {
        $startTime = $gd->recurrence->when->attributes()->startTime;
    }
    $startTime = strtotime( $startTime );
    
    if(date("d.m.y") == date("d.m.y", $startTime))
    {
        $today++;
    } else {
       if($today > 0)
       {
          $today = 0;
          $date .= "
";
       }
    }

    $where = utf8_decode($gd->where->attributes()->valueString);
    if(strlen($where) > 0) {
        $where = " (".$where.")";
    }
        
    $date .= date("d.m.Y H:i", $startTime )." ".$title.$where."
";

}

SetValue(CreateVariableByName($IPS_SELF, "Kalender", 3, "~TextBox"), $date);

if($IPS_SENDER == "Execute")
{
    echo "<pre>";
    echo $date;
}

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;
}

?>

kalender.png

… perfekt …

Icon angeben

ham’ wir schon ein Kalender-Icon :rolleyes:

Zur Info für Outlook-User:

iCal4OL ist ein Programm um ICS-Dateien/Feeds in Outlook intelligent zu importieren (synchronisieren), exportieren oder als Remote Kalender einzubinden.

iCal4OL: Google Calendar Synchronization for Outlook - ICAL Feeds Import and Export

Läuft und funktioniert bei mir als 14 Tage Testversion …

MST

PS: nur so zum „Spaß“ - Trigger: „Alle 1 Minuten“


$cal = GetValue(55710 /*[WWW\Google Kalender\Kalender]*/);
$today_jetzt = date("d.m.Y H:i");
$pos1 = strpos($cal, $today_jetzt);
if ($pos1 !== False){
   $cal_time = substr($cal, $pos1 + 11, 5);
   $pos1 = strpos($cal, chr(10), $pos1);
	$termin = substr($cal, 17, $pos1-17);
	//echo "Termin: ".$termin."
";
	$pos1 = strpos($termin, "IPS_RunScript(");
	if ($pos1 !== False){
	   $id = substr($termin, $pos1 + 14, 5);
	   //echo "ID: ".$id."
";
	   IPS_RunScript($id);
	}
}

teil_cal_outlock.png

Hallo paresy,

tolles Skript!!! Danke!
Da ich kein php Held bin noch zwei Wünsche - kann man die Anzahl der angezeigten Termine begrenzen (z.B. 5) und kann man nach jedem angezeigten Termin einen Zeilenumbruch einstellen?

Danke und viele Grüße
JF

kann man die Anzahl der angezeigten Termine begrenzen (z.B. 5)

Ctrl+F und 10 eingeben - der Rest sollte klar sein

einen Zeilenumbruch einstellen

ist vorhanden: ."
";

MST

Das mit den Zeilenumbrüchen ist ein Bug im WebFront, der um nächsten Update behoben sein wird.

paresy

Derzeit "
", später "
" im WebFront.

@Steiner: Synchronisation mit Outlook geht auch kostenfrei und direkt von Google: Getting started with Google Calendar Sync - Google Calendar Help.

@Horst,

danke - funktioniert auch.
Nur kann ich endlich auch meine Sauna aus der Ferne über den Kalender schalten :rolleyes:

MST

Hallo Steiner,

hättest Du für so eine Variante ein Skript?

Danke!
JF

Guten Tag

Wenn ich das richtig verstehe… finde die Sache mit Google cool… aber nicht jeder will vermutlich die Termine an Google weitergeben oder synchronisieren. Zudem muss hierfür eine Internetverbindung gegeben sein und weitere Schnittstellen kommen dazu.

Andere Frage, hat jemand es schon geschafft in IPS direkt Daten aus Outlook einzulesen… insbesondere Kalenderdaten. Also ich erstelle lokal in meinem Outlook in meinem PRofil einen Eintrag im Kalender und IPS liest dies jede Stunde einmal aus… ? Das wäre natürlich schon super toll… :slight_smile:

Das ganze sollte doch auch z.B. mit einem eigenen Web Kalender z.b. k5n.us:WebCalendar funktionieren.
Das Teil kann auch RSS Feeds zur Verfügung stellen.

Eventuell kennt jemand ja noch was besseres?

Auf jeden Fall ein Alternative für alle (auch für mich) die Ihre Termine nicht bei Google speichern wollen.

Jetzt müsste obiges Script nur noch einer der Profis anpassen. :wink:

Gruß
Astrastar

Hi Freaks,

cooles Feature. Wie sieht das aus, man kann in Outlook ja auch Arbeitszeiten , etc. im Zyklus hinterlegen. Wäre das auslesbar? Wenn ja, wäre das Ideal hierrüber die Heizung zu steuern!

Gruß

Kai

Hallo,

ich habe eine Heizungssteuerung auf Basis des Google Kalenders realisiert. So lassen sich sehr einfach und von überall aus die Heizungstimer einstellen.
Wer’s mal ausprobieren möchte …

http://www.ip-symcon.de/forum/f16/fht-heizungs-steuerung-ueber-google-calendar-9205/#post75857

Hallo Hirschbrat… :slight_smile: ? (Nur gwundrig hat das was mit Braten zu tun?)

Besten Dank für die Option mit dem Opensourcekalender… find ich echt gut und ist eine Lösung für das Problem „Termine nicht an Google weitergeben“ sofern das mit der Integration klappt. (Webkalender lassen sich vermutlich auslesen solange es ein Magiccookie gibt)

Mein Hauptproblem ist das Thema der Mehrfacherfassung… ich erfasse alle meine Termine in meinem Outlook… IPS termine dann im Opensourcekalender, geschäftstermine dann im Exchange Firma etc… das ist wenig sinnvoll und redundant und möchte ich vermeiden. ABER deine Idee bringt mich auf etwas anderes… denn meine Outlook Exchange Umgebung ist mit Webaccess auch über WEb zugänglich… (übrigens auch von überall wos internet gibt) Somit wäre auch eine Lösung wie man über IPS auf das Webaccess von Exchange zugreifen kann um Termine auszulesen super. Aber hingekriegt hab ich es leider nicht. Denn ein Magic cookie scheint es nicht zu geben. Zudem diese Terminauslesung ich habe irgendwie das Gefühl, dass funktioniert bei Google über einen Webservice denn man mit Parameter füttert. Ein solcher Service zum Webaccess Exchange gibt es wohl kaum.(Ausser man programmiert einen WEbservice der wiederum auf Exchange zugreift und die dAten ausliest… wäre dann aber eine Kreuzung um die andere)

Gruss

Hallo Hirschbraten

Eine blöde Frage, aber wie handelst du denn Kalendereinträge ab? Also sagen wir mal zbsp ich einen Kalender für mein Badezimmer wie in deinem Sample Project. Nun trage ich in dem Kalender ein bitte Heiz mal zwischen 11 - 17 Uhr die Hütte/Zimmer auf 26 Grad auf. Nun hast du aber zwischen 13 - 19 Uhr einen weiteren Termin in dem Kalender wo du sagst heiz auf 29 Grad auf. Um 11 Uhr geht das heizen mit 26 Grad los, um 13 Uhr erhöhts dann auf 29 Grad und um 17 Uhr wird ganz abgeschaltet und um 19 Uhr nochmals=? Also handelst du den Start wie den Endtermin ab… ?

Hallo Jungs,
doofe Frage von einem der mit Quellcode im Browser noch null Erfahrung hat, aber wie bekomm ich das Magic Cookie raus. Bin nach Steiners Anleitung gegangen, wenn ich dann XML anklicke, bekomm ich nen Link. Klicke ich diesen an, geht ne neue Seite auf. Rechtsklick Seiteninformationen und ich kann mir ne auch cookies angucken, nur welches ist das nun? Sorry der doofen Frage!

Gruß

Kai

in diesem link steht der magische kecks

HI Axel,
nu hilf mir mal richtig, wo find ich denn da nen link? :slight_smile:

Gruß

Kai

Besten Dank für die Option mit dem Opensourcekalender… find ich echt gut und ist eine Lösung für das Problem „Termine nicht an Google weitergeben“ sofern das mit der Integration klappt. (Webkalender lassen sich vermutlich auslesen solange es ein Magiccookie gibt)

Hallo swissboy

die Integration hat geklappt (FHT Heizungs -Steuerung per WebCalender) - hab’s hin bekommen :slight_smile:
(und ganz ohne Magiccookie)

Der von mir verwednete Kalender k5n.us:WebCalendar bietet einiges an Export-/Inport Möglichkeiten
ggf Verbindung von Outlook und k5n.us:WebCalendar über ical
Mehr dazu im Wiki als Lösung für Deine verschiedenen Kalender

Gruß
astrastar

Hallo Kai,

das Magic Cookie steckt in der URL der neuen Seite:

http://www.google.com/calendar/feeds/xyz.de/private-MagicCookie/basic

Viele Grüße
Roland

@kai,
die antwort hast du dir doch selber gegeben:

Steiners Anleitung gegangen, wenn ich dann XML anklicke, bekomm ich nen Link. Klicke ich diesen an,

ein teil dieses links ist der keks, die vielen zahlen und buchstaben
meiner sieht zb so aus:

http://www.google.com/calendar/feeds/axelxxxxxxx@web.de/private-1234asdf56789qwewr1234hzjkh5678hjkh/basic