Scripte für den Google Kalender API V3

if (strpos($termin, "Juerg" )=== false)
    {
	 echo "Jürg nicht gefunden";
	} 
   else
    {
	 echo "Jürg gefunden";
	};

/* oder einfacher */

if(strpos($event_display, "Juerg")>33)  // 33 ist die Startpos ab der gesucht werden soll
    {echo "Jürg geklappt";}

Vielen Dank. Funktioniert perfekt.

die Ausgabe meiner Variable enthält zB. „Tel. Herr Muster“ oder „Fernwartung Herr Muster“.

nun möchte ich dies filtern mit

if (strpos($ziel, "Fernwartung")=== true)
	{
		SetValue(28411 /*[Wecker\Variablen Wecker Jürg\Routentest]*/ , "keine Fahrzeit für diesen Termin");
		echo "Fernwartung";
		return;
	}

if (strpos($ziel, "Tel")===true)
   {
		SetValue(28411 /*[Wecker\Variablen Wecker Jürg\Routentest]*/ , "keine Fahrzeit für diesen Termin");
		echo "Tel";
		return;
	}

Jedoch schluckt es das nicht und bringt keine Ausgabe. Was mach ich da falsch?

Ich würde es wie folgt machen:

preg_match('|^(Fernwartung)|', $ziel, $matchFernwartung);
preg_match('|^(Tel)|', $ziel, $matchTel);

if (@array_key_exists("1", $matchFernwartung) === true)
    {
        SetValue(28411 /*[Wecker\Variablen Wecker Jürg\Routentest]*/ , "keine Fahrzeit für diesen Termin");
        echo "Fernwartung";
        return;
    }
elseif (@array_key_exists("1", $matchTel) === true)
   {
        SetValue(28411 /*[Wecker\Variablen Wecker Jürg\Routentest]*/ , "keine Fahrzeit für diesen Termin");
        echo "Tel";
        return;
    }  

Bzgl. „strpos“ … du müsstest auf === 0 prüfen (weil das „Tel“ steht ja an Position 0). Oder auf !== false.
PHP: strpos - Manual
>> strpos liefert ja die Position eines Zeichen/String in einem String und nicht true/false, ob es vorkommt…

EDIT: Im preg_match das „^“ steht für „Anfang vom String“ … je nachdem wie dein String aussieht kannst du das weglassen oder den RegEx anpassen…

Grüße,
Chris

Danke vielmals. Nun läuft das Ding wieder wie geschmiert :slight_smile:

Mahlzeit,

gerad das Thema hier entdeckt und gleichmal versucht zu installieren, klappt leider nur nicht :frowning:

Hardware: RPI3 mit Scratch
Symcon 4.4

Bei google alles eingetragen wie in Post #1

bekomme folgende fehlermeldung:


Fatal error:  Class 'Google_Service_Calendar' not found in /var/lib/symcon/scripts/51934.ips.php on line 64

jemand ne idee?

Hallo Ademadria,

schau nochmal die Punkte im ersten Post genau durch.
Ich glaube 6 , 7 und 13 könnten für dein Problem verantwortlich sein.

Ich habe seinerzeit auch einige Schwierigkeiten gehabt, bin die Punkte immer wieder durch und hab es schließlich hinbekommen. DIe Masken ändern sich leider im Laufe der Zeit etwas.

Probier mal …

Viel Erfolg.
Gruß
lueralba

Mahlzeit,

so jetzt komm ich endlich dazu weiter zumachen :smiley:

Also… ich hab jetzt mir aus dem Post #176 die php Datein geladen.
Aus dem Post #178 das Skript, in eine Skriptdatei (in Symcon) eingefügt.


$Client_ID            =  "blabla.apps.googleusercontent.com"; 
$EMail                   =  "blupblup@developer.gserviceaccount.com"; 
$key_file_location   =  IPS_GetKernelDir()."scripts/certificates/Kalender-af58d75d650b.p12"; 
$Calender_ID            = 'derknaller@googlemail.com';

Finde ich in dem Google-konto so nicht (abgesehen von email adresse und der *.p12 datei).

Unter Client_ID habe ich die „Schlüssel-ID“ eingetragen, die besteht bei mir nur aus Buchstaben und Nummern.
bei EMail habe ich die „Dienstkonto-ID“ eingetragen die sieht bei mir wie folgt aus:

denis-863@symcon-kalender-denis.iam.gserviceaccount.com

