neues Modul: TRAFFIC - google maps directions

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

Vorheriges Thema - Nächstes Thema

jmike

Hi.

Habe ein kleines Modul geschrieben um Routen aus Google Maps in FHEM darzustellen.
Wie auch schon bei der HTTPMOD Lösung (https://forum.fhem.de/index.php/topic,20151.0.html) braucht ihr euren eigenen Google Maps API Key.
Mein dev-FHEM hat bisher alles sauber verkraftet, hoffe es läuft auch bei euch.

Das Modul ist ab heute über die Update Funktion und das SVN verfügbar.
Auch der Wiki Eintrag ist online: http://www.fhemwiki.de/wiki/TRAFFIC


initiale Beschreibung:

Hier die Fakten, [b]v0.42[/b]:
    Perl module (die möglicherweise fehlen z.B. mit #> cpan -i <packet> nachinstallieren):
        LWP::Simple
        JSON

    Installation:
        98_TRAFFIC in /FHEM kopieren, dann reload 98_TRAFFIC ausführen
        Attribute start_address und end_address ausfüllen.
        z.b. attr <device> start_address Winzererstraße 140, 80797 München

    Define:
        define <devicename> TRAFFIC <API-KEY> [update-interval]
   
    Features:
        Distanz
        Fahrzeit ohne Verkehr
        Fahrzeit mit Verkehr
        Verzögerung
        Waypoints
        Sprache
        Outputs in Sekunden / Meter
        Werte zusätzlich in Minuten
        Readings können angepasst werden über Attribut outputReadings (text min)
        state kann per Attribut ein Reading anzeigen, Attribut stateReading
        update-burst
        Strecke kann zusätzlich umgedreht werden, Attribut includeReturn
       
    Set/Commands:
        [i]"update" [burst-count] [burst-interval-sec][/i]          - aktualisiert Werte automatisch (Readings)
       
    Readings:
        delay
        distance
        duration
        duration_in_traffic
        state
        error_message
        delay_min (optional)
        duration_in_traffic_min (optional)
        duration_min (optional)
        eta
       
    State:
        "Initialized"   - modul initialisiert
        "OK"      - update hat geklappt
        "config_error"       - Konfigurationsfehler (start_address oder end_address leer)
        "<APIRETURN>"         - Fehlermeldung von Google Maps, falls vorhanden (siehe Reading error_message)

    custom Attribute:
         "start_address"           - Startadresse
         "end_address"           - Zieladresse
         "raw_data"           - Outputs in Sekunden / Meter, optional
         "language"           - Sprache festlegen, optional
         "waypoints"           - Zusätzliche Waypoints angeben, mit | getrennt, optional
         "stateReading"         - Name eines Readings welches state überschreibt
         "outputReadings"       - zum Filter der Readings, mögliche Werte "text min"
         "includeReturn"       - erstellt zusätzliche Readings für eine umgedrehte Strecke
         "disable"           - Modul deaktivieren

               
Der Umfang des Moduls ist noch relativ klein. Wenn ihr Wünsche / Feedback habt immer her damit.
Werde dann wie immer die Version hier im ersten Thread aktualisieren.


grüße
Mike

0.1-13
0.2-20
0.3-12
0.41-28
0.42-60

RaspiCOC

Bitte noch die Ankunftszeit mit aufnehmen. Also aktuelle Zeit + duration_in_traffic. Und die aktuelle Zeit bitte unterBerücksichtigung von Sommer- / Winterzeit.... :D

Amenophis86

Bitte noch die Option von Waypoints einbauen. Habe zB eine Strecke so definiert:


https://maps.googleapis.com/maps/api/directions/json?origin=XXXXX&destination=XXXX&waypoints=via:Berliner%20Stra%C3%9Fe,%20Offenbach&language=de-DE&departure_time=now&key=XXXX 1800


:) Danke
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...

justme1968

gibt es einen grund das du LWP verwendest und nicht das FHEM eigene HttpNonBlockingGet?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

jmike

Zitat von: RaspiCOC am 27 Juli 2016, 12:49:37
Bitte noch die Ankunftszeit mit aufnehmen....
gute Idee, werde ich einbauen.

Zitat von: Amenophis86 am 27 Juli 2016, 14:24:58
Bitte noch die Option von Waypoints einbauen.
Ist bereits drin, siehe oben bzw. commandref.
Über Attribut waypoints einfach die Strecke mit | angeben. z.b.
attr device waypoints nürnberg|würzburg|fulda


Zitat von: justme1968 am 27 Juli 2016, 14:26:58
gibt es einen grund das du LWP verwendest und nicht das FHEM eigene HttpNonBlockingGet?
Nicht wirklich, die LWP calls sind zwar non-blocking umgesetzt aber ich werde mir die FHEM sub mal ansehen.

gruss
mike

Amenophis86

Zitat von: jmike am 27 Juli 2016, 14:43:48
Ist bereits drin, siehe oben bzw. commandref.
Über Attribut waypoints einfach die Strecke mit | angeben. z.b.
attr device waypoints nürnberg|würzburg|fulda

Sry überlesen. Danke :)
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...

RaspiCOC

Und noch ein Reading, das benötigt wird: duration_min

