Skip to content

Hacon/Hafas/Deutsche Bahn API für ESP8266/ESP32

License

Notifications You must be signed in to change notification settings

ArduinoHannover/DBAPI

Repository files navigation

DBAPI

Hacon/Hafas/Deutsche Bahn API für ESP8266/ESP32

PlatformIO Registry

tft_hannover_hbf Abfartstafel aus dem DBTFT Beispiel (Design ID 1) auf einem ILI9341

Wenn die Bibliothek hilfreich ist, gerne den Sponsor-Button von GitHub nutzen (PayPal).

Abhängigkeiten

Wenn nicht PlatformIO genutzt wird, werden folgende Bibliotheken zusätzlich benötigt:

Beispielcode

Der DBTFT-Beispielcode ist für einen ESP8266 mit ILI9341 oder ein "Cheap Yellow Display" (ESP32 mit ILI9341 oder ST7798) ausgelegt. Mittels Webinterface lassen sich diverse Parameter konfigurieren (zunächst Einrichtung des WLANs, Stationsname, Zuggattungen, verschiedene Designs). Für das CYD ist darüber hinaus automatisches Dimmen des Displays mittels des eingebauten LDRs verfügbar. Updates sind sowohl über das Webinterface, als auch espota zusätzlich zur klassischen Installation über USB möglich. Kompilieren vorzugsweise über platformio, Erstinstallation mit einem fertigen Binary ist auch etwa über den ESPHome Webinstaller möglich.

Abfrage

setAGFXOutput(bool) kann aufgerufen werden, um die automatische Ersetzung von Umlauten für Adafruit GFX vorzunehmen (true) oder Umlaute in ue, oe, ss, etc. umzuwandeln(false). Ansonsten wird keine Umwandlung vorgenommen.

Stationen

Für weitere Anfragen wird die Stations-ID benötigt. Daher muss i.d.R. erst einmal diese abgefragt werden (kann dann statisch im Code hinterlegt werden).

DBstation* getStation(name, address, num)

VariableTypStandardFunktion
nameconst char*NULLEntspricht dem Stationsnamen, hier können Variationen den Unterschied machen. Während Hannover Hbf den DB Bahnhof ausgibt, kommen bei Hauptbahnhof Hannover hingegen die Haltestellen des Nahverkehrs (Bus/Bahn).
addressconst char*NULLKann alternativ angegeben werden (name auf NULL setzen), um die nächstgelegene Station zu einer Anschrift zu finden.
numuint8_t10Begrenzt die Anzahl der ausgegebenen Stationen

Ankunft/Abfahrt

Die Zeiten werden standardmäßig für einen Zeitraum von einer Stunde ab Wunschzeit (oder "jetzt") abgerufen. Wird ein längerer Zeitraum ausgewählt, kann es in der Auflistung zu Duplikaten kommen. Ein Zug der um 17:12 abfahren sollte und 70 Minuten Verspätung hat wird sowohl in der Anfrage um 17 Uhr, als auch um 18 Uhr ausgegeben, weil dieser mit der Abfragezeit von 18 Uhr und effektiver Abfahrt um 18:22 immer noch erreichbar ist. Um diese Duplikate zu filtern, wird der Zuglauf (eindeutige Kennung der Fahrt) gegen bisher erfasste Fahrten geprüft und die Fahrt verworfen, wenn es eine Übereinstimmung gibt.

DBdeparr* getStationBoard(type, stationID, target, time, maxCount, maxDuration, productFilter)

DBdeparr* getDepatures(stationID, target, time, maxCount, maxDuration, productFilter)

DBdeparr* getArrivals(stationID, target, time, maxCount, maxDuration, productFilter)

getDepatures und getArrivals verweisen nur auf getStationBoard mit dem entsprechenden type.

VariableTypStandardFunktion
typechar[8]Kann entweder abfahrt oder ankunft sein.
stationIDchar*ID aus der DBstation
targetconst char*NULLentfallen, da nicht mehr in der API vorhanden
timetime_t0Timestamp für die Abfrage oder 0 für "jetzt"
maxCountuint8_t20Anzahl der Ergebnisse, ohne Beschränkung mit offenem Filter reicht der RAM teils nicht an größeren Bahnhöfen
maxDurationuint8_t1Maximale Stunden, jede Stunde generiert eine zusätzliche Abfrage
productFilteruint16_t1023/alleVerkehrsmittel, die angezeigt werden sollen

Produktfilter

Folgende Filter sind möglich:

  • PROD_ICE
  • PROD_IC_EC
  • PROD_IR
  • PROD_RE
  • PROD_S
  • PROD_BUS
  • PROD_SHIP
  • PROD_U
  • PROD_STB
  • PROD_AST (Anrufpflichtverkehr)

Mittels bitweiser Oder-Verknüpfung (|) können mehrere Verkehrsmittel angefragt werden.

Datenstrukturen

DBstation

NameTypFunktion
namechar[30]Stationsname
stationIdchar[50]Stations ID
longitudefloatLängengrad
latitudefloatBreitengrad
nextDBstation*Nächste Station in der Liste

DBdeparr

NameTypFunktion
timetime_tReguläre Abfahrtszeit als Unix-Timestamp
realTimetime_tTatsächliche Abfahrtszeit als Unix-Timestamp
delayint16_tVerspätung
cancelledboolZug entfällt
platformchar[8]Geplantes Gleis (ggf. inkl. Abschnitt), sofern existent, sonst leer
newPlatformchar[8]Tatsächliches Gleis, sofern geändert, sonst leer
targetchar[50]Zielhaltestelle
productchar[12]Bezeichnung des Verkehrsmittels
lineuint16_tLiniennummer
textlinechar[20]Liniennummer als String (kann z.B. auch SEV sein)
nextDBdeparr*Nächste Fahrt in Liste

Hinweise zur Datenstruktur

Wird eine neue Abfrage gestartet, so werden die zuletzt angefragten Daten überschrieben. Nutzdaten müssen vorher ggf. gespeichert werden. Werden etwa Ankunft und Abfahrt eines Bahnhofs angefragt, so ist nur das DBdeparr* der letzten Anfrage gültig.

Mittels for (; t != NULL; t = t->next){...} kann über die Stationen bzw. Fahrten iteriert werden (t vom Typ einer der beiden obigen Datenstrukturen). Soll die Referenz auf den Anfang nicht verloren gehen, so muss t mittels Type* t = orig_t; erstellt werden.

Rechtliche Hinweise

Die Bibliothek fragt direkt die Deutsche Bahn Schnittstelle an. Für die korrekte Funktion der Schnittstelle bzw. deren Daten kann keine Garantie übernommen werden. Die Benutzung erfolgt auf eigene Gefahr.

Sponsor this project

    Packages

    No packages published

    Languages