Verkehrsdaten / Stauprognose per TTS möglich?

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • hismastersvoice
    Supermoderator
    • 25.08.2015
    • 7321

    #16
    Wie soll die Aussage dann aussehen?
    Um 8:30 wurde eine Fahrzeit zur Arbeit von einer Stunde 15 Minuten errechnet.
    Oder wie meinst du das?
    Kein Support per PN!

    Kommentar

    • wavemaster01
      Extension Master
      • 10.09.2015
      • 113

      #17
      ja genau - ich würde gerne die Fahrzeit ausgeben, was geht, und dazu das letzte Abrufdatum/Abrufuhrzeit (das entspricht quasi dem Startimpuls meines Weckers)
      ... somit merke ich wenn das Skript auf dem Server - aus irgendeinem Grund- nicht angelaufen ist und evtl. noch eine alte Fahrzeit im VTI angezeigt wird

      Kommentar

      • hismastersvoice
        Supermoderator
        • 25.08.2015
        • 7321

        #18
        PHP-Code:
        <?php
        //TravelTime to MiniServer
        //Settings
        $LoxIP          = "192.168.x.x"; //IP des MiniServer
        $LoxUser        = "xxxx"; //User des MiniServer
        $LoxPass        = "xxxx"; //PAsswort des MiniServer
        $LoxVTI_Text    = "999"; //VTI am MiniServer an der Text geht
        $key            = "xxxx"; //API-Key von Google
        $text           = "Um {request_time_h} Uhr {request_time_m} wurde unter Berücksichtigung des Verkehrs für die fahrt von {from} nach {to} mit {distance} Kilometer eine dauer von {duration} berechnet.";
        //URL Vars
        $from           = ($_GET["from"]);
        $to             = ($_GET["to"]);
        $departure_time = ($_GET["departure_time"]);
        $traffic        = ($_GET["traffic"]);
        $traffic_model  = ($_GET["traffic_model"]);
        $mode           = ($_GET["mode"]);
        //Timezone
        date_default_timezone_set("Europe/Berlin");
        //Programm
        //Set Vars
        if ($departure_time == "") {
            $departure_time = "now";
        }
        if ($traffic_model == "") {
            $traffic_model = "best_guess";
        }
        if ($traffic == "") {
            $traffic = "1";
        }
        if ($mode == "") {
            $mode = "driving";
        }
        //Check Vars
        if ($from == "") {
            echo "Error: No From-Address!!";
            exit();
        }
        if ($to == "") {
            echo "Error: No To-Address!!";
            exit();
        }
        if ($key == "") {
            echo "Error: No API-Key!!";
            exit();
        }
        $from       = urlencode($from);
        $to         = urlencode($to);
        
        $request_time_h = date("G");
        $request_time_m = ltrim(date('i'), 0);
        
        $request    = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" . $from . "&destinations=" . $to . "&departure_time=" . $departure_time . "&traffic_model=" . $traffic_model . "&mode=" . $mode . "&key=" . $key . "&language=" . $lang;
        $jdata      = file_get_contents($request);
        $data       = json_decode($jdata, true);
        $status     = $data["status"];
        $row_status = $data["rows"][0]["elements"][0]["status"];
        if ($status == "OK" && $row_status == "OK") {
            $distance     = $data["rows"][0]["elements"][0]["distance"]["value"];
            $distance     = round(($distance / 1000), 0);
            $duration_sec = $data["rows"][0]["elements"][0]["duration"]["value"];
            $dhours       = floor($duration_sec / 3600);
            $dminutes     = floor($duration_sec % 3600 / 60);
            $dseconds     = $duration_sec % 60;
            if ($dseconds >= 30) {
                $dminutes = $dminutes + 1;
            }
            $duration_in_traffic = $data["rows"][0]["elements"][0]["duration_in_traffic"]["value"];
            $dthours             = floor($duration_in_traffic / 3600);
            $dtminutes           = floor($duration_in_traffic % 3600 / 60);
            $dtseconds           = $duration_in_traffic % 60;
            if ($dtseconds >= 30) {
                $dtminutes = $dtminutes + 1;
            }
            if ($traffic == 0) {
                $hours   = $dhours;
                $minutes = $dminutes;
            } else {
                $hours   = $dthours;
                $minutes = $dtminutes;
            }
            $from = urldecode($from);
            $to   = urldecode($to);
            if ($hours == 0 && $minutes == 1) {
                $duration = "eine Minute";
            } else if ($hours == 0 && $minutes > 1) {
                $duration = $minutes . " Minuten";
            } else if ($hours == 1 && $minutes == 1) {
                $duration = "eine Stunde und eine Minute";
            } else if ($hours == 1 && $minutes >= 1) {
                $duration = "eine Stunde und " . $minutes . " Minuten";
            } else if ($hours > 1 && $minutes > 1) {
                $duration = $hours . " Stunden und " . $minutes . " Minuten";
            }
            $text = str_replace('{from}', $from, $text);
            $text = str_replace('{distance}', $distance, $text);
            $text = str_replace('{to}', $to, $text);
            $text = str_replace('{duration}', $duration, $text);
            $text = str_replace('{request_time_h}', $request_time_h, $text);
            $text = str_replace('{request_time_m}', $request_time_m, $text);
            $text_u = $text;
            $text = urlencode($text);
            $text = str_replace('+', "%20", $text);
        } else {
            $text = "Fehler, bitte URL prüfen.";
        }
        echo "-----------TravelTime-----------<br>";
        echo $request_time;
        echo "------------------------------------<br>";
        echo "From: " . $from . "<br>";
        echo "To: " . $to . "<br>";
        echo "------------------------------------<br>";
        echo "Abfahrtszeit: " . $departure_time . "<br>";
        echo "Traffic: " . $traffic . "<br>";
        echo "Traffic_Model: " . $traffic_model . "<br>";
        echo "------------------------------------<br>";
        echo "Entfernung: " . $distance . "Km <br>";
        echo "Dauer: " . $duration . "<br>";
        echo "------------------------------------<br>";
        echo "Text: " . $text_u . "<br>";
        echo "------------------------------------<br>";
        $send = fopen("http://" . $LoxUser . ":" . $LoxPass . "@" . $LoxIP . "/dev/sps/io/VTI" . $LoxVTI_Text . "/" . $text . "", "r");
        if ($send != "") {
            echo "Text an VTI " . $LoxVTI_Text . " gesendet.";
        } else {
            echo "!!!Text nicht gesendet!!!";
        }
        fclose($send);
        ?>
        Kein Support per PN!

        Kommentar

      • Stibe
        Extension Master
        • 01.07.2016
        • 118

        #19
        hismastersvoice Genau nach dieser Lösung habe ich gesucht...möchte auch in einem Statusbaustein (zurzeit noch ohne TTS) die Reisezeit in sBüro anzeigen.

        Nun komme ich aber irgendwie nicht weiter, resp. mir ist nicht ganz klar, wie oder wo ich die Fehler suchen/eingrenzen kann.
        Kann ich im Windows-Explorer "einfach" die PHP Seite wie folgt Aufrufen und sollte dann bereits den Text dargestellt bekommen?
        http:192.168.1.21/reisezeit_buero.php?from=Amselweg+17,+5102+Ruppers wil&to=Täfernstrasse+5,+5405+Baden

        Irgendwie will das bei mir nicht so...und für die Abfrage vom MS her wäre dann die Adresse: http:192.168.1.21/reisezeit_buero.php und der Befehl: ?from=Amselweg+17,+5102+Rupperswil&to=Täfernstrass e+5,+5405+Baden ?
        Oder wie muss ich dies eingeben?

        Besten Dank für deine Hilfe oder ein Muster.

        Gruess Stibe

        Kommentar

        • hismastersvoice
          Supermoderator
          • 25.08.2015
          • 7321

          #20
          Ja du musst wenigstens diese Nachricht bekommen..


          echo "-----------TravelTime-----------<br>";
          echo $request_time;
          echo "------------------------------------<br>";
          echo "From: " . $from . "<br>";
          echo "To: " . $to . "<br>";
          echo "------------------------------------<br>";
          echo "Abfahrtszeit: " . $departure_time . "<br>";
          echo "Traffic: " . $traffic . "<br>";
          echo "Traffic_Model: " . $traffic_model . "<br>";
          echo "------------------------------------<br>";
          echo "Entfernung: " . $distance . "Km <br>";
          echo "Dauer: " . $duration . "<br>";
          echo "------------------------------------<br>";
          echo "Text: " . $text_u . "<br>";
          echo "------------------------------------<br>";

          Wenn gar nichts kommt ist entweder ein Fehler im Skript oder PHP läuft nicht sauber.
          Kein Support per PN!

          Kommentar


          • Stibe
            Stibe kommentierte
            Kommentar bearbeiten
            @hismastersvoice
            Vielen dank für deine Antwort, habe es eben geschafft, zumindest per Web die Abfrage ausführen zu lassen und erhalte auch die gewüschte Antwort.

            Leider tut sich in Loxone noch nichts, weder mit der Abfrage noch der Antwort...
        • hismastersvoice
          Supermoderator
          • 25.08.2015
          • 7321

          #21
          das müsste so aussehen...

          Adresse: http:192.168.1.21
          Befehl:/reisezeit_buero.php?from=Amselweg 17 5102 Rupperswil&to=Täfernstrasse 5 5405 Baden
          Kein Support per PN!

          Kommentar

          • Stibe
            Extension Master
            • 01.07.2016
            • 118

            #22
            Hier mal die Printscreens, hoffe du kannst mir damit weiterhelfen.
            Vielen Dank schonmal

            Kommentar


            • hismastersvoice
              hismastersvoice kommentierte
              Kommentar bearbeiten
              in Adresse nur die Adresse den Rest incl. Unterverzeichnis in EIN-Befehl lass die + weg, die braucht keiner.
          • Stibe
            Extension Master
            • 01.07.2016
            • 118

            #23
            Vielen Dank für deine Hilfe.
            Habe die virtuellen Ausgänge angepasst.

            Beim virtuellen Texteingang kommt aber noch nichts an. Im Script hast du schon die Bezeichnung des virtuellen Texteingangs gemeint, und nicht die VTI-Nr.?

            Kommentar


            • hismastersvoice
              hismastersvoice kommentierte
              Kommentar bearbeiten
              Wenn das als Beispiel "999" drin steht meine ich...???
              Sicher nicht die Bezeichnung sondern die Nummer
          • Stibe
            Extension Master
            • 01.07.2016
            • 118

            #24
            Genial, vielen Dank. Mit der VTI-Nr. hat es dann geklappt, wenn auch die virtuellen Ausgänge stimmen ;-)
            Coole sache....

            1000 Dank nochmals und einen schönen Abend wünsche ich dir noch

            Grüsse Stibe

            Kommentar

          • Gast

            #25
            Danke für das Script und für den Support, ich nutze den fsend Befehl aus dem Script, um eine vollständige Wettervorhersage von Wetter.de auszulesen. z.B. "Es ist sonnig, nur vorübergehend entstehen Quellwolken oder es ziehen lockere Wolkenfelder vorüber. Dabei bleibt es weitgehend trocken." Diese Meldung landet bei mir in dem String $str_vorher2 und der Code sieht dann so aus:

            $text = urlencode($str_vorher2);
            $text = str_replace('+', "%20", $text);
            $send = fopen("http://" . $LoxUser . ":" . $LoxPass . "@" . $LoxIP . "/dev/sps/io/VTI" . $LoxVTI_Text . "/" . $text . "", "r");
            if ($send != "") {
            echo "Text an VTI " . $LoxVTI_Text . " gesendet.";
            } else {
            echo "!!!Text nicht gesendet!!!";
            }
            fclose($send);


            Im Texteingang kommt die Meldung vollständig an - allerdings hat er VTI ein Problem mit den Umlauten. Siehe Screenshot. Hat jemand eine Idee, wie ich das handeln kann, damit Alexa mir das mit TTS vernünftig vorliest..ohne zu stottern? ;-)

            Kommentar


            • Gast
              Gast kommentierte
              Kommentar bearbeiten
              Update: Problem gelöst! Falls es jemandem hilft, die der Code für die Konvertierung der gängigsten dt. Sonderzeichen in der Textmeldung, die an den VTI gesendet wird. Falls jemandem eine elegantere Lösung einfällt, gern posten! :-)

              $text = urlencode($str_vorher2);
              $text = str_replace('+', "%20", $text);
              $text = str_replace('%E4', "ä", $text);
              $text = str_replace('%FC', "ü", $text);
              $text = str_replace('%F6', "ö", $text);
              $text = str_replace('%DF', "ß", $text);
              $text = utf8_encode($text);

              $send = fopen("http://" . $LoxUser . ":" . $LoxPass . "@" . $LoxIP . "/dev/sps/io/VTI" . $LoxVTI_Text . "/" . $text . "", "r");
              if ($send != "") {
              echo "Text an VTI " . $LoxVTI_Text . " gesendet!";
              } else {
              echo "!!!Text nicht gesendet!!!";
              }
              fclose($send);
          Lädt...