Abfahrtszeiten der Deutschen Bahn in FHEM anzeigen

Wer oft mit den öffentlichen Verkehrsmitteln unterwegs ist, wird diese Situation kennen. Man steht morgens um 6 Uhr auf, geht zur Bahnhaltestelle um dann festzustellen, dass die Bahn 15min Verspätung hat. Diese 15min hätte man lieber noch im Warmen am Frühstückstisch verbracht. Da liegt es doch nahe, die Abfahrtszeiten mit TabletUI auf seinen Schaltzentralen-Tablet anzeigen zu lassen. In diesem Beitrag erkläre ich euch, wie ihr dafür die Grundlage in FHEM bereitstellt. Mit Hilfe des Moduls DBPlan lassen sich die Abfahrtzeiten von der Infoseite der Deutschen Bahn als Readings laden. Anschließen kann man sich diese mit einer ReadingsGroup in einer Tabelle anzeigen lassen.

Vorbereitung auf dem Raspberry Pi

Für das Modul DBPlan wird das Perl Modul HTML:Table Extract benötigt. Sollte dies noch nicht installiert sein, sollte man dies nun nachinstallieren:

DBPlan als Verbindung zur Infoseite der Deutschen Bahn

Um die Abfahrtszeiten laden zu können, benötigt man das Modul DBPlan. Da dieses Modul noch nicht zur Standardinstallation von FHEM gehört, muss dies manuell nachinstalliert werden:

Anschließend FHEM neu starten:

Nun lässt sich das Modul „DBPlan“ definieren:

Der Name Bahn_Kronenplatz und das Interval von 300 Sekunden (5 Minuten) kann natürlich angepasst haben. Das Intervall sollte natürlich nicht allzu groß gewählt werden. Ein Intervall von 30 Minuten ist eher konterproduktiv, sollten die Bahnen alle 5 Minuten fahren.

Bahn DBPlan FHEM

Das „nackte“ Modul gibt leider noch keine Infos preis. Für die Abfahrtszeiten muss man dem Modul noch den Start- und Zielbahnhof mitteilen. Dies geschieht über Attribute:

Hinweis: Das Attribut „dbplan_depature“ wurde zu „dbplan_station“ geändert.

Hierbei ist darauf zu achten, dass der Name der Bahnhöfe auf der Infoseite der Bahn zu finden ist.

Sollten die Haltestellen existieren werden nach einigen Minuten die Abfahrtszeiten als Reading angezeigt.

Bahn DBPlan FHEM

readingsGroup für die Erstellung eines Abfahrtsmonitors 

Diese Readings sind natürlich nicht gerade sehr anschaulich und für das schnelle Rausfinden einer Verbindung nicht gerade vorteilhaft. Das Erstellen einer readingsGroup schafft da Abhilfe.

Den Eintrag „Bahn_Kronenplatz“ entsprechend anpassen. Mit dem Attribut mapping lassen sich noch die Einträge in der ersten Spalte anpassen. Der Name „Bahn_Kronenplatz“ wird durch den etwas hübscheren Eintrag „‚Hübschstraße -> Kronenplatz“ ersetzt.

Abfahrtsmonitor FHEM Bahn

Die Einträge des Abfahrtsmonitor können natürlich beliebig erweitert werden. Für jede weitere Verbindung muss jedoch ein extra DBPlan definiert werden.

Wie ihr den Abfahrtsmonitor in TabletUI einbindet erfahrt ihr hier.

Hinterlasse einen Kommentar

37 Kommentare auf "Abfahrtszeiten der Deutschen Bahn in FHEM anzeigen"

Benachrichtige mich zu:
avatar
Fotos und Bilder
 
 
 
sonstiges Dateiformat
 
 
 
Sortiert nach:   neuste | älteste | beste Bewertung
rabe
Gast
rabe

