commit 09bf95368c5a9ac83ab2d4773d7d284818883ab2 Author: Stefan Koelle Date: Sat Aug 1 20:18:33 2026 +0200 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..9808448 --- /dev/null +++ b/README.md @@ -0,0 +1,95 @@ +# mvg-departures + +Kompakter Abfahrtsmonitor fuer MVG U-Bahn und S-Bahn (Muenchen), primaer fuer mobile Nutzung optimiert. + +## Features + +- Konfigurierbare Stationsliste (`config.yaml`) mit Typ (UBAHN/SBAHN/TRAM/BUS) +- Ausschluss-Filter pro Station: nur unerwuenschte Zielrichtungen werden ausgeblendet, + neue/unbekannte Ziele werden automatisch weiter angezeigt +- Zwei Endpunkte: + - `/` — mobile-optimierte HTML-Ansicht mit Auto-Refresh (alle 60s per Meta-Refresh) + - `/api/departures` — JSON-Ausgabe derselben Daten +- Anzeige von Linie, Ziel, Abfahrtszeit, Verspaetung und Stoerungsmeldungen +- Visuelle Unterscheidung von U-Bahn (blau) und S-Bahn (gruen) per Icon + +## Konfiguration + +Siehe `config.yaml`: + +```yaml +refresh_seconds: 60 +cache_seconds: 20 +departures_limit: 10 + +stations: + - name: "Josephsburg, München" + type: "UBAHN" + exclude_destinations: + - "Messestadt Ost" + - "Messestadt West" + + - name: "Berg am Laim, München" + type: "SBAHN" + exclude_destinations: + - "Erding" + - "Markt Schwaben" +``` + +`exclude_destinations` filtert per exaktem `destination`-Stringvergleich. Alles was +NICHT in der Liste steht, wird angezeigt — so fallen Linienaenderungen/Umleitungen +sofort auf, statt lautlos verschwunden zu sein. + +## Lokal starten + +```bash +pip install -r requirements.txt +uvicorn app.main:app --reload +``` + +## Docker + +```bash +docker build -t mvg-departures . +docker run -p 8000:8000 -v $(pwd)/config.yaml:/app/config.yaml mvg-departures +``` + +## Deployment (Beispiel docker-compose, nicht im Repo) + +```yaml +services: + mvg-departures: + image: ghcr.io//mvg-departures:latest + container_name: mvg-departures + ports: + - "8090:8000" + volumes: + - ./config.yaml:/app/config.yaml:ro + environment: + - TZ=Europe/Berlin + restart: unless-stopped + labels: + - "com.centurylinklabs.watchtower.enable=true" +``` + +## CI/CD + +`.github/workflows/build.yml`: + +- Baut bei jedem Push auf `main` das Docker-Image und pusht es nach + `ghcr.io//:latest` sowie mit Short-SHA-Tag +- Anschliessender Cleanup-Job loescht alte Image-Versionen in der GHCR-Package-Registry + und behaelt nur die letzten 4 Versionen (`min-versions-to-keep: 4`) + +### Voraussetzung + +Repo-Settings → Actions → General → Workflow permissions auf +"Read and write permissions" stellen, sonst schlaegt der Push nach GHCR fehl. + +## Endpunkte + +| Route | Beschreibung | +|---|---| +| `/` | HTML-Ansicht, mobile-optimiert, Auto-Refresh alle 60s | +| `/api/departures` | JSON-Liste aller gefilterten Abfahrten | +| `/healthz` | Healthcheck fuer Docker/Watchtower |