Verkehrsinfo und Traffic – Verkehrsmeldungen in FHEM einbinden

Nach meinem Artikel über den Spritpreismonitor, wird der folgende Artikel sich ebenfalls an die Autofahrer unter euch richten. Ich werde euch zeigen, wie ihr Verkehrsmeldungen in FHEM einbindet, sie ansprechend im TabeltUI darstellt und euch jeden morgen die aktuellen Verkehrsmeldungen per Telegram oder Pushover auf euer Handy schicken lasst. 

Für die Verkehrsinfos stellt FHEM im Grunde zwei Module zur Verfügung, abgesehen von diversen Möglichkeiten über HTTPMOD. Zum Einen das Modul "Verkehrsinfo" und zum Anderen das Modul "TRAFFIC" zur Verfügung.

"Vekehrsinfo" basiert auf Verkehrsmeldungen diverser Quellen. Neben dem Beschränken auf einzelnen Autobahnen oder Bundesstraßen lassen sich auch ganze Bundesländer auswählen.

Das Modul "TRAFFIC" verfolgt einen anderen Weg. Anstatt Verkehrsmeldungen bestimmter Autobahnen anzuzeigen, berechnet das Modul "TRAFFIC" basierend auf den aktuellen Verkehr die Reisezeit einer bestimmten Strecke. So lässt sich zum Beispiel der Arbeitsweg angeben und dann die benötigte Reisezeit als Reading ausgeben.

  • Verkehrsinfo
  • TRAFFIC

Wie oben schon erwähnt, baut das Modul "Verkehrsinfo" auf die Stau- und Verkehrsmeldungen verschiedener Quellen auf. Aktuell werden folgende Quellen unterstützt:

Da die Filterung der gewünschten Meldungen bei den Quellen "hessenschau.de" und "radiosaw.de" umtsändlich über Attribute erfolgt, habe ich mich für "verkehrsinfo.de" als Quelle entschieden. Hier erfolgt die Filterung über die entsprechende Wahl der URL.

Vorbereitung

Damit die Abrage der Vekehrsinfos funktioniert, sind einige Vorbereitungen auf dem Raspberry notwendig. Um genau zu sein, sind die Perlmodule "HTML::TreeBuilder::XPath" und "libjson-perl" notwendig.

sudo apt-get install libxml-treebuilder-perl libhtml-treebuilder-xpath-perl
sudo apt-get install libjson-perl

Vor der Definition in FHEM sollte der Raspberry neugestartet werden.

sudo reboot

die passende URL

Wie schon erwähnt, definiert man das Modul über eine URL. Bevor mal also mit der Definition in FHEM beginnt, sollte man sich die passende URL raussuchen. Dazu einfach folgende URL aufrufen:

https://www.verkehrsinfo.de/httpsmobil/

Wählt man nun die gewünschte Straße bzw. das gewünschte Bundesland, erhält man in der Browserleiste die gewünschte URL. Für die Autobahn 5 (A5) lautet die URL wie folgt:

https://www.verkehrsinfo.de/httpsmobil/index.php?c=staulist&street=A5&lat=&lon=

Definition in FHEM

Mit dieser URL lässt sich nun das Modul definieren.

define VerkehrA5 Verkehrsinfo https://www.verkehrsinfo.de/httpsmobil/index.php?c=staulist&street=A5&lat=&lon= 3600

Die "3600" beschreibt dabei den Aktuallisierungsintervall, in der die Verkehrsmeldungen aktualisiert werden. In diesem Fall also alle 60 Minuten.

Nach einer kurzen Zeit erscheinen die Verkehrsmeldungen nun als Reading.

zusätzliche Attribute

Durch das Setzen von Attributen lassen sich die Verkehrsmeldungen etwas anpassen.

filter_exclude / filter_include

Mit den beiden Attributen "filter_exclude" und "filter_include" lassen sich die Verkehrsmeldungen filtern. Dabei werden die Verkehrsmeldungen nach den gesetzten Schlagwörtern durchsucht und entsprechend gefiltert.

Beide Attribute können auch gemeinsam verwendet werden.

attr VerkehrA5 filter_exclude Baustelle
attr VerkehrA5 filter_include Karlsruhe

In diesem Fall würden alle Meldungen bezüglich Baustellen rausgefiltert und des Weiteren nur Meldungen für Karlsruhe angezeigt. Beide Filter sind durch ein UND miteinander verknüpft. Ein Schlagwort, welches durch exclude rausgefiltert wurde, kann somit nicht über include wieder eingebunden werden.

