TRAFFIC: Unterschied zwischen den Versionen

Aus FHEMWiki
Zur Navigation springen Zur Suche springen
(→‎Integrierte Karte: Formulierungen überarbeitet. Die Karte wird erst erzeugt bei verbose=5 (also nicht "alternativ"))
(Typos korrigiert, Text vereinheitlicht)
Zeile 24: Zeile 24:
* Ankunfszeit bei Abfahrt zum Update-Zeitpunkt
* Ankunfszeit bei Abfahrt zum Update-Zeitpunkt
* verschiedene Travel Modes (driving, walking, bicycling und transit)
* verschiedene Travel Modes (driving, walking, bicycling und transit)
* flexibeler Update Schedule für "Stosszeiten"
* flexibler Update Schedule für Stosszeiten
* integrierte Google Map zum visualisieren der konfigurierten Route
* integrierte Google Map zum Visualisieren der konfigurierten Route


== Voraussetzungen ==
== Voraussetzungen ==
Zeile 47: Zeile 47:


Der API Key muss selbstverständlich mit dem eigenen Key aus dem API Manager ersetzt werden.<br>
Der API Key muss selbstverständlich mit dem eigenen Key aus dem API Manager ersetzt werden.<br>
Das Interval in Sekunden ist optional, der default beträgt es 3600 (1 Stunde).<br>
Das Intervall in Sekunden ist optional, der default beträgt 3600 (1 Stunde).<br>
Attribute start_address und end_address definieren.
Attribute start_address und end_address definieren.


Zeile 75: Zeile 75:
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird<br>
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird<br>


Beispiel um für 1 Stunde alle 5min zu aktualisieren:<br>
Beispiel um für 1 Stunde alle 5 Minuten zu aktualisieren:<br>
<code>set <device> update 12 300</code>
<code>set <device> update 12 300</code>
   
   
Zeile 117: Zeile 117:
|
|
|de, en, etc.
|de, en, etc.
|Google ermittelt die Sprache automatisch falls nicht fest definiert
|Google ermittelt die Sprache automatisch, falls nicht fest definiert
|de
|de
|-
|-
Zeile 141: Zeile 141:
|
|
|<beliebiges-Reading>
|<beliebiges-Reading>
|Name eines Readings dessen wert in den STATE des Devices geschrieben wird.
|Name eines Readings, dessen Wert in den STATE des Devices geschrieben wird
|delay_min
|delay_min
|-
|-
Zeile 147: Zeile 147:
|text
|text
|text,min,sec,average
|text,min,sec,average
|konfiguration welche Readings erstellt werden sollen, eine oder mehrere Möglich.
|Konfiguration, welche Readings erstellt werden sollen, eine oder mehrere möglich
|text min
|text min
|-
|-
Zeile 153: Zeile 153:
|0
|0
|0:1
|0:1
|aktiviert/deaktiviert ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll. <br>Readings werden mit return_* angegeben.
|aktiviert/deaktiviert, ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll<br>Readings werden mit return_* angegeben
|1
|1
|-
|-
Zeile 159: Zeile 159:
|1
|1
|0:1:2:3:4:5
|0:1:2:3:4:5
|gibt vor wie ausführlich geloggt wird.
|gibt vor, wie ausführlich geloggt wird
|5
|5
|-
|-
Zeile 171: Zeile 171:
|
|
|<Beginn-volle-Stunde>-<Ende-volle-Stunde> [<Tag>] <update-Intervall-in-Sekunden>
|<Beginn-volle-Stunde>-<Ende-volle-Stunde> [<Tag>] <update-Intervall-in-Sekunden>
|definiert einen flexiblen Zeitraum für feinere Updates, Tag als Zahl (Sonntag 0, Montag 1 etc), mehrere Definitionen per <nowiki>(|)</nowiki> getrennt
|definiert einen flexiblen Zeitraum für feinere Updates, Tag als Zahl (Sonntag 0, Montag 1 etc.), mehrere Definitionen per <nowiki>(|)</nowiki> getrennt
| 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60
| 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60
|-
|-
Zeile 198: Zeile 198:


* STATE: "OVER_QUERY_LIMIT"
* STATE: "OVER_QUERY_LIMIT"
** Es wurden mehr als 2500 requests pro Tag abgesetzt, update Intervalle der TRAFFIC Devices erhöhen und "burst" zu den Stosszeiten nutzen.
** Es wurden mehr als 2500 requests pro Tag abgesetzt. Abhilfe: Update Intervalle der TRAFFIC Devices erhöhen und "burst" zu den Stosszeiten nutzen.


* STATE: "ZERO_RESULTS"
* STATE: "ZERO_RESULTS"
** Die Waypoint definition kann Google nicht realisieren. Statt Städtenamen besser exakte Koordinaten verwenden.
** Die Waypoint Definition kann Google nicht realisieren. Statt Städtenamen besser exakte Koordinaten verwenden.


== Tips ==
== Tips ==
Zeile 211: Zeile 211:


* updateSchedule einsetzen um default update Intervall zu verfeinern
* updateSchedule einsetzen um default update Intervall zu verfeinern
** Montag bis Freitag von 6-8 Uhr alle 60 Sekunden
** Montag bis Freitag von 6 bis 8 Uhr alle 60 Sekunden
** <code>attr <device> updateSchedule 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60</code>
** <code>attr <device> updateSchedule 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60</code>
** jeden Tag von 17 bis 19 Uhr alle 2 Minuten
** jeden Tag von 17 bis 19 Uhr alle 2 Minuten
Zeile 217: Zeile 217:


* Waypoints definieren (Tip von erdo_king)
* Waypoints definieren (Tip von erdo_king)
** In Google-Maps die gewünschte Route auswählen. (PC)
** In Google-Maps die gewünschte Route auswählen (am PC)
** Auf eine signifikante Stelle der Route klicken - hierbei auf die Fahrtrichtung achten!
** 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
** 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)
** Im Browser zurückgehen, bis die Route wieder sichtbar ist (zum späteren Datenabgleich)
** Waypoints in FHEM deklarieren, Daten aktualisieren (set <device> update)
** Waypoints in FHEM deklarieren, Daten aktualisieren (set <device> update)
** distance + duration mit den Daten von Google-Maps am PC abgleichen
** distance + duration mit den Daten von Google-Maps am PC abgleichen

Version vom 26. Februar 2017, 10:15 Uhr

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!


Dieses Modul erfasst Fahrzeiten in aktueller Verkehrslage mittels Google Maps Directions API.

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
  • verschiedene Travel Modes (driving, walking, bicycling und transit)
  • flexibler Update Schedule für Stosszeiten
  • integrierte Google Map zum Visualisieren der konfigurierten Route

Voraussetzungen

Erstmal muss ein eigener API Key angefordert werden. Das geht über Googles API Manager
Dort "Google Maps Directions API" suchen und ein neues Projekt erstellen, anschliessend API aktivieren.

Je nach FHEM Installation zusätzlich die Perl Module LWP::Simple, JSON und MIME::Base64 nach installieren:
sudo apt-get install libwww-perl
sudo apt-get install libjson-perl
oder
sudo cpan -i LWP::Simple
sudo cpan -i JSON
sudo cpan -i MIME::Base64

Definition

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

Beispiel:
define muc2berlin TRAFFIC ABCDEFGHIJKLMNOPQRSTVWYZ 600

Der API Key muss selbstverständlich mit dem eigenen Key aus dem API Manager ersetzt werden.
Das Intervall in Sekunden ist optional, der default beträgt 3600 (1 Stunde).
Attribute start_address und end_address definieren.

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 5 Minuten 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
returnWaypoints lat, long|lat, long fixe Wegpunkte für den Rückweg, mehrere Werte per pipe (|) trennen, LAT, LONG Koordinaten angeben, wenn leer werden "waypoints" in umgekehrter Reihenfolge verwendet 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
travelMode driving driving:walking:bicycling:transit Fortbewegungsmethode für Kalkulation walking
updateSchedule <Beginn-volle-Stunde>-<Ende-volle-Stunde> [<Tag>] <update-Intervall-in-Sekunden> definiert einen flexiblen Zeitraum für feinere Updates, Tag als Zahl (Sonntag 0, Montag 1 etc.), mehrere Definitionen per (|) getrennt 6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60


Integrierte Karte

  • Zum Überprüfen der verwendeten Wegstrecke können der Hin- und Rückweg für ein TRAFFIC-Device auf einer Karte angezeigt werden.
  • Diese Karte ist verfügbar unter: http://fhem-ip:port/fhem/TRAFFIC_debug?name=<TRAFFIC-DEVICE>
  • Um die Karte zu erzeugen, muss "verbose" auf 5 gesetzt werden. Das führt dazu, dass ein Weblink auf die jeweilige Karte im automatisch generierten Raum "TRAFFIC_debug" angelegt wird.
    • attr <DEVICE> verbose 5
    • set <DEVICE> update
    • Raum / Link öffnen
      • grün visualisiert den Hinweg
      • rot visualisiert den Rückweg
  • Der Weblink und ggf. der erzeugte Raum werden wieder entfernt, sobald verbose auf Werte unter 5 gesetzt wird.

Bekannte Probleme

  • STATE: "REQUEST DENIED"
  • Reading error_message: "This API project is not authorized to use this API"
    • => API Key ist nicht aktiviert. Google API > API Manager > Google Maps Directions API > AKTIVIEREN
  • 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"
    • Es wurden mehr als 2500 requests pro Tag abgesetzt. Abhilfe: Update Intervalle der TRAFFIC Devices erhöhen und "burst" zu den Stosszeiten nutzen.
  • STATE: "ZERO_RESULTS"
    • Die Waypoint Definition kann Google nicht realisieren. Statt Städtenamen besser exakte Koordinaten verwenden.

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))}
  • updateSchedule einsetzen um default update Intervall zu verfeinern
    • Montag bis Freitag von 6 bis 8 Uhr alle 60 Sekunden
    • attr <device> updateSchedule 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60
    • jeden Tag von 17 bis 19 Uhr alle 2 Minuten
    • attr <device> updateSchedule 17-19 120
  • Waypoints definieren (Tip von erdo_king)
    • In Google-Maps die gewünschte Route auswählen (am 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ückgehen, bis die Route wieder sichtbar ist (zum späteren Datenabgleich)
    • Waypoints in FHEM deklarieren, Daten aktualisieren (set <device> update)
    • distance + duration mit den Daten von Google-Maps am PC abgleichen

to Do

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

Weblinks