Wenn ich das skript dann ausführe bekomme ich folgende Meldung:

 
Fatal error:  Uncaught exception 'Google_Service_Exception' with message 'Error calling GET https://www.googleapis.com/calendar/v3/calendars/denis.wies%40gmail.com/events?singleEvents=true&timeMin=2018-02-12T00%3A00%3A00%2B01%3A00&orderBy=startTime&maxResults=3: (404) Not Found' in /var/lib/symcon/scripts/google-api-php-client/src/Google/Http/REST.php:110
Stack trace:
#0 /var/lib/symcon/scripts/google-api-php-client/src/Google/Http/REST.php(62): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request), Object(Google_Client))
#1 [internal function]: Google_Http_REST::doExecute(Object(Google_Client), Object(Google_Http_Request))
#2 /var/lib/symcon/scripts/google-api-php-client/src/Google/Task/Runner.php(174): call_user_func_array(Array, Array)
#3 /var/lib/symcon/scripts/google-api-php-client/src/Google/Http/REST.php(46): Google_Task_Runner->run()
#4 /var/lib/symcon/scripts/google-api-php-client/src/Google/Client.php(593): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request))
#5 /var/lib/symcon in /var/lib/symcon/scripts/google-api-php-client/src/Google/Http/REST.php on line 110

Hi,

deine Daten können glaube ich nicht stimmen.

Hast Du ein entsprechendes Projekt bei Google angelegt usw.?

Wenn ja, dann ruf „https://console.developers.google.com“ auf …

  • wähle oben Dein Projekt aus, wenn nicht schon automatisch passiert
  • wähle dannach rechts „Zugangsdaten“ auf und schon siehst Du deine „Client_ID“

noch besser …

  • klicke dann ganz rechts „Dienstkonten verwalten“ und du siehst …

Dienstkonten-ID == $EMail
Schlüssel-ID == $Client_ID

Rufe dann „https://calendar.google.com“ auf und wähle oben rechts das Einstellungsrad auf.

Wähle links im Menü Deinen Kalender aus und scroll nach unten bis Du die Kalender-ID (eMail) findest.

Habe das jetzt mal auf die schnelle nachgeklickt, hoffe es hilft Dir!

Ciao Pitti

Hallo Pitti,

ich danke dir für deine beschreibung, demnach hatte ich als Email was falsches eingetragen.

Gerade aus Probiert, und mich an deine Anleitung gehalten, diese Daten alle so eingetragen,

Fehler meldung bleibt allerdings bestehen,

Fatal error:  Uncaught exception 'Google_Service_Exception' with message 'Error calling GET https://www.googleapis.com/calendar/v3/calendars/igon51um2ji9fap1k1odogkdd8%40group.calendar.google.com/events?singleEvents=true&timeMin=2018-02-24T00%3A00%3A00%2B01%3A00&orderBy=startTime&maxResults=3: (404) Not Found' in /var/lib/symcon/scripts/google-api-php-client/src/Google/Http/REST.php:110
Stack trace:
#0 /var/lib/symcon/scripts/google-api-php-client/src/Google/Http/REST.php(62): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request), Object(Google_Client))
#1 [internal function]: Google_Http_REST::doExecute(Object(Google_Client), Object(Google_Http_Request))
#2 /var/lib/symcon/scripts/google-api-php-client/src/Google/Task/Runner.php(174): call_user_func_array(Array, Array)
#3 /var/lib/symcon/scripts/google-api-php-client/src/Google/Http/REST.php(46): Google_Task_Runner->run()
#4 /var/lib/symcon/scripts/google-api-php-client/src/Google/Client.php(593): Google_Http_REST::execute(Object(Google_Client), Object(Google_H in /var/lib/symcon/scripts/google-api-php-client/src/Google/Http/REST.php on line 110

Ich bekomme folgendes wenn ich die URL im Braowser eingebe :frowning:


{
  "error": {
    "errors": Array[1][
      {
        "domain": "usageLimits",
        "reason": "dailyLimitExceededUnreg",
        "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
        "extendedHelp": "https://code.google.com/apis/console"
      }
    ],
    "code": 403,
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
  }
}

@Ademadria,

schau mal hier.
Da wurde genau deine Fehlermeldung behandelt…

https://www.symcon.de/forum/threads/26249-Scripte-f%C3%BCr-den-Google-Kalender-API-V3?p=242772#post242772

Schönes Wochenende
lueralba

So gerade nochmal die einstelluingen kontrolliert.

vorallem auf dem Bezug email… es funktioniert bei mir nur, wenn ich die Einstellungen für den Kalender auf öffentlich stelle

Dann kann ich Auslesen und mir werden die Termine auch angezeigt.

Moin zusammen,

ich hab mir das Ganze auch mal eingerichtet und es funktioniert soweit erst mal gut!

Ich habe aber festgestellt, dass bei mehrtägigen Einträgen nur der Starttermin als ganztägiger Eintrag ausgegeben wird. Es wird aber kein Endedatum erzeugt. Das ist insofern unschön weil ich das Ganze eigentlich für meine Rollladensteuerung nutzen möchte.

Idee war es einmal um 00:00 Uhr das Skript zu starten und zu schauen, ob der aktuelle Tag ein Urlaubstag ist. Dann soll ein Flag gesetzt werden das ich dann in der Beschattungssteuerung verwenden kann. Dazu reicht es aber nicht, nur den Starttag zu kennen.

