Fahrzeit per google API

Hallo zusammen,
ich komme von FHEM und dort haben viele die Fahrzeit per google API ausrechnen lassen und auf der Startseite angezeigt.
Mich eingeschlossen;)
Smarthome mit FHEM: Fahrzeiten mit Verkehr mittels Google Maps API anzeigen - Jürgen’s Technik-Welt
FHEM: Fahrzeiten mit Verkehr mittels Google Maps API anzeigen – wolf-u.li

Hat sowas schon mal jemand in Symcon gebastelt?
mir fehlt es da hauptsächlich beim Auswerten der Rückgabe der HTTP Seite.

Gruß

Suner

Die Ausgabe sieht übrigens so aus:


{
   "destination_addresses" : [ "Bonn, Deutschland" ],
   "origin_addresses" : [ "30938 Burgwedel, Deutschland" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "341 km",
                  "value" : 340584
               },
               "duration" : {
                  "text" : "3 Stunden, 25 Minuten",
                  "value" : 12325
               },
               "duration_in_traffic" : {
                  "text" : "3 Stunden, 13 Minuten",
                  "value" : 11593
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"
}

ok… habs selber gefunden…

WWWreader, Text Parser und ein wenig mit den regex rumtesten

Ich wusste gar nicht das es so eine API gibt, danke für die Info. Das hört sich ja interessant an sollte kein großes Ding sein das in IP-Symcon darzustellen. Ich hätte bis jetzt nichts gelesen das es dazu schon ein Skript für IP-Symcon gibt. Was nicht ist kann ja noch kommen. Ich schaue mir die API zumindest mal näher an kann das selber gut gebrauchen.

Ich dokumentier mal kurz :wink:

API unter: Google Maps Distance Matrix API Â |Â Google Developers

Aufruf: https://maps.googleapis.com/maps/api/distancematrix/json?origins=START&destinations=ZIEL&mode=driving&language=de-DE&departure_time=now&key=[dein-API-KEY]

Dann in WWWReader:

Dann im Anschluss TextParser:

Da brauchst du keinen Reader oder Parser. Dazu ist ja die Api da

Gesendet von meinem SM-G935F mit Tapatalk

hier hast du alles was du brauchst

https://www.symcon.de/forum/threads/17401-Wecker-nach-Routenplaner-mit-Exchange-Kalender?highlight=wecker

Moin in die Runde,

wenn mir nun noch einer sagen kann: "Wie bekomme ich in meinem Exchange Termin Kalender unter Ort den / die Adresse eines Kontaktes (nach Möglichkeit automatisch) eingetragen … :slight_smile: ???

Grüße
Thomas

Hier findest Du den Rest.

https://www.symcon.de/forum/threads/8121-Gel%C3%B6st-Exchange-EWS-und-PHP-SOAP?highlight=kalender

Hallo SmartHomeSchweiz,

danke EWS läuft ja hier bei mir schon :slight_smile:
Nein die Frage war schon wörtlich gemeint und ich habe auch schon extern gesucht …

Eventuell ist es falsch rübergekommen.
Wenn ich ein neuen Termin anlege kommt oben der Betreff rein und darunter der Ort. Da kann man natürlich von „Meatingraum“ bis Büro XYZ alles einfragen. Ich hätte da gerne die Adresse des Kunden drinne zu den ich Fahre ohne Sie händisch aus deinem Kontakt rauszusuchen und einzutragen.

Eventuell gibt es da noch ein Trick oder Plugin. Wenn der Betref z.b. Dr. XYZ beginnt das dann als Ort automatisch aus dem glecihnamigen Kontakt die Firmenadresse eingetragen wird. Das wäre sehr praktisch :slight_smile:

Danke,

Grüße
Thomas

Hab irgendwie Probleme den Code formatiert einzufügen.
nach einem Klick auf Vorschau ist die Formatierung immer weg.
Deshalb als Anhang.


<?
include("Funktionen.ips.php");

//Ermittlung der Verkehrslage und evtl. Staus 
//URL für direction$json_url = https://maps.googleapis.com/maps/api/directions/json?";

$json_string="origin=Germany,Strasse,Ort&destination=Germany,Strasse,Ort&mode=driving&language=de-DE&sensor=false&region=de&departure_time=now&traffic_model=best_guess&key=<KEY>";

    $ch = curl_init();
    $options = array(        
		CURLOPT_RETURNTRANSFER => true,        
		CURLOPT_ENCODING, 'UTF-8',        
		CURLOPT_URL =>     
		$json_url.$json_string        );

	curl_setopt_array( $ch, $options );

  $result =  curl_exec($ch);

// Getting jSON result string   
$result = json_decode($result, true);

//Werte für Direction    
	setvalue(42734 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\Status]*/, $result['status']);
	setvalue(47100 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\Entfernung]*/, ceil($result['routes'][0]['legs'][0]['distance']['value']/1000) ." km
");
	setvalue(11334 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\Zeit]*/, ceil($result['routes'][0]['legs'][0]['duration']['value']/60) ." Minuten
");
    setvalue(43129 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\Ziel]*/, $result['routes'][0]['legs'][0]['end_address']);
    setvalue(24687 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\Start]*/, $result['routes'][0]['legs'][0]['start_address']);
    $stau = $result['routes'][0]['legs'][0]['duration_in_traffic']['value'] -        $result['routes'][0]['legs'][0]['duration']['value'];
    setvalue(43570 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\Verzögerung]*/, ceil($stau/60) ." Minuten");


if (ceil($stau/60) > 0 ){  //Stau angesagt         WFC_SwitchPage(57255 /*[IPSLibrary]*/,"item9951");
    //Sprachausgabe        
	tts_play(1,"Achtung, es ist mit Stau auf dem Weg zur Arbeit zu rechnen. Bitte fahr ".ceil($stau/60) ." Minuten eher los","",2,0);
}
//    print_R($result);

