Hallo,
hab das ja auch schon eingespielt und kann bestätigen, dass das so funktioniert...
Gruß Martin
Ankündigung
Einklappen
Keine Ankündigung bisher.
Google Calendar - update für "neue" GoogleAPI
Einklappen
X
-
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
- Likes 1
Einen Kommentar schreiben:
-
Hat hier immer noch keiner eine Idee, woran das liegen könnt ?
Einen Kommentar schreiben:
-
hab ich oben schon geschrieben, das ich das auch hab.. hab auch schon einiges probiert... leider ohne
Erfolg..
Gruß Martin
Einen Kommentar schreiben:
-
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:
-
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($ch, CURLOPT_URL, $token_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$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($resturl, false, $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($resturl, false, $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:
-
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:
Im Debug Log seh ich leider keinerlei Meldungen dazu.Code:{% import "calendar.html" as calendar %} {{ calendar.list('calendarlist1', 'Calendar', 3) }}
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:
-
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:
-
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:
-
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
Einen Kommentar schreiben:
-
Hallo Wolfgang,
gib doch mal am Ende von google_2.php (ggf. das andere echo auskommentieren) das Ergebnis des curl-aufrufs aus mit
Falls da ne Fehlermeldung kommt, einfach nochmal mit Schritt 1 starten...Code:echo $result;
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:
-
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:wg
auth:2.0
ob
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($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$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:
-
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:
-
Hab alles nochmal durchgespielt, leider hat sich an der Fehlermeldung nichts geändert.Zitat von klotzek Beitrag anzeigenHallo,
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:
-
Geht wieder
Hallo,Zitat von DiePolle Beitrag anzeigenSo, 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:
Als calendar_id hab ich meine gmail Adresse eingetragen.Code:admin@smarthome:/var/www/smartvisu/lib/calendar/service$ php -q googleV3.php [{"title":"Calendar: Google","text":"Calendar read request failed!"}]
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:


Einen Kommentar schreiben: