Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Node-Red
    5. Stau-Erkennung mit node-red

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    Stau-Erkennung mit node-red

    This topic has been deleted. Only users with topic management privileges can see it.
    • Bluefox
      Bluefox last edited by

      Man kann einfach mit node-red Stau-Erkennung implementieren. Dafür gibt es von google API:

      https://developers.google.com/maps/docu … irections/

      Mit URL:

      http://maps.googleapis.com/maps/api/dir ... nsor=false

      Kann man die Navigation-Info bekommen, wo auch Dauer drin steht.

      Einfach alle Lehrzeichen mit "+" ersetzen und keine Umlaute verwenden, z.B. :

      http://maps.googleapis.com/maps/api/dir ... nsor=false

      Das ergibt:

      {
         "routes" : [
            {
               "bounds" : {
                  "northeast" : {
                     "lat" : 51.3185661,
                     "lng" : 9.493659299999999
                  },
                  "southwest" : {
                     "lat" : 51.2938967,
                     "lng" : 9.478441199999999
                  }
               },
               "copyrights" : "© 2015 GeoBasis-DE/BKG (©2009), Google",
               "legs" : [
                  {
                     "distance" : {
                        "text" : "3,5 km",
                        "value" : 3491
                     },
                     "duration" : {
                        "text" : "11 min.",
                        "value" : 645
                     },
      ....
      

      Uns interessiert nur "duration".

      Folgendes FLOW macht es:

      [{"id":"27a1244e.d85edc","type":"http request","name":"Google Direction API LaStrada => Hbf","method":"GET","ret":"obj","url":"http://maps.googleapis.com/maps/api/directions/json?origin=Raiffeisenstrasse+10,+34121+Kassel&destination=Rainer-Dierichs+Platz+1,+34117+Kassel&sensor=false","x":341.7142791748047,"y":31.000003814697266,"z":"d7ecc7ab.281338","wires":[["47fd5be6.b802a4"]]},{"id":"47fd5be6.b802a4","type":"function","name":"Fahrzeit in Minuten","func":"msg.payload = Math.ceil(msg.payload.routes[0].legs[0].duration.value / 60);\n\nreturn msg;","outputs":1,"x":319.857177734375,"y":113.14285278320312,"z":"d7ecc7ab.281338","wires":[["61e25a56.9e1da4","3015c229.cfea3e"]]},{"id":"61e25a56.9e1da4","type":"ioBroker out","name":"","topic":"HeimwegMinutes","ack":"true","autoCreate":"true","x":579,"y":103,"z":"d7ecc7ab.281338","wires":[]},{"id":"e6bd80d2.19428","type":"inject","name":"Trigger","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":93,"y":31,"z":"d7ecc7ab.281338","wires":[["27a1244e.d85edc"]]},{"id":"f6469f31.09b96","type":"ioBroker out","name":"","topic":"HeimwegStau","ack":"true","autoCreate":"true","x":565,"y":275,"z":"d7ecc7ab.281338","wires":[]},{"id":"3015c229.cfea3e","type":"function","name":"Stau?","func":"msg.payload = (msg.payload > 10);\n\nreturn msg;","outputs":1,"x":483,"y":198,"z":"d7ecc7ab.281338","wires":[["f6469f31.09b96"]]}]
      
      

      48_google-direction.png

      Jetzt muss man nur "Google-Direction"- node mit passende URL versehen, und bei Stau-Funktion die Anzahl von Minuten reinschreiben, die als Stau erkannt werden können.

      1 Reply Last reply Reply Quote 0
      • ruhr70
        ruhr70 last edited by

        Das hat mich direkt begeistert. Ich habe das Beispiel für mich wie folgt angepasst:

        1.) Die URL um die Alternativerouten ergänzt (am Ende der URL &alternatives=true)

        http://maps.googleapis.com/maps/api/dir … tives=true

        2.) Im Node-Red Flow alle drei Routen ausgewertet

        327_2015-04_node-red_anfahrt_zur_arbeit.jpg

        Für alle drei Routen wird die Anfahrtzeit erfasst und ermittelt und ob es auf der Route Stau gibt.

        Zum Ermitteln der Fahrzeit der zweiten Route muss die entsprechende Funktion z.B. wie folgt angepasst werden:

        msg.payload = Math.ceil(msg.payload.routes[1].legs[0].duration.value / 60);
        
        return msg;
        

        .routes[0].legs[0] -> erste Route

        .routes[1].legs[0] -> zweite Route

        .routes[2].legs[0] -> dritte Route

        3.) den Namen der drei Routen ausgelesen und in den Variablen gespeichert.

        Beispiel für die dritte Route:

        msg.payload = (msg.payload.routes[2].summary);
        
        return msg;
        

        4.) Die Abfrage über eine Javascript Variable von ioBroker getriggert

        Um die regelmässige Abfrage über ioBroker zu triggern (bei mir derzeit alle zwei Minuten) und über ioBroker/Vis die aktuelle Fahrzeit auf Knopfdruck zu übermitteln, triggere ich nicht über das Inject in Node-Red, sondern über eine JavaScript Variable, die alle zwei Minuten auf true gesetzt wird.

        Was habe ich damit auf die Schnelle realisiert:

        a) Dynamisch Anzeige in einem Status/Alarmfeld in VIS, wenn es auf einer oder mehreren Routen aktuell Stau gibt

        b) ein 7-Tage Rickshaw-Chart, um die Entwicklung der Fahrzeiten zu vergleichen

        c) in VIS eine Tabelle, in der alle drei Routen mit Namen und Fahrzeit dargestellt werden.

        Einen morgendlichen Eintrag in meiner Ereignisliste an einem Arbeitstag und zur Frühstückszeit werde ich noch ergänzen.

        Danke Bluefox! Von so Beispielen lebe ich 😉

        1 Reply Last reply Reply Quote 0
        • ruhr70
          ruhr70 last edited by

          Kann es sein, dass die Google API die Werte ohne Berücksichtigung der Verkehrssituation zurückgibt?

          Ich erhalte je Route immer die identische Zeit.

          In Google Maps selbst werden mittlerweile höhere Zeiten angezeigt.

          grummel

          Wen dem so ist, bringt die Funktion leider gar nichts 😞

          1 Reply Last reply Reply Quote 0
          • ruhr70
            ruhr70 last edited by

            @ruhr70:

            Kann es sein, dass die Google API die Werte ohne Berücksichtigung der Verkehrssituation zurückgibt?

            Ich erhalte je Route immer die identische Zeit. `

            Kann das jemand bestätigen?

            D.h. die Verkehrslage wird nicht brücksichtgt.

            Die Zeit bei einer Route ändert sich nicht.

            Oder muss ich bei mir noch einen Fehler bei mir suchen?

            1 Reply Last reply Reply Quote 0
            • Bluefox
              Bluefox last edited by

              @ruhr70:

              @ruhr70:

              Kann es sein, dass die Google API die Werte ohne Berücksichtigung der Verkehrssituation zurückgibt?

              Ich erhalte je Route immer die identische Zeit. `

              Kann das jemand bestätigen?

              D.h. die Verkehrslage wird nicht brücksichtgt.

              Die Zeit bei einer Route ändert sich nicht.

              Oder muss ich bei mir noch einen Fehler bei mir suchen? `
              Ja ist leider so. 😞

              Es geht nur mit API Key.

              &key=API_KEY
              
              1 Reply Last reply Reply Quote 0
              • ruhr70
                ruhr70 last edited by

                Ich würde gerne die Routenberechnung auch dynamisch nutzen.

                D.h. das Ziel verändert sich.

                Dazu müsste ich die URL in der http request node tlw. mit Variablen schreiben (so, wie von Bluefox in Vis in Arbeit).

                Weiss jemand, ob dies möglich ist und wenn ja, wie der Syntax ist?

                327_2015-05-03_http_request_dynamisch.png

                1 Reply Last reply Reply Quote 0
                • Bluefox
                  Bluefox last edited by

                  [{"id":"ed13881b.12ec78","type":"inject","name":"","topic":"","payload":"http://iobroker.com","payloadType":"string","repeat":"","crontab":"","once":false,"x":149,"y":58,"z":"d8cc32bf.2733d","wires":[["6e3ec92f.91c138"]]},{"id":"16432cfe.e9bcd3","type":"debug","name":"","active":true,"console":"false","complete":"false","x":720,"y":125,"z":"d8cc32bf.2733d","wires":[]},{"id":"6e3ec92f.91c138","type":"function","name":"Create request","func":"var newMsg = {\n    method: 'GET',\n    url: msg.payload\n}\nreturn newMsg;","outputs":1,"valid":true,"x":337,"y":124,"z":"d8cc32bf.2733d","wires":[["88a0d151.775f3"]]},{"id":"88a0d151.775f3","type":"http request","name":"","method":"GET","ret":"txt","url":"","x":491,"y":126,"z":"d8cc32bf.2733d","wires":[["16432cfe.e9bcd3"]]},{"id":"8b98a428.746758","type":"inject","name":"","topic":"","payload":"http://wikipedia.com","payloadType":"string","repeat":"","crontab":"","once":false,"x":130,"y":123,"z":"d8cc32bf.2733d","wires":[["6e3ec92f.91c138"]]},{"id":"b0e64a7b.4f19b8","type":"ioBroker in","name":"","topic":"myUrl","payloadType":"value","x":147,"y":229,"z":"d8cc32bf.2733d","wires":[["6e3ec92f.91c138"]]}]
                  

                  48_node.png

                  1 Reply Last reply Reply Quote 0
                  • ruhr70
                    ruhr70 last edited by

                    Hi Bluefox,

                    erst einmal vielen, vielen Dank für die schnelle Antwort!

                    Ich konnte es direkt in meinem Geofency Flow verarbeiten 🙂

                    Ich bekomme noch jedes Mal eine Warnmeldung, wenn die Funktion und der http request durchläuft:

                    ****[http request]

                    [msg] : (string)

                    Deprecated: msg properties should not override fixed node properties. Use explicit override option. See http://bit.ly/nr-override-msg-props****

                    Mit dem Link in der Meldung bin ich nicht schlauer geworden.

                    Derzeit verbuche ich es als "Schönheitsfehler" 😉

                    VG

                    Michael

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    626
                    Online

                    31.6k
                    Users

                    79.4k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    6208
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo