Skip to content
github-actions[bot] edited this page Aug 31, 2026 · 2 revisions

Build: cmake --preset linux-ninja-release && cmake --build --preset linux-ninja-release

Railway Monitoring System - Quick Start Guide

VollstÀndiges IoT-basiertes Echtzeit-Überwachungssystem für Zugverkehr mit KI-gestützter Analyse.


⚑ NEU: Production-Ready Deployment!

Jetzt verfΓΌgbar:

  • βœ… Docker Compose Setup - Komplettes System mit einem Befehl
  • βœ… Quick-Start Scripts - Automatische Installation (Linux/macOS/Windows)
  • βœ… Python Network Generator - Keine C++ Compilation erforderlich
  • βœ… WPF Desktop Client - VollstΓ€ndig implementiert (.NET 8)
  • βœ… Web UI mit Nginx - Production-ready Konfiguration

πŸš€ Schnellster Start (2 Minuten)

Linux/macOS:

./quick-start.sh

Windows PowerShell:

.\quick-start.ps1

Das war's! System lΓ€uft auf:

πŸ“– VollstΓ€ndige Dokumentation: Siehe DEPLOYMENT.md


πŸš€ Schnellstart (5 Minuten)

Voraussetzungen

  • ThemisDB lΓ€uft auf http://localhost:8765
  • Python 3.8+ (fΓΌr Simulator & Import)
  • C++ Compiler (fΓΌr Daten-Generator)
  • Web Browser (fΓΌr Live-Karte)

Schritt 1: Streckennetz generieren

# Installiere nlohmann/json (falls nicht vorhanden)
# Ubuntu/Debian: sudo apt-get install nlohmann-json3-dev
# macOS: brew install nlohmann-json
# Oder: Header-only von https://github.com/nlohmann/json

# Kompiliere Daten-Generator
cd examples/railway
g++ -std=c++17 railway_base_data_generator.cpp -o railway_generator

# Generiere Streckendaten (ca. 400 Segmente, 150+ Signale)
mkdir -p ../../data
./railway_generator

Output: ../../data/railway_network_base_germany.json

Inhalt:

  • 15 BahnhΓΆfe (Frankfurt, MΓΌnchen, Hamburg, etc.)
  • ~400 Streckenabschnitte mit Geschwindigkeitsprofilen
  • ~150 Signale (Haupt- und Vorsignale)
  • ~40 Weichen
  • ~50 BahnΓΌbergΓ€nge

Schritt 2: Daten in ThemisDB importieren

# Installiere Python Dependencies
pip install requests

# Importiere Streckennetz
cd ../../scripts/railway
python import_railway_network.py ../../data/railway_network_base_germany.json

Importiert:

  • Stations als Graph Vertices
  • Track Segments als Graph Edges
  • Signale, Weichen, BahnΓΌbergΓ€nge

Schritt 3: Zugverkehr simulieren

# Starte Simulator mit 50 ZΓΌgen
python train_simulator.py \
    --network ../../data/railway_network_base_germany.json \
    --trains 50 \
    --interval 1.0 \
    --themis http://localhost:8765

Simulation:

  • 50 ZΓΌge (realistisch verteilt: ICE, IC, RE, RB)
  • Echtzeit-Updates (1 Hz)
  • GPS-Telemetrie
  • Fahrzeug-Systeme
  • Infrastruktur-Events (AchszΓ€hler, Hotbox-Detektoren)
  • VerspΓ€tungen nach realen Statistiken

Schritt 4: Live-Karte ΓΆffnen

# Γ–ffne im Browser
open ../../examples/railway/live_map.html
# oder
firefox ../../examples/railway/live_map.html

Features:

  • OpenStreetMap Basis-Karte
  • Live-Zugpositionen
  • BahnhΓΆfe, Signale, Weichen (Layer)
  • Echtzeit-Statistiken
  • Train Details on Click

πŸ“Š Realistische Zahlen (Deutsche Bahn 2023)

Zugverkehr pro Tag

Gesamt Deutschland:    ~40.000 ZΓΌge/Tag
β”œβ”€ ICE (Fernverkehr):   1.200 ZΓΌge/Tag
β”œβ”€ IC/EC (Fernverkehr):   800 ZΓΌge/Tag
β”œβ”€ RE (Regional):       8.000 ZΓΌge/Tag
β”œβ”€ RB (Regional):      15.000 ZΓΌge/Tag
└─ GΓΌterverkehr:        5.000 ZΓΌge/Tag

PΓΌnktlichkeitsstatistik

ICE PΓΌnktlichkeit (<6 Min):  91.5%
RE/RB PΓΌnktlichkeit (<6 Min): 94.2%