Also Fahrtzeit in Minuten. Nicht hh:mm sondern nur mmm. Dann kann man auch schöne Plots machen. (Ich versuche jetzt schon seit 8 Jahren das Muster hinter dem Verkehr auf der A99 zu verstehen...  :'()

jmike

#7
Hi.

v0.0.2 mit mehr Readings ist im ersten Thread.

estimated time of arrival (eta) ist leider statisch mit Startzeit "jetzt", ist also in 10min veraltet. Mal überlegen ob man irgendwie ein "live" Wert bauen kann.
Also immer aktuelle Uhrzeit + delay.

Für delay, duration und duration_in_traffic jetzt zusätzlich Minutenwerte.
Wenn die original Werte unter 1 Stunde sind, sind die Werte nun natürlich doppelt gelistet.

lg
mike

RaspiCOC

Schon klar, dass ETA immer auf jetzt bezogen  ist. Sonst wäre es ja auch ein Blick in die Kristallkugel.

Über ETA könnte ich dann aber ein Abfahrsignal triggern im Sinne von, wenn Du jetzt losfährst, kommst Du zur gewünschten Zeit an.

Man könnte natürlich auch auf Basis eines Trends (z.B. die Fahrtzeit wird immer länger über die letzten Abrufintervalle) eine Prognose wagen. Also aus historischen Werten (Monat / Tag / Stunde / Minute) die erwartete Verkehrsentwicklung berechnen und die ETA dann auf einen beliebige Zeit in der Zukunft gleitend berechnen. (siehe auch beigefügtes Chart der Entwicklung der Fahrzeit in Minuten)

Ich glaube aber, dass man damit einen RPi dann wohl doch etwas überfordert.... :D

Raven

Moin,

danke für das Modul.  :D

Bei device update kommt diese Fehlermeldung: Undefined subroutine &main::from_json called at ./FHEM/98_TRAFFIC.pm line 249.
Der Aufruf über den Browser fkt. liegt also nicht an den Adressen.

Die o.g. PERL Pakete möchte ich nicht über CPAN installieren, sondern über apt-get install. Welche Pakete werden denn benötigt?
Installiert habe ich schon: libjson-perl libwww-perl

Danke vorab.
Cubietruck-Prod: HM-LAN, Heizung, Rolläden, Schalter, Viessmann (optolink)
Cubietruck-DEV:
Fritzbox 7490

jmike

Hi.

Puuh. from_json ist definitiv im Perlpaket JSON beinhaltet. Das solltest du eigentlich über "apt-get install libjson-perl" bekommen.
Du kannst mal noch libjson-any-perl probieren, macht aber eigentlich keinen Sinn.

Kannst ja eventuell mal gucken welche JSON.pm du in deiner perl extlib hast. Vielleicht kommen wir so weiter.


Raven

Moin,

Danke.

Auch ein FHEM-Neustart & FHEM-Update brachten nichts, ausser daß jetzt der Status "initialized" lautet, war zuvor "config Error", aber die o.g. Fehlermeldung kommt nach wie vor.
Installiert ist libjson-perl 2.61-1 (libjson-any-perl habe ich auch installiert).

Ansonsten: perl 5, version 20, subversion 2 (v5.20.2) unter Jessie
Cubietruck-Prod: HM-LAN, Heizung, Rolläden, Schalter, Viessmann (optolink)
Cubietruck-DEV:
Fritzbox 7490

jmike

Hm...


was passiert wenn du auf der cli ausführst:
perl -e "use JSON;"


Bei mir läuft perl 5.14.2, JSON.pm liegt deshalb hier: /usr/local/share/perl/5.14.2/JSON.pm

version 2.90.
head /usr/local/share/perl/5.14.2/JSON.pm
  package JSON;
  ...
  BEGIN {
    $JSON::VERSION = '2.90';



was hast du?

Raven

Danke für die Hilfe bei der Fehlersuche.

perl -e "use JSON;"   -> Kommt garnichts zurück. Ist aber dann ein Zeichen, daß das Modul installiert ist (nehme ich an  :o)

Verwende ich instmodsh -> wird reportet:
ZitatInstalled modules are:
   JSON
   JSON::XS
   Perl
   Types::Serialiser
   common::sense

Liegt bei mir unter: /usr/share/perl5/JSON.pm und ist $JSON::VERSION = '2.61';

Was ich noch nicht verstehe, meine Perl-Kenntnisse sind aber auch rudiemtentär,
auch andere FHEM-Module (Philips Hue Bridge und SYSMON) verwenden m.E. die Fkt. from_json
und hier erhalte ich keine Fehlermeldung.
Cubietruck-Prod: HM-LAN, Heizung, Rolläden, Schalter, Viessmann (optolink)
Cubietruck-DEV:
Fritzbox 7490

jmike

Ah. 2.61 hattest du oben schon gepostet.
Laut repo ist from_json dort auch schon vorhanden.

Nun gehen mir die Ideen aus. Änder mal bei deinem 98_TRAFFIC.pm die Zeile 249 auf:
my $json = decode_json($body->decoded_content);


Falls  decode_json bei dir läuft werde ich es in 0.3 ändern, kommt aufs selbe raus.