Neues Modul Verkehrsinfo

Begonnen von martins, 29 Juni 2016, 22:21:38

Vorheriges Thema - Nächstes Thema

androsch

Hallo martins,

gute Arbeit, funktioniert wieder perfekt, vielen Dank für die schnelle Unterstützung.

;D
RaspberryPi3+ | RaspberryPi2+ | Pine64 | FHEM 5.9
HomeMatic | MAX!-Heizkörper | FS20-Steckdosen | nanoCul433 | Max-nanoCul | nanoCUL868 | HM-UART | AMAD | diverse Dienste+TabletUIs | 433MHz-Temperatursensoren | FritzBox7490 und 7412 | KODI und MPD | sonstiger Kleinkram

hartenthaler

Danke für die schnelle Aktualisierung!

Ich habe noch zwei Probleme:
- Umlaute werden nicht richtig dargestellt (z.B. Stadtring Berlin, Wilmersdorf Richtung Neukölln), damit funktioniert dann auch mein Filter auf "Neukölln" nicht mehr
- im Reading "zone" steht nun immer "Verkehrsinfo.de"; da hätte ich gerne wieder die "A100" stehen. Scheint mir aber nicht so einfach aus der Seite herauszufiltern sein. Ist aber kein Beinbruch, ich habe mir einfach mit einem selbst definierten UserReading "street_area" beholfen, das ich einmalig nach der Definition mit "setreading Verkehr_A100 street_area A100" setze und dann in der reading_group darstellen kann, die ich zur Zusammenfassung über mehrere abgefragte Straßen nutze.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

martins

Das Reading Zone passe ich gerade an, dies wird im Update gefixt sein.

@hartenthaler: auf welchem Betriebssystem setzt du fhem ein?

androsch

Hallo,

stimmt, die Umlaute sind auch bei mir flasch, hatte erst bei einer anderen Strassendefinition Meldungen mit Umlauten, deshalb erst später aufgefallen.

Ich benutze FHEM (aktuelle Version) auf einem Pine64 mit Ubuntu 16.04, Perl 5 (Version 22, subversion 1 (v5.22.1) built for aarch64-linux-gnu-thread-multi), falls es was hilft....

Gruß
RaspberryPi3+ | RaspberryPi2+ | Pine64 | FHEM 5.9
HomeMatic | MAX!-Heizkörper | FS20-Steckdosen | nanoCul433 | Max-nanoCul | nanoCUL868 | HM-UART | AMAD | diverse Dienste+TabletUIs | 433MHz-Temperatursensoren | FritzBox7490 und 7412 | KODI und MPD | sonstiger Kleinkram

hartenthaler

Bei mir läuft fhem auf einem Raspi mit der Betriebssystemversion 4.4.13-v7.

Ich habe die Modulfunktion Verkehrsinfo_GetData(<devicename>)  etwas angepasst, da ich das Modul auch verwende um die Verkehrsmeldungen per Sprache (auf Sonos-Lautsprecher) und per TALKTOME und Telegram auszugeben.

Hier meine angepasste Funktion aus 99_myUtils.pm

#################################################################
###                      Staumeldungen                        ###
#################################################################

#---------------------------------------------------------------------------
# Staumeldungen(device[,"msg"]) liefert für das übergebene Device vom Typ "Verkehrsinfo" die zusammengefassten Staumeldungen in natürlicher Sprache zurück.
# Falls der optionale zweite Parameter "msg" ist, wird nur die Nachricht selber verwendet, was z.B. sinnvoll ist, wenn nur Meldungen zu genau einer Autobahn abgefragt werden.
#---------------------------------------------------------------------------
sub Staumeldungen($;$) {
my ($device, $complete) = @_;

if (!defined $device) {
   Log3 'Verkehrsinfo', 1, "Device ".$device." not found";
   return "Device not found";
}

if (!defined $complete) {$complete = "";}

my $timestamp    = substr(ReadingsVal($device, 'date_time', ''), 11, 5) . ' Uhr';
my $stau_counter = ReadingsVal($device, 'count', '');
my $stau_zone    = ReadingsVal($device, 'street_area', '');
my $msg = "Es liegen um " . $timestamp . " für die " . $stau_zone . " ";

if ($stau_counter == 0)    {$msg .= "keine Staumeldungen vor.";}
elsif ($stau_counter == 1) {$msg  = "Es liegt um " . "$timestamp" . " für die " . "$stau_zone" . " eine Staumeldung vor:\n";}
else                       {$msg .= "$stau_counter" . " Staumeldungen vor:\n";}

# Anhand der Meldungsanzahl aus dem Reading den Text in einer Schleife zusammenbauen
my $i;
for ($i=1; $i <= $stau_counter; $i++) {
   $msg .= "- ";
   if ($complete ne "msg") {
     if (ReadingsVal($device, 'e_'.$i.'_road', '') ne '') {$msg .= ReadingsVal($device, 'e_'.$i.'_road', '') . " - ";}
     $msg .= ReadingsVal($device, 'e_'.$i.'_head', '') . ": ";
   }
   $msg .= ReadingsVal($device, 'e_'.$i.'_msg', '') . "\n";
}
$msg =~ s/ \(\d{1,3}\)//g;  # entfernen der Nummern der Ausfahrten

return $msg;
}

