| name | bahn |
| description | A comprehensive suite of commands for tracking Deutsche Bahn trains |
| version | 1.0.0 |
| metadata | {"openclaw":{"requires":{"bins":["node"]},"install":[{"kind":"node","package":"db-vendo-client"},{"kind":"node","package":"devalue"},{"kind":"node","package":"fast-xml-parser"}],"emoji":"๐","homepage":"https://github.com/ableitung/openclaw-bahn","os":["macos","linux"]}} |
Bahn
A comprehensive suite of commands for Deutsche Bahn trains - live departures, delay tracking, Baustellen/disruption alerts, journey planning, connection parsing, historical delay stats, and delay predictions. No API keys needed.
Flags
| Flag | What it does | When to use |
|---|
--predict | Runs the exponential delay model (transferProb, zugbindungProb) | User asks about probability of catching a transfer or Zugbindung being lifted |
--stats | Fetches historical bahn.expert aggregate data per train | User asks about historical delay patterns for a specific train |
Examples
node scripts/bahn.mjs --search "Wuppertal" [--json]
node scripts/bahn.mjs --departures "Wuppertal Hbf" [--results N] [--json]
echo '<raw Navigator share text>' | node scripts/bahn.mjs --parse [--json]
echo '<text>' | node scripts/bahn.mjs --parse --predict [--json]
node scripts/bahn.mjs --parse connections/active.json --stats [--json]
node scripts/bahn.mjs --parse connections/active.json --predict --stats [--json]
node scripts/bahn.mjs --journey "From" "To" [--date YYYY-MM-DD] [--time HH:MM] [--results N] [--days N] [--json]
node scripts/bahn.mjs --live --current-leg N [--delay M] connections/active.json [--json]
node scripts/bahn.mjs --category CAT --train NUM [--date YYYY-MM-DD] [--json]
File Layout
scripts/
โโโ bahn.mjs โ thin CLI dispatcher (~60 lines)
โโโ lib/
โ โโโ commands/ โ one module per mode
โ โ โโโ search.mjs โ --search: station lookup
โ โ โโโ departures.mjs โ --departures: live departure board
โ โ โโโ parse.mjs โ --parse: connection parsing + enrichment
โ โ โโโ journey.mjs โ --journey: route search
โ โ โโโ live.mjs โ --live: real-time transfer check
โ โ โโโ track.mjs โ --track: train tracking
โ โโโ helpers.mjs โ shared helpers (envelope, transfers, assessment)
โ โโโ data.mjs โ source router (IRIS/Vendo/bahn.expert)
โ โโโ predict.mjs โ probability model (opt-in via --predict)
โ โโโ stats.mjs โ delay profiles + historical stats (opt-in via --stats)
โ โโโ parse.mjs โ connection text parser
โ โโโ format.mjs โ output formatter
โ โโโ messageLookup.mjs โ IRIS delay code lookup
โ โโโ sources/
โ โโโ bahn-expert.mjs โ bahn.expert tRPC source
โ โโโ iris.mjs โ IRIS XML source
โ โโโ vendo.mjs โ db-vendo-client source
JSON Envelope
All modes support --json:
{
"mode": "string",
"timestamp": "ISO8601",
"connection": { "date", "from", "to", "legs", "transfers" },
"journeyOptions": { "from", "to", "date", "options" },
"departures": { "station", "entries" },
"stations": { "query", "results" },
"liveStatus": { "currentLeg", "nextTransfer", "zugbindungStatus"
The assessment field is only populated when --predict is used. Without it, assessment is null.
Prediction Model (predict.mjs) โ opt-in only
Exponential delay distributions per train category. Only loaded when --predict is passed.
| Category | Mean delay | Cancel rate |
|---|
| ICE | 5.0min | 5.5% |
| IC/EC | 4.0min | 4.0% |
| RE | 2.5min | 2.0% |
| RB | 2.0min | 1.5% |
| S | 1.5min | 1.0% |
| Bus | 3.0min | 2.0% |
P(Zugbindung triggered) per leg = exp(-20/mean).
Overall P(Zugbindung) = 1 - โ(1 - P(leg_i โฅ 20min)).
Coverage
Long-distance (ICE/IC/EC), regional (RE/RB), S-Bahn, buses, and international trains to neighboring countries.
Report issues and legal information here: https://github.com/ableitung/openclaw-bahn