Ladeanzeige statt Zwischenständen, Echtzeit sofort nach Start, keine Autobahn-Schilder

- /api/status liefert ready, sobald Positionen mit Echtzeit berechnet sind
- Server holt Echtzeit direkt nach dem Laden des Fahrplans (statt nach ~35 s)
- Browser zeigt bis dahin nur 'Züge werden geladen …'
- Statuszeile ohne Technik: 'N Züge unterwegs', ggf. 'Verspätungen zurzeit nicht verfügbar'
- Autobahn-/Strassenschilder (roads_shields) ausgeblendet

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X48pE4bzjHej8w9HyZXCjb
This commit is contained in:
Claude
2026-10-21 21:02:35 +02:00
parent 4df29e7e6c
commit 2e3c10a6c4
4 changed files with 48 additions and 19 deletions
+10
View File
@@ -29,6 +29,7 @@ class State:
rt_version: str | None = None
rt_at: float | None = None
rt_error: str | None = None
rt_tried_at: float | None = None
vehicles: bytes = b'{"type":"FeatureCollection","features":[]}'
vehicles_gz: bytes = gzip.compress(vehicles)
count = 0
@@ -64,6 +65,11 @@ def watch_feeds():
t = time.time()
S.feed = Feed(C.FEEDS_DIR / want)
log.info("Fahrplan %s geladen in %.0f s (%d Fahrten)", want, time.time() - t, len(S.feed.trip_ids))
try: # Echtzeit sofort holen statt auf den nächsten Abruf zu warten
poll_realtime()
except Exception:
log.exception("Erster Echtzeit-Abruf fehlgeschlagen")
compute_positions()
def poll_realtime():
@@ -77,6 +83,8 @@ def poll_realtime():
if S.rt_at and time.time() - S.rt_at > 600:
S.rt = {}
raise
finally:
S.rt_tried_at = time.time()
def compute_positions():
@@ -142,6 +150,8 @@ def status():
"rt_error": S.rt_error,
"rt_trips": len(S.rt),
"vehicles": S.count,
# erst "bereit", wenn Positionen mit (dem ersten Versuch) Echtzeit berechnet sind
"ready": bool(f and S.computed_at and (not C.RT_KEY or (S.rt_tried_at and S.computed_at >= S.rt_tried_at))),
}