98_DBPlan.pm: Fahrplaninformation der DB

Begonnen von JoWiemann, 08 April 2015, 18:57:14

Vorheriges Thema - Nächstes Thema

yersinia

#570
Ich schau auch gerade, was mit JsonMod geht, hab aber (nach zugegeben sehr kurzen Suche) noch keine weitere Doku zur Api gefunden.

Da mich (erst einmal nur ein) Richtungsgleis Interessiert (SBAHN), nutze ich diese readingsList:
multi(jsonPath("\$.entries.[?(\@.gleis in ['3'])]"), concat(sprintf('%02d', count()), "_Abfahrt_geplant"), substr(property('.zeit'), -8, 5));
multi(jsonPath("\$.entries.[?(\@.gleis in ['3'])]"), concat(sprintf('%02d', count()), "_Abfahrt_aktuell"), substr(property('.ezZeit'), -8, 5));
multi(jsonPath("\$.entries.[?(\@.gleis in ['3'])]"), concat(sprintf('%02d', count()), "_Verspaetung"), sprintf("%d",((time_str2num(property('.ezZeit'))-time_str2num(property('.zeit')))/60)));
multi(jsonPath("\$.entries.[?(\@.gleis in ['3'])]"), concat(sprintf('%02d', count()), "_Meldungen_0"), property('.meldungen.0.text'));
multi(jsonPath("\$.entries.[?(\@.gleis in ['3'])]"), concat(sprintf('%02d', count()), "_Meldungen_0_prio"), property('.meldungen.0.prioritaet'));
multi(jsonPath("\$.entries.[?(\@.gleis in ['3'])]"), concat(sprintf('%02d', count()), "_Meldungen_1"), property('.meldungen.1.text'));
multi(jsonPath("\$.entries.[?(\@.gleis in ['3'])]"), concat(sprintf('%02d', count()), "_Meldungen_1_prio"), property('.meldungen.1.prioritaet'));
multi(jsonPath("\$.entries.[?(\@.gleis in ['3'])]"), concat(sprintf('%02d', count()), "_Ziel"), property('.terminus'));
multi(jsonPath("\$.entries.[?(\@.gleis in ['3'])]"), concat(sprintf('%02d', count()), "_Verkehrmittel"), property('.verkehrmittel.name'));
Die Zwischenstationen (vias?) find ich unwichtig. Schön wäre noch die geplante und aktuelle Ankunftszeit zu erfahren. Analog zu DBPlan fehlt mir auch die Angabe des Zielbahnhofs.

Wenn du die meisten Parameter weglässt,
https://www.bahn.de/web/api/reiseloesung/abfahrten?ortExtId=8001033bekommst du alle Verkehrsmittel rund um die Station; ein naheliegender Busbahnhof/-Haltestelle erhält allerdings eine andere bahnhofsID.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

rico5588

Da ich auch gerade dabei bin das Rad neu zuerfinden...
meine erste Hürde war das finden der BahnhofsID. Im Anhang eine aktuelle Liste.
https://wiki.openstreetmap.org/w/images/c/c2/20141001_IBNR.pdf

Gruß
Rico
Geht nicht gibt's nicht.
NUC-I3+Proxmox, Fritzbox 7590 AX, Synology DS423+
Dimplex Wärmepumpe, Lüftungsanlage, Solarlog 1200
HM,IT,Lacross,EspEasy,Modbus,MQTT2, Freund von Shelly

jop

Zitat von: RockFan am 21 Dezember 2024, 14:29:35Das Resultat aus der neuen Bahn API hat mich an Auswertungen aus der Coronazeit erinnert. Da wurde mit JsonMod gearbeitet. Damit habe ich mir dann mal schnell etwas sehr simples für meine Zwecke zusammengebaut

Viele Grüße
Dieter

Hallo Dieter,
ich nutze DBPlan schon lange um mir Verspätungen signalisieren zu lassen, was ja nun leider nicht mehr geht.
Wäre es möglich, dass Du die Raw Definition Deiner Lösung postest?
Danke!
Grüße
Jörg



RockFan

Zitat von: jop am 20 März 2025, 09:53:17Hallo Dieter,
ich nutze DBPlan schon lange um mir Verspätungen signalisieren zu lassen, was ja nun leider nicht mehr geht.
Wäre es möglich, dass Du die Raw Definition Deiner Lösung postest?
Danke!
Grüße
Jörg

Hallo Jörg,

klar, kein Problem.

So tut es für meinen Zweck:
define BobingenAugsburg JsonMod https://www.bahn.de/web/api/reiseloesung/abfahrten?ortExtId=8001033&mitVias=true&maxVias=8&verkehrsmittel[%5D=REGIONAL
attr BobingenAugsburg interval */4 * * * *
attr BobingenAugsburg readingList multi(jsonPath("\$.entries[?(\@.terminus in ['Augsburg Hbf'])]"), concat(count(),'_Plan'), substr(property('zeit'),11,5));;\
multi(jsonPath("\$.entries[?(\@.terminus in ['Augsburg Hbf'])]"), concat(count(),'_Abfahrt'), substr(property('ezZeit'),11,5));;\
multi(jsonPath("\$.entries[?(\@.terminus in ['Augsburg Hbf'])]"), concat(count(),'_Delay'), (time_str2num(property('ezZeit'))-time_str2num(property('zeit')))/60);;\
multi(jsonPath("\$.entries[?(\@.terminus in ['Augsburg Hbf'])]"), concat(count(),'_Gleis'), property('gleis'));;
attr BobingenAugsburg webCmd reread

D.h. ich ziehe mir nur die Ergebnisse für den Zielbahnhof "Augsburg Hbf" raus. Wenn Du die URL - natürlich mit Deinem Startbahnhof (ortExtId) - in den Browser eingibst, kannst Du im Ergebnis sehen, was alles zurückkommt.

Viele Grüße
Dieter
Raspbian (Buster) auf Raspberry Pi 4 /  CUL + RFXTRX + TCM / FS20, FHT 80B, S300TH, Intertechno, DMX, Milight, EnOcean, Homematic, AMAD, Home Connect, MiSmartHome, Yeelight, ...

jop

Hallo Dieter,
vielen Dank!
Ich bekomme immer nur zwei zukünftige Abfahrten als Readings angezeigt. Hast Du eine Idee, wie ich mir mehr Abfahrten anzeigen lassen kann?
Grüße

Jörg

RockFan

Hallo Jörg,
durch den Filter auf den Zielbahnhof mit @.terminus in ['Augsburg Hbf'] wird das Gesamtergebnis natürlich eingeschränkt. Das kommt bei mir auch immer wieder vor. Leider kenne ich keinen Parameter, den man der URL mitgeben kann, um mehr Ergebnisse zu bekommen.

Wenn Du einfach nur das rohe Gesamtergebnis als Readings bekommen möchtest kannst Du im Attribut readingList complete() setzen. Allerdings dann ohne Formatierung der Zeit und der Berechnung der Verspätung.

Viele Grüße
Dieter 
Raspbian (Buster) auf Raspberry Pi 4 /  CUL + RFXTRX + TCM / FS20, FHT 80B, S300TH, Intertechno, DMX, Milight, EnOcean, Homematic, AMAD, Home Connect, MiSmartHome, Yeelight, ...

jop

Hallo Dieter,
danke für die schnelle Antwort!
Schade, dass man das nicht steuern kann.
Die Readings, die Du verwendest reichen mir auch völlig - ist auch schon eingebunden.
Grüße
Jörg