Hat jemand eine Idee?

Edit:

Ich hab die Lösung selbst gefunden:
Ich suche einfach nach dem nächsten Event ab dem aktuellen Tag.
Wenn das Event Datum <= dem aktuellen Tag ist, dann ist der Tag in dem ein- oder mehrtägigen Termin drin.
Alle Termine die später anfangen müssen nicht berücksichtigt werden.
Alle Termine die früher beendet sind werden nicht mehr gelistet.
Eigentlich ganz einfach.

Hallo,
Möchte gerne diese Skripte ausprobieren und habe es jetzt nach mehrmaligen Versuchen und lesen des Threads das Ganze hinbekommen, da vorne im ersten Post die Screenshots nicht mehr zutreffen.

Habe mir einfach mal das Skript „HTML Jahreskalender mit Keywords“ raus gepickt und bekomme eine Fehlermeldung im Skript, das sich der Ordner der autoload Datei geändert hat. Ist das so richtig das ich den Ordner im Skript ändern muss zu „google-api-php-client/src/Google/autoload.php“ ?

Edit: hat sich erledigt…

Ein Modul des ganzen wäre echt nicht schlecht :smiley:

Hallo,
die unten besagte Fehlermeldung wurde hier zwar schon mal behandelt, was ich aber nicht verstehe, das ich diese Meldung nur bei 2 oder 3 Skripte diese Fehlermeldung bekomme. Habe jetzt alle Skripte des Threads angelegt um die Unterschiede im Webfront zu sehen.

Fatal error:  Uncaught Google_Service_Exception: Error calling GET https://www.googleapis.com/calendar/v3/calendars/mail2%40googlemail.com/events?singleEvents=true&timeMin=2018-10-01T13%3A46%3A51%2B02%3A00&timeMax=2019-01-09T13%3A46%3A51%2B01%3A00: (404) Not Found in C:\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php:110
Stack trace:
#0 C:\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php(62): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request), Object(Google_Client))
#1 C:\IP-Symcon\scripts\google-api-php-client\src\Google\Task\Runner.php(174): Google_Http_REST::doExecute(Object(Google_Client), Object(Google_Http_Request))
#2 C:\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php(46): Google_Task_Runner->run()
#3 C:\IP-Symcon\scripts\google-api-php-client\src\Google\Client.php(593): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request))
#4 C:\IP-Symcon\scripts\google-api-php-client\src\Google\Service\Resource.php(240): Google_Client->execute( in C:\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php on line 110
Abort Processing during Fatal-Error: Uncaught Google_Service_Exception: Error calling GET https://www.googleapis.com/calendar/v3/calendars/mail2%40googlemail.com/events?singleEvents=true&timeMin=2018-10-01T13%3A46%3A51%2B02%3A00&timeMax=2019-01-09T13%3A46%3A51%2B01%3A00: (404) Not Found in C:\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php:110
Stack trace:
#0 C:\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php(62): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request), Object(Google_Client))
#1 C:\IP-Symcon\scripts\google-api-php-client\src\Google\Task\Runner.php(174): Google_Http_REST::doExecute(Object(Google_Client), Object(Google_Http_Request))
#2 C:\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php(46): Google_Task_Runner->run()
#3 C:\IP-Symcon\scripts\google-api-php-client\src\Google\Client.php(593): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request))
#4 C:\IP-Symcon\scripts\google-api-php-client\src\Google\Service\Resource.php(240): Google_Client->execute(
   Error in Script C:\IP-Symcon\scripts\google-api-php-client\src\Google\Http\REST.php on Line 110

Hallo Forum, gibt es die möglichkeit nur zukünftige Termine anzeigen zu lassen.
(Google Kalenderscript).
Also wenn ich meinen Kalender um 16 Uhr abfrage, das ich dann die Termine von morgen und keine mehr von heute angezeigt bekomme.
Habe Tagelang nach einer Lösung gesucht, komme aber nicht weiter.

Gruß Werner

… ohne den gesamte Code zu berücksichtigen, man könnte das so abfragen:

<?
$zeitpunkt = 16; /* Uhrzeit/Schwelle */
$unixtime = strtotime('today midnight')+($zeitpunkt * 3600); /* Uhrzeit/Schwelle als unixtime */
if(time() < $unixtime) 
    {echo "alle Kalendereinträge von heute ausgeben
";}
  else 
    {echo "nur Kalendereinträge die größer sind als heute ".$zeitpunkt." Uhr = Unixtime: ". $unixtime." = ".date('d.m. H:i',$unixtime)." ausgeben 
";}
?>

@N22
Danke Dir, habs irgendwie hunbekommen. :smiley:

Hallo,

mit dem Angaben/Dateien aus #176 ff. und der Schlüssel-ID als Client-ID funktionert es…

Vielen Dank für die Skripte und die (Ausgangs-)Beschreibung…

Götz