neues Modul: TRAFFIC - google maps directions

Begonnen von jmike, 27 Juli 2016, 10:51:23

Vorheriges Thema - Nächstes Thema

jmike

Hab ich auch.
Liegt wohl daran dass Google anders rundet als perl wenn ich Sekunden/60 rechne.
Wenn ich genug Werte gesammelt habe versuche ich was draus zu lernen, im Zweifel werde ich zwangsweise aufrunden.

Auch das delay_min mit negativem Wert hab ich bereits gesehen und in meiner pre-release version schon gefixt.
Liegt daran dass man bei Google manchmal trotz Verkehr schneller ist ;)

jmike

Frei nach "release-early, release often" ein weiteres Update.

Habe die Zeit Berechnungen überarbeitet, hatte bisher keine Diskrepanz mehr.

Dann ein neues Attribut "includeReturn", welches die Strecke inkl. Waypoints umdreht und zusätzlich alle Readings mit vorgestelltem "return_*" erstellt.

Das command "update" unterstützt nun ein Burst-Mode:
set <device> update [burst-update-count] [burst-update-interval-in-sec]

Ich wollte etwas haben womit ich in einer bestimmten Zeit das Abfrageintervall temporär erhöhen kann.
Anfangs wollte ich dass direkt im DEF zu integrieren, ähnlich wie ein cron Eintrag, war mir aber dann zu fummelig.

Mit dem Burst könnte man .z.b in einem DOIF oder AT für eine Stunde das Intervall auf 5min verkürzen:
(12x alle 300 Sekunden checken = 3600 Sekunden Burst = 1 Stunde)

define FeierabendCheck AT *17:00 set <traffic> update 12 300


Die Burst definition wird als Internal gespeichert bis sie abgearbeitet ist.
Ehrlich gesagt fühlte sich die Idee besser an als das Feature nun geworden ist, bin gespannt ob jemand einen Nutzen dafür hat.

Amenophis86

#32
Ich habe noch die Version 0.3 drauf und heute folgenden Fehler bekommen:


2016.08.05 12:18:35 1: PERL WARNING: Use of uninitialized value $duration_in_traffic_sec in addition (+) at ./FHEM/98_TRAFFIC.pm line 269.
2016.08.05 12:18:35 1: TRAFFIC: (VK.Friedberg) did not receive duration_in_traffic, not able to calculate delay
2016.08.05 12:18:36 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_TRAFFIC.pm line 309.


Hier ein List des Device:
Internals:
   APIKEY     XXXXXXXXXXXXXXXX
   DEF        XXXXXXXXXXXXXXX
   Interval   3600
   NAME       VK.Friedberg
   NR         563
   STATE      UNKNOWN_ERROR
   TRIGGERTIME 1470395910.67005
   TRIGGERTIME_FMT 2016-08-05 13:18:30
   TYPE       TRAFFIC
   VERSION    0.3
   Readings:
     2016-08-05 11:18:31   delay           0 min
     2016-08-05 11:18:31   distance        25.5 km
     2016-08-05 11:18:31   duration        23 mins
     2016-08-05 11:18:31   duration_in_traffic 23 mins
     2016-08-05 12:18:36   eta             12:18:35
     2016-08-05 12:18:36   state           UNKNOWN_ERROR
   Helper:
     Bm:
       Traffic_set:
         cnt        6
         dmx        0
         mAr
         max        0
         tot        0
Attributes:
   DbLogExclude .*
   end_address 61169 Friedberg
   group      Verkehr
   outputReadings text
   room       S_Info
   start_address Scheidstrasse 4, 60320 Frankfurt am Main
   userattr   DbLogExclude end_address outputReadings start_address verbose waypoints
   verbose    1
   waypoints  50.253462%208.662963


Werde mir jetzt auch gleich die neue Version installieren, vielleicht hat es sich ja damit erledigt. Dachte mir aber die Info kann nicht schaden.

