TRAFFIC

Aus FHEMWiki
Version vom 8. Oktober 2016, 14:39 Uhr von Jmike (Diskussion | Beiträge) (neue Seite erstellt für Modul 98_TRAFFIC)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
TRAFFIC
Zweck / Funktion
Verkehrsdaten zu fest definierten Routen ermitteln
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Support (Forum) Unterstützende Dienste
Modulname 98_TRAFFIC.pm
Ersteller jmike
(Forum / Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Mit diesem Modul könnt ihr eure eigenen Wegstrecken, und deren Verkehr, über Google Maps Directions API erfassen.

Features / Funktionen

  • Distanz einer Route
  • Fahrzeit ohne Verkehr
  • Fahrzeit mit Verkehr
  • Verzögerung der geplanten Route
  • Waypoints definieren
  • Ausgabesprache festlegen
  • Outputs in Sekunden / Meter (raw)
  • Ausgabe als Text, in Minuten, Sekunden oder als Durchschnitt
  • Device STATE frei wählbar
  • einstellbares Update Interval
  • update-burst für Stosszeiten
  • Strecke kann zusätzlich in gegengesetzte Richtung ausgelesen werden
  • Ankunfszeit bei Abfahrt zum Update-Zeitpunkt

Voraussetzungen

Erstmal muss ein eigener API Key angefordert werden. Das geht über Googles API Manager
Dort sucht ihr "Google Maps Directions API" und erstellt ein neues Projekt. Anschliessend stellt ihr sicher, dass die API aktiviert ist.

Eventuell müssen auch die Perl Module LWP::Simple und JSON nach installiert werden (apt-get / CPAN).

Definition

define <devicename> TRAFFIC <API-KEY> [update-interval]

Beispiel:
define muc2berlin TRAFFIC ABCDEFGHIJKLMNOPQRSTVWYZ 600

Der API Key muss selbstverständlich mit dem Key von aus dem API Manager ersetzt werden.
Das Interval in Sekunden ist optional, der default beträgt es 3600 (1 Stunde).

Readings

  • average_delay_min
  • average_duration_in_traffic_min
  • average_duration_min
  • delay
  • delay_min
  • distance
  • duration
  • duration_in_traffic
  • duration_in_traffic_min
  • duration_in_traffic_sec
  • duration_min
  • duration_sec
  • [error_message]
  • eta
  • state
  • status

Befehle

update [burst-update-count] [burst-update-interval]

Readings manuell aktualisieren, der optionale Burst kann wie folgt genutzt werden:
- erster Wert gibt an wie viele Updates abgearbeitet werden
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird

Beispiel um für 1 Stunde alle 5min zu aktualisieren:
set <device> update 12 300


STATE

  • Initialized - modul initialisiert
  • OK - update war erfolgreich
  • incomplete configuration - Konfigurationsfehler (start_address oder end_address leer)
  • <APIRETURN> - Fehlermeldung von Google Maps, falls vorhanden (siehe Reading error_message)
  • <Reading> - der Wert des Readings welches mit Attribut stateReading ausgewählt wurde
  • disabled - das Device wurde über das Attribut disable deaktiviert

Attribute

Attribut Default Wert mögliche Werte Beschreibung Beispiel
start_address <text> die vollständige Startadresse (erforderlich!) Startstr 1, 12345 Startcity
end_address <text> die vollständige Zieladresse (erforderlich!) Zielstr 99, 99099 Zielstadt
raw_data 0 0:1 legt Readings an mit allen unbearbeiteten Werten
language de, en, etc. Google ermittelt die Sprache automatisch falls nicht fest definiert de
waypoints lat, long|lat, long fixe Wegpunkte auf der Strecke, mehrere Werte per pipe (|) trennen, LAT, LONG Koordinaten angeben 48.187918, 11.590514
disable 0 0:1 Modul deaktivieren 1
stateReading <beliebiges-Reading> Name eines Readings dessen wert in den STATE des Devices geschrieben wird. delay_min
outputReadings text text,min,sec,average konfiguration welche Readings erstellt werden sollen, eine oder mehrere Möglich. text min
includeReturn 0 0:1 aktiviert/deaktiviert ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll.
Readings werden mit return_* angegeben.
1
verbose 1 0:1:2:3:4:5 gibt vor wie ausführlich geloggt wird. 5



Bekannte Probleme

  • STATE: "REQUEST DENIED"
  • Reading error_message: "This API project is not authorized to use this API"
    • => Aktiviere deinen API Key, Google API > API Manager > Google Maps Directions API > AKTIVIEREN anklicken
  • STATE: "UNKNOWN_ERROR"
    • => Es liegt ein Fehler bei Google vor.
    • => "UNKNOWN_ERROR indicates a directions request could not be processed due to a server error. The request may succeed if you try again." [1]
  • STATE: "OVER_QUERY_LIMIT"
    • Du hast mehr als 2500 requests pro Tag abgesetzt, erhöhe die Intervalle der TRAFFIC Devices und nutze "burst" zu den Stosszeiten.

Tips

  • täglicher Burst Update zum Feierabend, 1 Stunde alle 5 Minuten updaten:

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

  • komplette Reisezeit, also Hin- und Rückweg, im STATE anzeigen:

attr <device> stateFormat {int(ReadingsVal($name,"delay_min",0)) + int(ReadingsVal($name,"return_delay_min",0))}

  • Waypoints definieren (Tip von erdo_king)
    • In Google-Maps die gewünschte Route auswählen. (PC)
    • Auf eine signifikante Stelle der Route klicken - hierbei auf die Fahrtrichtung achten!
    • Hier auf die Koordinaten klicken, diese können dann aus dem Suchfeld kopiert werden
    • Im Browser zurück bis die Route wieder sichtbar ist (zum späteren Datenabgleich)
    • Waypoints in FHEM deklarieren, Daten aktualisieren (set update)
    • distance + duration mit den Daten von Google-Maps am PC vergleichen, dann kann man sicher sein, dass die Strecke dieselbe ist!

to Do

  • Reading error_message löschen wenn update erfolgreich
  • deutsche Commandref

Weblinks