Sobald das Reading "zone" wieder funktioniert, kann man meinen Zwischenbehelf mit "street_area" in dieser Funktion wieder in "zone" ändern (in der Zeile mit my $stau_zone = ReadingsVal($device, 'street_area', '')).

Ich habe mir ein weiteres userReading "Staunachricht" definiert, das ich jeweils per notify aktuell halte. Dieses enthält jeweils die kompletten Staunachrichten in natürlicher Sprache.
Und dann noch eine readingsGroup um alle meine drei Verkehrsnachrichten darzustellen.

### Aktualisierung des userReadings "Staunachricht"
define n_Verkehr_A100 notify Verkehr_A100 { fhem "setreading Verkehr_A100 Staunachricht " . Staumeldungen("Verkehr_A100","msg");; }
define n_Verkehr_A111 notify Verkehr_A111 { fhem "setreading Verkehr_A111 Staunachricht " . Staumeldungen("Verkehr_A111","msg");; }
define n_Verkehr_Frohnau notify Verkehr_Frohnau { fhem "setreading Verkehr_Frohnau Staunachricht " . Staumeldungen("Verkehr_Frohnau");; }

### Reading-Group für Verkehrsnachrichten
define rg_Verkehrsnachrichten readingsGroup <Zone>,<Verkehrsnachrichten> \
Verkehr_Frohnau:street_area,Staunachricht\
Verkehr_A100:street_area,Staunachricht \
Verkehr_A111:street_area,Staunachricht
attr rg_Verkehrsnachrichten group Verkehrsinfo
attr rg_Verkehrsnachrichten noheading 1
attr rg_Verkehrsnachrichten nonames 1
attr rg_Verkehrsnachrichten room Verkehr


Auch in der readingsGroup kann man ggf. "street_area" dann wieder durch "zone" ersetzen.

In der TALKTOME Konfigurationsdatei habe ich ich dann für den Chat per Telegram die folgende Konfiguration hinterlegt.

/*****************************************************************************\
* FHEM Verkehr                                                                *
\*****************************************************************************/
! array verkehrspraepositionen = für|auf|bei|um|in der nähe von
! array verkehrszone = a100|a111|frohnau
! array verkehrsfragen = wie ist der verkehr|gibt es einen stau|gibt es staus|gibt es verkehsrmeldungen|wie lauten die verkehrsmeldungen

+ (@verkehrsfragen) (@verkehrspraepositionen) [der|die] (@verkehrszone)
* <star3> == a100 => <call>readingsval Verkehr_A100 Staunachricht Error</call>
* <star3> == a111 => <call>readingsval Verkehr_A111 Staunachricht Error</call>
* <star3> == frohnau => <call>readingsval Verkehr_Frohnau Staunachricht Error</call>

+ gibt es (@verkehrspraepositionen) [der|die] (@verkehrszone) (einen stau|staus|eine verkehrsmeldung|verkehrsmeldungen)
* <star2> == a100 => <call>readingsval Verkehr_A100 Staunachricht Error</call>
* <star2> == a111 => <call>readingsval Verkehr_A111 Staunachricht Error</call>
* <star2> == frohnau => <call>readingsval Verkehr_Frohnau Staunachricht Error</call>

// Switch to concatenation with newlines for the output in separate lines
! local concat = newline

+ (@verkehrsfragen)
- Die Verkehrsmeldungen:
^ <call>readingsval Verkehr_A100 Staunachricht Error</call>
^ <call>readingsval Verkehr_A111 Staunachricht Error</call>
^ <call>readingsval Verkehr_Frohnau Staunachricht Error</call>

// Switch to concatenation with nothing
! local concat = none


Diese tolle Modul "Verkehrsinfo" bringt mir nun jeden Morgen meine personalisierten Verkehrsnachrichten. Super! Dazu kommt dann noch die Ansage der aktuellen Fahrzeit zur Arbeit (mit dem neuen Modul TRAFFIC).
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

martins

Update steht bereit.
Die Aktuelle Version (1.6 -> bitte vom Dateinamen entfernen) habe ich wieder im ersten Post aktualisiert.

Änderungen:
- Die Zone wird wieder korrekt angezeigt (Wird jetzt einmalig beim define gesetzt)
- Das Encoding / die Umlaute und Sonderzeichen werden wieder richtig angezeigt

Mir ist es erst gar nicht aufgefallen, aber Verkehrsinfo.de hat auch beim Zeichensatz etwas geändert und je nach dem welches Betriebssystem man einsetzt, wurde dies verkehrt angezeigt.

Freut mich übrigens sehr das dieses Modul von einigen eingesetzt wird, dann hat sich die Arbeit gelohnt.