EDIT:
Mit der neuen Version kommt folgender Fehler beim Update des Device:
2016.08.05 12:51:34 1: PERL WARNING: Use of uninitialized value in numeric eq (==) at ./FHEM/98_TRAFFIC.pm line 228.
2016.08.05 12:51:35 1: PERL WARNING: Use of uninitialized value in numeric lt (<) at ./FHEM/98_TRAFFIC.pm line 330.
2016.08.05 12:51:35 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_TRAFFIC.pm line 331.
...
2016.08.05 13:18:31 1: PERL WARNING: Use of uninitialized value in numeric lt (<) at ./FHEM/98_TRAFFIC.pm line 330.
2016.08.05 13:18:31 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_TRAFFIC.pm line 331.
2016.08.05 13:51:35 1: PERL WARNING: Use of uninitialized value in numeric lt (<) at ./FHEM/98_TRAFFIC.pm line 330.
2016.08.05 13:51:35 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_TRAFFIC.pm line 331.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

jmike

Hi.

state "UNKNOWN_ERROR" muss von der API kommen.

Die uninitialized Meldungen kann/sollte ich weg machen.
Kannst du mal verbose auf 5 setzen, update machen und list sowie logs posten?

Im Log steht dann zusätzlich auch die URL  (apikey!). Das JSON dort wäre auch interessant.

jmike

Ich noch mal, war vorher kurz angebunden.

Die 3 perl warnings auf 228,330 und 331 kann ich mit deiner Device Definition reproduzieren und hab sie gefixt.
Mal noch ein paar Tage warten ob für die nächste Version noch mehr zusammen kommt.

UNKOWN_ERROR ist wie gesagt ein API Fehler:
UNKNOWN_ERROR indicates a directions request could not be processed due to a server error. The request may succeed if you try again.

siehe: https://developers.google.com/maps/documentation/javascript/directions?hl=de


Amenophis86

Also brauchst du kein Log etc mehr? Danke für den Fix.

Den Error würde ich dann mit einem notify abfangen, wenn du es nicht im Modul umsetzen willst, dass die Anfrage nochmal neu gestellt wird :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Amenophis86

Zitat von: jmike am 05 August 2016, 18:05:34
Die 3 perl warnings auf 228,330 und 331 kann ich mit deiner Device Definition reproduzieren und hab sie gefixt.
Mal noch ein paar Tage warten ob für die nächste Version noch mehr zusammen kommt.

Kannst du mir den Fix sagen, dann kann ich es schon mal ändern. Aktuell wird nämlich mein Log voll geschrieben damit. Dann kann ich es schon mal ändern, bis du die neue Version raus bringst.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

jmike


Hab die Version im ersten Thread aktualisiert.

Der API Return wird allerdings noch nicht ausgewertet und automatisch darauf reagiert. Ich will mir erst noch die anderen query-status anschauen.

Btw, wer nutzt eigentlich Waypoints und hatte damit beim Setup Probleme.
Google Maps sucht ja automatisch die kürzeste Route. Das hat in meinem Fall dazu geführt dass eine Strecke über Autobahn die normalerweise 1 Stunde dauert, im Modul als 1:35 angezeigt wurde.
Ich hatte (noch) keine Waypoints definiert und da wurde die Strecke einfach über Landstrasse berechnet, Autobahn wären nämlich > 2 Stunden gewesen.

In meinem Fall unerwünscht da man im Modul ja nicht wirklich sieht ob die Route verändert wurde (ausser distance).
Das setzen der Waypoints ist allerdings für eine Autobahnroute nicht ganz so leicht weil Google sehr schnell "ZERO_RESULTS" zurück gibt oder die Strecke unrealistisch lang wird.

Hat jemand Tips, die kommen dann auch in einen Wiki Artikel.

Amenophis86

Ich habe mir die Route in Google Maps anzeigen lassen und mir den Waypoint dann über die Geokoordinaten eines Autobahnpunktes angelegt. Hatte nämlich am Anfang das Gleiche Problem.

Danke für die Aktualisierung.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

jmike

Zitat von: Amenophis86 am 09 August 2016, 13:39:44
... und mir den Waypoint dann über die Geokoordinaten eines Autobahnpunktes angelegt...

Das hatte ich auch probiert, in Google Maps ganz nah ranzoomen und dann über Rechtsklick > "Was ist hier" die Lat/Lng Koordinaten abrufen.

Allerdings hat es bei 3-4 Waypoints nicht mehr funktioniert bzw. die Route wurde immer länger. Wenn man den Details im JSON folgt sieht man auch wo er die Route verlässt bzw. von der Route aus maps.google.com abweicht.

Vielleicht muss ich einfach noch mehr "rumfummeln" bis die Strecke akzeptabel ist.

