Ankündigung

Einklappen
Keine Ankündigung bisher.

Verkehrsdaten / Stauprognose per TTS möglich?

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

  • Verkehrsdaten / Stauprognose per TTS möglich?

    Edit: Sorry. falsches Forum. Gerne ins deutschspachige Pendant verschieben.

    Hi zusammen,

    ich lasse mir morgens im Bad bereits die Wettervorhersage per TTS vorlesen. Da ich im Kölner Raum arbeite, ist das Thema Verkehrsinfo für mich leider sehr relevant. Daher würde ich mir gerne morgens ein Bild verschaffen, ob es größere Staus auf meiner Strecke gibt. GGf. bleibe ich dann nämlich besser zu Hause im Homeoffice.

    Meine Frage: Kennt jemand einen Staumelder-Service, den man parametrisiert ansprechen und vor allem in der Loxone auswerten kann? z.B. "Gib mir mal für die Route x alle Meldungen" oder "Gib mir mal für die A3 zwischen X und Y alle Meldungen"..

    Für FHEM gibt es ein solches Modul. Aber eine Anbindung an die Loxone (ohne FHEM) scheint relativ aufwändig.
    Zuletzt geändert von MarcusS; 24.04.2017, 16:02.
    DoorPi DIY Türsprechstelle how to

  • #2
    Ich nutzte Google Distance Matrix
    Lass dir einfach der Daten per PHP am den MiniServer schicken. Du kannst auch Verkehrslage berücksichtigen. Funktioniert gut für mich.
    Kein Support per PN!

    Kommentar


    • #3
      Mit PHP hab ich es nicht so. Da müsste ich mich erst mit auseinandersetzen. Einfacher geht's aber vermutlich nicht, oder? Also wirklich nur nach einem Aufruf einen aussprechbaren Text zurückbekommen?
      DoorPi DIY Türsprechstelle how to

      Kommentar


      • #4
        Keine Ahnung, aber ich kennen keinen Dienst der einen fertigen Text liefert.

        Hast du einen Raspi oder ähnliches am laufen?
        Dann kann ich dir ein Skript bauen.
        Kein Support per PN!

        Kommentar


        • #5
          Wow, das wäre natürlich super nett von dir. Wenn es denn nicht zuviel Arbeit macht? Einen Raspi habe ich im Einsatz (DoorPi, Sonos, CalDav)
          DoorPi DIY Türsprechstelle how to

          Kommentar


          • #6
            Zitat von MarcusS
            Wow, das wäre natürlich super nett von dir. Wenn es denn nicht zuviel Arbeit macht? Einen Raspi habe ich im Einsatz (DoorPi, Sonos, CalDav)
            Hi,
            schreib es doch in die Wunschliste der Loxberry Plugins.

            Ich glaube da würden sich viele daran erfreuen 👍

            Gruß Frank



            Gesendet von iPhone mit Tapatalk Pro

            Kommentar


            • #7
              Kann ich gerne machen. Wäre wirklich ein schönes Plugin. Aber wenn ich mir die Wunschliste so anschaue, ist da schon ein guter Berg voll Arbeit. Irgendwann werde ich auch mal meine einzlenen Dienste auf dem RaspI durch einen Loxberry ersetzen.

              Ich glaube hismastersvoice hat dort glückerlicherweise auch schon was in der Schublade vom Musicserver. :-)

              "neu - TravelTime2TTS - Mit Hilfe von Google Distance Matrix kann man sich die Fahrzeit zu einem Ziel (zB Arbeit) ausgeben lassen. Verkehrslage kann berücksichtigt werden."
              Akutelle Version Release: 1.5.5.9 (mehr Infos weiter unten) Akutelle Version Beta: 1.5.6.1 (mehr Infos weiter unten) Hier werde in Zukunft die Updates vorstellen... #1.5.6.1_beta System new - GPIO-Support for RockPi4 and Odroid N2(Plus) fix - minor issues for DietPi improve - PowerManger2 better handling of Power-Supply


              Ich hoffe das lässt sich einigermaßen wiederverwenden, so dass hier deswegen nicht zuviel Arbeit entsteht.

              DoorPi DIY Türsprechstelle how to

              Kommentar


              • #8
                Im Grunde habe ich das ja für den MS4L schon geschrieben.
                Das muss ich nur etwas abändern das er das per UDP an den MiniServer schickt, das ist jetzt nicht das große Thema.

                Wenn die nächste Version des Loxberry kommt in der man nativ PHP programmieren kann (will jetzt nicht noch Perl lernen) können wir mal über ein Plugin nachdenken.

                Vielleicht kommt ja Loxone selber auf die Idee was zu machen.
                Kein Support per PN!

                Kommentar


                • #9
                  MarcusS


                  Anbei das Skript...

                  Aufruf...
                  http://ip/skriptname.php?form=Start-...Ankuft-Adresse

                  Optionen die nicht zwingend in der URL sein müssen, es werden wenn nicht angegeben Standard-Werte genutzt.
                  &departure_time=xxxx !!!UnixTime!!! Standard: now
                  &traffic=0/1 (soll Verkehr berüchsichtig werdet) Standard:1
                  &traffic_model=xxx (Art der Berechnung) Standard: best_guess
                  &mode=xxxx Standard: driving

                  Du kannst alles in der API von Google nachlesen, dort bekommst du auch den kostenlosen API Key.
                  https://developers.google.com/maps/d...MatrixRequests
                  https://developers.google.com/maps/d...ix/start?hl=de

                  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           "Die fahrt von {from} nach {to} mit {distance} Kilometer, dauert unter Berücksichtigung des Verkehrs {duration}.";
                  //URL Vars
                  $from           = ($_GET["from"]);
                  $to             = ($_GET["to"]);
                  $departure_time = ($_GET["departure_time"]);
                  $traffic        = ($_GET["traffic"]);
                  $traffic_model  = ($_GET["traffic_model"]);
                  $mode           = ($_GET["mode"]);
                  //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    "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);
                  } else {
                      
                  $text "Fehler, bitte URL prüfen.";
                  }
                  echo 
                  "-----------TravelTime-----------<br>";
                  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 "<br>";
                  echo 
                  "------------------------------------<br>";
                  $text urlencode($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 MiniServer brauchst du noch einen Ausgang der das Skript auslöst...

                  Hier kannst du mal schauen wie ich den Wert Weiter gebe. Die URL im Statusbaustein musst du allerdings an die von Loxone anpassen.
                  http://music-server.net/help/MusikSe...ck2Speech.html
                  Zuletzt geändert von hismastersvoice; 25.04.2017, 22:56.
                  Kein Support per PN!

                  Kommentar


                  • hismastersvoice
                    hismastersvoice kommentierte
                    Kommentar bearbeiten
                    PS:
                    Den Text kannst du bearbeiten wie du willst...
                    Du musst einfach die Variablen einsetzten wie du sie brauchst
                    {from} = Adresse-Start
                    {to} = Adresse-Ziel
                    {distance} = Strecke in Km
                    {duration} = Fahrzeit
                    Es müssen nicht alle Variablen genutzt werden... zB könnte es auch nur heißen: "Fahrzeit: {duration}" wenn man es kurz mag
                    Zuletzt geändert von hismastersvoice; 25.04.2017, 22:54.

                • #10
                  Wow, danke dir! Werde ich mich heute Abend mal dran versuchen.
                  DoorPi DIY Türsprechstelle how to

                  Kommentar


                  • #11
                    Funktioniert auf Anhieb. Super vielen Dank schon mal dafür! TTS geht, da ich aus deinem Script nun auch direkt das bereits vorhandene PHP Script von Liver64 für die Sprachausgabe über Sonos aufrufe.

                    Luxusproblem: Zusätzlich hätte ich gerne die Stauinfo in der Visu. Dazu ziehe ich den Text aus dem VTI in einen virtuellen Status, bzw. Textmerker. Ich weiß nicht ob das eine Limitierung des VTI oder des (virtuellen) Status/Merkers ist, aber zwischen jedem Wort wird aktuell ein "+" dargestellt anstelle des Leerzeichens. Eine Idee dazu?

                    Klicke auf die Grafik für eine vergrößerte Ansicht

Name: stau.PNG
Ansichten: 437
Größe: 6,7 KB
ID: 95720
                    DoorPi DIY Türsprechstelle how to

                    Kommentar


                    • #12
                      Zitat von MarcusS Beitrag anzeigen
                      Funktioniert auf Anhieb. Super vielen Dank schon mal dafür! TTS geht, da ich aus deinem Script nun auch direkt das bereits vorhandene PHP Script von Liver64 für die Sprachausgabe über Sonos aufrufe.
                      Was anderes erwartet

                      Luxusproblem: Zusätzlich hätte ich gerne die Stauinfo in der Visu. Dazu ziehe ich den Text aus dem VTI in einen virtuellen Status, bzw. Textmerker. Ich weiß nicht ob das eine Limitierung des VTI oder des (virtuellen) Status/Merkers ist, aber zwischen jedem Wort wird aktuell ein "+" dargestellt anstelle des Leerzeichens. Eine Idee dazu?
                      Geht schon wenn du unbedingt willst
                      In dem Fall muss ich im Text halt noch die + gegen %20 austauschen.

                      Versuch es mal, sollte gehen.


                      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           "Die fahrt von {from} nach {to} mit {distance} Kilometer, dauert unter Berücksichtigung des Verkehrs {duration}.";
                      //URL Vars
                      $from           = ($_GET["from"]);
                      $to             = ($_GET["to"]);
                      $departure_time = ($_GET["departure_time"]);
                      $traffic        = ($_GET["traffic"]);
                      $traffic_model  = ($_GET["traffic_model"]);
                      $mode           = ($_GET["mode"]);
                      //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    "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_u $text;
                          
                      $text urlencode($text);
                          
                      $text str_replace('+'"%20"$text);
                      } else {
                          
                      $text "Fehler, bitte URL prüfen.";
                      }
                      echo 
                      "-----------TravelTime-----------<br>";
                      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


                      • #13
                        Yes, Tschacka :-)

                        Klicke auf die Grafik für eine vergrößerte Ansicht  Name: Unbenannt.png Ansichten: 1 Größe: 5,4 KB ID: 95743

                        Und Bitte mehr Vertrauen in deine Arbeit und meine Fähigkeit Doku zu lesen ;-)
                        DoorPi DIY Türsprechstelle how to

                        Kommentar


                        • #14
                          Wenn es weiter nichts ist, viel Spaß damit...
                          Kein Support per PN!

                          Kommentar


                          • #15
                            Hallo,

                            habe die Stauprognose auch gerade erfolgreich bei mir umgesetzt - macht den Morgen wesentlich smarter ;-). Ich lasse die Abfrage in der Früh mit dem Impuls meines Weckers aktualisieren.

                            Meine Frage: Bekomme ich in den Ausgabe-Text für den VTI auch die letzte Abfragezeit (also die Zeit zu der die Abfrage gestartet wurde) mit rein? So könnte ich auch sehen, dass die Abfrage wirklich auf den Impuls hin lief.

                            Danke schon einmal für Tipps

                            Kommentar

                            Lädt...
                            X