Ankündigung

Einklappen
Keine Ankündigung bisher.

Verkehrsdaten / Stauprognose per TTS möglich?

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

  • #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?

    Kommentar


    • #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


      • #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($jdatatrue);
        $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 == && $minutes == 1) {
                
        $duration "eine Minute";
            } else if (
        $hours == && $minutes 1) {
                
        $duration $minutes " Minuten";
            } else if (
        $hours == && $minutes == 1) {
                
        $duration "eine Stunde und eine Minute";
            } else if (
        $hours == && $minutes >= 1) {
                
        $duration "eine Stunde und " $minutes " Minuten";
            } else if (
        $hours && $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);
        ?>

        Kommentar


        • wavemaster01
          wavemaster01 kommentierte
          Kommentar bearbeiten
          DANKE!!! Funktioniert 1A

        • hismastersvoice
          hismastersvoice kommentierte
          Kommentar bearbeiten
          Immer gerne...

      • #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


        • #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.

          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...

        • #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

          Kommentar


          • #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.

          • #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

          • #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


          • #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


            • nelse
              nelse 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...
          X