//Weg zur Arbeit//https://developers.google.com/maps/documentation/embed/start?hl=de
SetValueString(31553 /*[Scripte\Google Maps\Karte\B2 Map]*/,'<iframe width="800" height="600" frameborder="0" style="border:0" src="https://www.google.com/maps/embed/v1/directions?origin=Ort%2C%20Strasse%2029&destination=Ort%2C%20Tiefgarage%20Strasse&key=<KEY>" allowfullscreen></iframe>');

?>

Google Stau.txt (2.29 KB)

Google Stau.txt (2.25 KB)

Hallo,

ich versuche mich auch gerade Google Maps einzubinden.

Frage an Thomas (normi):

Was steht bei Dir in „Funktionen.ips.php“?
Kannst Du da mal etwas genauer drauf eingehen?

Vielen Dank schon mal.
Euch allen…

Gruß

Das Script Funktionen.ips.php enthält meine gesammelten Prozeduren für alles mögliche. Im Fall der google API nutze ich aber nur die Sprachausgabe tts_play.
Für die reine Wegberechnung braucht Du die Funktionen nicht.

Vielen Dank…

:stuck_out_tongue:

Hi,

jetzt muss ich doch noch einmal nachhaken (oder nerven). :wink:

Wenn ich das richtig sehe hat sich die Adresse zu Maps geändert.
Ist das richtig?

Und von welchem Typ sind die Variablen?

Wäre Nett wenn Ihr mir hier noch mal helfen könntet.
Vielen Dank schonmal.

Gruß

Darklord

Die Adresse hat sich nicht geändert. Bei mir funktioniert die Abfrage nach wie vor. :smiley:
Hast Du denn einen API-Key von google? Den brauchst Du und mußt diesen in das Script am Ende der URL bei <KEY> einsetzten.

Die Variablen sind alle Strings.

Hi,

ich habe mir das gestern auch mal angeschaut und wenn man die API nicht extensiv nutzt braucht man kein APP-KEY, jedenfalls bekomme ich ein Ergebnis ohne Key!

Danke & CIao
Heiko

Und von welchem Typ sind die Variablen?

Das sind Strings.

Moin,

ich schon wieder. :frowning:

Kann es sein das dieses Script mit 3.4 nicht läuft?

Ich bekomme immer Fehlermeldungen in Zeile 27,30 und31.
Meldung:

Warning: Cannot auto-convert to String from Variant. Error: Could not convert variant of type (Null) into type (String) in C:\IP-Symcon\scripts\16058.ips.php on line 31

Hier das Script:

<?

//Ermittlung der Verkehrslage und evtl. Staus
//URL für direction$json_url = https://maps.googleapis.com/maps/api/directions/json?";

//***************************************************************************************

$json_url = "https:maps.googleapis.com/maps/api/directions/json?";
$json_string="origin=Germany,Blablastraße1,Ulm&destination=Germany,Sabbelstr1,Ulm&mode=driving&language=de-DE&sensor=false&region=de&departure_time=now&traffic_model=best_guess&key=blablablablablablablablablablablabla";


    $ch = curl_init();
    $options = array(
		CURLOPT_RETURNTRANSFER => true,
		CURLOPT_ENCODING, 'UTF-8',
		CURLOPT_URL =>
		$json_url.$json_string        );

	curl_setopt_array( $ch, $options );

  $result =  curl_exec($ch);

// Getting jSON result string
$result = json_decode($result, true);

//Werte für Direction
	setvalue(25825 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\Status]*/        , $result['status']);
	setvalue(11549 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\Entfernung]*/ , ceil($result['routes'][0]['legs'][0]['distance']['value']/1000) ." km
");
	setvalue(58573 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\Zeit]*/ , ceil($result['routes'][0]['legs'][0]['duration']['value']/60) ." Minuten
");
    setvalue(45955 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\Ziel]*/ , $result['routes'][0]['legs'][0]['end_address']);
    setvalue(59850 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\Start]*/ , $result['routes'][0]['legs'][0]['start_address']);
    $stau = $result['routes'][0]['legs'][0]['duration_in_traffic']['value'] -        $result['routes'][0]['legs'][0]['duration']['value'];
    setvalue(50202 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\Verzögerung]*/ , ceil($stau/60) ." Minuten");


//if (ceil($stau/60) > 0 ){  //Stau angesagt         WFC_SwitchPage(57255 /*[Objekt #57255 existiert nicht]*/,"item9951");
    //Sprachausgabe
//	tts_play(1,"Achtung, es ist mit Stau auf dem Weg zur Arbeit zu rechnen. Bitte fahr ".ceil($stau/60) ." Minuten eher los","",2,0);
//}
//    print_R($result);

//Weg zur Arbeit//https://developers.google.com/maps/documentation/embed/start?hl=de
//SetValueString(51784 /*[Scripte\Google Maps\Streckendaten\Verkehrsinfo\B2 Map]*/ ,'<iframe width="800" height="600" frameborder="0" style="border:0" src="https://www.google.com/maps/embed/v1/directions?origin=Ort%2C%20Strasse%2029&destination=Ort%2C%20Tiefgarage%20Strasse&key=<KEY>" allowfullscreen></iframe>');

?>

Nur als kleiner Tip - es macht Sinn Deine Adresse und Deinen Key aus solchen Skript-Postings zu entfernen.

Was für einen Variablentyp hast Du verwendet bei den Variablen die Du in den fraglichen Zeilen mit SetValue setzen willst?
Und hast Du mal überprüft ob in $result was venünftiges drin steht?