<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jmike</id>
	<title>FHEMWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jmike"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/Jmike"/>
	<updated>2026-05-04T01:54:22Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=27796</id>
		<title>TRAFFIC</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=27796"/>
		<updated>2018-09-07T07:44:17Z</updated>

		<summary type="html">&lt;p&gt;Jmike: Google pricing Hinweis hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verkehrsdaten zu fest definierten Routen ermitteln&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=98_TRAFFIC.pm&lt;br /&gt;
|ModOwner=jmike &amp;lt;br /&amp;gt;({{Link2Forum|Topic=56045|LinkText=Forum}} / [[Benutzer:Jmike|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieses Modul erfasst Fahrzeiten in aktueller Verkehrslage mittels Google Maps Directions API.&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
* Distanz einer Route&lt;br /&gt;
* Fahrzeit ohne Verkehr&lt;br /&gt;
* Fahrzeit mit Verkehr&lt;br /&gt;
* Verzögerung der geplanten Route&lt;br /&gt;
* Waypoints definieren&lt;br /&gt;
* Ausgabesprache festlegen &lt;br /&gt;
* Outputs in Sekunden / Meter (raw)&lt;br /&gt;
* Ausgabe als Text, in Minuten, Sekunden oder als Durchschnitt&lt;br /&gt;
* Device STATE frei wählbar&lt;br /&gt;
* einstellbares Update Interval&lt;br /&gt;
* update-burst für Stosszeiten&lt;br /&gt;
* Strecke kann zusätzlich in gegengesetzte Richtung ausgelesen werden&lt;br /&gt;
* Ankunfszeit bei Abfahrt zum Update-Zeitpunkt&lt;br /&gt;
* verschiedene Travel Modes (driving, walking, bicycling und transit)&lt;br /&gt;
* flexibler Update Schedule für Stosszeiten&lt;br /&gt;
* integrierte, konfigurierbare Google Map zum Visualisieren der konfigurierten Route&lt;br /&gt;
* Kurzbeschreibung der Alternativen Routen und Anzeige auf der Karte (optional)&lt;br /&gt;
* DBLog Integration&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Erstmal muss ein eigener API Key angefordert werden. &lt;br /&gt;
Das geht über Googles [https://console.developers.google.com/apis/ API Manager]&amp;lt;br&amp;gt;&lt;br /&gt;
Dort  &amp;quot;Google Maps Directions API&amp;quot; suchen und ein neues Projekt erstellen, anschliessend API aktivieren.&lt;br /&gt;
Für die Karte ist zusätzlich der &amp;quot;Google Maps JavaScript API&amp;quot; notwendig und sollte an dieser Stelle auch aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
[[Wichtig!]]&lt;br /&gt;
Google stellt die API nicht mehr unbegrenzt kostenlos zur Verfügung (https://cloud.google.com/maps-platform/pricing/) sondern nur noch über ein gratis Kontingent, welches derzeit 300€ auf 365 Tage ist. Ist das Kontingent aufgebraucht, werden die Abfragen Seitens Google gedrosselt (bis zu 1x pro Tag) solange man keine kostenpflichtige Abrechnung einrichtet.&amp;lt;br&amp;gt;&lt;br /&gt;
Weiteres dazu im Foreneintrag ab hier: https://forum.fhem.de/index.php/topic,56045.msg830728.html#msg830728 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach FHEM Installation zusätzlich die Perl Module LWP::Simple, JSON und MIME::Base64 nach installieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libwww-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libjson-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
oder&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i LWP::Simple&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i JSON&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i MIME::Base64&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&amp;lt;code&amp;gt; define &amp;lt;devicename&amp;gt; TRAFFIC &amp;lt;API-KEY&amp;gt; [update-interval] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;define muc2berlin TRAFFIC ABCDEFGHIJKLMNOPQRSTVWYZ 600&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der API Key muss selbstverständlich mit dem eigenen Key aus dem API Manager ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Intervall in Sekunden ist optional, der default beträgt 3600 (1 Stunde).&amp;lt;br&amp;gt;&lt;br /&gt;
Attribute start_address und end_address definieren.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
* [alternatives]&lt;br /&gt;
* average_delay_min&lt;br /&gt;
* average_duration_in_traffic_min&lt;br /&gt;
* average_duration_min&lt;br /&gt;
* delay&lt;br /&gt;
* delay_min&lt;br /&gt;
* distance&lt;br /&gt;
* duration&lt;br /&gt;
* duration_in_traffic&lt;br /&gt;
* duration_in_traffic_min&lt;br /&gt;
* duration_in_traffic_sec&lt;br /&gt;
* duration_min&lt;br /&gt;
* duration_sec&lt;br /&gt;
* [error_message]&lt;br /&gt;
* eta&lt;br /&gt;
* state&lt;br /&gt;
* status&lt;br /&gt;
* summary&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
&lt;br /&gt;
==== update  [burst-update-count] [burst-update-interval] ====&lt;br /&gt;
Readings manuell aktualisieren,  der optionale Burst kann wie folgt genutzt werden:&amp;lt;br&amp;gt;&lt;br /&gt;
- erster Wert gibt an wie viele Updates abgearbeitet werden&amp;lt;br&amp;gt;&lt;br /&gt;
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel um für 1 Stunde alle 5 Minuten zu aktualisieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== STATE ==&lt;br /&gt;
* Initialized       - modul initialisiert&lt;br /&gt;
* OK        - update war erfolgreich&lt;br /&gt;
* incomplete configuration - Konfigurationsfehler (start_address oder end_address leer)&lt;br /&gt;
* &amp;lt;APIRETURN&amp;gt;         - Fehlermeldung von Google Maps, falls vorhanden (siehe Reading error_message)&lt;br /&gt;
* &amp;lt;Reading&amp;gt; - der Wert des Readings welches mit Attribut stateReading ausgewählt wurde&lt;br /&gt;
* disabled - das Device wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Default Wert&lt;br /&gt;
!mögliche Werte&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |start_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Startadresse (erforderlich!)&lt;br /&gt;
|Startstr 1, 12345 Startcity&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |end_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Zieladresse (erforderlich!)&lt;br /&gt;
|Zielstr 99, 99099 Zielstadt&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |raw_data&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|legt Readings an mit allen unbearbeiteten Werten &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |language&lt;br /&gt;
|&lt;br /&gt;
|de, en, etc.&lt;br /&gt;
|Google ermittelt die Sprache automatisch, falls nicht fest definiert&lt;br /&gt;
|de&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |waypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte auf der Strecke, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |returnWaypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte für den Rückweg, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben, wenn leer werden &amp;quot;waypoints&amp;quot; in umgekehrter Reihenfolge verwendet&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |disable&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Modul deaktivieren&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |stateReading&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;beliebiges-Reading&amp;gt;&lt;br /&gt;
|Name eines Readings, dessen Wert in den STATE des Devices geschrieben wird&lt;br /&gt;
|delay_min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |outputReadings&lt;br /&gt;
|text&lt;br /&gt;
|text,min,sec,average&lt;br /&gt;
|Konfiguration, welche Readings erstellt werden sollen, eine oder mehrere möglich&lt;br /&gt;
|text min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |includeReturn&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|aktiviert/deaktiviert, ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll&amp;lt;br&amp;gt;Readings werden mit return_* angegeben&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |verbose&lt;br /&gt;
|1&lt;br /&gt;
|0:1:2:3:4:5&lt;br /&gt;
|gibt vor, wie ausführlich geloggt wird&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |travelMode&lt;br /&gt;
|driving&lt;br /&gt;
|driving:walking:bicycling:transit&lt;br /&gt;
|Fortbewegungsmethode für Kalkulation&lt;br /&gt;
|walking&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |updateSchedule&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;Beginn-volle-Stunde&amp;gt;-&amp;lt;Ende-volle-Stunde&amp;gt; [&amp;lt;Tag&amp;gt;] &amp;lt;update-Intervall-in-Sekunden&amp;gt;&lt;br /&gt;
|definiert einen flexiblen Zeitraum für feinere Updates, Tag als Zahl (Sonntag 0, Montag 1 etc.), mehrere Definitionen per &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; getrennt&lt;br /&gt;
| 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsStyle&lt;br /&gt;
|default&lt;br /&gt;
|default,silver,dark,night&lt;br /&gt;
|definiert einen der vorgegebenen Map Styles&lt;br /&gt;
|&amp;lt;i&amp;gt;dropdown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsSize&lt;br /&gt;
|800,600&lt;br /&gt;
|&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&lt;br /&gt;
|definiert die Breite und Höhe der Karte&lt;br /&gt;
| 600,300&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsCenter&lt;br /&gt;
|&amp;lt;i&amp;gt;auto-generiert&amp;lt;/i&amp;gt;&lt;br /&gt;
|&amp;lt;lat&amp;gt;,&amp;lt;lang&amp;gt;&lt;br /&gt;
|definiert den Mittelpunkt der Karte&lt;br /&gt;
| 48.2322157,11.6867434 &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsZoom&lt;br /&gt;
|10&lt;br /&gt;
|&amp;lt;Zoom wert&amp;gt;&lt;br /&gt;
|definiert den Zoom Wert der Karte&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsStroke&lt;br /&gt;
|#4cde44,6,100,#FF0000,1,100&lt;br /&gt;
|&amp;lt;#-6-digit-hex-code&amp;gt;,[&amp;lt;weight&amp;gt;[,&amp;lt;opacity&amp;gt;],]&amp;lt;#-6-digit-hex-code&amp;gt;,[&amp;lt;weight&amp;gt;,[&amp;lt;opacity&amp;gt;]]&lt;br /&gt;
|definiert die Farbe der Wegstrecken im HEX Format, Dicke der Linie und Transparenz. Getrennte Angabe von Hin- und Rückweg sind möglich.&lt;br /&gt;
| #019cdf,#ffeb19&amp;lt;br&amp;gt;#019cdf,15,50,#ffeb19,15,50&amp;lt;br&amp;gt;#019cdf,20,80,#ffeb19&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsTrafficLayer&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|schaltet den Standard Google Maps Traffic Overlay ein/aus&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsDisableUI&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Dropdown um die Map Controls zu deaktivieren&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsFixedMap&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|verhindert das verschieben/zoomen der Karte&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; | alternatives&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|aktiviert das Reading alternatives, welches Alternative Routen (Kurzbeschreibung + Wegzeit) anzeigt&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Integrierte Karte ==&lt;br /&gt;
* Zum Überprüfen der verwendeten Wegstrecke können der Hin- und Rückweg für ein TRAFFIC-Device auf einer Karte angezeigt werden.&lt;br /&gt;
* Um die Karte anzuzeigen einfach oben auf &amp;quot;toggle Map&amp;quot; klicken&lt;br /&gt;
* Für Einbindung in andere Anwendungen (TabletUI z.b) kann die Karte zusätzlich über den eingeblendeten Link erreicht werden: &amp;lt;nowiki&amp;gt;http://fhem-ip:port/fhem/TRAFFIC?name=&amp;lt;TRAFFIC-DEVICE&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Karte anpassen:&lt;br /&gt;
** Die Karte lässt sich über folgende Attribute anpassen:&lt;br /&gt;
** GoogleMapsStyle, GoogleMapsSize, GoogleMapsCenter, GoogleMapsZoom, GoogleMapsStroke, GoogleMapsTrafficLayer und GoogleMapsFixedMap&lt;br /&gt;
** GoogleMapsZoom und GoogleMapsCenter können direkt in der Kartenansicht gespeichert werden. Dazu die Karte verschieben/zoomen und anschliessend auf die Buttons &amp;quot;save Zoom&amp;quot; bzw. &amp;quot;save Center&amp;quot; klicken&lt;br /&gt;
** weitere Beispiele bitte dem Forum entnehmen&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* STATE: &amp;quot;REQUEST DENIED&amp;quot;&lt;br /&gt;
* Reading error_message: &amp;quot;This API project is not authorized to use this API&amp;quot;&lt;br /&gt;
** =&amp;gt;  API Key ist nicht aktiviert. Google API &amp;gt; API Manager &amp;gt; Google Maps Directions API &amp;gt; AKTIVIEREN &lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;UNKNOWN_ERROR&amp;quot;&lt;br /&gt;
** =&amp;gt; Es liegt ein Fehler bei Google vor.&lt;br /&gt;
** =&amp;gt; &amp;quot;UNKNOWN_ERROR indicates a directions request could not be processed due to a server error. The request may succeed if you try again.&amp;quot; [https://developers.google.com/maps/documentation/javascript/directions?hl=de]&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;OVER_QUERY_LIMIT&amp;quot;&lt;br /&gt;
** Es wurden mehr als 2500 requests pro Tag abgesetzt. Abhilfe: Update Intervalle der TRAFFIC Devices erhöhen und &amp;quot;burst&amp;quot; zu den Stosszeiten nutzen.&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;ZERO_RESULTS&amp;quot;&lt;br /&gt;
** Die Waypoint Definition kann Google nicht realisieren. Statt Städtenamen besser exakte Koordinaten verwenden.&lt;br /&gt;
&lt;br /&gt;
* Karte zeigt nur ein graues Bild &amp;quot;Ops...&amp;quot;&lt;br /&gt;
** checkt eure Javascript Konsole nach dem exakten Fehler&lt;br /&gt;
** Google Maps API error: ApiNotActivatedMapError https://developers.google.com/maps/documentation/javascript/error-messages#api-not-activated-map-error&lt;br /&gt;
** =&amp;gt; Google Maps JavaScript API aktivieren&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* täglicher Burst Update zum Feierabend, 1 Stunde alle 5 Minuten updaten:&lt;br /&gt;
** &amp;lt;code&amp;gt;define FeierabendCheck AT *17:00 set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* komplette Reisezeit, also Hin- und Rückweg, im STATE anzeigen:&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; stateFormat {int(ReadingsVal($name,&amp;quot;delay_min&amp;quot;,0)) + int(ReadingsVal($name,&amp;quot;return_delay_min&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* updateSchedule einsetzen um default update Intervall zu verfeinern&lt;br /&gt;
** Montag bis Freitag von 6 bis 8 Uhr alle 60 Sekunden&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&amp;lt;/code&amp;gt;&lt;br /&gt;
** jeden Tag von 17 bis 19 Uhr alle 2 Minuten&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 17-19 120&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Waypoints definieren (Tip von erdo_king)&lt;br /&gt;
** In Google-Maps die gewünschte Route auswählen (am PC)&lt;br /&gt;
** Auf eine signifikante Stelle der Route klicken - hierbei auf die Fahrtrichtung achten!&lt;br /&gt;
** Hier auf die Koordinaten klicken, diese können dann aus dem Suchfeld kopiert werden&lt;br /&gt;
** Im Browser zurückgehen, bis die Route wieder sichtbar ist (zum späteren Datenabgleich)&lt;br /&gt;
** Waypoints in FHEM deklarieren, Daten aktualisieren (set &amp;lt;device&amp;gt; update)&lt;br /&gt;
** distance + duration mit den Daten von Google-Maps am PC abgleichen&lt;br /&gt;
&lt;br /&gt;
== to Do ==&lt;br /&gt;
* deutsche Commandref&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=56045|LinkText=Modul Vorstellung und Diskussionen}}&lt;br /&gt;
* {{Link2CmdRef|Anker=#TRAFFIC}}&lt;br /&gt;
* [https://console.developers.google.com/apis Google API Manager]&lt;/div&gt;</summary>
		<author><name>Jmike</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=24709</id>
		<title>TRAFFIC</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=24709"/>
		<updated>2018-01-26T09:00:36Z</updated>

		<summary type="html">&lt;p&gt;Jmike: update für version 1.3.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verkehrsdaten zu fest definierten Routen ermitteln&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=98_TRAFFIC.pm&lt;br /&gt;
|ModOwner=jmike &amp;lt;br /&amp;gt;({{Link2Forum|Topic=56045|LinkText=Forum}} / [[Benutzer:Jmike|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieses Modul erfasst Fahrzeiten in aktueller Verkehrslage mittels Google Maps Directions API.&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
* Distanz einer Route&lt;br /&gt;
* Fahrzeit ohne Verkehr&lt;br /&gt;
* Fahrzeit mit Verkehr&lt;br /&gt;
* Verzögerung der geplanten Route&lt;br /&gt;
* Waypoints definieren&lt;br /&gt;
* Ausgabesprache festlegen &lt;br /&gt;
* Outputs in Sekunden / Meter (raw)&lt;br /&gt;
* Ausgabe als Text, in Minuten, Sekunden oder als Durchschnitt&lt;br /&gt;
* Device STATE frei wählbar&lt;br /&gt;
* einstellbares Update Interval&lt;br /&gt;
* update-burst für Stosszeiten&lt;br /&gt;
* Strecke kann zusätzlich in gegengesetzte Richtung ausgelesen werden&lt;br /&gt;
* Ankunfszeit bei Abfahrt zum Update-Zeitpunkt&lt;br /&gt;
* verschiedene Travel Modes (driving, walking, bicycling und transit)&lt;br /&gt;
* flexibler Update Schedule für Stosszeiten&lt;br /&gt;
* integrierte, konfigurierbare Google Map zum Visualisieren der konfigurierten Route&lt;br /&gt;
* Kurzbeschreibung der Alternativen Routen und Anzeige auf der Karte (optional)&lt;br /&gt;
* DBLog Integration&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Erstmal muss ein eigener API Key angefordert werden. &lt;br /&gt;
Das geht über Googles [https://console.developers.google.com/apis/ API Manager]&amp;lt;br&amp;gt;&lt;br /&gt;
Dort  &amp;quot;Google Maps Directions API&amp;quot; suchen und ein neues Projekt erstellen, anschliessend API aktivieren.&lt;br /&gt;
Für die Karte ist zusätzlich der &amp;quot;Google Maps JavaScript API&amp;quot; notwendig und sollte an dieser Stelle auch aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
Je nach FHEM Installation zusätzlich die Perl Module LWP::Simple, JSON und MIME::Base64 nach installieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libwww-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libjson-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
oder&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i LWP::Simple&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i JSON&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i MIME::Base64&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&amp;lt;code&amp;gt; define &amp;lt;devicename&amp;gt; TRAFFIC &amp;lt;API-KEY&amp;gt; [update-interval] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;define muc2berlin TRAFFIC ABCDEFGHIJKLMNOPQRSTVWYZ 600&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der API Key muss selbstverständlich mit dem eigenen Key aus dem API Manager ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Intervall in Sekunden ist optional, der default beträgt 3600 (1 Stunde).&amp;lt;br&amp;gt;&lt;br /&gt;
Attribute start_address und end_address definieren.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
* [alternatives]&lt;br /&gt;
* average_delay_min&lt;br /&gt;
* average_duration_in_traffic_min&lt;br /&gt;
* average_duration_min&lt;br /&gt;
* delay&lt;br /&gt;
* delay_min&lt;br /&gt;
* distance&lt;br /&gt;
* duration&lt;br /&gt;
* duration_in_traffic&lt;br /&gt;
* duration_in_traffic_min&lt;br /&gt;
* duration_in_traffic_sec&lt;br /&gt;
* duration_min&lt;br /&gt;
* duration_sec&lt;br /&gt;
* [error_message]&lt;br /&gt;
* eta&lt;br /&gt;
* state&lt;br /&gt;
* status&lt;br /&gt;
* summary&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
&lt;br /&gt;
==== update  [burst-update-count] [burst-update-interval] ====&lt;br /&gt;
Readings manuell aktualisieren,  der optionale Burst kann wie folgt genutzt werden:&amp;lt;br&amp;gt;&lt;br /&gt;
- erster Wert gibt an wie viele Updates abgearbeitet werden&amp;lt;br&amp;gt;&lt;br /&gt;
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel um für 1 Stunde alle 5 Minuten zu aktualisieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== STATE ==&lt;br /&gt;
* Initialized       - modul initialisiert&lt;br /&gt;
* OK        - update war erfolgreich&lt;br /&gt;
* incomplete configuration - Konfigurationsfehler (start_address oder end_address leer)&lt;br /&gt;
* &amp;lt;APIRETURN&amp;gt;         - Fehlermeldung von Google Maps, falls vorhanden (siehe Reading error_message)&lt;br /&gt;
* &amp;lt;Reading&amp;gt; - der Wert des Readings welches mit Attribut stateReading ausgewählt wurde&lt;br /&gt;
* disabled - das Device wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Default Wert&lt;br /&gt;
!mögliche Werte&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |start_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Startadresse (erforderlich!)&lt;br /&gt;
|Startstr 1, 12345 Startcity&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |end_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Zieladresse (erforderlich!)&lt;br /&gt;
|Zielstr 99, 99099 Zielstadt&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |raw_data&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|legt Readings an mit allen unbearbeiteten Werten &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |language&lt;br /&gt;
|&lt;br /&gt;
|de, en, etc.&lt;br /&gt;
|Google ermittelt die Sprache automatisch, falls nicht fest definiert&lt;br /&gt;
|de&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |waypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte auf der Strecke, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |returnWaypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte für den Rückweg, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben, wenn leer werden &amp;quot;waypoints&amp;quot; in umgekehrter Reihenfolge verwendet&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |disable&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Modul deaktivieren&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |stateReading&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;beliebiges-Reading&amp;gt;&lt;br /&gt;
|Name eines Readings, dessen Wert in den STATE des Devices geschrieben wird&lt;br /&gt;
|delay_min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |outputReadings&lt;br /&gt;
|text&lt;br /&gt;
|text,min,sec,average&lt;br /&gt;
|Konfiguration, welche Readings erstellt werden sollen, eine oder mehrere möglich&lt;br /&gt;
|text min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |includeReturn&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|aktiviert/deaktiviert, ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll&amp;lt;br&amp;gt;Readings werden mit return_* angegeben&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |verbose&lt;br /&gt;
|1&lt;br /&gt;
|0:1:2:3:4:5&lt;br /&gt;
|gibt vor, wie ausführlich geloggt wird&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |travelMode&lt;br /&gt;
|driving&lt;br /&gt;
|driving:walking:bicycling:transit&lt;br /&gt;
|Fortbewegungsmethode für Kalkulation&lt;br /&gt;
|walking&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |updateSchedule&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;Beginn-volle-Stunde&amp;gt;-&amp;lt;Ende-volle-Stunde&amp;gt; [&amp;lt;Tag&amp;gt;] &amp;lt;update-Intervall-in-Sekunden&amp;gt;&lt;br /&gt;
|definiert einen flexiblen Zeitraum für feinere Updates, Tag als Zahl (Sonntag 0, Montag 1 etc.), mehrere Definitionen per &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; getrennt&lt;br /&gt;
| 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsStyle&lt;br /&gt;
|default&lt;br /&gt;
|default,silver,dark,night&lt;br /&gt;
|definiert einen der vorgegebenen Map Styles&lt;br /&gt;
|&amp;lt;i&amp;gt;dropdown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsSize&lt;br /&gt;
|800,600&lt;br /&gt;
|&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&lt;br /&gt;
|definiert die Breite und Höhe der Karte&lt;br /&gt;
| 600,300&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsCenter&lt;br /&gt;
|&amp;lt;i&amp;gt;auto-generiert&amp;lt;/i&amp;gt;&lt;br /&gt;
|&amp;lt;lat&amp;gt;,&amp;lt;lang&amp;gt;&lt;br /&gt;
|definiert den Mittelpunkt der Karte&lt;br /&gt;
| 48.2322157,11.6867434 &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsZoom&lt;br /&gt;
|10&lt;br /&gt;
|&amp;lt;Zoom wert&amp;gt;&lt;br /&gt;
|definiert den Zoom Wert der Karte&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsStroke&lt;br /&gt;
|#4cde44,6,100,#FF0000,1,100&lt;br /&gt;
|&amp;lt;#-6-digit-hex-code&amp;gt;,[&amp;lt;weight&amp;gt;[,&amp;lt;opacity&amp;gt;],]&amp;lt;#-6-digit-hex-code&amp;gt;,[&amp;lt;weight&amp;gt;,[&amp;lt;opacity&amp;gt;]]&lt;br /&gt;
|definiert die Farbe der Wegstrecken im HEX Format, Dicke der Linie und Transparenz. Getrennte Angabe von Hin- und Rückweg sind möglich.&lt;br /&gt;
| #019cdf,#ffeb19&amp;lt;br&amp;gt;#019cdf,15,50,#ffeb19,15,50&amp;lt;br&amp;gt;#019cdf,20,80,#ffeb19&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsTrafficLayer&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|schaltet den Standard Google Maps Traffic Overlay ein/aus&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsDisableUI&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Dropdown um die Map Controls zu deaktivieren&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsFixedMap&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|verhindert das verschieben/zoomen der Karte&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; | alternatives&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|aktiviert das Reading alternatives, welches Alternative Routen (Kurzbeschreibung + Wegzeit) anzeigt&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Integrierte Karte ==&lt;br /&gt;
* Zum Überprüfen der verwendeten Wegstrecke können der Hin- und Rückweg für ein TRAFFIC-Device auf einer Karte angezeigt werden.&lt;br /&gt;
* Um die Karte anzuzeigen einfach oben auf &amp;quot;toggle Map&amp;quot; klicken&lt;br /&gt;
* Für Einbindung in andere Anwendungen (TabletUI z.b) kann die Karte zusätzlich über den eingeblendeten Link erreicht werden: &amp;lt;nowiki&amp;gt;http://fhem-ip:port/fhem/TRAFFIC?name=&amp;lt;TRAFFIC-DEVICE&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Karte anpassen:&lt;br /&gt;
** Die Karte lässt sich über folgende Attribute anpassen:&lt;br /&gt;
** GoogleMapsStyle, GoogleMapsSize, GoogleMapsCenter, GoogleMapsZoom, GoogleMapsStroke, GoogleMapsTrafficLayer und GoogleMapsFixedMap&lt;br /&gt;
** GoogleMapsZoom und GoogleMapsCenter können direkt in der Kartenansicht gespeichert werden. Dazu die Karte verschieben/zoomen und anschliessend auf die Buttons &amp;quot;save Zoom&amp;quot; bzw. &amp;quot;save Center&amp;quot; klicken&lt;br /&gt;
** weitere Beispiele bitte dem Forum entnehmen&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* STATE: &amp;quot;REQUEST DENIED&amp;quot;&lt;br /&gt;
* Reading error_message: &amp;quot;This API project is not authorized to use this API&amp;quot;&lt;br /&gt;
** =&amp;gt;  API Key ist nicht aktiviert. Google API &amp;gt; API Manager &amp;gt; Google Maps Directions API &amp;gt; AKTIVIEREN &lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;UNKNOWN_ERROR&amp;quot;&lt;br /&gt;
** =&amp;gt; Es liegt ein Fehler bei Google vor.&lt;br /&gt;
** =&amp;gt; &amp;quot;UNKNOWN_ERROR indicates a directions request could not be processed due to a server error. The request may succeed if you try again.&amp;quot; [https://developers.google.com/maps/documentation/javascript/directions?hl=de]&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;OVER_QUERY_LIMIT&amp;quot;&lt;br /&gt;
** Es wurden mehr als 2500 requests pro Tag abgesetzt. Abhilfe: Update Intervalle der TRAFFIC Devices erhöhen und &amp;quot;burst&amp;quot; zu den Stosszeiten nutzen.&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;ZERO_RESULTS&amp;quot;&lt;br /&gt;
** Die Waypoint Definition kann Google nicht realisieren. Statt Städtenamen besser exakte Koordinaten verwenden.&lt;br /&gt;
&lt;br /&gt;
* Karte zeigt nur ein graues Bild &amp;quot;Ops...&amp;quot;&lt;br /&gt;
** checkt eure Javascript Konsole nach dem exakten Fehler&lt;br /&gt;
** Google Maps API error: ApiNotActivatedMapError https://developers.google.com/maps/documentation/javascript/error-messages#api-not-activated-map-error&lt;br /&gt;
** =&amp;gt; Google Maps JavaScript API aktivieren&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* täglicher Burst Update zum Feierabend, 1 Stunde alle 5 Minuten updaten:&lt;br /&gt;
** &amp;lt;code&amp;gt;define FeierabendCheck AT *17:00 set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* komplette Reisezeit, also Hin- und Rückweg, im STATE anzeigen:&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; stateFormat {int(ReadingsVal($name,&amp;quot;delay_min&amp;quot;,0)) + int(ReadingsVal($name,&amp;quot;return_delay_min&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* updateSchedule einsetzen um default update Intervall zu verfeinern&lt;br /&gt;
** Montag bis Freitag von 6 bis 8 Uhr alle 60 Sekunden&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&amp;lt;/code&amp;gt;&lt;br /&gt;
** jeden Tag von 17 bis 19 Uhr alle 2 Minuten&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 17-19 120&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Waypoints definieren (Tip von erdo_king)&lt;br /&gt;
** In Google-Maps die gewünschte Route auswählen (am PC)&lt;br /&gt;
** Auf eine signifikante Stelle der Route klicken - hierbei auf die Fahrtrichtung achten!&lt;br /&gt;
** Hier auf die Koordinaten klicken, diese können dann aus dem Suchfeld kopiert werden&lt;br /&gt;
** Im Browser zurückgehen, bis die Route wieder sichtbar ist (zum späteren Datenabgleich)&lt;br /&gt;
** Waypoints in FHEM deklarieren, Daten aktualisieren (set &amp;lt;device&amp;gt; update)&lt;br /&gt;
** distance + duration mit den Daten von Google-Maps am PC abgleichen&lt;br /&gt;
&lt;br /&gt;
== to Do ==&lt;br /&gt;
* deutsche Commandref&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=56045|LinkText=Modul Vorstellung und Diskussionen}}&lt;br /&gt;
* [http://fhem.de/commandref.html#TRAFFIC Commandref]&lt;br /&gt;
* [https://console.developers.google.com/apis Google API Manager]&lt;/div&gt;</summary>
		<author><name>Jmike</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=21391</id>
		<title>TRAFFIC</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=21391"/>
		<updated>2017-04-24T08:16:38Z</updated>

		<summary type="html">&lt;p&gt;Jmike: v.1.3.2 update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verkehrsdaten zu fest definierten Routen ermitteln&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=98_TRAFFIC.pm&lt;br /&gt;
|ModOwner=jmike &amp;lt;br /&amp;gt;({{Link2Forum|Topic=56045|LinkText=Forum}} / [[Benutzer:Jmike|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieses Modul erfasst Fahrzeiten in aktueller Verkehrslage mittels Google Maps Directions API.&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
* Distanz einer Route&lt;br /&gt;
* Fahrzeit ohne Verkehr&lt;br /&gt;
* Fahrzeit mit Verkehr&lt;br /&gt;
* Verzögerung der geplanten Route&lt;br /&gt;
* Waypoints definieren&lt;br /&gt;
* Ausgabesprache festlegen &lt;br /&gt;
* Outputs in Sekunden / Meter (raw)&lt;br /&gt;
* Ausgabe als Text, in Minuten, Sekunden oder als Durchschnitt&lt;br /&gt;
* Device STATE frei wählbar&lt;br /&gt;
* einstellbares Update Interval&lt;br /&gt;
* update-burst für Stosszeiten&lt;br /&gt;
* Strecke kann zusätzlich in gegengesetzte Richtung ausgelesen werden&lt;br /&gt;
* Ankunfszeit bei Abfahrt zum Update-Zeitpunkt&lt;br /&gt;
* verschiedene Travel Modes (driving, walking, bicycling und transit)&lt;br /&gt;
* flexibler Update Schedule für Stosszeiten&lt;br /&gt;
* integrierte, konfigurierbare Google Map zum Visualisieren der konfigurierten Route&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Erstmal muss ein eigener API Key angefordert werden. &lt;br /&gt;
Das geht über Googles [https://console.developers.google.com/apis/ API Manager]&amp;lt;br&amp;gt;&lt;br /&gt;
Dort  &amp;quot;Google Maps Directions API&amp;quot; suchen und ein neues Projekt erstellen, anschliessend API aktivieren.&lt;br /&gt;
Für die Karte ist zusätzlich der &amp;quot;Google Maps JavaScript API&amp;quot; notwendig und sollte an dieser Stelle auch aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
Je nach FHEM Installation zusätzlich die Perl Module LWP::Simple, JSON und MIME::Base64 nach installieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libwww-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libjson-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
oder&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i LWP::Simple&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i JSON&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i MIME::Base64&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&amp;lt;code&amp;gt; define &amp;lt;devicename&amp;gt; TRAFFIC &amp;lt;API-KEY&amp;gt; [update-interval] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;define muc2berlin TRAFFIC ABCDEFGHIJKLMNOPQRSTVWYZ 600&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der API Key muss selbstverständlich mit dem eigenen Key aus dem API Manager ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Intervall in Sekunden ist optional, der default beträgt 3600 (1 Stunde).&amp;lt;br&amp;gt;&lt;br /&gt;
Attribute start_address und end_address definieren.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
* average_delay_min&lt;br /&gt;
* average_duration_in_traffic_min&lt;br /&gt;
* average_duration_min&lt;br /&gt;
* delay&lt;br /&gt;
* delay_min&lt;br /&gt;
* distance&lt;br /&gt;
* duration&lt;br /&gt;
* duration_in_traffic&lt;br /&gt;
* duration_in_traffic_min&lt;br /&gt;
* duration_in_traffic_sec&lt;br /&gt;
* duration_min&lt;br /&gt;
* duration_sec&lt;br /&gt;
* [error_message]&lt;br /&gt;
* eta&lt;br /&gt;
* state&lt;br /&gt;
* status&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
&lt;br /&gt;
==== update  [burst-update-count] [burst-update-interval] ====&lt;br /&gt;
Readings manuell aktualisieren,  der optionale Burst kann wie folgt genutzt werden:&amp;lt;br&amp;gt;&lt;br /&gt;
- erster Wert gibt an wie viele Updates abgearbeitet werden&amp;lt;br&amp;gt;&lt;br /&gt;
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel um für 1 Stunde alle 5 Minuten zu aktualisieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== STATE ==&lt;br /&gt;
* Initialized       - modul initialisiert&lt;br /&gt;
* OK        - update war erfolgreich&lt;br /&gt;
* incomplete configuration - Konfigurationsfehler (start_address oder end_address leer)&lt;br /&gt;
* &amp;lt;APIRETURN&amp;gt;         - Fehlermeldung von Google Maps, falls vorhanden (siehe Reading error_message)&lt;br /&gt;
* &amp;lt;Reading&amp;gt; - der Wert des Readings welches mit Attribut stateReading ausgewählt wurde&lt;br /&gt;
* disabled - das Device wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Default Wert&lt;br /&gt;
!mögliche Werte&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |start_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Startadresse (erforderlich!)&lt;br /&gt;
|Startstr 1, 12345 Startcity&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |end_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Zieladresse (erforderlich!)&lt;br /&gt;
|Zielstr 99, 99099 Zielstadt&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |raw_data&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|legt Readings an mit allen unbearbeiteten Werten &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |language&lt;br /&gt;
|&lt;br /&gt;
|de, en, etc.&lt;br /&gt;
|Google ermittelt die Sprache automatisch, falls nicht fest definiert&lt;br /&gt;
|de&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |waypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte auf der Strecke, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |returnWaypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte für den Rückweg, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben, wenn leer werden &amp;quot;waypoints&amp;quot; in umgekehrter Reihenfolge verwendet&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |disable&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Modul deaktivieren&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |stateReading&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;beliebiges-Reading&amp;gt;&lt;br /&gt;
|Name eines Readings, dessen Wert in den STATE des Devices geschrieben wird&lt;br /&gt;
|delay_min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |outputReadings&lt;br /&gt;
|text&lt;br /&gt;
|text,min,sec,average&lt;br /&gt;
|Konfiguration, welche Readings erstellt werden sollen, eine oder mehrere möglich&lt;br /&gt;
|text min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |includeReturn&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|aktiviert/deaktiviert, ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll&amp;lt;br&amp;gt;Readings werden mit return_* angegeben&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |verbose&lt;br /&gt;
|1&lt;br /&gt;
|0:1:2:3:4:5&lt;br /&gt;
|gibt vor, wie ausführlich geloggt wird&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |travelMode&lt;br /&gt;
|driving&lt;br /&gt;
|driving:walking:bicycling:transit&lt;br /&gt;
|Fortbewegungsmethode für Kalkulation&lt;br /&gt;
|walking&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |updateSchedule&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;Beginn-volle-Stunde&amp;gt;-&amp;lt;Ende-volle-Stunde&amp;gt; [&amp;lt;Tag&amp;gt;] &amp;lt;update-Intervall-in-Sekunden&amp;gt;&lt;br /&gt;
|definiert einen flexiblen Zeitraum für feinere Updates, Tag als Zahl (Sonntag 0, Montag 1 etc.), mehrere Definitionen per &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; getrennt&lt;br /&gt;
| 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsStyle&lt;br /&gt;
|default&lt;br /&gt;
|default,silver,dark,night&lt;br /&gt;
|definiert einen der vorgegebenen Map Styles&lt;br /&gt;
|&amp;lt;i&amp;gt;dropdown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsSize&lt;br /&gt;
|800,600&lt;br /&gt;
|&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&lt;br /&gt;
|definiert die Breite und Höhe der Karte&lt;br /&gt;
| 600,300&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsCenter&lt;br /&gt;
|&amp;lt;i&amp;gt;auto-generiert&amp;lt;/i&amp;gt;&lt;br /&gt;
|&amp;lt;lat&amp;gt;,&amp;lt;lang&amp;gt;&lt;br /&gt;
|definiert den Mittelpunkt der Karte&lt;br /&gt;
| 48.2322157,11.6867434 &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsZoom&lt;br /&gt;
|10&lt;br /&gt;
|&amp;lt;Zoom wert&amp;gt;&lt;br /&gt;
|definiert den Zoom Wert der Karte&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsStroke&lt;br /&gt;
|#019cdf,#ffeb19&amp;lt;br&amp;gt;#019cdf,15,50,#ffeb19,15,50&amp;lt;br&amp;gt;#019cdf,20,80,#ffeb19&lt;br /&gt;
|&amp;lt;#-6-digit-hex-code&amp;gt;,[&amp;lt;weight&amp;gt;[,&amp;lt;opacity&amp;gt;],]&amp;lt;#-6-digit-hex-code&amp;gt;,[&amp;lt;weight&amp;gt;,[&amp;lt;opacity&amp;gt;]]&lt;br /&gt;
|definiert die Farbe der Wegstrecken im HEX Format, Dicke der Linie und Transparenz&lt;br /&gt;
| #4cde44,6,100,#FF0000,1,100&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsTrafficLayer&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|schaltet den Standard Google Maps Traffic Overlay ein/aus&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsDisableUI&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Dropdown um die Map Controls zu deaktivieren&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Integrierte Karte ==&lt;br /&gt;
* Zum Überprüfen der verwendeten Wegstrecke können der Hin- und Rückweg für ein TRAFFIC-Device auf einer Karte angezeigt werden.&lt;br /&gt;
* Um die Karte anzuzeigen einfach oben auf &amp;quot;toggle Map&amp;quot; klicken&lt;br /&gt;
* Für Einbindung in andere Anwendungen (TabletUI z.b) kann die Karte zusätzlich über den eingeblendeten Link erreicht werden: &amp;lt;nowiki&amp;gt;http://fhem-ip:port/fhem/TRAFFIC?name=&amp;lt;TRAFFIC-DEVICE&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Karte anpassen:&lt;br /&gt;
** Die Karte lässt sich über folgende Attribute anpassen:&lt;br /&gt;
** GoogleMapsStyle, GoogleMapsSize, GoogleMapsCenter, GoogleMapsZoom, GoogleMapsStroke und GoogleMapsTrafficLayer&lt;br /&gt;
** GoogleMapsZoom und GoogleMapsCenter können direkt in der Kartenansicht gespeichert werden. Dazu die Karte verschieben/zoomen und anschliessend auf die Buttons &amp;quot;save Zoom&amp;quot; bzw. &amp;quot;save Center&amp;quot; klicken&lt;br /&gt;
** weitere Beispiele bitte dem Forum entnehmen&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* STATE: &amp;quot;REQUEST DENIED&amp;quot;&lt;br /&gt;
* Reading error_message: &amp;quot;This API project is not authorized to use this API&amp;quot;&lt;br /&gt;
** =&amp;gt;  API Key ist nicht aktiviert. Google API &amp;gt; API Manager &amp;gt; Google Maps Directions API &amp;gt; AKTIVIEREN &lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;UNKNOWN_ERROR&amp;quot;&lt;br /&gt;
** =&amp;gt; Es liegt ein Fehler bei Google vor.&lt;br /&gt;
** =&amp;gt; &amp;quot;UNKNOWN_ERROR indicates a directions request could not be processed due to a server error. The request may succeed if you try again.&amp;quot; [https://developers.google.com/maps/documentation/javascript/directions?hl=de]&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;OVER_QUERY_LIMIT&amp;quot;&lt;br /&gt;
** Es wurden mehr als 2500 requests pro Tag abgesetzt. Abhilfe: Update Intervalle der TRAFFIC Devices erhöhen und &amp;quot;burst&amp;quot; zu den Stosszeiten nutzen.&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;ZERO_RESULTS&amp;quot;&lt;br /&gt;
** Die Waypoint Definition kann Google nicht realisieren. Statt Städtenamen besser exakte Koordinaten verwenden.&lt;br /&gt;
&lt;br /&gt;
* Karte zeigt nur ein graues Bild &amp;quot;Ops...&amp;quot;&lt;br /&gt;
** checkt eure Javascript Konsole nach dem exakten Fehler&lt;br /&gt;
** Google Maps API error: ApiNotActivatedMapError https://developers.google.com/maps/documentation/javascript/error-messages#api-not-activated-map-error&lt;br /&gt;
** =&amp;gt; Google Maps JavaScript API aktivieren&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* täglicher Burst Update zum Feierabend, 1 Stunde alle 5 Minuten updaten:&lt;br /&gt;
** &amp;lt;code&amp;gt;define FeierabendCheck AT *17:00 set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* komplette Reisezeit, also Hin- und Rückweg, im STATE anzeigen:&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; stateFormat {int(ReadingsVal($name,&amp;quot;delay_min&amp;quot;,0)) + int(ReadingsVal($name,&amp;quot;return_delay_min&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* updateSchedule einsetzen um default update Intervall zu verfeinern&lt;br /&gt;
** Montag bis Freitag von 6 bis 8 Uhr alle 60 Sekunden&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&amp;lt;/code&amp;gt;&lt;br /&gt;
** jeden Tag von 17 bis 19 Uhr alle 2 Minuten&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 17-19 120&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Waypoints definieren (Tip von erdo_king)&lt;br /&gt;
** In Google-Maps die gewünschte Route auswählen (am PC)&lt;br /&gt;
** Auf eine signifikante Stelle der Route klicken - hierbei auf die Fahrtrichtung achten!&lt;br /&gt;
** Hier auf die Koordinaten klicken, diese können dann aus dem Suchfeld kopiert werden&lt;br /&gt;
** Im Browser zurückgehen, bis die Route wieder sichtbar ist (zum späteren Datenabgleich)&lt;br /&gt;
** Waypoints in FHEM deklarieren, Daten aktualisieren (set &amp;lt;device&amp;gt; update)&lt;br /&gt;
** distance + duration mit den Daten von Google-Maps am PC abgleichen&lt;br /&gt;
&lt;br /&gt;
== to Do ==&lt;br /&gt;
* Reading error_message löschen wenn update erfolgreich&lt;br /&gt;
* deutsche Commandref&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=56045|LinkText=Modul Vorstellung und Diskussionen}}&lt;br /&gt;
* [http://fhem.de/commandref.html#TRAFFIC Commandref]&lt;br /&gt;
* [https://console.developers.google.com/apis Google API Manager]&lt;/div&gt;</summary>
		<author><name>Jmike</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=21385</id>
		<title>TRAFFIC</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=21385"/>
		<updated>2017-04-21T15:19:01Z</updated>

		<summary type="html">&lt;p&gt;Jmike: Troubleshooting erweitert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verkehrsdaten zu fest definierten Routen ermitteln&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=98_TRAFFIC.pm&lt;br /&gt;
|ModOwner=jmike &amp;lt;br /&amp;gt;({{Link2Forum|Topic=56045|LinkText=Forum}} / [[Benutzer:Jmike|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieses Modul erfasst Fahrzeiten in aktueller Verkehrslage mittels Google Maps Directions API.&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
* Distanz einer Route&lt;br /&gt;
* Fahrzeit ohne Verkehr&lt;br /&gt;
* Fahrzeit mit Verkehr&lt;br /&gt;
* Verzögerung der geplanten Route&lt;br /&gt;
* Waypoints definieren&lt;br /&gt;
* Ausgabesprache festlegen &lt;br /&gt;
* Outputs in Sekunden / Meter (raw)&lt;br /&gt;
* Ausgabe als Text, in Minuten, Sekunden oder als Durchschnitt&lt;br /&gt;
* Device STATE frei wählbar&lt;br /&gt;
* einstellbares Update Interval&lt;br /&gt;
* update-burst für Stosszeiten&lt;br /&gt;
* Strecke kann zusätzlich in gegengesetzte Richtung ausgelesen werden&lt;br /&gt;
* Ankunfszeit bei Abfahrt zum Update-Zeitpunkt&lt;br /&gt;
* verschiedene Travel Modes (driving, walking, bicycling und transit)&lt;br /&gt;
* flexibler Update Schedule für Stosszeiten&lt;br /&gt;
* integrierte, konfigurierbare Google Map zum Visualisieren der konfigurierten Route&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Erstmal muss ein eigener API Key angefordert werden. &lt;br /&gt;
Das geht über Googles [https://console.developers.google.com/apis/ API Manager]&amp;lt;br&amp;gt;&lt;br /&gt;
Dort  &amp;quot;Google Maps Directions API&amp;quot; suchen und ein neues Projekt erstellen, anschliessend API aktivieren.&lt;br /&gt;
Für die Karte ist zusätzlich der &amp;quot;Google Maps JavaScript API&amp;quot; notwendig und sollte an dieser Stelle auch aktiviert werden.&lt;br /&gt;
&lt;br /&gt;
Je nach FHEM Installation zusätzlich die Perl Module LWP::Simple, JSON und MIME::Base64 nach installieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libwww-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libjson-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
oder&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i LWP::Simple&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i JSON&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i MIME::Base64&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&amp;lt;code&amp;gt; define &amp;lt;devicename&amp;gt; TRAFFIC &amp;lt;API-KEY&amp;gt; [update-interval] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;define muc2berlin TRAFFIC ABCDEFGHIJKLMNOPQRSTVWYZ 600&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der API Key muss selbstverständlich mit dem eigenen Key aus dem API Manager ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Intervall in Sekunden ist optional, der default beträgt 3600 (1 Stunde).&amp;lt;br&amp;gt;&lt;br /&gt;
Attribute start_address und end_address definieren.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
* average_delay_min&lt;br /&gt;
* average_duration_in_traffic_min&lt;br /&gt;
* average_duration_min&lt;br /&gt;
* delay&lt;br /&gt;
* delay_min&lt;br /&gt;
* distance&lt;br /&gt;
* duration&lt;br /&gt;
* duration_in_traffic&lt;br /&gt;
* duration_in_traffic_min&lt;br /&gt;
* duration_in_traffic_sec&lt;br /&gt;
* duration_min&lt;br /&gt;
* duration_sec&lt;br /&gt;
* [error_message]&lt;br /&gt;
* eta&lt;br /&gt;
* state&lt;br /&gt;
* status&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
&lt;br /&gt;
==== update  [burst-update-count] [burst-update-interval] ====&lt;br /&gt;
Readings manuell aktualisieren,  der optionale Burst kann wie folgt genutzt werden:&amp;lt;br&amp;gt;&lt;br /&gt;
- erster Wert gibt an wie viele Updates abgearbeitet werden&amp;lt;br&amp;gt;&lt;br /&gt;
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel um für 1 Stunde alle 5 Minuten zu aktualisieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== STATE ==&lt;br /&gt;
* Initialized       - modul initialisiert&lt;br /&gt;
* OK        - update war erfolgreich&lt;br /&gt;
* incomplete configuration - Konfigurationsfehler (start_address oder end_address leer)&lt;br /&gt;
* &amp;lt;APIRETURN&amp;gt;         - Fehlermeldung von Google Maps, falls vorhanden (siehe Reading error_message)&lt;br /&gt;
* &amp;lt;Reading&amp;gt; - der Wert des Readings welches mit Attribut stateReading ausgewählt wurde&lt;br /&gt;
* disabled - das Device wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Default Wert&lt;br /&gt;
!mögliche Werte&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |start_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Startadresse (erforderlich!)&lt;br /&gt;
|Startstr 1, 12345 Startcity&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |end_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Zieladresse (erforderlich!)&lt;br /&gt;
|Zielstr 99, 99099 Zielstadt&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |raw_data&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|legt Readings an mit allen unbearbeiteten Werten &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |language&lt;br /&gt;
|&lt;br /&gt;
|de, en, etc.&lt;br /&gt;
|Google ermittelt die Sprache automatisch, falls nicht fest definiert&lt;br /&gt;
|de&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |waypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte auf der Strecke, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |returnWaypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte für den Rückweg, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben, wenn leer werden &amp;quot;waypoints&amp;quot; in umgekehrter Reihenfolge verwendet&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |disable&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Modul deaktivieren&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |stateReading&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;beliebiges-Reading&amp;gt;&lt;br /&gt;
|Name eines Readings, dessen Wert in den STATE des Devices geschrieben wird&lt;br /&gt;
|delay_min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |outputReadings&lt;br /&gt;
|text&lt;br /&gt;
|text,min,sec,average&lt;br /&gt;
|Konfiguration, welche Readings erstellt werden sollen, eine oder mehrere möglich&lt;br /&gt;
|text min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |includeReturn&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|aktiviert/deaktiviert, ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll&amp;lt;br&amp;gt;Readings werden mit return_* angegeben&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |verbose&lt;br /&gt;
|1&lt;br /&gt;
|0:1:2:3:4:5&lt;br /&gt;
|gibt vor, wie ausführlich geloggt wird&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |travelMode&lt;br /&gt;
|driving&lt;br /&gt;
|driving:walking:bicycling:transit&lt;br /&gt;
|Fortbewegungsmethode für Kalkulation&lt;br /&gt;
|walking&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |updateSchedule&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;Beginn-volle-Stunde&amp;gt;-&amp;lt;Ende-volle-Stunde&amp;gt; [&amp;lt;Tag&amp;gt;] &amp;lt;update-Intervall-in-Sekunden&amp;gt;&lt;br /&gt;
|definiert einen flexiblen Zeitraum für feinere Updates, Tag als Zahl (Sonntag 0, Montag 1 etc.), mehrere Definitionen per &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; getrennt&lt;br /&gt;
| 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsStyle&lt;br /&gt;
|default&lt;br /&gt;
|default,silver,dark,night&lt;br /&gt;
|definiert einen der vorgegebenen Map Styles&lt;br /&gt;
|&amp;lt;i&amp;gt;dropdown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsSize&lt;br /&gt;
|800,600&lt;br /&gt;
|&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&lt;br /&gt;
|definiert die Breite und Höhe der Karte&lt;br /&gt;
| 600,300&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsCenter&lt;br /&gt;
|&amp;lt;i&amp;gt;auto-generiert&amp;lt;/i&amp;gt;&lt;br /&gt;
|&amp;lt;lat&amp;gt;,&amp;lt;lang&amp;gt;&lt;br /&gt;
|definiert den Mittelpunkt der Karte&lt;br /&gt;
| 48.2322157,11.6867434 &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsZoom&lt;br /&gt;
|10&lt;br /&gt;
|&amp;lt;Zoom wert&amp;gt;&lt;br /&gt;
|definiert den Zoom Wert der Karte&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsStroke&lt;br /&gt;
|#4cde44,#FF0000&lt;br /&gt;
|&amp;lt;Farbcode-Hinweg&amp;gt;,&amp;lt;Farbcode-Rückweg&amp;gt;&lt;br /&gt;
|definiert die Farbe der Wegstrecken im HEX Format&lt;br /&gt;
| #08eca7,#ec9c08&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsTrafficLayer&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|schaltet den Standard Google Maps Traffic Overlay ein/aus&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsDisableUI&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Dropdown um die Map Controls zu deaktivieren&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Integrierte Karte ==&lt;br /&gt;
* Zum Überprüfen der verwendeten Wegstrecke können der Hin- und Rückweg für ein TRAFFIC-Device auf einer Karte angezeigt werden.&lt;br /&gt;
* Um die Karte anzuzeigen einfach oben auf &amp;quot;toggle Map&amp;quot; klicken&lt;br /&gt;
* Für Einbindung in andere Anwendungen (TabletUI z.b) kann die Karte zusätzlich über den eingeblendeten Link erreicht werden: &amp;lt;nowiki&amp;gt;http://fhem-ip:port/fhem/TRAFFIC?name=&amp;lt;TRAFFIC-DEVICE&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Karte anpassen:&lt;br /&gt;
** Die Karte lässt sich über folgende Attribute anpassen:&lt;br /&gt;
** GoogleMapsStyle, GoogleMapsSize, GoogleMapsCenter, GoogleMapsZoom, GoogleMapsStroke und GoogleMapsTrafficLayer&lt;br /&gt;
** GoogleMapsZoom und GoogleMapsCenter können direkt in der Kartenansicht gespeichert werden. Dazu die Karte verschieben/zoomen und anschliessend auf die Buttons &amp;quot;save Zoom&amp;quot; bzw. &amp;quot;save Center&amp;quot; klicken&lt;br /&gt;
** weitere Beispiele bitte dem Forum entnehmen&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* STATE: &amp;quot;REQUEST DENIED&amp;quot;&lt;br /&gt;
* Reading error_message: &amp;quot;This API project is not authorized to use this API&amp;quot;&lt;br /&gt;
** =&amp;gt;  API Key ist nicht aktiviert. Google API &amp;gt; API Manager &amp;gt; Google Maps Directions API &amp;gt; AKTIVIEREN &lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;UNKNOWN_ERROR&amp;quot;&lt;br /&gt;
** =&amp;gt; Es liegt ein Fehler bei Google vor.&lt;br /&gt;
** =&amp;gt; &amp;quot;UNKNOWN_ERROR indicates a directions request could not be processed due to a server error. The request may succeed if you try again.&amp;quot; [https://developers.google.com/maps/documentation/javascript/directions?hl=de]&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;OVER_QUERY_LIMIT&amp;quot;&lt;br /&gt;
** Es wurden mehr als 2500 requests pro Tag abgesetzt. Abhilfe: Update Intervalle der TRAFFIC Devices erhöhen und &amp;quot;burst&amp;quot; zu den Stosszeiten nutzen.&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;ZERO_RESULTS&amp;quot;&lt;br /&gt;
** Die Waypoint Definition kann Google nicht realisieren. Statt Städtenamen besser exakte Koordinaten verwenden.&lt;br /&gt;
&lt;br /&gt;
* Karte zeigt nur ein graues Bild &amp;quot;Ops...&amp;quot;&lt;br /&gt;
** checkt eure Javascript Konsole nach dem exakten Fehler&lt;br /&gt;
** Google Maps API error: ApiNotActivatedMapError https://developers.google.com/maps/documentation/javascript/error-messages#api-not-activated-map-error&lt;br /&gt;
** =&amp;gt; Google Maps JavaScript API aktivieren&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* täglicher Burst Update zum Feierabend, 1 Stunde alle 5 Minuten updaten:&lt;br /&gt;
** &amp;lt;code&amp;gt;define FeierabendCheck AT *17:00 set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* komplette Reisezeit, also Hin- und Rückweg, im STATE anzeigen:&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; stateFormat {int(ReadingsVal($name,&amp;quot;delay_min&amp;quot;,0)) + int(ReadingsVal($name,&amp;quot;return_delay_min&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* updateSchedule einsetzen um default update Intervall zu verfeinern&lt;br /&gt;
** Montag bis Freitag von 6 bis 8 Uhr alle 60 Sekunden&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&amp;lt;/code&amp;gt;&lt;br /&gt;
** jeden Tag von 17 bis 19 Uhr alle 2 Minuten&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 17-19 120&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Waypoints definieren (Tip von erdo_king)&lt;br /&gt;
** In Google-Maps die gewünschte Route auswählen (am PC)&lt;br /&gt;
** Auf eine signifikante Stelle der Route klicken - hierbei auf die Fahrtrichtung achten!&lt;br /&gt;
** Hier auf die Koordinaten klicken, diese können dann aus dem Suchfeld kopiert werden&lt;br /&gt;
** Im Browser zurückgehen, bis die Route wieder sichtbar ist (zum späteren Datenabgleich)&lt;br /&gt;
** Waypoints in FHEM deklarieren, Daten aktualisieren (set &amp;lt;device&amp;gt; update)&lt;br /&gt;
** distance + duration mit den Daten von Google-Maps am PC abgleichen&lt;br /&gt;
&lt;br /&gt;
== to Do ==&lt;br /&gt;
* Reading error_message löschen wenn update erfolgreich&lt;br /&gt;
* deutsche Commandref&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=56045|LinkText=Modul Vorstellung und Diskussionen}}&lt;br /&gt;
* [http://fhem.de/commandref.html#TRAFFIC Commandref]&lt;br /&gt;
* [https://console.developers.google.com/apis Google API Manager]&lt;/div&gt;</summary>
		<author><name>Jmike</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=21384</id>
		<title>TRAFFIC</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=21384"/>
		<updated>2017-04-21T13:58:54Z</updated>

		<summary type="html">&lt;p&gt;Jmike: neues Attribut GoogleMapsZoom&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verkehrsdaten zu fest definierten Routen ermitteln&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=98_TRAFFIC.pm&lt;br /&gt;
|ModOwner=jmike &amp;lt;br /&amp;gt;({{Link2Forum|Topic=56045|LinkText=Forum}} / [[Benutzer:Jmike|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieses Modul erfasst Fahrzeiten in aktueller Verkehrslage mittels Google Maps Directions API.&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
* Distanz einer Route&lt;br /&gt;
* Fahrzeit ohne Verkehr&lt;br /&gt;
* Fahrzeit mit Verkehr&lt;br /&gt;
* Verzögerung der geplanten Route&lt;br /&gt;
* Waypoints definieren&lt;br /&gt;
* Ausgabesprache festlegen &lt;br /&gt;
* Outputs in Sekunden / Meter (raw)&lt;br /&gt;
* Ausgabe als Text, in Minuten, Sekunden oder als Durchschnitt&lt;br /&gt;
* Device STATE frei wählbar&lt;br /&gt;
* einstellbares Update Interval&lt;br /&gt;
* update-burst für Stosszeiten&lt;br /&gt;
* Strecke kann zusätzlich in gegengesetzte Richtung ausgelesen werden&lt;br /&gt;
* Ankunfszeit bei Abfahrt zum Update-Zeitpunkt&lt;br /&gt;
* verschiedene Travel Modes (driving, walking, bicycling und transit)&lt;br /&gt;
* flexibler Update Schedule für Stosszeiten&lt;br /&gt;
* integrierte, konfigurierbare Google Map zum Visualisieren der konfigurierten Route&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Erstmal muss ein eigener API Key angefordert werden. &lt;br /&gt;
Das geht über Googles [https://console.developers.google.com/apis/ API Manager]&amp;lt;br&amp;gt;&lt;br /&gt;
Dort  &amp;quot;Google Maps Directions API&amp;quot; suchen und ein neues Projekt erstellen, anschliessend API aktivieren.&lt;br /&gt;
&lt;br /&gt;
Je nach FHEM Installation zusätzlich die Perl Module LWP::Simple, JSON und MIME::Base64 nach installieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libwww-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libjson-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
oder&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i LWP::Simple&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i JSON&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i MIME::Base64&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&amp;lt;code&amp;gt; define &amp;lt;devicename&amp;gt; TRAFFIC &amp;lt;API-KEY&amp;gt; [update-interval] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;define muc2berlin TRAFFIC ABCDEFGHIJKLMNOPQRSTVWYZ 600&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der API Key muss selbstverständlich mit dem eigenen Key aus dem API Manager ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Intervall in Sekunden ist optional, der default beträgt 3600 (1 Stunde).&amp;lt;br&amp;gt;&lt;br /&gt;
Attribute start_address und end_address definieren.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
* average_delay_min&lt;br /&gt;
* average_duration_in_traffic_min&lt;br /&gt;
* average_duration_min&lt;br /&gt;
* delay&lt;br /&gt;
* delay_min&lt;br /&gt;
* distance&lt;br /&gt;
* duration&lt;br /&gt;
* duration_in_traffic&lt;br /&gt;
* duration_in_traffic_min&lt;br /&gt;
* duration_in_traffic_sec&lt;br /&gt;
* duration_min&lt;br /&gt;
* duration_sec&lt;br /&gt;
* [error_message]&lt;br /&gt;
* eta&lt;br /&gt;
* state&lt;br /&gt;
* status&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
&lt;br /&gt;
==== update  [burst-update-count] [burst-update-interval] ====&lt;br /&gt;
Readings manuell aktualisieren,  der optionale Burst kann wie folgt genutzt werden:&amp;lt;br&amp;gt;&lt;br /&gt;
- erster Wert gibt an wie viele Updates abgearbeitet werden&amp;lt;br&amp;gt;&lt;br /&gt;
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel um für 1 Stunde alle 5 Minuten zu aktualisieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== STATE ==&lt;br /&gt;
* Initialized       - modul initialisiert&lt;br /&gt;
* OK        - update war erfolgreich&lt;br /&gt;
* incomplete configuration - Konfigurationsfehler (start_address oder end_address leer)&lt;br /&gt;
* &amp;lt;APIRETURN&amp;gt;         - Fehlermeldung von Google Maps, falls vorhanden (siehe Reading error_message)&lt;br /&gt;
* &amp;lt;Reading&amp;gt; - der Wert des Readings welches mit Attribut stateReading ausgewählt wurde&lt;br /&gt;
* disabled - das Device wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Default Wert&lt;br /&gt;
!mögliche Werte&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |start_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Startadresse (erforderlich!)&lt;br /&gt;
|Startstr 1, 12345 Startcity&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |end_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Zieladresse (erforderlich!)&lt;br /&gt;
|Zielstr 99, 99099 Zielstadt&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |raw_data&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|legt Readings an mit allen unbearbeiteten Werten &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |language&lt;br /&gt;
|&lt;br /&gt;
|de, en, etc.&lt;br /&gt;
|Google ermittelt die Sprache automatisch, falls nicht fest definiert&lt;br /&gt;
|de&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |waypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte auf der Strecke, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |returnWaypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte für den Rückweg, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben, wenn leer werden &amp;quot;waypoints&amp;quot; in umgekehrter Reihenfolge verwendet&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |disable&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Modul deaktivieren&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |stateReading&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;beliebiges-Reading&amp;gt;&lt;br /&gt;
|Name eines Readings, dessen Wert in den STATE des Devices geschrieben wird&lt;br /&gt;
|delay_min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |outputReadings&lt;br /&gt;
|text&lt;br /&gt;
|text,min,sec,average&lt;br /&gt;
|Konfiguration, welche Readings erstellt werden sollen, eine oder mehrere möglich&lt;br /&gt;
|text min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |includeReturn&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|aktiviert/deaktiviert, ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll&amp;lt;br&amp;gt;Readings werden mit return_* angegeben&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |verbose&lt;br /&gt;
|1&lt;br /&gt;
|0:1:2:3:4:5&lt;br /&gt;
|gibt vor, wie ausführlich geloggt wird&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |travelMode&lt;br /&gt;
|driving&lt;br /&gt;
|driving:walking:bicycling:transit&lt;br /&gt;
|Fortbewegungsmethode für Kalkulation&lt;br /&gt;
|walking&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |updateSchedule&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;Beginn-volle-Stunde&amp;gt;-&amp;lt;Ende-volle-Stunde&amp;gt; [&amp;lt;Tag&amp;gt;] &amp;lt;update-Intervall-in-Sekunden&amp;gt;&lt;br /&gt;
|definiert einen flexiblen Zeitraum für feinere Updates, Tag als Zahl (Sonntag 0, Montag 1 etc.), mehrere Definitionen per &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; getrennt&lt;br /&gt;
| 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsStyle&lt;br /&gt;
|default&lt;br /&gt;
|default,silver,dark,night&lt;br /&gt;
|definiert einen der vorgegebenen Map Styles&lt;br /&gt;
|&amp;lt;i&amp;gt;dropdown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsSize&lt;br /&gt;
|800,600&lt;br /&gt;
|&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&lt;br /&gt;
|definiert die Breite und Höhe der Karte&lt;br /&gt;
| 600,300&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsCenter&lt;br /&gt;
|&amp;lt;i&amp;gt;auto-generiert&amp;lt;/i&amp;gt;&lt;br /&gt;
|&amp;lt;lat&amp;gt;,&amp;lt;lang&amp;gt;&lt;br /&gt;
|definiert den Mittelpunkt der Karte&lt;br /&gt;
| 48.2322157,11.6867434 &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsZoom&lt;br /&gt;
|10&lt;br /&gt;
|&amp;lt;Zoom wert&amp;gt;&lt;br /&gt;
|definiert den Zoom Wert der Karte&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsStroke&lt;br /&gt;
|#4cde44,#FF0000&lt;br /&gt;
|&amp;lt;Farbcode-Hinweg&amp;gt;,&amp;lt;Farbcode-Rückweg&amp;gt;&lt;br /&gt;
|definiert die Farbe der Wegstrecken im HEX Format&lt;br /&gt;
| #08eca7,#ec9c08&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsTrafficLayer&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|schaltet den Standard Google Maps Traffic Overlay ein/aus&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsDisableUI&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Dropdown um die Map Controls zu deaktivieren&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Integrierte Karte ==&lt;br /&gt;
* Zum Überprüfen der verwendeten Wegstrecke können der Hin- und Rückweg für ein TRAFFIC-Device auf einer Karte angezeigt werden.&lt;br /&gt;
* Um die Karte anzuzeigen einfach oben auf &amp;quot;toggle Map&amp;quot; klicken&lt;br /&gt;
* Für Einbindung in andere Anwendungen (TabletUI z.b) kann die Karte zusätzlich über den eingeblendeten Link erreicht werden: &amp;lt;nowiki&amp;gt;http://fhem-ip:port/fhem/TRAFFIC?name=&amp;lt;TRAFFIC-DEVICE&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Karte anpassen:&lt;br /&gt;
** Die Karte lässt sich über folgende Attribute anpassen:&lt;br /&gt;
** GoogleMapsStyle, GoogleMapsSize, GoogleMapsCenter, GoogleMapsZoom, GoogleMapsStroke und GoogleMapsTrafficLayer&lt;br /&gt;
** GoogleMapsZoom und GoogleMapsCenter können direkt in der Kartenansicht gespeichert werden. Dazu die Karte verschieben/zoomen und anschliessend auf die Buttons &amp;quot;save Zoom&amp;quot; bzw. &amp;quot;save Center&amp;quot; klicken&lt;br /&gt;
** weitere Beispiele bitte dem Forum entnehmen&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* STATE: &amp;quot;REQUEST DENIED&amp;quot;&lt;br /&gt;
* Reading error_message: &amp;quot;This API project is not authorized to use this API&amp;quot;&lt;br /&gt;
** =&amp;gt;  API Key ist nicht aktiviert. Google API &amp;gt; API Manager &amp;gt; Google Maps Directions API &amp;gt; AKTIVIEREN &lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;UNKNOWN_ERROR&amp;quot;&lt;br /&gt;
** =&amp;gt; Es liegt ein Fehler bei Google vor.&lt;br /&gt;
** =&amp;gt; &amp;quot;UNKNOWN_ERROR indicates a directions request could not be processed due to a server error. The request may succeed if you try again.&amp;quot; [https://developers.google.com/maps/documentation/javascript/directions?hl=de]&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;OVER_QUERY_LIMIT&amp;quot;&lt;br /&gt;
** Es wurden mehr als 2500 requests pro Tag abgesetzt. Abhilfe: Update Intervalle der TRAFFIC Devices erhöhen und &amp;quot;burst&amp;quot; zu den Stosszeiten nutzen.&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;ZERO_RESULTS&amp;quot;&lt;br /&gt;
** Die Waypoint Definition kann Google nicht realisieren. Statt Städtenamen besser exakte Koordinaten verwenden.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* täglicher Burst Update zum Feierabend, 1 Stunde alle 5 Minuten updaten:&lt;br /&gt;
** &amp;lt;code&amp;gt;define FeierabendCheck AT *17:00 set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* komplette Reisezeit, also Hin- und Rückweg, im STATE anzeigen:&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; stateFormat {int(ReadingsVal($name,&amp;quot;delay_min&amp;quot;,0)) + int(ReadingsVal($name,&amp;quot;return_delay_min&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* updateSchedule einsetzen um default update Intervall zu verfeinern&lt;br /&gt;
** Montag bis Freitag von 6 bis 8 Uhr alle 60 Sekunden&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&amp;lt;/code&amp;gt;&lt;br /&gt;
** jeden Tag von 17 bis 19 Uhr alle 2 Minuten&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 17-19 120&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Waypoints definieren (Tip von erdo_king)&lt;br /&gt;
** In Google-Maps die gewünschte Route auswählen (am PC)&lt;br /&gt;
** Auf eine signifikante Stelle der Route klicken - hierbei auf die Fahrtrichtung achten!&lt;br /&gt;
** Hier auf die Koordinaten klicken, diese können dann aus dem Suchfeld kopiert werden&lt;br /&gt;
** Im Browser zurückgehen, bis die Route wieder sichtbar ist (zum späteren Datenabgleich)&lt;br /&gt;
** Waypoints in FHEM deklarieren, Daten aktualisieren (set &amp;lt;device&amp;gt; update)&lt;br /&gt;
** distance + duration mit den Daten von Google-Maps am PC abgleichen&lt;br /&gt;
&lt;br /&gt;
== to Do ==&lt;br /&gt;
* Reading error_message löschen wenn update erfolgreich&lt;br /&gt;
* deutsche Commandref&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=56045|LinkText=Modul Vorstellung und Diskussionen}}&lt;br /&gt;
* [http://fhem.de/commandref.html#TRAFFIC Commandref]&lt;br /&gt;
* [https://console.developers.google.com/apis Google API Manager]&lt;/div&gt;</summary>
		<author><name>Jmike</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=21381</id>
		<title>TRAFFIC</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=21381"/>
		<updated>2017-04-21T09:09:11Z</updated>

		<summary type="html">&lt;p&gt;Jmike: update für version 1.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verkehrsdaten zu fest definierten Routen ermitteln&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=98_TRAFFIC.pm&lt;br /&gt;
|ModOwner=jmike &amp;lt;br /&amp;gt;({{Link2Forum|Topic=56045|LinkText=Forum}} / [[Benutzer:Jmike|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieses Modul erfasst Fahrzeiten in aktueller Verkehrslage mittels Google Maps Directions API.&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
* Distanz einer Route&lt;br /&gt;
* Fahrzeit ohne Verkehr&lt;br /&gt;
* Fahrzeit mit Verkehr&lt;br /&gt;
* Verzögerung der geplanten Route&lt;br /&gt;
* Waypoints definieren&lt;br /&gt;
* Ausgabesprache festlegen &lt;br /&gt;
* Outputs in Sekunden / Meter (raw)&lt;br /&gt;
* Ausgabe als Text, in Minuten, Sekunden oder als Durchschnitt&lt;br /&gt;
* Device STATE frei wählbar&lt;br /&gt;
* einstellbares Update Interval&lt;br /&gt;
* update-burst für Stosszeiten&lt;br /&gt;
* Strecke kann zusätzlich in gegengesetzte Richtung ausgelesen werden&lt;br /&gt;
* Ankunfszeit bei Abfahrt zum Update-Zeitpunkt&lt;br /&gt;
* verschiedene Travel Modes (driving, walking, bicycling und transit)&lt;br /&gt;
* flexibler Update Schedule für Stosszeiten&lt;br /&gt;
* integrierte, konfigurierbare Google Map zum Visualisieren der konfigurierten Route&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Erstmal muss ein eigener API Key angefordert werden. &lt;br /&gt;
Das geht über Googles [https://console.developers.google.com/apis/ API Manager]&amp;lt;br&amp;gt;&lt;br /&gt;
Dort  &amp;quot;Google Maps Directions API&amp;quot; suchen und ein neues Projekt erstellen, anschliessend API aktivieren.&lt;br /&gt;
&lt;br /&gt;
Je nach FHEM Installation zusätzlich die Perl Module LWP::Simple, JSON und MIME::Base64 nach installieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libwww-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libjson-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
oder&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i LWP::Simple&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i JSON&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i MIME::Base64&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&amp;lt;code&amp;gt; define &amp;lt;devicename&amp;gt; TRAFFIC &amp;lt;API-KEY&amp;gt; [update-interval] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;define muc2berlin TRAFFIC ABCDEFGHIJKLMNOPQRSTVWYZ 600&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der API Key muss selbstverständlich mit dem eigenen Key aus dem API Manager ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Intervall in Sekunden ist optional, der default beträgt 3600 (1 Stunde).&amp;lt;br&amp;gt;&lt;br /&gt;
Attribute start_address und end_address definieren.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
* average_delay_min&lt;br /&gt;
* average_duration_in_traffic_min&lt;br /&gt;
* average_duration_min&lt;br /&gt;
* delay&lt;br /&gt;
* delay_min&lt;br /&gt;
* distance&lt;br /&gt;
* duration&lt;br /&gt;
* duration_in_traffic&lt;br /&gt;
* duration_in_traffic_min&lt;br /&gt;
* duration_in_traffic_sec&lt;br /&gt;
* duration_min&lt;br /&gt;
* duration_sec&lt;br /&gt;
* [error_message]&lt;br /&gt;
* eta&lt;br /&gt;
* state&lt;br /&gt;
* status&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
&lt;br /&gt;
==== update  [burst-update-count] [burst-update-interval] ====&lt;br /&gt;
Readings manuell aktualisieren,  der optionale Burst kann wie folgt genutzt werden:&amp;lt;br&amp;gt;&lt;br /&gt;
- erster Wert gibt an wie viele Updates abgearbeitet werden&amp;lt;br&amp;gt;&lt;br /&gt;
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel um für 1 Stunde alle 5 Minuten zu aktualisieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== STATE ==&lt;br /&gt;
* Initialized       - modul initialisiert&lt;br /&gt;
* OK        - update war erfolgreich&lt;br /&gt;
* incomplete configuration - Konfigurationsfehler (start_address oder end_address leer)&lt;br /&gt;
* &amp;lt;APIRETURN&amp;gt;         - Fehlermeldung von Google Maps, falls vorhanden (siehe Reading error_message)&lt;br /&gt;
* &amp;lt;Reading&amp;gt; - der Wert des Readings welches mit Attribut stateReading ausgewählt wurde&lt;br /&gt;
* disabled - das Device wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Default Wert&lt;br /&gt;
!mögliche Werte&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |start_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Startadresse (erforderlich!)&lt;br /&gt;
|Startstr 1, 12345 Startcity&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |end_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Zieladresse (erforderlich!)&lt;br /&gt;
|Zielstr 99, 99099 Zielstadt&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |raw_data&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|legt Readings an mit allen unbearbeiteten Werten &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |language&lt;br /&gt;
|&lt;br /&gt;
|de, en, etc.&lt;br /&gt;
|Google ermittelt die Sprache automatisch, falls nicht fest definiert&lt;br /&gt;
|de&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |waypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte auf der Strecke, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |returnWaypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte für den Rückweg, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben, wenn leer werden &amp;quot;waypoints&amp;quot; in umgekehrter Reihenfolge verwendet&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |disable&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Modul deaktivieren&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |stateReading&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;beliebiges-Reading&amp;gt;&lt;br /&gt;
|Name eines Readings, dessen Wert in den STATE des Devices geschrieben wird&lt;br /&gt;
|delay_min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |outputReadings&lt;br /&gt;
|text&lt;br /&gt;
|text,min,sec,average&lt;br /&gt;
|Konfiguration, welche Readings erstellt werden sollen, eine oder mehrere möglich&lt;br /&gt;
|text min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |includeReturn&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|aktiviert/deaktiviert, ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll&amp;lt;br&amp;gt;Readings werden mit return_* angegeben&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |verbose&lt;br /&gt;
|1&lt;br /&gt;
|0:1:2:3:4:5&lt;br /&gt;
|gibt vor, wie ausführlich geloggt wird&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |travelMode&lt;br /&gt;
|driving&lt;br /&gt;
|driving:walking:bicycling:transit&lt;br /&gt;
|Fortbewegungsmethode für Kalkulation&lt;br /&gt;
|walking&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |updateSchedule&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;Beginn-volle-Stunde&amp;gt;-&amp;lt;Ende-volle-Stunde&amp;gt; [&amp;lt;Tag&amp;gt;] &amp;lt;update-Intervall-in-Sekunden&amp;gt;&lt;br /&gt;
|definiert einen flexiblen Zeitraum für feinere Updates, Tag als Zahl (Sonntag 0, Montag 1 etc.), mehrere Definitionen per &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; getrennt&lt;br /&gt;
| 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsStyle&lt;br /&gt;
|default&lt;br /&gt;
|default,silver,dark,night&lt;br /&gt;
|definiert einen der vorgegebenen Map Styles&lt;br /&gt;
|&amp;lt;i&amp;gt;dropdown&amp;lt;/i&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsSize&lt;br /&gt;
|800,600&lt;br /&gt;
|&amp;lt;Breite&amp;gt;,&amp;lt;Höhe&amp;gt;&lt;br /&gt;
|definiert die Breite und Höhe der Karte&lt;br /&gt;
| 600,300&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsLocation&lt;br /&gt;
|&amp;lt;i&amp;gt;auto-generiert&amp;lt;/i&amp;gt;&lt;br /&gt;
|&amp;lt;lat&amp;gt;,&amp;lt;lang&amp;gt;&lt;br /&gt;
|definiert den Mittelpunkt der Karte&lt;br /&gt;
| 48.2322157,11.6867434 &lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsStroke&lt;br /&gt;
|#4cde44,#FF0000&lt;br /&gt;
|&amp;lt;Farbcode-Hinweg&amp;gt;,&amp;lt;Farbcode-Rückweg&amp;gt;&lt;br /&gt;
|definiert die Farbe der Wegstrecken im HEX Format&lt;br /&gt;
| #08eca7,#ec9c08&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsTrafficLayer&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|schaltet den Standard Google Maps Traffic Overlay ein/aus&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |GoogleMapsDisableUI&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Dropdown um die Map Controls zu deaktivieren&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Integrierte Karte ==&lt;br /&gt;
* Zum Überprüfen der verwendeten Wegstrecke können der Hin- und Rückweg für ein TRAFFIC-Device auf einer Karte angezeigt werden.&lt;br /&gt;
* Um die Karte anzuzeigen einfach oben auf &amp;quot;toggle Map&amp;quot; klicken&lt;br /&gt;
* Für Einbindung in andere Anwendungen (TabletUI z.b) kann die Karte zusätzlich über den eingeblendeten Link erreicht werden: &amp;lt;nowiki&amp;gt;http://fhem-ip:port/fhem/TRAFFIC?name=&amp;lt;TRAFFIC-DEVICE&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Karte anpassen:&lt;br /&gt;
** Die Karte lässt sich über folgende Attribute anpassen:&lt;br /&gt;
** GoogleMapsStyle, GoogleMapsSize, GoogleMapsLocation, GoogleMapsStroke und GoogleMapsTrafficLayer&lt;br /&gt;
** weitere Beispiele bitte dem Forum entnehmen&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* STATE: &amp;quot;REQUEST DENIED&amp;quot;&lt;br /&gt;
* Reading error_message: &amp;quot;This API project is not authorized to use this API&amp;quot;&lt;br /&gt;
** =&amp;gt;  API Key ist nicht aktiviert. Google API &amp;gt; API Manager &amp;gt; Google Maps Directions API &amp;gt; AKTIVIEREN &lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;UNKNOWN_ERROR&amp;quot;&lt;br /&gt;
** =&amp;gt; Es liegt ein Fehler bei Google vor.&lt;br /&gt;
** =&amp;gt; &amp;quot;UNKNOWN_ERROR indicates a directions request could not be processed due to a server error. The request may succeed if you try again.&amp;quot; [https://developers.google.com/maps/documentation/javascript/directions?hl=de]&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;OVER_QUERY_LIMIT&amp;quot;&lt;br /&gt;
** Es wurden mehr als 2500 requests pro Tag abgesetzt. Abhilfe: Update Intervalle der TRAFFIC Devices erhöhen und &amp;quot;burst&amp;quot; zu den Stosszeiten nutzen.&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;ZERO_RESULTS&amp;quot;&lt;br /&gt;
** Die Waypoint Definition kann Google nicht realisieren. Statt Städtenamen besser exakte Koordinaten verwenden.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* täglicher Burst Update zum Feierabend, 1 Stunde alle 5 Minuten updaten:&lt;br /&gt;
** &amp;lt;code&amp;gt;define FeierabendCheck AT *17:00 set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* komplette Reisezeit, also Hin- und Rückweg, im STATE anzeigen:&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; stateFormat {int(ReadingsVal($name,&amp;quot;delay_min&amp;quot;,0)) + int(ReadingsVal($name,&amp;quot;return_delay_min&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* updateSchedule einsetzen um default update Intervall zu verfeinern&lt;br /&gt;
** Montag bis Freitag von 6 bis 8 Uhr alle 60 Sekunden&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&amp;lt;/code&amp;gt;&lt;br /&gt;
** jeden Tag von 17 bis 19 Uhr alle 2 Minuten&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 17-19 120&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Waypoints definieren (Tip von erdo_king)&lt;br /&gt;
** In Google-Maps die gewünschte Route auswählen (am PC)&lt;br /&gt;
** Auf eine signifikante Stelle der Route klicken - hierbei auf die Fahrtrichtung achten!&lt;br /&gt;
** Hier auf die Koordinaten klicken, diese können dann aus dem Suchfeld kopiert werden&lt;br /&gt;
** Im Browser zurückgehen, bis die Route wieder sichtbar ist (zum späteren Datenabgleich)&lt;br /&gt;
** Waypoints in FHEM deklarieren, Daten aktualisieren (set &amp;lt;device&amp;gt; update)&lt;br /&gt;
** distance + duration mit den Daten von Google-Maps am PC abgleichen&lt;br /&gt;
&lt;br /&gt;
== to Do ==&lt;br /&gt;
* Reading error_message löschen wenn update erfolgreich&lt;br /&gt;
* deutsche Commandref&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* {{Link2Forum|Topic=56045|LinkText=Modul Vorstellung und Diskussionen}}&lt;br /&gt;
* [http://fhem.de/commandref.html#TRAFFIC Commandref]&lt;br /&gt;
* [https://console.developers.google.com/apis Google API Manager]&lt;/div&gt;</summary>
		<author><name>Jmike</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=17902</id>
		<title>TRAFFIC</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=17902"/>
		<updated>2016-12-19T21:06:57Z</updated>

		<summary type="html">&lt;p&gt;Jmike: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verkehrsdaten zu fest definierten Routen ermitteln&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=98_TRAFFIC.pm&lt;br /&gt;
|ModOwner=jmike &amp;lt;br /&amp;gt;([https://forum.fhem.de/index.php/topic,56045.0.html Forum] / [[Benutzer:Jmike|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieses Modul erfasst Fahrzeiten in aktueller Verkehrslage mittels Google Maps Directions API.&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
* Distanz einer Route&lt;br /&gt;
* Fahrzeit ohne Verkehr&lt;br /&gt;
* Fahrzeit mit Verkehr&lt;br /&gt;
* Verzögerung der geplanten Route&lt;br /&gt;
* Waypoints definieren&lt;br /&gt;
* Ausgabesprache festlegen &lt;br /&gt;
* Outputs in Sekunden / Meter (raw)&lt;br /&gt;
* Ausgabe als Text, in Minuten, Sekunden oder als Durchschnitt&lt;br /&gt;
* Device STATE frei wählbar&lt;br /&gt;
* einstellbares Update Interval&lt;br /&gt;
* update-burst für Stosszeiten&lt;br /&gt;
* Strecke kann zusätzlich in gegengesetzte Richtung ausgelesen werden&lt;br /&gt;
* Ankunfszeit bei Abfahrt zum Update-Zeitpunkt&lt;br /&gt;
* verschiedene Travel Modes (driving, walking, bicycling und transit)&lt;br /&gt;
* flexibeler Update Schedule für &amp;quot;Stosszeiten&amp;quot; &lt;br /&gt;
* integrierte Google Map zum visualisieren der konfigurierten Route&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Erstmal muss ein eigener API Key angefordert werden. &lt;br /&gt;
Das geht über Googles [https://console.developers.google.com/apis/ API Manager]&amp;lt;br&amp;gt;&lt;br /&gt;
Dort  &amp;quot;Google Maps Directions API&amp;quot; suchen und ein neues Projekt erstellen, anschliessend API aktivieren.&lt;br /&gt;
&lt;br /&gt;
Je nach FHEM Installation zusätzlich die Perl Module LWP::Simple, JSON und MIME::Base64 nach installieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libwww-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libjson-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
oder&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i LWP::Simple&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i JSON&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i MIME::Base64&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&amp;lt;code&amp;gt; define &amp;lt;devicename&amp;gt; TRAFFIC &amp;lt;API-KEY&amp;gt; [update-interval] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;define muc2berlin TRAFFIC ABCDEFGHIJKLMNOPQRSTVWYZ 600&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der API Key muss selbstverständlich mit dem eigenen Key aus dem API Manager ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Interval in Sekunden ist optional, der default beträgt es 3600 (1 Stunde).&amp;lt;br&amp;gt;&lt;br /&gt;
Attribute start_address und end_address definieren.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
* average_delay_min&lt;br /&gt;
* average_duration_in_traffic_min&lt;br /&gt;
* average_duration_min&lt;br /&gt;
* delay&lt;br /&gt;
* delay_min&lt;br /&gt;
* distance&lt;br /&gt;
* duration&lt;br /&gt;
* duration_in_traffic&lt;br /&gt;
* duration_in_traffic_min&lt;br /&gt;
* duration_in_traffic_sec&lt;br /&gt;
* duration_min&lt;br /&gt;
* duration_sec&lt;br /&gt;
* [error_message]&lt;br /&gt;
* eta&lt;br /&gt;
* state&lt;br /&gt;
* status&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
&lt;br /&gt;
==== update  [burst-update-count] [burst-update-interval] ====&lt;br /&gt;
Readings manuell aktualisieren,  der optionale Burst kann wie folgt genutzt werden:&amp;lt;br&amp;gt;&lt;br /&gt;
- erster Wert gibt an wie viele Updates abgearbeitet werden&amp;lt;br&amp;gt;&lt;br /&gt;
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel um für 1 Stunde alle 5min zu aktualisieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== STATE ==&lt;br /&gt;
* Initialized       - modul initialisiert&lt;br /&gt;
* OK        - update war erfolgreich&lt;br /&gt;
* incomplete configuration - Konfigurationsfehler (start_address oder end_address leer)&lt;br /&gt;
* &amp;lt;APIRETURN&amp;gt;         - Fehlermeldung von Google Maps, falls vorhanden (siehe Reading error_message)&lt;br /&gt;
* &amp;lt;Reading&amp;gt; - der Wert des Readings welches mit Attribut stateReading ausgewählt wurde&lt;br /&gt;
* disabled - das Device wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Default Wert&lt;br /&gt;
!mögliche Werte&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |start_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Startadresse (erforderlich!)&lt;br /&gt;
|Startstr 1, 12345 Startcity&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |end_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Zieladresse (erforderlich!)&lt;br /&gt;
|Zielstr 99, 99099 Zielstadt&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |raw_data&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|legt Readings an mit allen unbearbeiteten Werten &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |language&lt;br /&gt;
|&lt;br /&gt;
|de, en, etc.&lt;br /&gt;
|Google ermittelt die Sprache automatisch falls nicht fest definiert&lt;br /&gt;
|de&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |waypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte auf der Strecke, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |returnWaypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte für den Rückweg, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben, wenn leer werden &amp;quot;waypoints&amp;quot; in umgekehrter Reihenfolge verwendet&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |disable&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Modul deaktivieren&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |stateReading&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;beliebiges-Reading&amp;gt;&lt;br /&gt;
|Name eines Readings dessen wert in den STATE des Devices geschrieben wird.&lt;br /&gt;
|delay_min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |outputReadings&lt;br /&gt;
|text&lt;br /&gt;
|text,min,sec,average&lt;br /&gt;
|konfiguration welche Readings erstellt werden sollen, eine oder mehrere Möglich.&lt;br /&gt;
|text min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |includeReturn&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|aktiviert/deaktiviert ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll. &amp;lt;br&amp;gt;Readings werden mit return_* angegeben.&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |verbose&lt;br /&gt;
|1&lt;br /&gt;
|0:1:2:3:4:5&lt;br /&gt;
|gibt vor wie ausführlich geloggt wird.&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |travelMode&lt;br /&gt;
|driving&lt;br /&gt;
|driving:walking:bicycling:transit&lt;br /&gt;
|Fortbewegungsmethode für Kalkulation&lt;br /&gt;
|walking&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |updateSchedule&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;Beginn-volle-Stunde&amp;gt;-&amp;lt;Ende-volle-Stunde&amp;gt; [&amp;lt;Tag&amp;gt;] &amp;lt;update-Intervall-in-Sekunden&amp;gt;&lt;br /&gt;
|definiert einen flexiblen Zeitraum für feinere Updates, Tag als Zahl (Sonntag 0, Montag 1 etc), mehrere Definitionen per &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; getrennt&lt;br /&gt;
| 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Integrierte Karte ==&lt;br /&gt;
* über eine integrierte Karte kann die Hin- und Rückroute für ein Traffic Device visualisert werden&lt;br /&gt;
* Die Karte ist verfügbar unter: &amp;lt;nowiki&amp;gt;http://fhem-ip:port/fhem/TRAFFIC_debug?name=&amp;lt;TRAFFIC-DEVICE&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Alternativ kann &amp;quot;verbose&amp;quot; auf 5 gesetzt werden, was dazu führt, dass ein Weblink auf die jeweilige Karte im Room &amp;quot;TRAFFIC_debug&amp;quot; angelegt wird&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;DEVICE&amp;gt; verbose 5&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;set &amp;lt;DEVICE&amp;gt; update&amp;lt;/code&amp;gt;&lt;br /&gt;
** Room / Link öffnen&lt;br /&gt;
*** grün visualisiert den Hinweg&lt;br /&gt;
*** rot visualisiert den konfigurierten Rückweg&lt;br /&gt;
* der Weblink (und ggf. der Room) wird entfernt sobald verbose &amp;lt; 5 ist&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* STATE: &amp;quot;REQUEST DENIED&amp;quot;&lt;br /&gt;
* Reading error_message: &amp;quot;This API project is not authorized to use this API&amp;quot;&lt;br /&gt;
** =&amp;gt;  API Key ist nicht aktiviert. Google API &amp;gt; API Manager &amp;gt; Google Maps Directions API &amp;gt; AKTIVIEREN &lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;UNKNOWN_ERROR&amp;quot;&lt;br /&gt;
** =&amp;gt; Es liegt ein Fehler bei Google vor.&lt;br /&gt;
** =&amp;gt; &amp;quot;UNKNOWN_ERROR indicates a directions request could not be processed due to a server error. The request may succeed if you try again.&amp;quot; [https://developers.google.com/maps/documentation/javascript/directions?hl=de]&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;OVER_QUERY_LIMIT&amp;quot;&lt;br /&gt;
** Es wurden mehr als 2500 requests pro Tag abgesetzt, update Intervalle der TRAFFIC Devices erhöhen und &amp;quot;burst&amp;quot; zu den Stosszeiten nutzen.&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;ZERO_RESULTS&amp;quot;&lt;br /&gt;
** Die Waypoint definition kann Google nicht realisieren. Statt Städtenamen besser exakte Koordinaten verwenden.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* täglicher Burst Update zum Feierabend, 1 Stunde alle 5 Minuten updaten:&lt;br /&gt;
** &amp;lt;code&amp;gt;define FeierabendCheck AT *17:00 set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* komplette Reisezeit, also Hin- und Rückweg, im STATE anzeigen:&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; stateFormat {int(ReadingsVal($name,&amp;quot;delay_min&amp;quot;,0)) + int(ReadingsVal($name,&amp;quot;return_delay_min&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* updateSchedule einsetzen um default update Intervall zu verfeinern&lt;br /&gt;
** Montag bis Freitag von 6-8 Uhr alle 60 Sekunden&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&amp;lt;/code&amp;gt;&lt;br /&gt;
** jeden Tag von 17 bis 19 Uhr alle 2 Minuten&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 17-19 120&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Waypoints definieren (Tip von erdo_king)&lt;br /&gt;
** In Google-Maps die gewünschte Route auswählen. (PC)&lt;br /&gt;
** Auf eine signifikante Stelle der Route klicken - hierbei auf die Fahrtrichtung achten!&lt;br /&gt;
** Hier auf die Koordinaten klicken, diese können dann aus dem Suchfeld kopiert werden&lt;br /&gt;
** Im Browser zurück bis die Route wieder sichtbar ist (zum späteren Datenabgleich)&lt;br /&gt;
** Waypoints in FHEM deklarieren, Daten aktualisieren (set &amp;lt;device&amp;gt; update)&lt;br /&gt;
** distance + duration mit den Daten von Google-Maps am PC abgleichen&lt;br /&gt;
&lt;br /&gt;
== to Do ==&lt;br /&gt;
* Reading error_message löschen wenn update erfolgreich&lt;br /&gt;
* deutsche Commandref&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,56045.0.html Modul Vorstellung und Diskussionen]&lt;br /&gt;
* [http://fhem.de/commandref.html#TRAFFIC Commandref]&lt;br /&gt;
* [https://console.developers.google.com/apis Google API Manager]&lt;/div&gt;</summary>
		<author><name>Jmike</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=17764</id>
		<title>TRAFFIC</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=17764"/>
		<updated>2016-12-13T07:57:31Z</updated>

		<summary type="html">&lt;p&gt;Jmike: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verkehrsdaten zu fest definierten Routen ermitteln&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=98_TRAFFIC.pm&lt;br /&gt;
|ModOwner=jmike &amp;lt;br /&amp;gt;([https://forum.fhem.de/index.php/topic,56045.0.html Forum] / [[Benutzer:Jmike|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieses Modul erfasst Fahrzeiten in aktueller Verkehrslage mittels Google Maps Directions API.&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
* Distanz einer Route&lt;br /&gt;
* Fahrzeit ohne Verkehr&lt;br /&gt;
* Fahrzeit mit Verkehr&lt;br /&gt;
* Verzögerung der geplanten Route&lt;br /&gt;
* Waypoints definieren&lt;br /&gt;
* Ausgabesprache festlegen &lt;br /&gt;
* Outputs in Sekunden / Meter (raw)&lt;br /&gt;
* Ausgabe als Text, in Minuten, Sekunden oder als Durchschnitt&lt;br /&gt;
* Device STATE frei wählbar&lt;br /&gt;
* einstellbares Update Interval&lt;br /&gt;
* update-burst für Stosszeiten&lt;br /&gt;
* Strecke kann zusätzlich in gegengesetzte Richtung ausgelesen werden&lt;br /&gt;
* Ankunfszeit bei Abfahrt zum Update-Zeitpunkt&lt;br /&gt;
* verschiedene Travel Modes (driving, walking, bicycling und transit)&lt;br /&gt;
* flexibeler Update Schedule für &amp;quot;Stosszeiten&amp;quot; &lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Erstmal muss ein eigener API Key angefordert werden. &lt;br /&gt;
Das geht über Googles [https://console.developers.google.com/apis/ API Manager]&amp;lt;br&amp;gt;&lt;br /&gt;
Dort  &amp;quot;Google Maps Directions API&amp;quot; suchen und ein neues Projekt erstellen, anschliessend API aktivieren.&lt;br /&gt;
&lt;br /&gt;
Je nach FHEM Installation zusätzlich die Perl Module LWP::Simple und JSON nach installieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libwww-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libjson-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
oder&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i LWP::Simple&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i JSON&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&amp;lt;code&amp;gt; define &amp;lt;devicename&amp;gt; TRAFFIC &amp;lt;API-KEY&amp;gt; [update-interval] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;define muc2berlin TRAFFIC ABCDEFGHIJKLMNOPQRSTVWYZ 600&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der API Key muss selbstverständlich mit dem eigenen Key aus dem API Manager ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Interval in Sekunden ist optional, der default beträgt es 3600 (1 Stunde).&amp;lt;br&amp;gt;&lt;br /&gt;
Attribute start_address und end_address definieren.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
* average_delay_min&lt;br /&gt;
* average_duration_in_traffic_min&lt;br /&gt;
* average_duration_min&lt;br /&gt;
* delay&lt;br /&gt;
* delay_min&lt;br /&gt;
* distance&lt;br /&gt;
* duration&lt;br /&gt;
* duration_in_traffic&lt;br /&gt;
* duration_in_traffic_min&lt;br /&gt;
* duration_in_traffic_sec&lt;br /&gt;
* duration_min&lt;br /&gt;
* duration_sec&lt;br /&gt;
* [error_message]&lt;br /&gt;
* eta&lt;br /&gt;
* state&lt;br /&gt;
* status&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
&lt;br /&gt;
==== update  [burst-update-count] [burst-update-interval] ====&lt;br /&gt;
Readings manuell aktualisieren,  der optionale Burst kann wie folgt genutzt werden:&amp;lt;br&amp;gt;&lt;br /&gt;
- erster Wert gibt an wie viele Updates abgearbeitet werden&amp;lt;br&amp;gt;&lt;br /&gt;
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel um für 1 Stunde alle 5min zu aktualisieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== STATE ==&lt;br /&gt;
* Initialized       - modul initialisiert&lt;br /&gt;
* OK        - update war erfolgreich&lt;br /&gt;
* incomplete configuration - Konfigurationsfehler (start_address oder end_address leer)&lt;br /&gt;
* &amp;lt;APIRETURN&amp;gt;         - Fehlermeldung von Google Maps, falls vorhanden (siehe Reading error_message)&lt;br /&gt;
* &amp;lt;Reading&amp;gt; - der Wert des Readings welches mit Attribut stateReading ausgewählt wurde&lt;br /&gt;
* disabled - das Device wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Default Wert&lt;br /&gt;
!mögliche Werte&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |start_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Startadresse (erforderlich!)&lt;br /&gt;
|Startstr 1, 12345 Startcity&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |end_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Zieladresse (erforderlich!)&lt;br /&gt;
|Zielstr 99, 99099 Zielstadt&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |raw_data&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|legt Readings an mit allen unbearbeiteten Werten &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |language&lt;br /&gt;
|&lt;br /&gt;
|de, en, etc.&lt;br /&gt;
|Google ermittelt die Sprache automatisch falls nicht fest definiert&lt;br /&gt;
|de&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |waypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte auf der Strecke, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |disable&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Modul deaktivieren&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |stateReading&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;beliebiges-Reading&amp;gt;&lt;br /&gt;
|Name eines Readings dessen wert in den STATE des Devices geschrieben wird.&lt;br /&gt;
|delay_min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |outputReadings&lt;br /&gt;
|text&lt;br /&gt;
|text,min,sec,average&lt;br /&gt;
|konfiguration welche Readings erstellt werden sollen, eine oder mehrere Möglich.&lt;br /&gt;
|text min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |includeReturn&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|aktiviert/deaktiviert ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll. &amp;lt;br&amp;gt;Readings werden mit return_* angegeben.&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |verbose&lt;br /&gt;
|1&lt;br /&gt;
|0:1:2:3:4:5&lt;br /&gt;
|gibt vor wie ausführlich geloggt wird.&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |travelMode&lt;br /&gt;
|driving&lt;br /&gt;
|driving:walking:bicycling:transit&lt;br /&gt;
|Fortbewegungsmethode für Kalkulation&lt;br /&gt;
|walking&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |updateSchedule&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;Beginn-volle-Stunde&amp;gt;-&amp;lt;Ende-volle-Stunde&amp;gt; [&amp;lt;Tag&amp;gt;] &amp;lt;update-Intervall-in-Sekunden&amp;gt;&lt;br /&gt;
|definiert einen flexiblen Zeitraum für feinere Updates, Tag als Zahl (Sonntag 0, Montag 1 etc), mehrere Definitionen per &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; getrennt&lt;br /&gt;
| 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* STATE: &amp;quot;REQUEST DENIED&amp;quot;&lt;br /&gt;
* Reading error_message: &amp;quot;This API project is not authorized to use this API&amp;quot;&lt;br /&gt;
** =&amp;gt;  API Key ist nicht aktiviert. Google API &amp;gt; API Manager &amp;gt; Google Maps Directions API &amp;gt; AKTIVIEREN &lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;UNKNOWN_ERROR&amp;quot;&lt;br /&gt;
** =&amp;gt; Es liegt ein Fehler bei Google vor.&lt;br /&gt;
** =&amp;gt; &amp;quot;UNKNOWN_ERROR indicates a directions request could not be processed due to a server error. The request may succeed if you try again.&amp;quot; [https://developers.google.com/maps/documentation/javascript/directions?hl=de]&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;OVER_QUERY_LIMIT&amp;quot;&lt;br /&gt;
** Es wurden mehr als 2500 requests pro Tag abgesetzt, update Intervalle der TRAFFIC Devices erhöhen und &amp;quot;burst&amp;quot; zu den Stosszeiten nutzen.&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;ZERO_RESULTS&amp;quot;&lt;br /&gt;
** Die Waypoint definition kann Google nicht realisieren. Statt Städtenamen besser exakte Koordinaten verwenden.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* täglicher Burst Update zum Feierabend, 1 Stunde alle 5 Minuten updaten:&lt;br /&gt;
** &amp;lt;code&amp;gt;define FeierabendCheck AT *17:00 set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* komplette Reisezeit, also Hin- und Rückweg, im STATE anzeigen:&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; stateFormat {int(ReadingsVal($name,&amp;quot;delay_min&amp;quot;,0)) + int(ReadingsVal($name,&amp;quot;return_delay_min&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* updateSchedule einsetzen um default update Intervall zu verfeinern&lt;br /&gt;
** Montag bis Freitag von 6-8 Uhr alle 60 Sekunden&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 6-8 1 60|6-8 2 60|6-8 3 60|6-8 4 60|6-8 5 60&amp;lt;/code&amp;gt;&lt;br /&gt;
** jeden Tag von 17 bis 19 Uhr alle 2 Minuten&lt;br /&gt;
** &amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; updateSchedule 17-19 120&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Waypoints definieren (Tip von erdo_king)&lt;br /&gt;
** In Google-Maps die gewünschte Route auswählen. (PC)&lt;br /&gt;
** Auf eine signifikante Stelle der Route klicken - hierbei auf die Fahrtrichtung achten!&lt;br /&gt;
** Hier auf die Koordinaten klicken, diese können dann aus dem Suchfeld kopiert werden&lt;br /&gt;
** Im Browser zurück bis die Route wieder sichtbar ist (zum späteren Datenabgleich)&lt;br /&gt;
** Waypoints in FHEM deklarieren, Daten aktualisieren (set &amp;lt;device&amp;gt; update)&lt;br /&gt;
** distance + duration mit den Daten von Google-Maps am PC abgleichen&lt;br /&gt;
&lt;br /&gt;
== to Do ==&lt;br /&gt;
* Reading error_message löschen wenn update erfolgreich&lt;br /&gt;
* deutsche Commandref&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,56045.0.html Modul Vorstellung und Diskussionen]&lt;br /&gt;
* [http://fhem.de/commandref.html#TRAFFIC Commandref]&lt;br /&gt;
* [https://console.developers.google.com/apis Google API Manager]&lt;/div&gt;</summary>
		<author><name>Jmike</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=16561</id>
		<title>TRAFFIC</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=16561"/>
		<updated>2016-10-09T01:33:39Z</updated>

		<summary type="html">&lt;p&gt;Jmike: neutrale Ausdrucksweise&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verkehrsdaten zu fest definierten Routen ermitteln&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=98_TRAFFIC.pm&lt;br /&gt;
|ModOwner=jmike &amp;lt;br /&amp;gt;([https://forum.fhem.de/index.php/topic,56045.0.html Forum] / [[Benutzer:Jmike|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Dieses Modul erfasst Fahrzeiten in aktueller Verkehrslage mittels Google Maps Directions API.&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
* Distanz einer Route&lt;br /&gt;
* Fahrzeit ohne Verkehr&lt;br /&gt;
* Fahrzeit mit Verkehr&lt;br /&gt;
* Verzögerung der geplanten Route&lt;br /&gt;
* Waypoints definieren&lt;br /&gt;
* Ausgabesprache festlegen &lt;br /&gt;
* Outputs in Sekunden / Meter (raw)&lt;br /&gt;
* Ausgabe als Text, in Minuten, Sekunden oder als Durchschnitt&lt;br /&gt;
* Device STATE frei wählbar&lt;br /&gt;
* einstellbares Update Interval&lt;br /&gt;
* update-burst für Stosszeiten&lt;br /&gt;
* Strecke kann zusätzlich in gegengesetzte Richtung ausgelesen werden&lt;br /&gt;
* Ankunfszeit bei Abfahrt zum Update-Zeitpunkt&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Erstmal muss ein eigener API Key angefordert werden. &lt;br /&gt;
Das geht über Googles [https://console.developers.google.com/apis/ API Manager]&amp;lt;br&amp;gt;&lt;br /&gt;
Dort  &amp;quot;Google Maps Directions API&amp;quot; suchen und ein neues Projekt erstellen, anschliessend API aktivieren.&lt;br /&gt;
&lt;br /&gt;
Je nach FHEM Installation zusätzlich die Perl Module LWP::Simple und JSON nach installieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libwww-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt-get install libjson-perl&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
oder&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i LWP::Simple&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;sudo cpan -i JSON&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&amp;lt;code&amp;gt; define &amp;lt;devicename&amp;gt; TRAFFIC &amp;lt;API-KEY&amp;gt; [update-interval] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;define muc2berlin TRAFFIC ABCDEFGHIJKLMNOPQRSTVWYZ 600&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der API Key muss selbstverständlich mit dem eigenen Key aus dem API Manager ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Interval in Sekunden ist optional, der default beträgt es 3600 (1 Stunde).&amp;lt;br&amp;gt;&lt;br /&gt;
Attribute start_address und end_address definieren.&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
* average_delay_min&lt;br /&gt;
* average_duration_in_traffic_min&lt;br /&gt;
* average_duration_min&lt;br /&gt;
* delay&lt;br /&gt;
* delay_min&lt;br /&gt;
* distance&lt;br /&gt;
* duration&lt;br /&gt;
* duration_in_traffic&lt;br /&gt;
* duration_in_traffic_min&lt;br /&gt;
* duration_in_traffic_sec&lt;br /&gt;
* duration_min&lt;br /&gt;
* duration_sec&lt;br /&gt;
* [error_message]&lt;br /&gt;
* eta&lt;br /&gt;
* state&lt;br /&gt;
* status&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
&lt;br /&gt;
==== update  [burst-update-count] [burst-update-interval] ====&lt;br /&gt;
Readings manuell aktualisieren,  der optionale Burst kann wie folgt genutzt werden:&amp;lt;br&amp;gt;&lt;br /&gt;
- erster Wert gibt an wie viele Updates abgearbeitet werden&amp;lt;br&amp;gt;&lt;br /&gt;
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel um für 1 Stunde alle 5min zu aktualisieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== STATE ==&lt;br /&gt;
* Initialized       - modul initialisiert&lt;br /&gt;
* OK        - update war erfolgreich&lt;br /&gt;
* incomplete configuration - Konfigurationsfehler (start_address oder end_address leer)&lt;br /&gt;
* &amp;lt;APIRETURN&amp;gt;         - Fehlermeldung von Google Maps, falls vorhanden (siehe Reading error_message)&lt;br /&gt;
* &amp;lt;Reading&amp;gt; - der Wert des Readings welches mit Attribut stateReading ausgewählt wurde&lt;br /&gt;
* disabled - das Device wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Default Wert&lt;br /&gt;
!mögliche Werte&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |start_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Startadresse (erforderlich!)&lt;br /&gt;
|Startstr 1, 12345 Startcity&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |end_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Zieladresse (erforderlich!)&lt;br /&gt;
|Zielstr 99, 99099 Zielstadt&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |raw_data&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|legt Readings an mit allen unbearbeiteten Werten &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |language&lt;br /&gt;
|&lt;br /&gt;
|de, en, etc.&lt;br /&gt;
|Google ermittelt die Sprache automatisch falls nicht fest definiert&lt;br /&gt;
|de&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |waypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte auf der Strecke, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |disable&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Modul deaktivieren&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |stateReading&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;beliebiges-Reading&amp;gt;&lt;br /&gt;
|Name eines Readings dessen wert in den STATE des Devices geschrieben wird.&lt;br /&gt;
|delay_min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |outputReadings&lt;br /&gt;
|text&lt;br /&gt;
|text,min,sec,average&lt;br /&gt;
|konfiguration welche Readings erstellt werden sollen, eine oder mehrere Möglich.&lt;br /&gt;
|text min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |includeReturn&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|aktiviert/deaktiviert ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll. &amp;lt;br&amp;gt;Readings werden mit return_* angegeben.&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |verbose&lt;br /&gt;
|1&lt;br /&gt;
|0:1:2:3:4:5&lt;br /&gt;
|gibt vor wie ausführlich geloggt wird.&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* STATE: &amp;quot;REQUEST DENIED&amp;quot;&lt;br /&gt;
* Reading error_message: &amp;quot;This API project is not authorized to use this API&amp;quot;&lt;br /&gt;
** =&amp;gt;  API Key ist nicht aktiviert. Google API &amp;gt; API Manager &amp;gt; Google Maps Directions API &amp;gt; AKTIVIEREN &lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;UNKNOWN_ERROR&amp;quot;&lt;br /&gt;
** =&amp;gt; Es liegt ein Fehler bei Google vor.&lt;br /&gt;
** =&amp;gt; &amp;quot;UNKNOWN_ERROR indicates a directions request could not be processed due to a server error. The request may succeed if you try again.&amp;quot; [https://developers.google.com/maps/documentation/javascript/directions?hl=de]&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;OVER_QUERY_LIMIT&amp;quot;&lt;br /&gt;
** Es wurden mehr als 2500 requests pro Tag abgesetzt, update Intervalle der TRAFFIC Devices erhöhen und &amp;quot;burst&amp;quot; zu den Stosszeiten nutzen.&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;ZERO_RESULTS&amp;quot;&lt;br /&gt;
** Die Waypoint definition kann Google nicht realisieren. Statt Städtenamen besser exakte Koordinaten verwenden.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* täglicher Burst Update zum Feierabend, 1 Stunde alle 5 Minuten updaten:&lt;br /&gt;
&amp;lt;code&amp;gt;define FeierabendCheck AT *17:00 set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* komplette Reisezeit, also Hin- und Rückweg, im STATE anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; stateFormat {int(ReadingsVal($name,&amp;quot;delay_min&amp;quot;,0)) + int(ReadingsVal($name,&amp;quot;return_delay_min&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Waypoints definieren (Tip von erdo_king)&lt;br /&gt;
** In Google-Maps die gewünschte Route auswählen. (PC)&lt;br /&gt;
** Auf eine signifikante Stelle der Route klicken - hierbei auf die Fahrtrichtung achten!&lt;br /&gt;
** Hier auf die Koordinaten klicken, diese können dann aus dem Suchfeld kopiert werden&lt;br /&gt;
** Im Browser zurück bis die Route wieder sichtbar ist (zum späteren Datenabgleich)&lt;br /&gt;
** Waypoints in FHEM deklarieren, Daten aktualisieren (set &amp;lt;device&amp;gt; update)&lt;br /&gt;
** distance + duration mit den Daten von Google-Maps am PC abgleichen&lt;br /&gt;
&lt;br /&gt;
== to Do ==&lt;br /&gt;
* Reading error_message löschen wenn update erfolgreich&lt;br /&gt;
* deutsche Commandref&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,56045.0.html Modul Vorstellung und Diskussionen]&lt;br /&gt;
* [http://fhem.de/commandref.html#TRAFFIC Commandref]&lt;br /&gt;
* [https://console.developers.google.com/apis Google API Manager]&lt;/div&gt;</summary>
		<author><name>Jmike</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=16556</id>
		<title>TRAFFIC</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=TRAFFIC&amp;diff=16556"/>
		<updated>2016-10-08T12:39:17Z</updated>

		<summary type="html">&lt;p&gt;Jmike: neue Seite erstellt für Modul 98_TRAFFIC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|ModPurpose=Verkehrsdaten zu fest definierten Routen ermitteln&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModForumArea=Unterstützende Dienste&lt;br /&gt;
|ModTechName=98_TRAFFIC.pm&lt;br /&gt;
|ModOwner=jmike &amp;lt;br /&amp;gt;([https://forum.fhem.de/index.php/topic,56045.0.html Forum] / [[Benutzer:Jmike|Wiki]])&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Mit diesem Modul könnt ihr eure eigenen Wegstrecken, und deren Verkehr, über Google Maps Directions API erfassen.&lt;br /&gt;
&lt;br /&gt;
== Features / Funktionen ==&lt;br /&gt;
* Distanz einer Route&lt;br /&gt;
* Fahrzeit ohne Verkehr&lt;br /&gt;
* Fahrzeit mit Verkehr&lt;br /&gt;
* Verzögerung der geplanten Route&lt;br /&gt;
* Waypoints definieren&lt;br /&gt;
* Ausgabesprache festlegen &lt;br /&gt;
* Outputs in Sekunden / Meter (raw)&lt;br /&gt;
* Ausgabe als Text, in Minuten, Sekunden oder als Durchschnitt&lt;br /&gt;
* Device STATE frei wählbar&lt;br /&gt;
* einstellbares Update Interval&lt;br /&gt;
* update-burst für Stosszeiten&lt;br /&gt;
* Strecke kann zusätzlich in gegengesetzte Richtung ausgelesen werden&lt;br /&gt;
* Ankunfszeit bei Abfahrt zum Update-Zeitpunkt&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Erstmal muss ein eigener API Key angefordert werden. &lt;br /&gt;
Das geht über Googles [https://console.developers.google.com/apis/ API Manager]&amp;lt;br&amp;gt;&lt;br /&gt;
Dort sucht ihr &amp;quot;Google Maps Directions API&amp;quot; und erstellt ein neues Projekt. Anschliessend stellt ihr sicher, dass die API aktiviert ist.&lt;br /&gt;
&lt;br /&gt;
Eventuell müssen auch die Perl Module LWP::Simple und JSON nach installiert werden (apt-get / CPAN).&lt;br /&gt;
&lt;br /&gt;
== Definition ==&lt;br /&gt;
&amp;lt;code&amp;gt; define &amp;lt;devicename&amp;gt; TRAFFIC &amp;lt;API-KEY&amp;gt; [update-interval] &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Beispiel:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;define muc2berlin TRAFFIC ABCDEFGHIJKLMNOPQRSTVWYZ 600&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der API Key muss selbstverständlich mit dem Key von aus dem API Manager ersetzt werden.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Interval in Sekunden ist optional, der default beträgt es 3600 (1 Stunde).&lt;br /&gt;
&lt;br /&gt;
== Readings ==&lt;br /&gt;
* average_delay_min&lt;br /&gt;
* average_duration_in_traffic_min&lt;br /&gt;
* average_duration_min&lt;br /&gt;
* delay&lt;br /&gt;
* delay_min&lt;br /&gt;
* distance&lt;br /&gt;
* duration&lt;br /&gt;
* duration_in_traffic&lt;br /&gt;
* duration_in_traffic_min&lt;br /&gt;
* duration_in_traffic_sec&lt;br /&gt;
* duration_min&lt;br /&gt;
* duration_sec&lt;br /&gt;
* [error_message]&lt;br /&gt;
* eta&lt;br /&gt;
* state&lt;br /&gt;
* status&lt;br /&gt;
&lt;br /&gt;
== Befehle ==&lt;br /&gt;
&lt;br /&gt;
==== update  [burst-update-count] [burst-update-interval] ====&lt;br /&gt;
Readings manuell aktualisieren,  der optionale Burst kann wie folgt genutzt werden:&amp;lt;br&amp;gt;&lt;br /&gt;
- erster Wert gibt an wie viele Updates abgearbeitet werden&amp;lt;br&amp;gt;&lt;br /&gt;
- zweiter Wert gibt an wie viele Sekunden zwischen den Updates gewartet wird&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel um für 1 Stunde alle 5min zu aktualisieren:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== STATE ==&lt;br /&gt;
* Initialized       - modul initialisiert&lt;br /&gt;
* OK        - update war erfolgreich&lt;br /&gt;
* incomplete configuration - Konfigurationsfehler (start_address oder end_address leer)&lt;br /&gt;
* &amp;lt;APIRETURN&amp;gt;         - Fehlermeldung von Google Maps, falls vorhanden (siehe Reading error_message)&lt;br /&gt;
* &amp;lt;Reading&amp;gt; - der Wert des Readings welches mit Attribut stateReading ausgewählt wurde&lt;br /&gt;
* disabled - das Device wurde über das Attribut disable deaktiviert&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Attribut&lt;br /&gt;
!Default Wert&lt;br /&gt;
!mögliche Werte&lt;br /&gt;
!Beschreibung&lt;br /&gt;
!Beispiel&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |start_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Startadresse (erforderlich!)&lt;br /&gt;
|Startstr 1, 12345 Startcity&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |end_address&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;text&amp;gt;&lt;br /&gt;
|die vollständige Zieladresse (erforderlich!)&lt;br /&gt;
|Zielstr 99, 99099 Zielstadt&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |raw_data&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|legt Readings an mit allen unbearbeiteten Werten &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |language&lt;br /&gt;
|&lt;br /&gt;
|de, en, etc.&lt;br /&gt;
|Google ermittelt die Sprache automatisch falls nicht fest definiert&lt;br /&gt;
|de&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |waypoints&lt;br /&gt;
|&lt;br /&gt;
|lat, long&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;lat, long&lt;br /&gt;
|fixe Wegpunkte auf der Strecke, mehrere Werte per pipe &amp;lt;nowiki&amp;gt;(|)&amp;lt;/nowiki&amp;gt; trennen, LAT, LONG Koordinaten angeben&lt;br /&gt;
|48.187918, 11.590514&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |disable&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|Modul deaktivieren&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |stateReading&lt;br /&gt;
|&lt;br /&gt;
|&amp;lt;beliebiges-Reading&amp;gt;&lt;br /&gt;
|Name eines Readings dessen wert in den STATE des Devices geschrieben wird.&lt;br /&gt;
|delay_min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |outputReadings&lt;br /&gt;
|text&lt;br /&gt;
|text,min,sec,average&lt;br /&gt;
|konfiguration welche Readings erstellt werden sollen, eine oder mehrere Möglich.&lt;br /&gt;
|text min&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |includeReturn&lt;br /&gt;
|0&lt;br /&gt;
|0:1&lt;br /&gt;
|aktiviert/deaktiviert ob die gleiche Strecke in umgekehrter Richtung hinzugefügt werden soll. &amp;lt;br&amp;gt;Readings werden mit return_* angegeben.&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;right&amp;quot; |verbose&lt;br /&gt;
|1&lt;br /&gt;
|0:1:2:3:4:5&lt;br /&gt;
|gibt vor wie ausführlich geloggt wird.&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bekannte Probleme ==&lt;br /&gt;
* STATE: &amp;quot;REQUEST DENIED&amp;quot;&lt;br /&gt;
* Reading error_message: &amp;quot;This API project is not authorized to use this API&amp;quot;&lt;br /&gt;
** =&amp;gt; Aktiviere deinen API Key, Google API &amp;gt; API Manager &amp;gt; Google Maps Directions API &amp;gt; AKTIVIEREN anklicken&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;UNKNOWN_ERROR&amp;quot;&lt;br /&gt;
** =&amp;gt; Es liegt ein Fehler bei Google vor.&lt;br /&gt;
** =&amp;gt; &amp;quot;UNKNOWN_ERROR indicates a directions request could not be processed due to a server error. The request may succeed if you try again.&amp;quot; [https://developers.google.com/maps/documentation/javascript/directions?hl=de]&lt;br /&gt;
&lt;br /&gt;
* STATE: &amp;quot;OVER_QUERY_LIMIT&amp;quot;&lt;br /&gt;
** Du hast mehr als 2500 requests pro Tag abgesetzt, erhöhe die Intervalle der TRAFFIC Devices und nutze &amp;quot;burst&amp;quot; zu den Stosszeiten.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
* täglicher Burst Update zum Feierabend, 1 Stunde alle 5 Minuten updaten:&lt;br /&gt;
&amp;lt;code&amp;gt;define FeierabendCheck AT *17:00 set &amp;lt;device&amp;gt; update 12 300&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* komplette Reisezeit, also Hin- und Rückweg, im STATE anzeigen:&lt;br /&gt;
&amp;lt;code&amp;gt;attr &amp;lt;device&amp;gt; stateFormat {int(ReadingsVal($name,&amp;quot;delay_min&amp;quot;,0)) + int(ReadingsVal($name,&amp;quot;return_delay_min&amp;quot;,0))}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Waypoints definieren (Tip von erdo_king)&lt;br /&gt;
** In Google-Maps die gewünschte Route auswählen. (PC)&lt;br /&gt;
** Auf eine signifikante Stelle der Route klicken - hierbei auf die Fahrtrichtung achten!&lt;br /&gt;
** Hier auf die Koordinaten klicken, diese können dann aus dem Suchfeld kopiert werden&lt;br /&gt;
** Im Browser zurück bis die Route wieder sichtbar ist (zum späteren Datenabgleich)&lt;br /&gt;
** Waypoints in FHEM deklarieren, Daten aktualisieren (set update)&lt;br /&gt;
** distance + duration mit den Daten von Google-Maps am PC vergleichen, dann kann man sicher sein, dass die Strecke dieselbe ist!&lt;br /&gt;
&lt;br /&gt;
== to Do ==&lt;br /&gt;
* Reading error_message löschen wenn update erfolgreich&lt;br /&gt;
* deutsche Commandref&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://forum.fhem.de/index.php/topic,56045.0.html Modul Vorstellung und Diskussionen]&lt;br /&gt;
* [http://fhem.de/commandref.html#TRAFFIC Commandref]&lt;br /&gt;
* [https://console.developers.google.com/apis Google API Manager]&lt;/div&gt;</summary>
		<author><name>Jmike</name></author>
	</entry>
</feed>