Die Definition der readingsGroup passt nicht zum Device. Nach dem ich das angepaßt habe sind die Daten im Abfahrtsmonitor erschienen.
Habe das für die Straßenbahnen des rnv probiert, die Daten aus https://wolf-u.li/5545/fhem-abfahrzeiten-des-vrn-verkehrsverbunds-via-httpmod-auslesen/ scheinen besser zu sein (Verspätungen)

Sven
Gast
Sven

Ich nehme morgens immer zu einer bestimmten Zeit den RB (6:08) vom HBF xxx. Nun wäre es cool, wenn ich mittels pushover eine Message erhalten könnte, wenn dieser Zug entweder ausfällt oder zu spät kommt. Könnte mir da jemand ein Beispiel geben ?

Danke und Gruss, Sven

Sven
Gast
Sven
So sollte ich alle Möglichkeiten, die um 5:00 im Plan stehen könnten, abarbeiten können um den RB beispielsweise abzuklären. define BahnZuSpaet at *05:00:00 {my $Zug1=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_connection_1",0));; my $Zug2=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_connection_2",0));; my $Zug3=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_connection_3",0));; my $Abfahrt1=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_1",0));; my $Abfahrt2=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_2",0));; my $Abfahrt3=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_3",0));; my $Verspaetung1=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_delay_1",0));; my $Verspaetung2=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_delay_2",0));; my $Verspaetung3=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_delay_3",0));; if(($Zug1 eq "RB") && ($Abfahrt1 in ("5:33","05:43","6:08")) && ($Verspaetung1 ne "none")){fhem("set PushMessenger msg 'Zugverspätung vom $Zug1 um $Abfahrt1' 'Die Bahn kommt $Verspaetung1 Minuten zu spät.'")};; if(($Zug2 eq "RB") && ($Abfahrt2 in ("5:33","05:43","6:08")) && ($Verspaetung2 ne "none")){fhem("set PushMessenger msg 'Zugverspätung vom $Zug2 um $Abfahrt2' 'Die Bahn kommt $Verspaetung2 Minuten zu spät.'")};; if(($Zug3 eq "RB") && ($Abfahrt3 in ("5:33","05:43","6:08")) && ($Verspaetung3… weiterlesen »
Sven
Gast
Sven

noch eine Anfängerfrage… wenn ich das Ganze rund um die uhr beobachten möchte, brauch ich doch nur define BahnZuSpaet at *05:00:00 {my $Zug1=(Rea... ohne at Angabe schreiben ?

 

Sven
Gast
Sven
Bekomme keine pushinfo, obwohl um 11:00 im delay Verspätungen +5 bzw. +0 gewesen sind. define BahnZuSpaet at *11:05:00 {\  my $Zug1=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_connection_1",0));;\  my $Zug2=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_connection_2",0));;\  my $Zug3=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_connection_3",0));;\  my $Abfahrt1=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_1",0));;\  my $Abfahrt2=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_2",0));;\  my $Abfahrt3=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_3",0));;\  my $Verspaetung1=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_delay_1",0));;\  my $Verspaetung2=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_delay_2",0));;\  my $Verspaetung3=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_delay_3",0));;\  if !($we) {\   if(($Abfahrt1 in ("05:33","05:43","6:08")) && ($Verspaetung1 ne "none")){\    fhem("set PushMessenger msg 'Zugverspätung vom $Zug1 um $Abfahrt1' 'Die Bahn kommt $Verspaetung1 Minuten zu spät.'");;\   }\   elseif(($Abfahrt2 in ("05:33","05:43","6:08")) && ($Verspaetung2 ne "none")){\    fhem("set PushMessenger msg 'Zugverspätung vom $Zug2 um $Abfahrt2' 'Die Bahn kommt $Verspaetung2 Minuten zu spät.'");;\   }\   elseif(($Abfahrt3 in ("05:33","05:43","6:08")) && ($Verspaetung3 ne "none")){\… weiterlesen »
Sven
Gast
Sven