Hat man sich zum Beispiel ein Device für die Verkehrsmeldungen in Baden-Würtemberg definiert, so lassen sich mit den Filter-Attributen auch nach bestimmten Autobahnen filtern.

attr VerkehrBW filter_include A8

Das oben gesetzt Attribut filtert zum Beispiel nach dem String "A8". Aber Achtung, diese neben der Autobahn "A8" wird nun auch zum Beisiel die Autobahn "A81" angezeigt, da der String "A8" ebenfalls in "A81" enthalten ist. Umgehen kann man dieses Problem durch eine kleiner Erweiterung des Attributs:

attr VerkehrBW filter_include A8[a-zA-Z]

Aber ich empfehle euch, lieber die entsprechende URL der gewünschten Autobahn für die Definition zu verwenden, als über die Filter-Attribute die Autobahn rauszufiltern. Die Filter-Attribute sind eher dazu da, die Meldungen zu filtern und zum Beispiel Dauerbaustellen aus den Meldungen zu entfernen.

Eine weitere Einsatzmöglichkeit der Filter ist das Entfernen unerwünschte Straßen durch das "filter_exclude" zu entfernen.

attr VerkehrBW filter_exclude A5 | A8

So werden die Autobahnen A5 und A8 aus den Meldungen entfernt. Mit Hilfe dieses Attributes lassen sich somit alle unerwünschten Autobahnen, Bundesstraßen oder Kreisstraßen rausfiltern. Einfach ein paar Tage beobachten und nach und nach alle unerwünschten Meldungen in den Filter packen.

Eine Weitere Möglichkeit ist das Filtern nach Ausfahrten. Sonderzeichen müssen dabei durch ein "" gekennzeichnet werden. Folgender Filter filtert die Ausfahrt 55:

attr VerkehrBW filter_include (55)

Wie ihr seht, lässt sich mit den Filter-Attributen eine Menge anstellen. Da muss jeder für sich den auf seinen Bedürfnissen angepassten Filter zusammenstellen.

orderby

Mit dem Attribut "orderby" lassen sich die Verkehrsmeldungen z.B anhand der Meldung sortieren.

attr VerkehrBW orderby 

Es werden somit erst alle Meldungen aufgelistet, welche den String "stockender Verkehr" in der Meldung haben.

msg_format

Mit dem Attribut "msg_format" lässt sich das Format des Readings "xx_msg" anpassen. So lassen sich die bestimmten "Textbausteine" an den Anfang der Meldung stellen.

attr VerkehrBW msg_format [road | head | both]

Jenachdem, wie das Attribut gesetzt wurde, wird der entsprechende Textbaustein der Meldung vorangestellt.

stateFormat

StateFormat ist jetzt kein Modul-spezifisches Attribut, jedoch lässt sich mit diesem Attribut das Device etwas visuell aufwerten. Wer möchte, kann nämlich alle Meldungen als innerhalb des Device-Overviews auflisten.