Amenophis86

Da hatte ich bei meiner Glück, ich musste nur einmal auf die Autobahn, dann ist er dort geblieben.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

thaliondrambor

Huhu, ich hatte das gleiche Problem mit meinem Arbeitsweg. Da Google mit Start-Ziel nicht den Weg anzeigt, den ich fahre, habe ich einen Wegpunkt dazwischen gesetzt. Das hat in die eine Richtung funktioniert, aber auf dem Rückweg war das Ergebnis leider länger und weiter. Ich habe auch lange gesucht, unterschiedliche Wegpunkte getestet, im JSON nachgesehen und den Weg Schritt für Schritt verglichen.
Bei mir war es oft so, dass er irgendwo vorm Ziel vom Weg abgebogen ist, auf einer anderen Straße quasi am Ziel vorbei und dann von "hinten durch die Brust" kam. Der Grund dafür ist meiner Meinung nach, dass das Zwischenziel auf der "falschen" Straßenseite liegt. Anders als bei einer Eingabe in Google-Maps, scheint dies für die API wichtig zu sein.

Ich habe jetzt zwei Traffic-Devices angelegt mit unterschiedlichen Wegpunkten, so dass beide Strecken stimmen.

FHEMAN

#42
Zitat von: jmike am 01 August 2016, 13:04:53
Das zweite Attribut definiert den Namen eines Readings und überschreibt damit den device state.
Wer also z.b. duration_in_traffic als state haben möchte setzt:
"attr device stateReading duration_in_traffic"

Ich habe das Modul gerade installiert und finde es echt toll! Vielen Dank für die Bereitstellung!

Kann ich bei stateReading  auch 2 Readings addieren (delay_min + return_delay_min) ?

Aktuell habe ich noch gelegentlich Unterschiede zwischen delay und (duration_in_traffic_min - duration_min). Wird delay intern berechnet oder von Google ausgelesen?

Zitat von: jmike am 02 August 2016, 14:31:20
Das command "update" unterstützt nun ein Burst-Mode:

Ich wollte etwas haben womit ich in einer bestimmten Zeit das Abfrageintervall temporär erhöhen kann.

Heißt das, die Werte aktualisieren sich schon jetzt automatisch nach einer gewissen Zeit? Oder muss ich ein At verwenden und set TRAFFICDEIVCE update ausführen?
Hintergrund ist, dass uns eine farbige LED im Statusdisplay immer den Staustatus signalisieren soll.

Schönen Gruß
Ronny

NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

jmike

Hi Ronny.

stateReading kann derzeit keine Kalkulation.

Das kannst du aber mittels userReadings lösen, probier mal folgendes:

attr <trafficDevice> userReadings state {int(ReadingsVal("<trafficDevice>","delay_min",0) + ReadingsVal("<trafficDevice>","return_delay_min",0))}

Und dann Attribut stateReading löschen.

Zur Aktualisierung.
Per default ist das automatische Update Interval 3600 Sekunden (siehe Internal "Interval").
Du kannst das in deiner Definition statisch ändern wenn du z.b. hinter deinen API Key noch ein Interval in Sekunden angibst.

Wenn du aber nur zu einer bestimmten Uhrzeit, z.b. zum Feierabend, das Interval erhöhen möchtest, kannst du mit einem AT und "set <trafficDevice> update 10 30" zum Beispiel 10mal alle 30 Sekunden ein update machen.

Danach übernimmt wieder das Update Interval das du konfiguriert hast bzw. 3600 falls nicht.
Einfach mal ein FileLog definieren und ausprobieren ;)

Hoffe das hilft.

grüße
mike


Devender

Hallo zusammen,

Ich hatte gestern fuer ein Staumodul einen Wikiartikel angefangen und als Varianten auch die GoogleMaps aufgenommen.
Da ich hier ein paar Posts vorher gelesen hatte, dass hier ein Wiki noch offen ist hilft vielleicht schon mal der Artikel um dort auch das Modul zu beschreiben.

http://www.fhemwiki.de/wiki/Staumelder

Da ich die Google Variante nicht nutze, kann ich aktuell auch noch nichts beisteuern.
Falls ich aber etwas aufnehmen soll, bräuchte ich etwas Input  ;)

Viele Gruesse,
Dirk
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul