Files
Trainpulse/README.md
T
GuidoandClaude Opus 5.5 d92dac4a00 TrainPulse: Live-Zugkarte Schweiz (Grundgerüst)
Fahrplan-Aufbereitung (Bahnfilter + pfaedle), GTFS-RT-Abruf,
Positionsberechnung entlang der Strecke, Weboberfläche mit
Karte/Satellit, Proxmox-LXC-Installation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X48pE4bzjHej8w9HyZXCjb
2026-10-21 14:59:08 +02:00

4.0 KiB
Raw Blame History

TrainPulse – Schweiz

Live-Karte aller Züge in der Schweiz: Position entlang der echten Strecke, Linie, Zugnummer, Ziel, Verspätung und Fahrtverlauf mit Gleis. Hintergrund umschaltbar zwischen Karte (OpenStreetMap) und Satellit (swisstopo SWISSIMAGE, ausserhalb der Schweiz Sentinel-2).

Wie es funktioniert

opentransportdata.swiss ──GTFS (Mo+Do)──▶ trainpulse-update (stündlich)
                                            ├─ Filter: nur Bahn (route_type 100–199)
OpenStreetMap (Geofabrik) ─────────────────▶├─ pfaedle: echte Streckenverläufe
                                            └─▶ /var/lib/trainpulse/feeds/<version>/
opentransportdata.swiss ──GTFS-RT (35 s)──▶ trainpulse (Webserver, Port 8080)
                                            ├─ Position = Fahrplan + Verspätung, entlang Strecke
                                            └─ /api/vehicles, /api/trip/…, /api/status, Weboberfläche

Es gibt in der Schweiz keine offenen GPS-Positionen der Züge. Die Position wird aus Fahrplan und gemeldeter Verspätung berechnet und auf den Streckenverlauf gelegt.

Wechsel des Fahrplans: Neue Fahrpläne erscheinen Montag und Donnerstag zwischen 9 und 10 Uhr, die Echtzeitdaten stellen erst um 15 Uhr um. Der Server lädt deshalb immer den Fahrplan, auf den sich die Echtzeitdaten gerade beziehen (feed_version), und schaltet automatisch mit um.

Installation auf Proxmox

  1. Container anlegen (Proxmox-Oberfläche → Create CT): Debian 12 oder 13 Template, unprivileged, 2 Kerne, RAM_EMPFEHLUNG, 20 GB Disk, Netz per DHCP.
  2. Projekt in den Container kopieren, z. B. scp trainpulse.zip root@<ip>: und dort apt install -y unzip && unzip trainpulse.zip.
  3. Installieren: bash trainpulse/deploy/install.sh Baut pfaedle, lädt die Kartenkacheln für die Schweiz, richtet die Dienste ein und startet die erste Fahrplan-Aufbereitung im Hintergrund (journalctl -fu trainpulse-update).
  4. Echtzeit freischalten: Auf https://api-manager.opentransportdata.swiss registrieren, eine Applikation anlegen, das Produkt GTFS-RT abonnieren und den API-Key in /etc/trainpulse.env bei TRAINPULSE_RT_KEY= eintragen. Dann systemctl restart trainpulse.

Danach ist die Karte unter http://<ip>:8080 erreichbar. Für den Zugriff von aussen einfach hinter deinen bestehenden Reverse Proxy hängen.

Ein Update des Programms: neue Version in den Container kopieren, install.sh nochmals ausführen.

Nützliche Befehle

Was Befehl
Status curl localhost:8080/api/status
Logs Webserver journalctl -fu trainpulse
Logs Fahrplan-Update journalctl -fu trainpulse-update
Fahrplan sofort neu aufbereiten sudo -u trainpulse env $(cat /etc/trainpulse.env) /opt/trainpulse/.venv/bin/python -m trainpulse.prepare --force
Selbsttest /opt/trainpulse/.venv/bin/python tests/test_core.py (im Projektordner)

Datenquellen und Lizenzen

Die Hinweise erscheinen unten rechts auf der Karte.

  • Fahrplan & Echtzeit: opentransportdata.swiss (Quellenangabe Pflicht)
  • Karte: © OpenStreetMap-Mitwirkende (ODbL), Kacheln von Protomaps
  • Streckenverläufe: berechnet mit pfaedle aus OpenStreetMap-Daten (ODbL)
  • Satellit Schweiz: © swisstopo (frei, Quellenangabe)
  • Satellit ausserhalb: Sentinel-2 cloudless 2024 von EOX – nur nicht-kommerziell frei

Bekannte Grenzen

  • Nur Bahn. Busse, Trams und Schiffe sind im Fahrplan, werden aber noch herausgefiltert.
  • Der Schweizer Fahrplan enthält auch einige ausländische Züge (z. B. TGV, TER); deren Strecke ausserhalb der Schweiz ist nur Luftlinie, weil der OSM-Ausschnitt nur die Schweiz abdeckt.
  • Züge springen alle 5 Sekunden zur neuen Position statt flüssig zu fahren.
  • Zusätzliche Fahrten, die nur in den Echtzeitdaten vorkommen (Extrazüge), fehlen.
  • In der Nacht des Fahrplanwechsels (2. Sonntag im Dezember) fehlen bis zum nächsten stündlichen Lauf die Züge.