Die Sache mit den Zeiten hatte ich für den Test auch angepasst. Dein notify Beispiel ging aber auch nicht, selbst wenn ich bei beiden Varianten nur auf Verspätung abfrage.

Die Frage die sich mir nun aber stellt ist, warum eine Abfrage auf $Verspaetung3 ne "one" funktioniert, wo in den Readings none steht.

Sven
Gast
Sven
So, jetzt bin ich einen Schritt weiter. define HBF_Duesseldorf_Oberhausen_ToLate_W notify HBF_Duesseldorf_Oberhausen {\  my $Zug1=(ReadingsVal("HBF_Duesseldorf_Oberhausen","plan_connection_1",0));;\  my $Zug2=(ReadingsVal("HBF_Duesseldorf_Oberhausen","plan_connection_2",0));;\  my $Zug3=(ReadingsVal("HBF_Duesseldorf_Oberhausen","plan_connection_3",0));;\  my $Abfahrt1=(ReadingsVal("HBF_Duesseldorf_Oberhausen","plan_departure_1",0));;\  my $Abfahrt2=(ReadingsVal("HBF_Duesseldorf_Oberhausen","plan_departure_2",0));;\  my $Abfahrt3=(ReadingsVal("HBF_Duesseldorf_Oberhausen","plan_departure_3",0));;\  my $Verspaetung1=(ReadingsVal("HBF_Duesseldorf_Oberhausen","plan_departure_delay_1",0));;\  my $Verspaetung2=(ReadingsVal("HBF_Duesseldorf_Oberhausen","plan_departure_delay_2",0));;\  my $Verspaetung3=(ReadingsVal("HBF_Duesseldorf_Oberhausen","plan_departure_delay_3",0));;\  #if !($we) {\   if(($Verspaetung1 ne "none") || ($Verspaetung1 ne "+0")){\    fhem("set PushMessenger msg 'Zugverspätung vom $Zug1 um $Abfahrt1' 'Die Bahn kommt $Verspaetung1 Minuten zu spät.'");;\   }\   if(($Verspaetung2 ne "none") || ($Verspaetung2 ne "+0")){\    fhem("set PushMessenger msg 'Zugverspätung vom $Zug2 um $Abfahrt2' 'Die Bahn kommt $Verspaetung2 Minuten zu spät.'");;\   }\   if(($Verspaetung3 ne "none") || ($Verspaetung3 ne "+0")){\    fhem("set PushMessenger msg 'Zugverspätung vom $Zug3… weiterlesen »
Sven
Gast
Sven

Irgendwie passen die Klammern am Ende nicht, oder ?!

define NotifyAUS at +00:01:00 attr HBF_Duesseldorf_Oberhausen_ToLate_W_notify_ein disable 0;; attr HBF_Duesseldorf_Oberhausen_ToLate_W_notify_ein disable 1")}} oder soll das in den Fhem-Befehl?

Ich rufe das define mit einer Zeitspanne auf.

define HBF_Duesseldorf_Oberhausen_ToLate_W_notify_ein at *14:00:00 attr HBF_Duesseldorf_Oberhausen_ToLate_W disable 0
define HBF_Duesseldorf_Oberhausen_ToLate_W_notify_aus at *15:00:00 attr HBF_Duesseldorf_Oberhausen_ToLate_W disable 1

Kolidiert Deine 1 Minutenspanne damit nicht ?

 

 

Sven
Gast
Sven
Hier mal der komplette Code. define HBF_Oberhausen_Duesseldorf_ToLate_W notify HBF_Oberhausen_Duesseldorf {\  my $Zug1=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_connection_1",0));;\  my $Zug2=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_connection_2",0));;\  my $Zug3=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_connection_3",0));;\  my $Abfahrt1=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_1",0));;\  my $Abfahrt2=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_2",0));;\  my $Abfahrt3=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_3",0));;\  my $Verspaetung1=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_delay_1",0));;\  my $Verspaetung2=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_delay_2",0));;\  my $Verspaetung3=(ReadingsVal("HBF_Oberhausen_Duesseldorf","plan_departure_delay_3",0));;\   if(($Verspaetung1 ne "none") && ($Verspaetung1 ne "+0")){\    fhem("set PushMessenger msg 'Zugverspätung vom $Zug1 um $Abfahrt1' 'Die Bahn kommt $Verspaetung1 Minuten zu spät.';; define NotifyAUS_4 at +00:01:00 attr HBF_Oberhausen_Duesseldorf_ToLate_W_notify_ein disable 0;; attr HBF_Oberhausen_Duesseldorf_ToLate_W_notify_ein disable 1");;\   }\   if(($Verspaetung2 ne "none") && ($Verspaetung2 ne "+0")){\    fhem("set PushMessenger msg 'Zugverspätung vom $Zug2 um $Abfahrt2' 'Die Bahn kommt $Verspaetung2 Minuten zu spät.';; define NotifyAUS_5 at +00:01:00 attr HBF_Oberhausen_Duesseldorf_ToLate_W_notify_ein disable 0;; attr HBF_Oberhausen_Duesseldorf_ToLate_W_notify_ein… weiterlesen »
Sven
Gast
Sven

Bekomme zu jeder Verspätung auch mit dem Code fast 20 Pushover. Selbst wenn ich das notify auf 00:00:01 setze.

Sven
Gast
Sven

Ich habe es so eingebeben.
Vorher natürlic noch…

define HBF_Oberhausen_Duesseldorf DBPlan 300
attr HBF_Oberhausen_Duesseldorf alias Oberhausen (HBF) nach Düsseldorf (HBF)
attr HBF_Oberhausen_Duesseldorf dbplan_departure Hauptbahnhof, Oberhausen (Rheinland)
attr HBF_Oberhausen_Duesseldorf dbplan_destination Düsseldorf Hbf
attr HBF_Oberhausen_Duesseldorf room Auskunft

Fhem strört sich aber an…

define notifyVerspaetung HBF_Oberhausen_Duesseldorf {fhem("define DELAY at +00:00:10 set Verspaetung on")}

Unknown module HBF_Oberhausen_Duesseldorf

Sven
Gast
Sven

Hi Daniel,

klappt !!! Keine Wiederholungen.

Das Einzigste was ggf. vom Urheber des dbplan Modules eingebaut werden könnte, wäre die Tatsache, dass öfters bei den Verspätungen Hinweis steht. Schaut man dann in die Reiseauskunft der DB steht dort ein Icon mit der Info Fahrt fällt aus. Wenn man das auslesen könnte, wäre es toll und würde (so wie heute) den Weg zum Bahnhof um jene Uhrzeit ersparen.

Gruss, Sven

Kussel
Gast
Kussel

Hallo Daniel,

bin noch Anfänger deshalb meine Bitte an Dich. Ich bin so vorgegangen wie du oben beschrieben hast. Bin erstmal auf DBPlan gegangen und geschaut ob es meinen Bahnhof gibt und siehe da es gibt Ihn ( Hirschberg-Leutershausen) ….dann geschaut ob es den Zielbahnhof gibt!! auch diesen gibt es (Schriesheim).

Dann habe ich

define Bahn_OEG_Leu DBPlan 300

eingegeben…..

dann wollte ich unter den attr das attribut dbplan_departure suchen..leider gibt es das bei mir dann nicht 🙁

Was mache ich falsch?

Gruss

Timo
Gast
Timo

Wurde zu dbplan_station abgeändert.

Sven
Gast
Sven

Wie kann ich denn die plan_connection so einschränken, dass mir nur bestimmte Züge wie S, RBV, ERB angezeigt werden und solche ie ICE oder none nicht ?

wpDiscuz