Staumelder: Unterschied zwischen den Versionen
Drhirn (Diskussion | Beiträge) K (Link auf Jabber hinzugefügt) |
K (Vorlage Link2CmdRef) |
||
(6 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Vorüberlegungen == | == Vorüberlegungen == | ||
Die Überlegung, sich Stau- und Verkehrsmeldung per FHEM bereitstellen zu lassen klingt verlockend. | |||
Die Überlegung sich Stau | |||
Für die Realisierung wurden mehrere Wege betrachtet. | Für die Realisierung wurden mehrere Wege betrachtet. | ||
== Umsetzungen == | == Umsetzungen == | ||
Es gibt bereits mehrere Möglichkeiten Stau- und Verkehrsmeldung mit FHEM auszulesen und darzustellen | |||
Es gibt bereits mehrere Möglichkeiten Stau | |||
{{Randnotiz|RNText= Variante per HTTPMOD oder Google Maps muss noch beschrieben werden }} | {{Randnotiz|RNText= Variante per HTTPMOD oder Google Maps muss noch beschrieben werden }} | ||
* Stau | * Stau- und Verkehrsmeldung über das Modul Verkehrsinfo | ||
* Stau | * Stau- und Verkehrsmeldung per HTTPMOD | ||
* Stau | * Stau- und Verkehrsmeldung über Google Maps | ||
== Das Verkehrsinfo Modul == | == Das Verkehrsinfo Modul == | ||
Das Modul {{Link2Forum|Topic=55118|Message=467732|LinkText=Verkehrsinfo}} bietet für Stau | Das Modul {{Link2Forum|Topic=55118|Message=467732|LinkText=Verkehrsinfo}} bietet für Stau- und Verkehrsmeldung eine übersichtliche Möglichkeit die potentiellen Meldungen anzeigen zu lassen. | ||
Dabei bedient es sich aktuell aus zwei Webseiten. | Dabei bedient es sich aktuell aus zwei Webseiten. | ||
Zeile 32: | Zeile 28: | ||
=== Aktuell Mögliche Varianten === | === Aktuell Mögliche Varianten === | ||
==== "Verkehrsinfo.de" ==== | ==== "Verkehrsinfo.de" ==== | ||
Über die Webseite verkehrsinfo.de können die Stau- und Verkehrsmeldungen von ganz Deutschland abgefragt werden. | |||
Über die Webseite verkehrsinfo.de können die Stau | |||
Dabei kann über die Webseite nach Bundesland oder Strassentyp gefiltert werden. | Dabei kann über die Webseite nach Bundesland oder Strassentyp gefiltert werden. | ||
Aus dieser Filterung wird auch der anschließend benötigte Link für das Modul generiert. | Aus dieser Filterung wird auch der anschließend benötigte Link für das Modul generiert. | ||
Zeile 44: | Zeile 38: | ||
==== "hessenschau.de" ==== | ==== "hessenschau.de" ==== | ||
Über die Webseite hessenschau.de können die Stau- und Verkehrsmeldungen von Hessen abgefragt werden. | |||
Eine Filterung auf bestimmte Strassentypen ist über die zusätzlichen Attribute filter_exclude sowie filter_include möglich. | |||
Über die Webseite | Eine Beispielkonfiguration mit Abfrageintervall von 3600 Sekunden. | ||
:<code><nowiki>define Staumelder Verkehrsinfo http://hessenschau.de/verkehr/index.html 3600</nowiki></code> | |||
==== "radiosaw.de" ==== | |||
Über die Webseite radiosaw.de können die Stau- und Verkehrsmeldungen von Mitteldeutschland abgefragt werden. | |||
Eine Filterung auf bestimmte Strassentypen ist über die zusätzlichen Attribute filter_exclude sowie filter_include möglich. | Eine Filterung auf bestimmte Strassentypen ist über die zusätzlichen Attribute filter_exclude sowie filter_include möglich. | ||
Eine Beispielkonfiguration mit Abfrageintervall von 3600 Sekunden. | Eine Beispielkonfiguration mit Abfrageintervall von 3600 Sekunden. | ||
:<code><nowiki>define Staumelder Verkehrsinfo | :<code><nowiki>define Staumelder Verkehrsinfo radiosaw 3600</nowiki></code> | ||
Die Angabe einer URL ist bei radiosaw nicht notwendig. | |||
=== Zusätzliche Einstellungen === | === Zusätzliche Einstellungen === | ||
Neues Attribut für die Formatierung der Meldungen (Voranstellen von Strasse, Richtung, beides oder keines von beiden --> siehe {{Link2CmdRef|Anker=Verkehrsinfoattr}}) (nur für Verkehrsinfo.de Verfügbar) | |||
Neues Attribut für die Formatierung der Meldungen (Voranstellen von Strasse, Richtung, beides oder keines von beiden --> siehe | |||
{{Randnotiz|RNText= | {{Randnotiz|RNText= | ||
Zeile 76: | Zeile 77: | ||
:<code>attr Staumeldungen orderby A3 | A5 </code> | :<code>attr Staumeldungen orderby A3 | A5 </code> | ||
{{Randnotiz|RNText=Das Attribute msg_format ist nur für Verkehrsinfo.de verfügbar}} | |||
{{Randnotiz|RNText= | |||
Das Attribute msg_format ist nur für Verkehrsinfo.de verfügbar | |||
}} | |||
Mit Hilfe des Attributes msg_format kann die Meldung (Voranstellen von Strasse, Richtung, beides oder keines von beiden ) formatiert werden. | Mit Hilfe des Attributes msg_format kann die Meldung (Voranstellen von Strasse, Richtung, beides oder keines von beiden ) formatiert werden. | ||
Zeile 176: | Zeile 174: | ||
Für die Nutzer der Tablet UI Oberfläche besteht nun die Möglichkeit das Ergebnis von Staumeldungen aus dem Modul anzeigen zu lassen. | Für die Nutzer der Tablet UI Oberfläche besteht nun die Möglichkeit das Ergebnis von Staumeldungen aus dem Modul anzeigen zu lassen. | ||
Dafür ist es notwendig eine widget_verkehrsinfo.js | Dafür ist es notwendig eine widget_verkehrsinfo.js im Verzeichnis /opt/fhem/www/tablet/js anzulegen, die mit dem Inhalt aus dem [https://github.com/knowthelist/fhem-tablet-ui/pull/185 Repository] gefüllt wird. | ||
Für die angelegte Datei sollten noch die Berechtigungen angepasst werden | |||
<syntaxhighlight lang="bash"> | |||
sudo chown fhem:dialout /opt/fhem/www/tablet/js/widget_verkehrsinfo.js | |||
</syntaxhighlight> | |||
[[Datei:tabletUI_Verkehrsinfo.png|mini|rechts|400px|Beispiel_TabletUI]] | [[Datei:tabletUI_Verkehrsinfo.png|mini|rechts|400px|Beispiel_TabletUI]] | ||
< | |||
Um das Widget in FTUI nutzen zu können muss in der Datei index.html wie Folgt definiert werden: | |||
<syntaxhighlight lang="html"> | |||
/* | /* | ||
Version 0. | Version 0.6 | ||
Ein Widget für Modul Verkehrsmeldungen | Ein Widget für Modul Verkehrsmeldungen | ||
Paul79 | Paul79 04.03.2017 | ||
paul79@gmx.de | paul79@gmx.de | ||
Zeile 217: | Zeile 222: | ||
data-color-mag: Farbe Headtext (Default '#FFFFFF') | data-color-mag: Farbe Headtext (Default '#FFFFFF') | ||
*/ | */ | ||
</ | </syntaxhighlight> | ||
Aktuelle Version vom 31. Januar 2018, 17:39 Uhr
Vorüberlegungen
Die Überlegung, sich Stau- und Verkehrsmeldung per FHEM bereitstellen zu lassen klingt verlockend. Für die Realisierung wurden mehrere Wege betrachtet.
Umsetzungen
Es gibt bereits mehrere Möglichkeiten Stau- und Verkehrsmeldung mit FHEM auszulesen und darzustellen
- Stau- und Verkehrsmeldung über das Modul Verkehrsinfo
- Stau- und Verkehrsmeldung per HTTPMOD
- Stau- und Verkehrsmeldung über Google Maps
Das Verkehrsinfo Modul
Das Modul Verkehrsinfo bietet für Stau- und Verkehrsmeldung eine übersichtliche Möglichkeit die potentiellen Meldungen anzeigen zu lassen. Dabei bedient es sich aktuell aus zwei Webseiten.
Für das Modul werden die Perlmodule HTML::TreeBuilder::XPath sowie libjson-perl benötigt. Installiert werden können diese mit nachfolgendem Befehl.
sudo apt-get install libxml-treebuilder-perl libhtml-treebuilder-xpath-perl
sudo apt-get install libjson-perl
Die Grundsätzliche Definition des Moduls sieht wie Folgt aus:
define <name> Verkehrsinfo <url> <interval>
Aktuell Mögliche Varianten
"Verkehrsinfo.de"
Über die Webseite verkehrsinfo.de können die Stau- und Verkehrsmeldungen von ganz Deutschland abgefragt werden. Dabei kann über die Webseite nach Bundesland oder Strassentyp gefiltert werden. Aus dieser Filterung wird auch der anschließend benötigte Link für das Modul generiert.
Eine Beispielkonfiguration anhand der Filterung auf einen Strassentyp. Abfrageintervall hier 3600 Sekunden.
define A66 Verkehrsinfo https://www.verkehrsinfo.de/index.php?country=1&street=A66&UIN= 3600
"hessenschau.de"
Über die Webseite hessenschau.de können die Stau- und Verkehrsmeldungen von Hessen abgefragt werden. Eine Filterung auf bestimmte Strassentypen ist über die zusätzlichen Attribute filter_exclude sowie filter_include möglich.
Eine Beispielkonfiguration mit Abfrageintervall von 3600 Sekunden.
define Staumelder Verkehrsinfo http://hessenschau.de/verkehr/index.html 3600
"radiosaw.de"
Über die Webseite radiosaw.de können die Stau- und Verkehrsmeldungen von Mitteldeutschland abgefragt werden. Eine Filterung auf bestimmte Strassentypen ist über die zusätzlichen Attribute filter_exclude sowie filter_include möglich.
Eine Beispielkonfiguration mit Abfrageintervall von 3600 Sekunden.
define Staumelder Verkehrsinfo radiosaw 3600
Die Angabe einer URL ist bei radiosaw nicht notwendig.
Zusätzliche Einstellungen
Neues Attribut für die Formatierung der Meldungen (Voranstellen von Strasse, Richtung, beides oder keines von beiden --> siehe commandref/Verkehrsinfoattr) (nur für Verkehrsinfo.de Verfügbar)
aber es kann auch wahlweise nur einer verwendet werden. Die Filter sind mit einem Logischen UND verknüpft. Das heißt z.B.: wenn etwas ausgeschlossen wurde,
kann es nicht mit dem Einschlussfilter wieder geholt werden.
Das Modul erlaubt das Filtern von Meldungen anhand von Attributen wie filter_exclude und filter_include.
Dabei werden die geladenen Meldung nach bestimmten Schlagwörtern durchsucht und somit nur die Meldung in Readings
gespeichert, für die einer der beiden Attribute zutrifft.
attr Staumeldungen filter_exclude Baustelle | Sperrung
attr Staumeldungen filter_include Frankfurt | Unfall
Die neuste Version erlaubt auch eine Sortierung der Meldung anhand der z.B Strasse.
Dazu muss das Attribute orderby gesetzt werden
attr Staumeldungen orderby A3 | A5
Mit Hilfe des Attributes msg_format kann die Meldung (Voranstellen von Strasse, Richtung, beides oder keines von beiden ) formatiert werden.
attr Staumeldungen msg_format road
Die Funktion kann überall in FHEM aufgerufen werden und liefert als Rückgabewert das gleiche Ergebnis wie der get <name> info Aufruf.
Der Rückgabewert als Text, kann dann für weiteres verwendet werden.
Verkehrsinfo_GetData(<devicename>)
my $result = Verkehrsinfo_GetData('A8')
Vorlesen von Meldungen
Die Meldungen aus den Readings lassen sich auch mit FHEM vorlesen. Dazu bedarfs es einem System, welches Text in Sprache (TTS) umwandeln kann. Hier bietet sich das Modul TTS oder z.b ein Sonossystem an. Auch weitere System zum Vorlesen von Meldungen sind Nutzbar.
Folgendes Beispiel zeigt ein at welches dynamisch anhand der Meldungsanzahl eine Variable füllt. Diese Variable wird dann von einem Sonossystem oder alternativ einem TTS System vorgelesen.
define Staumelder at*05:36:00 { my $stau_counter = ReadingsVal("Stau","count",""); my $stau = "Es liegen " . " " . "$stau_counter" ." Staumeldungen um ". TimeNow() ." vor:"; my $complete_message; ## Anhand Meldungszahl das Reading in der Schleife zusammenbauen my $reading_pre="e_"; my $reading_suff="_msg"; my $reading; ## Iterationsvariable my $i = 0; while ($stau_counter >= $i) { $reading = "$reading_pre" . "$i" . "$reading_suff"; $complete_message = "$complete_message" .".". ReadingsVal("Stau",$reading ,""); $i++; } fhem "set Staudummy $stau$complete_message "; fhem "set MeinSonossystem Speak 50 de $stau$complete_message"; fhem "set MeinTTS tts $stau$complete_message"; }
Senden von Meldungen per Messenger
Befindet man sich allerdings nicht zu Hause und möchte dennoch wissen, ob es im definierten Bereich Verkehsbehinderung gibt, können die Meldungen auch per Messenger Modul zugesendet werden.
Jabber
Wenn das Jabbermodul bereits installiert und konfiguriert wurde kann mit folgendem Code in der 99_myUtils.pm das Abrufen von Staumeldungen implementiert werden. Der Code bezieht sich dabei auf die Grundeinrichtung des Jabbermoduls von hier: FHEM spricht jabber
# Staumeldung abrufen if($cmd eq "stau") { fhem("set Staumeldungen update"); $newmsg.= "Staumeldungen von: "; $newmsg.=ReadingsVal("Staumeldungen", "date_time", "---").":::"; $newmsg=$newmsg."\n"; $newmsg.=ReadingsVal("Staumeldungen", "e_1_msg", "---")." , "; $newmsg=$newmsg."\n"; $newmsg.=ReadingsVal("Staumeldungen", "e_2_msg", "---")." , "; $newmsg=$newmsg."\n"; $newmsg.=ReadingsVal("Staumeldungen", "e_3_msg", "---")." , "; $newmsg=$newmsg."\n"; $newmsg.=ReadingsVal("Staumeldungen", "e_4_msg", "---")." , "; $newmsg=$newmsg."\n"; $newmsg.=ReadingsVal("Staumeldungen", "e_5_msg", "//Ende")."."; }
telegram
Das telegram Modul muss bereits installiert sein. Optional das Verkehsmodul anlegen und konfigurieren.
define traffic.a8 Verkehrsinfo https://www.verkehrsinfo.de/httpsmobil/index.php?c=staulist&street=A8&lat=&lon= 3600
Mit Hilfe des Notify können die Meldung per TelegramBot versendet werden.
define ntf.telebot.traffic notify telebot.msgText:\s(?i)stau.* {\ my $msgpeer = ReadingsVal('telebot', 'msgPeer','');;\ fhem("set traffic.a8 update");;\ fhem("set telebot message @". $msgpeer . " " . Verkehrsinfo_GetData('traffic.a8'));;\ }
Einbindung der Staumelderdaten für das Tablet UI
Für die Nutzer der Tablet UI Oberfläche besteht nun die Möglichkeit das Ergebnis von Staumeldungen aus dem Modul anzeigen zu lassen. Dafür ist es notwendig eine widget_verkehrsinfo.js im Verzeichnis /opt/fhem/www/tablet/js anzulegen, die mit dem Inhalt aus dem Repository gefüllt wird.
Für die angelegte Datei sollten noch die Berechtigungen angepasst werden
sudo chown fhem:dialout /opt/fhem/www/tablet/js/widget_verkehrsinfo.js
Um das Widget in FTUI nutzen zu können muss in der Datei index.html wie Folgt definiert werden:
/*
Version 0.6
Ein Widget für Modul Verkehrsmeldungen
Paul79 04.03.2017
paul79@gmx.de
----------------------------------------------------------------------------
HTML
für maximale Attribute:
<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>
für minimale Attribute:
<div data-type="verkehrsinfo" data-device="name in FHEM" ></div>
ATTRIBUTE:
~~~~~~~~~~
Attribute (Pflicht):
---------------
data-type="verkehrsinfo" : Widget-Typ
data-device : FHEM Device Name
Attribute (Optional):
-----------------
data-count: maximale Anzahl der Einträge (Default '5').
data-icon: '1' Icon links, 'No' kein icon , '2' 2 Icons links und rechts (Default '2')
date-shadow: 'true' Schatten unter Icons (Default 'true')
date-shadow-head: 'true' Schatten unter Headtext (Default 'false')
data-color-head: Farbe Headtext (Default '#FFE066')
data-color-mag: Farbe Headtext (Default '#FFFFFF')
*/
Die Attribute unter "Optional" können bei Bedarf auf den eigenen Geschmack verändert werden.
Bekannte Probleme / Fehlermeldungen
Can't call method "as_trimmed_text" on an undefined value at ./FHEM/98_Verkehrsinfo.pm line 220.
Die obiger Fehlermeldung wird durch Änderungen der Webseiten hervorgerufen. Hier muss ggf. das Modul angepasst/erweitert werden.
Ideen
Attribut zur Priorisierung von Meldungen
Das TRAFFIC Modul
Mit diesem Modul können eigene Wegstrecken, und deren Verkehr, über Google Maps Directions API erfasst werden. Das Modul sowie die Grundeinstellungen sind im Modulartikel TRAFFIC beschrieben.