attr VerkehrBW stateFormat {my $tmp=Verkehrsinfo_GetData('VerkehrBW');; $tmp=~s/n/<br>/g;; $tmp=~s/- -//g;; return $tmp;;}

Verkehrsmeldungen akustisch ausgeben

Wer zusätzlich eine akustische Ausgabe der Verkehrsmeldungen möchte, kann dies über ein entsprechendes System machen, welches eine Sprachausgabe unterstützt und in FHEM eingebunden wurde. Entweder über das Modul "Text2Speech" über einen angeschlossenen Lautsprecher oder über ein eingebundenes Tablet über AMAD2. Folgende Anleitung bezieht sich auf die Sprachausgabe über ein Tablet mit dem Befehl: "set Tablet ttsMsg Dies ist eine Sprachausgabe".

Die folgende Definition des atDevices bewirkt eine akustische Ausgabe der aktuellen Verkehrsmeldungen um 05:30 Uhr über das Tablet. Die Zeit und die Namen der Devices ("VerkehrBW und Tablet") müssen entsprechend anpasst werden. Solltet ihr ein anderes Sprachausgabegerät verwenden, dann auch entsprechend den dazu benötigten Befehl anpassen. 

define *05:30:00 {
my $stau_counter = ReadingsVal("VerkehrBW","count","");
my $stau = "Es liegen " . " " . "$stau_counter" ." Staumeldungen um ". TimeNow() ." vor:";

my $complete_message;

## Anhand Meldungszahl das Reading in der Schleife zusammenbauen

my $head_pre="e_";
my $head_suff="_head";
my $road_pre="e_";
my $road_suff="_road";
my $msg_pre="e_";
my $msg_suff="_msg";
my $head;my $road;
my $msg;

## Iterationsvariable
my $i = 1;

## weitere Meldungen
while ($stau_counter >= $i){
$head="$head_pre"."$i"."$head_suff";
$road="$road_pre"."$i"."$road_suff";
$msg="$msg_pre"."$i"."$msg_suff";

$complete_message="$complete_message"."nn"."Meldung $i: ".ReadingsVal("VerkehrBW",$road,"")." - ".ReadingsVal("VerkehrBW",$head,"").": ".ReadingsVal("VerkehrBW",$msg,"").".";
$i++;
}

fhem("set Tablet ttsMsg $stau $complete_message");
}

(C) Kopiert aus dem FHEM-WIKI und entsprechend angepasst und erweitert

Hinweis: Das atDevice erst als "Rohling" definieren: "define atStaumelder at *05:36:00 a" und die finale Definition über den DEF-Editor einfügen.

Verkehrsmeldungen als Textnachricht

Wenn man keine Möglichkeit hat akustische Sprachausgaben zu realisieren oder aufgrund von noch schlafenden Mitbewohnern eher davon absehen möchte, kann sich die Verkehrsmeldungen natürlich auch aufs Handy schicken lassen.

Auch hier gibt es wieder mehrere Möglichkeiten. Zum einen das Versenden als Push über Pushover oder die Benutzung von Telegramm. ​Aufgrund der meist etwas längeren Verkehrsmeldungen, empfehle ich die Verwendung von Telegramm. 

Um das Senden per Telegramm zu realisieren, reicht es aus, das oben definierte atDevice um den entsprechenden Befehl zu ergänzen.

...
fhem("set Telegram message $stau $complete_message");
fhem("set Tablet ttsMsg $stau $complete_message"); }

Alternativ kann nun natürlich der Befehl für die akustische Meldung entfernt werden.

Einbindung der Verkehrsmeldung in TabletUI

Der FHEM-Nutzer "Paul79" hat für das Einbinden in TabletUI ein Widget geschrieben, welches sich die Daten direkt vom FHEM-Modul Verkehrsinfo holen kann. Aktuell (Stand März 2017) befindet sich das Widget noch nicht im TabletUI-Repository.

Vorbereitung

Damit das Widget verwendet werden kann, muss deswegen eine JavaSkript-Datei mit dem Namen "widget_verkehrsinfo.js" im Widget-Ordner von TabletUI angelegt werden. Bei einer Standartinstallation befindet sich dieser Ordner hier:

/opt/fhem/www/tablet/js

Der FHEM-Nutzer "Paul79" hat die benötigte Datei im FHEM-Forum online gestellt. Die aktuelle Version (Stand 01.03.2017) findet ihr hier:

https://forum.fhem.de/index.php/topic,55118.msg557656.html#msg557656

Am besten schaut ihr euch aber noch ein paar weitere Beiträge an, um eventuell eine aktuellere Version zu erhalten. Die heruntergeladene Datei schiebt ihr dann einfach in den oben genannten Ordner auf den Raspberry.

Definition

Die Definition erfolgt über data-type="verkehrsinfo". Die Mindestdefinition lautet dabei wie folgt:

<div data-type="verkehrsinfo" data-device="name in FHEM" ></div>

Es werden jedoch einige zusätzliche Attribute mitgeliefert, mit denen man die Anzeige etwas anpassen kann.

<div data-type="verkehrsinfo" 
data-device="name in FHEM"
data-max="5" data-color-msg="#CEBCB7"
data-color-head="#FD6F3F"
data-shadow="true"
data-shadow-head="true"
data-icon="2" ></div>

Eine Beschreibung der einzelnen Attribute findet ihr im FHEM-Wiki.

Ich hoffe ich konnte euch zwei ansprechende Möglichkeiten aufzeigen, mit denen ihr Verkehrsmeldungen in FHEM einbindet. Wer mehr zu diesem Thema wissen möchte, dem empfehle ich das FHEM-Forum zum Modul Verkehrsinfo und TRAFFIC.

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

Benachrichtige mich zu:
avatar
Fotos und Bilder
 
 
 
sonstiges Dateiformat
 
 
 
wpDiscuz