Durchschnittliche VerspΓ€tung (bei verspΓ€teten ZΓΌgen):
- ICE:  12.3 Minuten
- RE:    8.5 Minuten

Strecken-Daten

Geschwindigkeiten:
- ICE (Hochgeschwindigkeit):  200-330 km/h
- IC (Hauptstrecken):         140-200 km/h
- RE (Regional):              100-160 km/h
- RB (Regionalbahn):           80-120 km/h

SignalabstΓ€nde:
- Fernverkehr:  1.5 - 3.0 km
- Regional:     1.0 - 2.0 km

BahnΓΌbergΓ€nge:
- Nur auf Regionalstrecken
- Durchschnitt: 1 pro 10 km

πŸ—ΊοΈ Datenmodell

Graph-Struktur

(Station) -[TRACK_SEGMENT]-> (Track_Point)
(Track_Point) -[TRACK_SEGMENT]-> (Track_Point)
(Signal) -[LOCATED_AT]-> (Track_Point)
(Switch) -[LOCATED_AT]-> (Track_Point)
(Train) -[CURRENTLY_AT]-> (Track_Segment)

Time-Series Metriken

Pro Zug (1 Hz):
- train_telemetry: GPS, Speed, Delay, Occupancy
- train_vehicle_systems: Traction, Brakes, HVAC
- train_safety_systems: ETCS, PZB status

Pro Infrastruktur (Event-basiert):
- axle_counter_events: Zugein-/ausfahrt
- hotbox_detector: HeißlÀufer-Warnung
- signal_events: Aspekt-Γ„nderungen
- weather_station: Wetter entlang Strecke

πŸ“‘ API Endpoints

ZΓΌge abfragen

# Alle aktiven ZΓΌge
curl http://localhost:8765/query -X POST \
  -H "Content-Type: application/json" \
  -d '{"table":"train","return":"entities","limit":100}'

# VerspΓ€tete ZΓΌge (>5 Min)
curl http://localhost:8765/query/aql -X POST \
  -d '{
    "query": "FOR t IN train FILTER t.delay_min > 5 RETURN t"
  }'

Zeitreihen-Daten

# Telemetrie fΓΌr ICE 508
curl http://localhost:8765/timeseries/train_telemetry/ICE508

# Letzte 1 Stunde
curl "http://localhost:8765/timeseries/train_telemetry/ICE508?from=-3600000"

Graph-Abfragen

# Alle Signale auf Strecke 3600
curl http://localhost:8765/query/aql -X POST \
  -d '{
    "query": "FOR s IN signal FILTER s.track_number == \"3600\" RETURN s"
  }'

# Route von Frankfurt nach MΓΌnchen
curl http://localhost:8765/graph/shortest_path -X POST \
  -d '{
    "start": "station:8000105",
    "end": "station:8000261",
    "algorithm": "dijkstra"
  }'

🎯 Erweiterte Features

1. VerspΓ€tungs-Analyse mit LLM

import requests

# Frage an Ollama LLM
response = requests.post("http://localhost:8765/analytics/llm-query", json={
    "query": "Warum hat ICE 508 VerspΓ€tung?",
    "context": {
        "train_number": "ICE 508",
        "include_events": True,
        "time_window_min": 30
    }
})

print(response.json()["answer"])
# Output: "ICE 508 hat 15 Min VerspΓ€tung aufgrund SignalstΓΆrung
#          Signal F123 auf Strecke 3600 Km 45.3..."

2. Was-wΓ€re-wenn Simulation

# Simuliere Signalausfall
response = requests.post("http://localhost:8765/analytics/simulate", json={
    "scenario": "signal_failure",
    "signal_id": "signal:3600_H12",
    "duration_min": 120,
    "analyze_impact": True
})

print(f"Betroffene ZΓΌge: {response.json()['affected_trains']}")
print(f"ZusΓ€tzliche VerspΓ€tung: {response.json()['total_delay_min']} Min")

3. CEP Rules fΓΌr Anomalien

// In ThemisDB CEP Engine
CREATE RULE cascading_delays AS
SELECT 
  t1.trainNumber,
  COUNT(*) as affected_count
FROM TrainDelayEvents t1
JOIN TrainDelayEvents t2
  ON t1.next_station = t2.current_station
  AND t2.timestamp > t1.timestamp
  AND t2.timestamp < t1.timestamp + 600000
WHERE t1.delay_min > 10
WINDOW SLIDING(15 MINUTES)
GROUP BY t1.trainNumber
HAVING COUNT(*) >= 3
ACTION alert('operations_center', priority='HIGH');