@hartenthaler: schöne Weiterentwicklung, bzw Anpassung, hilft dem einen oder anderen eventuell auch weiter. Ich selbst lass mir die Nachrichten + die Zeiten vom Traffic-Modul per Telegram zusenden, allerdings benötige ich die Info nur zweimal in der Woche, daher ist mir das ganze gar nicht aufgefallen, das es Probleme gibt.

Sollte es wünsche oder Verbesserungen zum Modul geben, immer her damit und dann schaue ich wie und ob sich das umsetzen lässt.

h-man-kl

Hallo,
bin gearde über dieses Thema gestolpert und finde das sehr spannend.
Das simple anzeigen der Meldungen klappt schonmal. Defenders Lösung mit dem vorlesen etc. finde ich auch klasse, aber wasich nicht vertsanden habe ist, wo in den paar Zeilen der Bezug zum Verkehrsinfo hergestellt wird?...

Ich müsste mir doch dann auch eine Anzeige generieren können, die z.B. nur Meldungen mit dem Wort Kaiserslautern anzeigt / vorliest, oder?

Danke und Gruß
H-Man
RasPi 3 mit MaxCube für FS20 , HM-Urart, HM-LAN, MiLight, HUE, Lightify, SONOS, Harmony, Unifi, FritzBox 7490... :-)
Ganz nach dem Motto: Normal? Normal is langweilig....

gs62

Hallo,
das Modul ist sehr interessant. Wo bekomme ich die  98_Verkehrsinfo.pm her? Im Update ist sie nicht enthalten oder bin ich blind?  :-[
Danke Gunter

FHEMAN

Vielleicht ein wenig OT, aber kann man grundsätzlich das Verkehrsaufkommen bspw. von Google Maps auslesen? Mich würden nämlich nur bestimmte Straßen innerhalb der Stadt interessieren.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

JoWiemann

Zitat von: FHEMAN am 15 September 2016, 17:24:23
Vielleicht ein wenig OT, aber kann man grundsätzlich das Verkehrsaufkommen bspw. von Google Maps auslesen? Mich würden nämlich nur bestimmte Straßen innerhalb der Stadt interessieren.

Hm, ich glaube dann solltest Du Dir das ansehen:https://forum.fhem.de/index.php/topic,56045.0.html

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

ThomasMagnum

Zitat von: gs62 am 15 September 2016, 16:58:41
Hallo,
das Modul ist sehr interessant. Wo bekomme ich die  98_Verkehrsinfo.pm her? Im Update ist sie nicht enthalten oder bin ich blind?  :-[
Danke Gunter

Hallo Gunter,

schau mal im ersten Post nach. Dort sind die bisher veröffentlichten Versionen angehängt. Diese in den Ordner fhem\FHEM deiner FHEM Installation kopieren und du kannst das Device anlegen. Ggf. das Anpassen der Rechte nicht vergessen.  ;)

Gruß, Thomas

gs62

#41
Hallo Thomas,
klar, jetzt habe ich es. Lag an meinem "neuen" Browser. Jetzt habe ich es.
Danke
Und funktioniert hervorragend.
Gruß
Gunter

Devender

#42
Zitat von: h-man-kl am 15 September 2016, 14:45:33
Ich müsste mir doch dann auch eine Anzeige generieren können, die z.B. nur Meldungen mit dem Wort Kaiserslautern anzeigt / vorliest, oder?

Danke und Gruß
H-Man

Hi H-Man

Durch das define des Moduls und der Eingabe der Webadresse  (meine Beispielhaft)

http://hessenschau.de/verkehr/index.html 3600

Läd das Modul die Webseite als Httmod ins Modul und parst alles das was du angegeben hast bzw. Martins Modul ausfiltert aus der Webseite.
Mit den Attributen filter_exclude oder include gibst du zusätzlich das an, was dich interessiert oder nicht interessiert.
attr Verkehrsmeldungen filter_include Kaiserslautern

Bei mir habe ich z.b Baustelle | Sperrung | baustelle , das | trennt dann mehrere regex voneinander.

Ich lese mir die einzelnen readings dann mit einem at aus und schreibe das Ergebnis zum Vorlesen in einen Dummy.
Das klappt seit Monaten hervorragend!

Grüße,
Dirk
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

h-man-kl

Cool! Danke! Das filtern hat funktioniert. Dann kann ich mich bei gelegenheit dranmachen mir das vorlesen zu lassen.
RasPi 3 mit MaxCube für FS20 , HM-Urart, HM-LAN, MiLight, HUE, Lightify, SONOS, Harmony, Unifi, FritzBox 7490... :-)
Ganz nach dem Motto: Normal? Normal is langweilig....

martins

Wenn ich mir so die vergangenen Post's ansehe, gibt es ja doch einige welche sich die Meldungen vorlesen lassen. Ich werde mich in den nächsten Tagen mal ransetzen und das Modul dahingehend erweitern, so das eigentlich keine zusätzlichen Dummy's zum zwischenspeichern mehr nötig sind. Weitere Vorschläge nehme ich nach wie vor gerne an.