Ein auf Ihre Bedürfnisse zugeschnittener Abfahrtsmonitor sorgt dafür, dass Sie nicht sinnlos an der Haltestelle auf den nächsten Bus warten.
Nach wie vor ist in Deutschland wenig Verlass auf die Pünktlichkeit der öffentlichen Verkehrsmittel. Zum Glück gibt es Webseiten und Apps, die Verspätungen in Echtzeit anzeigen. Bei kurzfristigen Ausfällen oder Streckensperrungen taugen die Daten wenig: Da haben selbst Fahrdienstleiter und Fahrzeugführer oft keine Infos. Im Großen und Ganzen sind die verfügbaren Daten aber recht zuverlässig.
Als Bastelidee gibt es deshalb in diesem Artikel einen Abfahrtsmonitor für die eigene Haltestelle. Statt Smartphone-Fummelei genügt ein schneller Blick auf die kleine Appliance: So behalten Sie den morgendlichen Ablauf im Griff. Die Projektaufgabe teilt sich dabei in zwei Bereiche: das Eruieren und die Anzeige der Daten.
Verkehrsdaten
Deutschlandweit buhlen mehr als 100 Verkehrs-Apps um die Gunst der Nutzer. Alleine in München gibt es eine vom Verkehrsverbund (MVV) selbst und jeweils eine von den Mitgliedsfirmen (MVG und Bahn). Wahrscheinlich sind es noch mehr. Zum Glück zeigen alle ungefähr dasselbe an. Das verdanken wir der EU-Verordnung 2010/40/EU, die zum Datenaustausch verpflichtet.
Als Maker kann man sich trotzdem nicht zurücklehnen, denn die Daten sind zwar zugänglich, aber nicht dokumentiert. Zum Glück gibt es Privatinitiativen, die eine einheitliche API entwickeln und darüber den Zugriff deutlich vereinfachen. Die hier vorgestellte Anwendung greift dabei auf die API v6.db.transport.rest [1] zu. Sie ist öffentlich zugänglich und lässt sich ohne Anmeldung nutzen, solange man den Server nicht mit Anfragen überflutet. Alternativ hosten Sie die Schnittstelle auch auf einem eigenen Server.
Der API-Server greift auf die Daten der Deutschen Bahn zurück, die zwar nicht alle, aber sehr viele Informationen liefert. Reicht das nicht aus, müssen Sie beim lokalen Verkehrsverbund auf die Suche gehen. Meist genügt dafür die Überwachung der Kommunikation des Browsers mit den Servern mittels der im Browser eingebauten Entwicklungswerkzeuge. Die dokumentieren unter anderem alle Zugriffe des Browsers, und neben viel Unbrauchbarem finden Sie so auch die URLs mit den eigentlichen Daten. Mühsam ist das trotzdem. Alternativ wenden Sie sich direkt an Ihren Verkehrsverbund. Eine Übersicht mit E-Mail-Adressen finden Sie online [2].
Schnittstellen
Zentrales Element in der v6-API ist die Stations-ID. Dabei handelt es sich um eine eindeutige Identifikation der Haltestelle. Zum Glück gibt es für die Suche auch eine Schnittstelle. Das Vorgehen besteht also darin, die entsprechende URL zusammenzubasteln, abzusenden und das Ergebnis auszulesen. Beispiel-URLs sehen Sie in Listing 1. Die erste Zeile sucht nach der Stations-ID, die zweite Zeile nach Abfahrten (Abbildung 1). Wie Sie sehen, führt die Bahn die Verspätung (delay) sekundengenau in ihren Systemen – man weiß nicht, ob man darüber lachen oder weinen soll.
Listing 1
API-URLs für Stationen und Abfahrten
https://v6.db.transport.rest/locations?query=Neu%20Perlach%Zentrum&results=10 https://v6.db.transport.rest/stops/8005676/departures?duration=10&linesOfStops=false&remarks=true&language=en&bus=false
Um die mühsame URL-Bastelei zu umgehen, entstanden als erster Schritt bei der Programmentwicklung zwei kleine Python-Skripte, die diese Aufgaben übernehmen (Abbildung 2). Beide erhalten Sie über das Projekt-Repository des Autors [3]. Das Readme.md zum Projekt beschreibt die notwendigen Schritte für die Softwareinstallation. Beide Skripte nutzen die Python-Klasse pyHafas [4], die eine objektorientierte Schnittstelle zur v6-API bereitstellt.

Abbildung 2: Die Ankunftszeiten der gewünschten Transportmittel lassen sich bequem via Kommandozeile abfragen.
Die Stationssuche ist üblicherweise eine einmalige Angelegenheit. Sie benötigen die Stations-IDs für die von Ihnen genutzten Haltestellen sowie für solche, die die Richtung der Fahrt vorgeben. In aller Regel wollen Sie ja mit dem Bus zum Bahnhof und nicht in die andere Richtung. Völlig konsistent ist der Datenbestand der Bahn nicht. Für den Münchner Hauptbahnhof gibt es etwa mehrere Stations-IDs. Für manche Ziele führt die Bahn Abfahrten von Regionalzügen irrtümlich vom Tiefbahnhof auf, bei anderen Zielen gar nicht. Hier hilft nur ausprobieren.
Haben Sie die IDs beisammen, dann beginnen Sie mit der Suche nach den Abfahrten. Für Verbindungen gibt es ebenfalls eine Schnittstelle, die in diesem Artikel aber keine Rolle spielt. Diverse Parameter, die die Anzahl der Treffer einschränken, helfen bei der Abfahrtssuche – die Richtung wurde bereits erwähnt. Darüber hinaus können Sie auch die gewünschten Verkehrsmittel auswählen, etwa subway für U-Bahn oder suburban für S-Bahnen. Auch hier ist auf die Klassifizierung kein absoluter Verlass – die Bahn hat auch ICEs im Datenbestand, die fälschlicherweise unter suburban laufen.
Das Skript tools/departures.py unterstützt die parametrisierte Suche. Fans der Kommandozeile lassen es in einer Endlosschleife laufen und erhalten damit die aktuellen Abfahrten ständig auf dem Bildschirm. Als Alternative und für den PC-unabhängigen Betrieb bietet sich aber eine Kombination aus Mikrocontroller oder RasPi und einem Minibildschirm an.
Hardware …
Bei Projekten wie dem Abfahrtsmonitor sind Hard- und Software eng verwoben. Trotzdem schreibt der Autor gern über hardwareunabhängige Lösungen. Prinzipiell kommt ja eine große Auswahl an Hardware infrage, und am Anfang steht nicht fest, auf welcher davon letztlich das Programm läuft. Außerdem programmiert der Autor unterwegs häufig auf dem Laptop.







