TRAM
TRAM – Ausfallzeiten & Netzwerk-Verwaltung
Stand: 28.05.2026 ---Übersicht
Das TRAM-Modul berechnet Fahrzeit-Ausfallzeiten zwischen zwei Haltestellen: Grundlagen:Nutzer-Befehle
Ausfallzeiten berechnen
Befehl:/tram oder /ausfall
Direktsyntax:
/ausfall <linie> <profil> <start> -> <ende>
Dialog-Ablauf:
1. Produkt: Ausfall oder /ausfall direkt
2. Linie wählen
3. Zeitprofil wählen (mit automatischer Vorauswahl nach Wochentag/Uhrzeit)
4. Start- und Endhaltestelle festlegen
5. Ergebnis: je Stammrichtung Richtung <Ziel>: <Minuten>
Fallback: Fehlt für ein Segment das gewählte Profil, wird auf DEFAULT zurückgegriffen. Ausgabe zeigt dann mit Default-Fallback.
---
Fahrzeitprofile
Standard-Setup
Tabellen:tram_travel_profiles – Zeitprofile pro Netz und Linietram_route_segment_times – Segment-Zeiten je Stammvariante und ProfilDEFAULT ist immer vorhandenA, B, C, ... (nicht auf A–H begrenzt)Wochentag-Profile für /ausfall
Für automatische Profil-Vorauswahl je Wochentag:
/ausfall-Aufruf aktuellen Wochentag & UhrzeitA auf Linie BS-A oder BS-ZA automatisch/ausfall list [modi|mi|do|fr|sa so]
/ausfall add <Wochentag> <hh:mm> - <hh:mm> <Profil>
/ausfall edit <Wochentag> <alt_hh:mm> - <hh:mm> [neu_hh:mm - hh:mm] <Profil>
/ausfall bulkimport
Beispiele:
/ausfall list mo
/ausfall add mo 06:00 - 09:00 A
/ausfall edit fr 22:00 - 23:59 G
/ausfall bulkimport
Hinweise:
add bricht bei Duplikaten ab (gleiches Fenster am Tag)edit mit nur Profil ändert nur das Profil, nicht das Fensterbulkimport lädt Standardfahrplan (alle 7 Tage); Upsert bei Duplikaten(network_set_id, weekday, time_from, time_until)Weichenverwaltung
Nur Bot-Admin im Privat-Chat Befehl:/weiche oder /weichen
Befehle
/weiche list | Alle Weichen anzeigen (Ebene 1: Start-Halts, Ebene 2: Ziele) /weiche add ... | Neue Weiche hinzufügen (Dialog oder Stapel) /weiche edit <ID> ... | Weiche bearbeiten /weiche del <ID> | Weiche löschen Weichen-Format
Standard-Weiche:<Start-Haltestelle> <W11|W12|W13|...> <Folge-Haltestelle>
Folge-Weiche (mit Gleis-Zusatz):
<Start-Haltestelle> <W13> -> <W13a.4> <Folge-Haltestelle>
Gleisschreibweisen (gleichbedeutend):
W11a.1 bis W13a.10W11a1 bis W13a10🔼1️⃣ (W11a) oder ◀️4️⃣ (W13a)Stapel-Input
/weiche add
<Start-Halt1> <W11> <Folge-Halt1>
<Start-Halt2> <W12> <Folge-Halt2>
confirm
Verhalten unbekannter Haltestellen:
Trotzdem eintragen? (Ja/Nein)confirm werden unbekannte Halte trotzdem gespeichertconfirm werden sie als Fehler übersprungenNetz-Administration
Nur Bot-Admin im Privat-Chat Befehl:/tramadmin
Netzwerk-Management
/tramadmin set add <code> <titel> | Neues Netz anlegen /tramadmin set list | Alle Netze auflisten /tramadmin set activate <set_id> | Netz aktivieren /tramadmin coverage [set_id] | DEFAULT-Abdeckung berichten /tramdefaultreport [set_id]/tramcoverage [set_id]Varianten & Routen
/tramadmin variant add <set> <line> <dir> <route_no> <start> <end> <name> | Variante anlegen /tramadmin variant steps <variant_id> <code1>><code2>><...> | Schrittfolge setzen Stammdaten-Import
Empfohlener Workflow: CSV-Import
Dateiablage:linien/
Dateinamensschema:
<Linie>_Ri1|Ri2_<Variante>_ab_<DD.MM.YYYY>_<Start> - <Ende>.CSV
Beispiel:
12_Ri1_Standard_ab_14.12.2025_Pasedagplatz Gl.2 - Am Kupfergraben Gl.3.CSV
CSV-Schema:
;C#;Name;;Entf.;BS-A;BS-B;BS-C;...;BS-I;;
;1;Pasedagplatz, Gl.2;;0;0;0;0;...;0;;
Spalten:
C# = Fahrt-NummerName = HaltestellennameEntf. = km ab StartBS-* = Kumulierte Fahrtzeit ab StartRi1 → Richtung hin, Ri2 → Richtung rueck(Betriebspunkt) wird beim Import automatisch aus Namen entferntDEFAULT gespeichertBS-A fehlt, nimmt Importer erstes aktives Profil (z.B. BS-ZA)CSV Batch-Import
Produktiv-Import
./venv/bin/python tram_csv_import.py \
--set-code netz_2026 \
--set-title "Regelnetz 2026" \
--start-route 200 \
--rebuild-set
Dry-Run
./venv/bin/python tram_csv_import.py \
--set-code netz_2026 \
--set-title "Regelnetz 2026" \
--start-route 200 \
--dry-run
--rebuild-set leert vor Neuimport:
tram_route_segment_timestram_route_stepstram_route_variantslinien/ ablegen
2. Dry-Run testen
3. Produktiv-Import oder Rebuild
4. Optional Ausfall-Zeitfenster pflegen: /ausfall add/edit
5. Falls Lücken: ./venv/bin/python tram_fill_remaining_default_segments.py
Legacy TXT-Import (nicht empfohlen)
Nur für historische Dateien relevant:tram_import_all.py – Batch von TXT-Dateientram_bulk_import.py – Einzelne TXT-Dateitram_backfill_default_profile.py – DEFAULT-Profile nachholenlinien/:
<Linie>.txt oder <Linie>_<Gruppe>.txt
Inhalt (beide Richtungen in einer Datei, getrennt durch Leerzeile):
Haltestelle;1
Zwischenhalt;2
Endhaltestelle
Endhaltestelle
Rückfahrt-Halt;2
Start-Rückfahrt
Verzweigte Linien (z.B. M1, M4)
Mit@meta-Blöcken pro Stammvariante:
@meta direction=cityvariant=M1 Schillerstr. -> Am Kupfergraben stamm=1
<Haltefolge>
@meta direction=outvariant=M1 Am Kupfergraben -> Rosenthal Nord stamm=1
<Haltefolge>
Importbefehl:
./venv/bin/python tram_import_all.py \
--set-code netz_2026 \
--set-title "Regelnetz 2026" \
--start-route 100 \
--dir-hin city \
--dir-rueck out \
[--only M5,M10] \
[--activate-set] \
[--dry-run]
SQL Import (optional)
Beispiel-Seed-Datei:TRAM_M5_SEED.sql
mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" < TRAM_M5_SEED.sql
---
Datenbank-Tabellen
tram_network_sets | Netz-Versionen (Code, Titel) tram_route_variants | Stammvarianten (Linie, Richtung) tram_route_steps | Schrittfolgen (Knoten von→zu) tram_travel_profiles | Zeitprofile (A, B, C, ...) tram_route_segment_times | Segment-Zeiten pro Variante & Profil tram_outage_profile_slots | Wochentag-Zeitfenster für /ausfall DEFAULT-Report
Bot-Admin im Privat-Chat:/tramdefaultreport [set_id]
/tramcoverage [set_id]
/tramadmin coverage [set_id]
Ausgabe:
Linie M5 (hin): vollständig
Linie M5 (rueck): teilweise
...
Gesamt-Quote: 87%
---
Betrieb & Troubleshooting
Nach Deploy
Service neu starten
sudo systemctl restart quasselbot
Live-Logs
journalctl -u quasselbot -f
Tests
Alle Tests
./run_tests.sh
TRAM-spezifisch
./run_tests.sh test_tram*.py
---
Praxis-Beispiele
A) Neue Netz-Struktur anlegen
/tramadmin set add m5_2026 M5 Bauphase 2026
/tramadmin variant add 1 M5 city 101 ZING_G3 HBF_G1 Stamm
/tramadmin variant steps <variant_id> ZING_G3>PREROWER>...>HBF_G1
/tramadmin set activate 1
B) CSV importieren und testen
Dateien ablegen
cp ~/downloads/m5_*.CSV linien/
Dry-Run
./venv/bin/python tram_csv_import.py --set-code netz_2026 --dry-run
Echter Import
./venv/bin/python tram_csv_import.py --set-code netz_2026 --rebuild-set
C) Ausfallzeiten berechnen
/ausfall
→ Wähle: M5
→ Profil: A (automatisch hervorgehoben, 06:00–09:00)
→ Start: Zingster Str.
→ Ende: Am Kupfergraben
→ Ergebnis: Ri. HBF: 12 Minuten
D) Weiche hinzufügen
/weiche add
Hackesche Markte W13 -> W13a.4 S Hackescher Markt
confirm
---
Verwandte Dokumentation
🔒 Speicher-Verschlüsselung: AES-256 + bcrypt aktiv
Modul-Umfang: ~39.668 Zeilen Python-Core