πŸ“ˆ Visualisierung

Grafana Dashboard

  1. Zugpositionen: Live-Karte mit Leaflet Plugin
  2. VerspΓ€tungen: Histogram + Trend
  3. Streckenauslastung: Heatmap
  4. Effizienz-KPIs: PΓΌnktlichkeit, Energieverbrauch
  5. Anomalien: CEP Alerts, Hotbox-Warnungen

WebSocket Real-time Feed

// Connect to live updates
const ws = new WebSocket('ws://localhost:8765/ws/trains');

ws.onmessage = (event) => {
  const train = JSON.parse(event.data);
  updateTrainMarker(train.train_number, train.lat, train.lon);
};

πŸ”§ Konfiguration

config/railway_monitoring.yaml

storage:
  rocksdb_path: /data/railway_db

server:
  host: 0.0.0.0
  port: 8765

timeseries:
  enabled: true
  retention_days: 90
  compression: gorilla
  
cep:
  enabled: true
  rules_path: /etc/themis/cep_rules/
  
llm:
  enabled: true
  provider: ollama
  endpoint: http://localhost:11434
  model: llama3.2:latest
  
geo:
  enabled: true
  osm_import: true

simulation:
  trains_count: 50
  update_interval_sec: 1.0
  realistic_delays: true
  punctuality_ice: 0.915
  punctuality_re: 0.942

🚦 Troubleshooting

Problem: Keine ZΓΌge sichtbar

# PrΓΌfe ob Simulator lΓ€uft
ps aux | grep train_simulator

# PrΓΌfe Time-Series Daten
curl http://localhost:8765/timeseries/train_telemetry

# PrΓΌfe ThemisDB Logs
docker logs themisdb

Problem: Zu viele VerspΓ€tungen

# Passe PΓΌnktlichkeit in train_simulator.py an:
PUNCTUALITY_ICE = 0.95  # ErhΓΆhe auf 95%

Problem: Map lΓ€dt nicht

  • PrΓΌfe CORS Settings in ThemisDB
  • Γ–ffne Browser Console (F12)
  • PrΓΌfe Network Tab fΓΌr Fehler

πŸ“š Weitere Dokumentation

  • VollstΓ€ndiges Datenmodell: docs/projects/RAILWAY_MONITORING.md
  • Zugmodell: docs/projects/RAILWAY_TRAIN_DATA_MODEL.md
  • ThemisDB Features: docs/features/
  • CEP Engine: docs/analytics/CEP_STREAMING_ANALYTICS.md
  • LLM Integration: docs/enterprise/gpu_impact_analysis_llm_integration.md

🎬 Demo-Video

# Starte komplette Demo
./scripts/railway/start_demo.sh

# Stoppt nach Ctrl+C:
# - ThemisDB Server
# - Train Simulator
# - Live Map Server

πŸ“Š Performance

Erwartete Last:

  • 50 ZΓΌge = 50 Updates/sec
  • 400 Sensoren = ~100 Events/sec
  • ThemisDB: <10ms Latenz pro Write
  • Memory: ~500 MB (50 ZΓΌge, 7 Tage Historie)
  • Storage: ~5 GB/Monat (Gorilla Compression)

Skalierung:

  • Getestet mit: 500 ZΓΌge = 95% CPU, 2GB RAM
  • Max empfohlen: 1000 ZΓΌge pro ThemisDB Instanz
  • Sharding: 10.000+ ZΓΌge ΓΌber mehrere Nodes

🀝 Contribution

Verbesserungen willkommen:

  • Realere Strecken-Daten (OpenStreetMap Import)
  • Deutsche Bahn API Integration
  • Fahrplan-Import (GTFS)
  • ML-basierte VerspΓ€tungs-Vorhersage
  • Mobile App

πŸ“„ Lizenz

MIT License - Siehe LICENSE file


ThemisDB 1.9.0-beta Β· Home Β· Module-Index Β· GitHub Β· Issues

ThemisDB Wiki

🏠 Overview

πŸš€ Getting Started

πŸ“– Tutorials

πŸ“— User Guide

βš™οΈ Operations & Security

πŸ“Ÿ Ops Runbooks

πŸ—οΈ Architecture

πŸ“ ADRs

πŸ”§ Contributing

πŸ“‹ Governance

πŸ” Audit

🧩 Plugins

πŸ”Œ Adapters

πŸ’‘ Examples

πŸ“¦ Client SDKs

πŸŽ“ Training

πŸ› οΈ Tools

πŸ€– Developer LLM Wiki

Clone this wiki locally