Ankündigung

Einklappen
Keine Ankündigung bisher.

Google Calendar - update für "neue" GoogleAPI

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Brick
    antwortet
    Hallo,

    hab das ja auch schon eingespielt und kann bestätigen, dass das so funktioniert...

    Gruß Martin

    Einen Kommentar schreiben:


  • CarGo
    antwortet
    Hallo und vielen Dank an Brick, der mich hier diese Woche nochmal "angestupst" hat...
    Wir haben das Thema mit der Zeitverschiebung der Termine kurz besprochen und gelöst.

    Ich habe das zum Anlaß genommen und den ersten Post ganz oben entsprechend editiert, um alle Änderungen, die hier von Euch allen diskutiert & umgesetzt wurden, zu konsolidieren.
    (Auch wenn ich das ZIP-File nicht anhängen konnte, jetzt sind die PHP-scripte dort zu finden)

    Was also jetzt geht (zumindest bei mir):
    • normale Termine innerhalb eines Tages
    • Ganztagestermine
    • Multi-Day Termine
    • Farbe wird vom Termin im google Calendar übernommen, sofern fort gesetzt. Ist aber in der Beschreibung des Termins @color enhalten, geht das vor.
    • Ein Icon kann über eine Zeile in der Beschreibung gesetzt werden mit @icon
    • Sommer/Winterzeit wird entsprechend berücksichtigt, sofern (WICHTIG!) die Zeitzone auf dem smartvisu stimmt.
    • Der count kann im calenda-widget gesetzt werden und wird ausgewertet
    • Der Kalendername (typischerweise "primary") wird auf der Config-seite der smartvisu gesetzt im Feld "URL"
      • Wichtig dabei: hier wirklich NUR "primary" eintragen, nicht die ganz URL !!!

    Vielen Dank nochmal für's testen, meine Zeit war ja leider nicht soo üppig...

    Viele Grüße - Carsten

    Einen Kommentar schreiben:


  • Brick
    antwortet
    Hat hier immer noch keiner eine Idee, woran das liegen könnt ?

    Einen Kommentar schreiben:


  • Brick
    antwortet
    hab ich oben schon geschrieben, das ich das auch hab.. hab auch schon einiges probiert... leider ohne
    Erfolg..

    Gruß Martin

    Einen Kommentar schreiben:


  • SachsenTobi
    antwortet
    Hallo,

    hat denn einer auch das Selbe Problem wie ich, das Termin immer mit einer Stunde Zeitversatz dargestellt werden?

    Wo könnte ich schauen, das es wieder stimmt.

    Mit der Alten PHP hatte ich das Problem nicht. nun hab ich das wegen der ganztägigen termin mal aktualisiert und schwubb werden die Termin mit Versatz dargestellt.

    Danke und schöne Grüße

    Einen Kommentar schreiben:


  • moeoszilago
    antwortet
    Noch ein kleiner Fix um die max. Anzahl Einträge auch aus der Visu heraus wieder konfigurierbar zu machen (also auf z.B. 5 zu begrenzen anstatt wie bisher in googleV3.php immer fest max. 10 aus dem Google Calender zu holen):

    PHP-Code:
     <?php
    /**
     * -----------------------------------------------------------------------------
     * @package     smartVISU
     * @author      Martin Gleiß, updated by Carsten Gotschlich got google API V3
     * @copyright   2012
     * @license     GPL [http://www.gnu.de]
     * -----------------------------------------------------------------------------
     */

     // https://knx-user-forum.de/smartvisu/39374-google-calendar-update-fuer-neue-googleapi.html

    require_once '../../../lib/includes.php';
    require_once 
    const_path_system.'calendar/calendar.php';

    /**
     * This class reads a google calenda
     */
    class calendar_google extends calendar
    {

        
    /**
         * initialization of some parameters
         */
        
    public function init($request)
        {
            
    parent::init($request);

            
    $this->max_results = (int)$request['count'];
        }

        
    /**
         * Check if the cache-file exists
         */
        
    public function run()
        {
            
    //---------------------------------------------------------------------
            // let's define some parameters - they need to be fetched manually
            //---------------------------------------------------------------------
            
    $client_id      =   '';  // put your clientID here - from Google website
            
    $client_secret  =   '';  // put your client Secret here - from Google WebSite
            
    $redirect_uri   =   '';     // put you redirect URI here from Google Website - only first line !

            
    $refresh_token  =   '';  // Put your google refresh token here - from other PHP script
            
    $calendar_id ''// get it this way: http://googleappstroubleshootinghelp.blogspot.de/2012/09/how-to-find-calendar-id-of-google.html
            //---------------------------------------------------------------------
            // get access token first
            
    $token_url 'https://accounts.google.com/o/oauth2/token';
            
    $post_data = array(
                            
    'client_secret' =>   $client_secret,
                            
    'grant_type'    =>   'refresh_token',
                            
    'refresh_token' =>   $refresh_token,
                            
    'client_id'     =>   $client_id
                            
    );
            
    $ch curl_init();

            
    curl_setopt($chCURLOPT_URL$token_url);
            
    curl_setopt($chCURLOPT_POST1);
            
    curl_setopt($chCURLOPT_POSTFIELDS$post_data);
            
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);

            
    $result curl_exec($ch);
            
    $token_object json_decode($result);
            
    $access_token $token_object->access_token;

            
    //---------------------------------------------------------------------
            // so now we have an access-token, let's use it to access the calendar
            
    $context stream_context_create(array('http' => array('method' => "GET"'header' => "Authorization: OAuth " $access_token)));
            
    $resturl 'https://www.googleapis.com/calendar/v3/colors';
            
    $content = @file_get_contents($resturlfalse$context);
            
    $colors = array();
            if (
    $content !== false)
            {
                
    $result json_decode($content,true);
                
    $colors $result["event"];
    //            var_dump($colors);
            
    }
            
    $resturl 'https://www.googleapis.com/calendar/v3/calendars/'$calendar_id '/events?maxResults='.$this->max_results.'&singleEvents=true&orderBy=startTime&timeMin='.urlencode(date('c'));
            
    $content = @file_get_contents($resturlfalse$context);
            
    $this->debug($content);

            if (
    $content !== false)
            {
                
    $result json_decode($content,true);

                
    $i 1;

                foreach (
    $result["items"] as $entry)
                {
                    
    $startstamp = (string)($entry["start"]["dateTime"]);
                    
    $endstamp = (string)($entry["end"]["dateTime"]);
                    if (
    $startstamp == '')
                        
    $startstamp = (string)($entry["start"]["date"]);
                    if (
    $endstamp == '')
                        
    $endstamp = (string)($entry["end"]["date"]);
                    
    $startstamp strtotime($startstamp) + date("Z"$startstamp);
                    
    $endstamp strtotime($endstamp) + date("Z"$endstamp);

                    
    $color '';
                    if (((string)(
    $entry["colorId"]))!='')
                        
    $color=$colors[(string)($entry["colorId"])]["background"];

                    
    $this->data[] = array('pos' => $i++,
                        
    'start' => date('y-m-d'$startstamp).' '.gmdate('H:i:s'$startstamp),
                        
    'end' => date('y-m-d'$endstamp).' '.gmdate('H:i:s'$endstamp),
                        
    'title' => (string)($entry["summary"]),
                        
    'content' => (string)($entry["description"]),
                        
    'where' => (string)($entry["location"]),
                        
    'color' => $color,
                        
    'link' => (string)($entry["htmlLink"])
                    );
                }

            }
            else
                
    $this->error('Calendar: Google''Calendar read request failed!');
        }
    }


    // -----------------------------------------------------------------------------
    // call the service
    // ----------------------------------------------------------------------------

    $service = new calendar_google(array_merge($_GET$_POST));
    echo 
    $service->json();

    ?>

    Einen Kommentar schreiben:


  • moeoszilago
    antwortet
    Tag zusammen,

    hab den Thread gespannt verfolgt und googleV3.php soweit zum Laufen bekommen das ich beim manuellen aufrufen dort nun meine Kalendereinträge in einem schönen JSON sehe. Soweit prima umgesetzt, danke dafür :-)

    Leider schaffen es die Werte nicht in die Visu, Code hier:
    Code:
    {% import "calendar.html" as calendar %}
    {{ calendar.list('calendarlist1', 'Calendar', 3) }}
    Im Debug Log seh ich leider keinerlei Meldungen dazu.
    Jemand eine Idee?

    GEFIXT:
    War natürlich mein Fehler: Am Ende hatte ich vergessen den Webserver zu restarten nachdem ich php curl installiert hab ...
    Läuft jetzt wunderbar, danke :-)
    Zuletzt geändert von moeoszilago; 06.04.2015, 08:43.

    Einen Kommentar schreiben:


  • ide71
    antwortet
    Hallo,

    ist bei mir genauso.
    Was ich schon geprüft habe:

    Zeitzone in meinem Google Kalender ist (GMT +01:00) Berlin.

    etc/smarthome.conf: tz = 'Europe/Berlin'

    Rechts oben unter dem Smartvisu-Logo wird die richtige Zeit angezeigt.

    Auf dem Raspi:
    admin@smarthome:/usr/smarthome$ date
    Tue Mar 31 11:43:49 CEST 2015


    Gruß
    Markus

    Einen Kommentar schreiben:


  • Brick
    antwortet
    Hi Leute,

    hab jetzt seit der Sommerzeit alle meine Termine von 23.oo Uhr bis 23.00 Uhr drin..
    bei Google sind sie aber noch von 0-0 Uhr eingetragen.. Verändern und neu Abspeichern
    hat nicht geholfen..

    ist sicher nur ne Kleinigekeit.. habt ihr einen Tipp ?


    Gruß Martin

    Einen Kommentar schreiben:


  • schloessl
    antwortet
    Halo Carsten,
    danke für Deine Antwort!

    Auf die Schnelle getestet:
    php -q google_2.php
    {
    "error" : "invalid_grant"
    "error_description" : "Code was already redeemed."

    Wer zum Teufel ist "grant".
    Ich werde später noch einmal ab Schritt 1 beginnen.

    Sorry, die 2. Fehlerzeile hab ich übersehen. Damit klärt sich der Grant!

    Viele Grüße und ein schönes Wochennende!
    Wolfgang
    Zuletzt geändert von schloessl; 28.03.2015, 12:30. Grund: 2.Zeile übersehen

    Einen Kommentar schreiben:


  • CarGo
    antwortet
    Hallo Wolfgang,
    gib doch mal am Ende von google_2.php (ggf. das andere echo auskommentieren) das Ergebnis des curl-aufrufs aus mit

    Code:
    echo $result;
    Falls da ne Fehlermeldung kommt, einfach nochmal mit Schritt 1 starten...

    auch sieht die client-id irgendwie eigenartig aus, da sollte kein Zeilenumbruch im String sein (kann aber auch durch die Anzeige hier im Forum kommen...)

    Viele Grüße - Carsten

    Einen Kommentar schreiben:


  • schloessl
    antwortet
    Hallo,
    ich hänge mit dem wohl bekanntem Problem.
    Bitte schaut einmal, evtl. habe ich Felder falsch verstanden oder falsch eingetragen!

    Einige Daten habe ich per xxx verändert, aber Ihr solltet die Zuordnung schon erkennen.

    Danke für jegliche Hilfe!

    Wolfgang


    Projekt-ID: strong-market-XXX12
    Projektnummer: 360XXXX75035
    Projektname: API-Smarthome

    https://accounts.google.com/o/oauth2/auth?
    response_type=code
    client_id= 360XXXX75035-i64io3lunikg6m2bsgp275a1jo5epe0i.apps.googleuserco ntent.com
    client_schlüssel: rwnCCbdx0M-FRMXXXX-CROdn
    redirect_uri= urn:ietf:wgauth:2.0ob

    API-Schlüssel= AIzaSyAjnyjNxgAXXXXXXXWpF9aS73wpMxVvdTE Wozu brauche ich den API-Schlüssel?





    scope=https%3A%XXXXXwww.google.com%2Fcalendar%2Ffe eds%2F Der Name Scope taucht nie mehr auf, brauchen wir den?


    Code aus Google_1.php
    letzter Versuch:
    4/kuzJMKeC_ZZflGowXXXXXXzbj3b0XJ2lYDJ_N9MQg2fQ.orXD6 LbmwY0bYFZr95uygvWLT2q3mAI

    code aus google_2.php

    PHP-Code:
    <?php
    $url 
    'https://accounts.google.com/o/oauth2/token';
    $post_data = array(
                        
    'code'          =>   '4/kuzJMKeC_ZZflGowXXXXXzbj3b0XJ2lYDJ_N9MQg2fQ.orXD6LbmwY0bYFZr95uygvWLT2q3mAI',    // insert the code here that was shown after calling the URL from google_1.php
                        
    'client_id'     =>   '360XXXXX75035-i64io3lunikg6m2bsgp275a1jo5epe0i.apps.googleusercontent.com',    // insert your client ID here
                        
    'client_secret' =>   'rwnCCbdx0M-FRMXXXX-CROdn',    // insert your client secret here
                        
    'redirect_uri'  =>   'urn:ietf:wg:oauth:2.0:oob',    //insert your redirect URI here (first line only)
                        
    'grant_type'    =>   'authorization_code'
                        
    );
    $ch curl_init();

    curl_setopt($chCURLOPT_URL$url);
    curl_setopt($chCURLOPT_POST1);
    curl_setopt($chCURLOPT_POSTFIELDS$post_data);
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);

    $result curl_exec($ch);
    $token json_decode($result);

    echo 
    $token->refresh_token "\n";
    ?>

    Das ist die Fehlermeldung! Line 20 ist die echo -Zeile
    php -q google_2.php
    PHP Notice: Undefined property: stdClass::$refresh_token in /var/www/smartVISU/lib/calendar/service/google_2.php on line 20

    Alle apt-get laut vorherigen Anweisungen ausgeführt !.
    Zuletzt geändert von schloessl; 27.03.2015, 16:43.

    Einen Kommentar schreiben:


  • yachti
    antwortet
    Funktioniert bei mir unter Debian auch einwandfrei.

    Hatte auch kurz das Problem mit der google_2.php Zeile 20
    Lag bei mir daran das ich bei Variablen für die redirect_url ein Leerzeichen vor dem Hochkomma hatte.

    Gruß

    Michael

    Einen Kommentar schreiben:


  • DiePolle
    antwortet
    Zitat von klotzek Beitrag anzeigen
    Hallo,

    ich hatte ähnliche Probleme.
    Ich bin einfach noch einmal jeden einzelnen Schritt durchgegangen.
    google_1.php
    google_2.php
    auch googleV3.php habe ich offline mit php -q googleV3.php aufgerufen. im Fehlerfall war die Rückmeldung die gleiche wie bei Dir. Als es dann ging, gings auch nach Kopieren in die Visu.
    Bei mir war übrigens der AuthCode auf einmal ein anderer als beim ersten Test im Januar!!!

    Beste Grüße,
    Jürgen
    Hab alles nochmal durchgespielt, leider hat sich an der Fehlermeldung nichts geändert.

    Einen Kommentar schreiben:


  • klotzek
    antwortet
    Geht wieder

    Zitat von DiePolle Beitrag anzeigen
    So, mein voriges Problem hab ich lösen können.

    Leider wird mir jetzt der Kalender in der Smartvisu nicht angezeigt .
    Habe googlev3 in der Config ausgewählt und gespeichert.


    Wenn ich googlev3.php manuell ausführe kommt folgendes:

    Code:
    admin@smarthome:/var/www/smartvisu/lib/calendar/service$ php -q googleV3.php
    [{"title":"Calendar: Google","text":"Calendar read request failed!"}]
    Als calendar_id hab ich meine gmail Adresse eingetragen.
    Hallo,

    ich hatte ähnliche Probleme.
    Ich bin einfach noch einmal jeden einzelnen Schritt durchgegangen.
    google_1.php
    google_2.php
    auch googleV3.php habe ich offline mit php -q googleV3.php aufgerufen. im Fehlerfall war die Rückmeldung die gleiche wie bei Dir. Als es dann ging, gings auch nach Kopieren in die Visu.
    Bei mir war übrigens der AuthCode auf einmal ein anderer als beim ersten Test im Januar!!!

    Beste Grüße,
    Jürgen

    Einen Kommentar schreiben:

Lädt...
X