Server liefert zusätzlich die Position in 10 s, der Browser interpoliert dazwischen (~15 fps). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X48pE4bzjHej8w9HyZXCjb
74 lines
4.1 KiB
Markdown
74 lines
4.1 KiB
Markdown
# 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](https://opentransportdata.swiss) (Quellenangabe Pflicht)
|
||
- Karte: © OpenStreetMap-Mitwirkende (ODbL), Kacheln von [Protomaps](https://protomaps.com)
|
||
- Streckenverläufe: berechnet mit [pfaedle](https://github.com/ad-freiburg/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.
|
||
- Zwischen zwei Abfragen fahren die Züge auf gerader Linie; in engen Kurven schneiden sie
|
||
für ein paar Sekunden minimal ab.
|
||
- 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.
|