Familien-Dashboard (Family Hub) v1.7.0
Ein professionelles, modulares Docker-basiertes Familien-Dashboard mit FastAPI und MongoDB für lokalen Server-Einsatz.
Übersicht
Dieses skalierbare Dashboard bietet Familienmitgliedern eine zentrale Plattform zur Verwaltung wichtiger Informationen wie Stundenplänen, Müllabfuhr-Terminen und ÖPNV-Abfahrten. Optimiert für Touchscreens und lokale Netzwerkzugriffe.
Features
📚 Stundenplan-Editor
- Drag & Drop Interface: Intuitive Stundenplan-Erstellung per Drag & Drop
- Unterrichtszeiten-Management: Konfigurierbare Start- und Endzeiten für jede Stunde
- Zeitanzeige im Dashboard/Modal: Stunden werden konsistent als Uhrzeiten angezeigt (z. B.
08:00 - 08:45) statt 2. Stunde
- Pausen-Verwaltung: Pausen werden als schmale Trenner zwischen Stunden angezeigt
- Farbcodierung: Jedes Fach hat eine individuelle Farbe
- Scrollbare Fächerliste: Übersichtliche Fächer-Palette mit eigenem Scroll-Bereich
- Live-Vorschau: Änderungen werden sofort im Dashboard angezeigt
🏠 Dashboard
- Echtzeit-Uhr: Automatisch aktualisierende Uhrzeit und Datum
- Heutiger Stundenplan: Zeigt nur die Stunden des aktuellen Wochentags
- Müllabfuhr-Termine: Übersicht über anstehende Abholtermine
- 7-Tage-Ansicht: Erweiterte Anzeige auf eine Woche (Montag-Sonntag)
- Deutsche Müllbehälter: Erkennung von “Restabfallbehälter”, “Verpackungsabfallbehälter”, “Bioabfallbehälter”, “Papierabfallbehälter”
- WebCAL-Protokoll-Fix: Automatische Konvertierung von
webcal:// zu https:// URLs
- Automatische Filterung vergangener Termine
- Anzeige der Tage bis zur Abholung
- Heute-Markierung für aktuelle Abholungen
- ÖPNV-Abfahrten: Aktuelle Verbindungen und Abfahrtszeiten
- Live-Integration: Echte Abfahrten via VBB API v6
- Individuelle Filter: Jede Station kann nach Zielrichtung gefiltert werden
- 4-Stationen-Dashboard: Bis zu 2 Stationen für Hinweg + 2 für Rückweg
- Intelligente Filterung: Zeigt nur relevante Verbindungen (z.B. Züge über bestimmte Haltestellen)
- Automatisches Ausblenden: Stationen ohne passende Verbindungen werden nicht angezeigt
- Robuste Fehlerbehandlung: Einzelne Station-Ausfälle blockieren nicht das gesamte System
- Countdown in Minuten bis zur Abfahrt
- Verspätungsanzeige und Ausfall-Warnungen
- 60 Sekunden Refresh für aktuelle Daten
- Kalender / iCal-Import: 📅 NEU
- Multi-Feed-Aggregation: Importiere Kalender von Google, Apple iCloud, Outlook etc.
- Familien-Aggregation: Events von mehreren Familienmitgliedern kombiniert
- 10-Minuten-Caching: Performant für lokale Server
- Wiederholende Events: Automatische Verarbeitung von Serien (z.B. “Jeden Montag”)
- Zeitfenster-Filter: Zeige Events der nächsten 7-14 Tage
- CRUD für iCal-Quellen: Verwalte mehrere Kalender-Feeds
- Farben-Mapping: Automatische Farbcodierung nach Mitglied (Papa: Blau, Mama: Rot, Kind: Grün)
- Heute-Marker: Hervorhebung aktueller Termine mit Rahmen und Schatten
- Leere Zustände: Freundliche Nachrichten bei fehlenden Terminen (“Genießt den freien Tag! ☕”)
- Siehe CALENDAR-iCAL-SETUP.md für Details
- Live-Wetter: 🌤️ NEU
- Open-Meteo API: Kostenlose Wetterdaten ohne API-Key
- Berlin-Standort: Automatische Standorterkennung (erweiterbar)
- WMO Weather Codes: Deutsche Wetterbedingungen mit Icons
- 10-Minuten-Refresh: Aktuelle Temperatur und Wetterlage
- Hunde-Tracker (Goethe): 🐕 NEU
- Akkustand & Ladezustand: Anzeige inkl. „Wird geladen“-Logik
- Statusanzeige: Zuhause / Unterwegs / Standby (bei älterem HW-Report)
- Sicherheitsstatus: Auswertung von
is_safe für „🏠 Zuhause“
- 30-Minuten-Cache: Stabilere Anzeige bei API-Schwankungen
- Hardware-Optimierung: 📱 NEU
- Sony SVJ202 (1600x900): Layout-Optimierung für 20” Touchscreen
- Vaio Tap 20: Verbesserte Touch-Usability für große Displays
- Rem-basierte Typografie: Skalierbare Schriftgrößen (18px Basis)
- 44px Touch-Targets: Optimierte Berührungsziele für Barrierefreiheit
- Touch-Scrolling: Flüssiges Scrollen mit
-webkit-overflow-scrolling: touch
- Smooth Scrolling: Sanfte Scroll-Animationen im gesamten Dashboard
- Ghost-Click Prevention:
touch-action: manipulation verhindert versehentliche Klicks
- Double-Tap-Zoom Blockierung: Optimierte Touch-Gesten für bessere UX
- Energie-Monitoring: ⚡ NEU
- CPU-Auslastung: Live-Anzeige mit gelber Warnung bei >20%
- Stromverbrauch: MacBook Power-Consumption (simuliert/fallback)
- Docker Ressourcen-Limits: CPU 0.2, Memory 256-512MB pro Container
- Logging-Optimierung: WARNING-Level für reduzierte I/O
- Eco-Mode API: Programmatische Stromverbrauch-Kontrolle
- Netzwerk-Monitoring: 📡 NEU
- Connectivity-Check: Alle 10 Sekunden Online-Status prüfen
- Verbindungs-Ampel: 🟢 Online / 🔴 Server Offline
- IP-Anzeige: Lokale Netzwerk-Adresse
- Signal-Stärke: WLAN-Qualität (simuliert)
- Ambient Mode: 💤 NEU
- Bildschirmschoner: 5 Minuten Inaktivität aktiviert Ambient-Mode
- Redesigned Layout: Tiefschwarzer Hintergrund (#000000), große weiße Uhrzeit
- Zentrum: Uhrzeit (HH:mm) + Datum in großer, lesbarer Schrift
- Oben rechts: Wetter-Icon + aktuelle Temperatur
- Unten links: Müll-Info nur bei heute/morgen Abfuhr (z.B. “Morgen: 🟦 Papiertonne”)
- Status-Bar unten: Helligkeit, Stromverbrauch, Online-Status
- Pixel-Shifting: Alle 10 Minuten 2-5px zufällige Verschiebung zum Display-Schutz
- Touch-Exit: Sofortiger Exit bei Berührung
- Intelligente Updates: Wetter/Strom alle 5 Minuten im Hintergrund
- Admin-Dashboard: ⚙️ NEU
- Zentrale Systemverwaltung: Zugriff über Admin-Button (öffnet in neuem Tab)
- VAIO-Monitoring: Live CPU-Auslastung von VAIO-Clients mit Update-Endpoint
- Helligkeitssteuerung: Zentrales Brightness-Control für alle Displays
- Systemdaten: Aggregierte Übersicht über Energie, Netzwerk und Systemstatus
- 5-Sekunden-Refresh: Automatische Aktualisierung aller Monitoring-Daten
- Schul-Integration: 📚 NEU
- Vertretungsplan-PDF: Automatischer Download vom Schul-Server
- Live-Anzeige: PDF wird direkt von Website abgerufen und angezeigt
- Stundenplan: Vollständige CRUD-Funktionalität für Unterrichtszeiten
- Live-Kamera: 📷 NEU
- MJPEG-Streaming: VAIO sendet Frames per POST /upload_frame, Backend streamt als MJPEG
- Remote-Kontrolle: Admin-Dashboard kann Kamera zentral ein/ausschalten
- Polling-Synchronisation: VAIO-Client prüft alle 5s Server-Status und startet/stoppt Webcam
- Fullscreen-Modus: Klick auf Stream aktiviert Vollbild
- Stromsparen: Webcam wird bei AUS komplett geschlossen (kein Stromverbrauch)
- Cloudflare Tunnel: Stream ist lokal (.local) und global (.ovh) erreichbar
- Siehe VAIO-CLIENT-INSTALLATION.md für Deployment auf VAIO-Hardware
- Layout-Verbesserungen: 🎨 NEU
- 3x3 Grid-Layout: Optimierte Kachel-Anordnung für 1600x900
- Kamera-Zentrierung: Kamerastreams in der Mitte positioniert
- Dynamische Scrollbars: Nur bei vorhandenen Inhalten scrollbar
- Überschriften-Optimierung: Saubere Kachel-Titel (Fahrplan, Wetter etc.)
- Dark Mode: Augenfreundliches dunkles Design
- Touch-optimiert: Perfekt für Tablets und Touchscreens
Technologien
- Backend: FastAPI (Python 3.11) mit asynchroner MongoDB-Integration via Motor
- Datenbank: MongoDB 5.0 mit persistenter Datenspeicherung
- Frontend: Responsives HTML/CSS/JS mit Dark-Mode und Echtzeit-Updates
- Containerisierung: Docker & Docker Compose mit Security-Best-Practices
- API: RESTful-Endpunkte mit Pydantic-Validierung
- Logging: Strukturiertes Logging für alle Operationen
- System-Monitoring: psutil 6.1.0 für CPU/Strom/Netzwerk-Messungen
- iCal-Integration: icalendar 6.0.1 + recurring-ical-events 3.3.3 für Kalender-Imports
- VBB API: Live-Abfahrten via VBB v6 REST API mit asyncio
- Touch-Optimierung: CSS mit
touch-action, -webkit-overflow-scrolling, overscroll-behavior
Verzeichnisstruktur
/app # Kern-Logik und Module
/routers # RESTful-API-Module
school.py # Stundenplan-Verwaltung (CRUD)
waste.py # Müllabfuhr-Verwaltung (CRUD)
transport.py # ÖPNV-Verwaltung (CRUD + VBB Live-API)
calendar.py # 📅 Kalender-Verwaltung (iCal-Import, Caching, Farben-Mapping)
system.py # ⚡ System-Monitoring (CPU, Strom, Netzwerk, Eco-Mode)
models.py # Pydantic-Modelle und Response-Schemas
database.py # Asynchrone MongoDB-Verbindung mit Health-Check
main.py # FastAPI-App mit Error-Handling und Health-Endpoint
/static # Frontend-Assets (Responsive, Touch-optimiert)
index.html # Haupt-Dashboard-Interface mit Touch-Scrolling
editor.html # Stundenplan-Editor mit Drag & Drop
Dockerfile # Python 3.11 Container-Definition
requirements.txt # Python-Abhängigkeiten (FastAPI, Motor, icalendar, etc.)
docker-compose.yml # Produktionsreife Service-Orchestrierung mit Volume-Mount
README.md # Diese Dokumentation
*.md # Zusätzliche Dokumentationsdateien
Installation und Ausführung
Lokale Entwicklung
- Repository klonen:
git clone <repository-url>
cd family-dashboard
- Virtuelle Umgebung erstellen:
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
- Abhängigkeiten installieren:
pip install -r requirements.txt
- MongoDB starten (Docker):
docker run -d -p 27018:27017 --name mongo mongo:5.0
- Anwendung starten:
uvicorn app.main:app --reload
Docker-Produktion
- Container bauen und starten:
docker-compose up --build -d
- Zugriff auf das Dashboard:
- Haupt-Dashboard:
http://localhost oder http://<server-ip> (Port 80)
- Admin-Dashboard:
http://localhost/admin (öffnet über Admin-Button in neuem Tab)
- Stundenplan-Editor:
http://localhost/editor
- Legacy URLs:
/static/index.html, /static/admin.html werden automatisch weitergeleitet
Port-Info:
Die Anwendung läuft auf Port 80 (Standard-HTTP). Bei VSCode Remote SSH:
View → Command Palette → “Forward a Port” → 80
Oder nutze direkt die Server-IP im lokalen Netzwerk.
- API-Dokumentation:
- Swagger UI:
http://localhost/docs
- ReDoc:
http://localhost/redoc
- Health-Check:
http://localhost/health
- Container verwalten:
# Status prüfen
docker-compose ps
# Logs anzeigen (mit Request-Logging)
docker-compose logs -f dashboard
# Logs filtern nach Fehlern
docker-compose logs dashboard | grep ERROR
# Logs der letzten 100 Zeilen
docker-compose logs --tail=100 dashboard
# Neu starten
docker-compose restart
- Health-Check:
# Detaillierter Systemstatus
curl http://localhost/health
# Erwartete Response:
# {
# "status": "healthy",
# "application": "Family Dashboard",
# "version": "1.7.0",
# "database": {
# "status": "connected",
# "name": "family_dashboard",
# "server_version": "5.0.x",
# "collections": ["lessons", "waste_schedules", "transport_schedules"],
# "collection_count": 3
# }
# }
API-Endpunkte
School (Stundenplan & Vertretungsplan)
GET /school/lessons - Alle Stunden abrufen
PUT /school/lessons/bulk-upsert - Stundenplan tageweise speichern/überschreiben
GET /school/time-settings - Unterrichtszeiten abrufen
PUT /school/time-settings - Unterrichtszeiten speichern
GET /school/substitution-pdf - Vertretungsplan-PDF von Schul-Website abrufen
- Lädt aktuelles PDF direkt vom Schul-Server
- Content-Type: application/pdf
- Für Anzeige im Dashboard-Modal
Tracker (Hunde-Tracker) 🐕
GET /api/tracker-status - Aktueller Tracker-Status
- Liefert u. a.
battery_level, charging, is_charging, status, pet_name, is_safe, last_hw_report
- Interne Lade-Fallback-Logik bei unvollständigen Tractive-Daten
Waste (Müllabfuhr)
GET /waste/schedule - Alle Müllabfuhr-Termine abrufen
POST /waste/schedule - Neuen Termin erstellen
DELETE /waste/schedule/{schedule_id} - Termin löschen
Transport (ÖPNV)
Statische Fahrpläne:
GET /transport/schedule - ÖPNV-Abfahrten abrufen
POST /transport/schedule - Neue Abfahrt erstellen
DELETE /transport/schedule/{schedule_id} - Abfahrt löschen
Live-Verbindungen (VBB API v5 - 2 Slots):
GET /transport/config - Aktuelle Config mit zwei Slots abrufen
PUT /transport/config - Zwei Hauptverbindungen konfigurieren (Hinweg/Rückweg)
- Validierung: Max. 2 Verbindungen
slot_1: Erste Verbindung (z.B. Hinfahrt)
slot_2: Zweite Verbindung (z.B. Rückfahrt)
DELETE /transport/config - Config zurücksetzen
GET /transport/next-trips - Live-Abfahrten (VBB API, 60s Cache)
?use_config=true - Nutzt Config (Standard, empfohlen)
?use_config=false - Nutzt alle Connections
Dashboard (VBB API v6 - 4 Stationen): ⭐ Empfohlen
GET /transport/dashboard-config - Konfiguration abrufen (2x Hinweg, 2x Rückweg)
PUT /transport/dashboard-config - 4 Stationen mit individuellen Filtern konfigurieren
- Jede Station kann einen eigenen
destination_filter haben
- Beispiel:
{"station_id": "900435339", "destination_filter": "Senftenberg"}
- Filter verwenden Fuzzy-Matching für flexible Zielsuche
hinweg: {“stations”: [{“station_id”: “…”, “destination_filter”: “…”}, …]}
rueckweg: {“stations”: [{“station_id”: “…”, “destination_filter”: “…”}, …]}
DELETE /transport/dashboard-config - Dashboard-Config zurücksetzen
GET /transport/dashboard - Live-Abfahrten für 4 Stationen (gruppiert)
- Parallele VBB v6 API-Abfragen mit individueller Filterung pro Station
- Verspätungsberechnung (delay_minutes)
- Cancelled-Flag bei Ausfällen
- Robuste Fehlerbehandlung: Stationen ohne passende Verbindungen werden automatisch ausgeblendet
- Siehe DASHBOARD-4-STATIONS.md für Details
Hilfsfunktionen:
GET /transport/search-stations?query=... - Haltestellen-ID finden (z.B. ?query=Alexanderplatz)
GET /transport/connections - (Legacy) Alle Verbindungen
POST /transport/connections - (Legacy) Neue Verbindung
DELETE /transport/connections/{connection_id} - (Legacy) Verbindung löschen
GET /transport/cache-info - Cache-Statistiken
POST /transport/cache-clear - Cache leeren
Calendar (Kalender / iCal-Import) 📅
iCal-Quellen verwalten:
GET /calendar/sources - Alle iCal-Quellen abrufen
POST /calendar/sources - Neue iCal-Quelle hinzufügen (Google Calendar, iCloud, Outlook)
DELETE /calendar/sources/{source_id} - iCal-Quelle löschen
PATCH /calendar/sources/{source_id}/toggle - iCal-Quelle aktivieren/deaktivieren
Events abrufen:
GET /calendar/events - Manuell erstellte Events (MongoDB)
GET /calendar/upcoming-aggregated?days=7 - Aggregierte Events aus iCal-Feeds
- Kombiniert Events von allen aktivierten iCal-Quellen
- Standard: 7 Tage, Maximum: 14 Tage
- 10-Minuten-Caching für Performance
- Wiederholende Events werden automatisch aufgelöst
POST /calendar/events - Manuelles Event erstellen
DELETE /calendar/events/{event_id} - Event löschen
Cache-Verwaltung:
GET /calendar/cache-info - Cache-Status anzeigen (Events, Ablaufzeit)
POST /calendar/refresh-cache - Cache manuell invalidieren
Siehe CALENDAR-iCAL-SETUP.md für:
- Setup-Anleitung
- iCal-URL finden (Google/Apple/Outlook)
- Beispiel-Konfigurationen
- Troubleshooting
System
GET / - Haupt-Dashboard (HTML)
GET /admin - Admin-Dashboard (HTML, öffnet in neuem Tab)
GET /editor - Stundenplan-Editor (HTML)
GET /health - Erweiterter Health-Check
- Prüft aktiv MongoDB-Verbindung (Port 27017/27018)
- Zeigt Server-Version, Collections und Verbindungsdetails
- Status 200: Healthy, Status 503: Unhealthy
POST /api/system/vaio/update - VAIO CPU-Daten empfangen
- Body:
{"cpu_load": 15.5} (CPU-Auslastung in %)
- Für externe VAIO-Clients zur Übermittlung von Monitoring-Daten
GET /api/admin/data - Admin-Dashboard-Daten aggregiert
- Kombiniert Energie, Netzwerk und VAIO-Status
GET /api/system/brightness - Aktuelle Helligkeit abrufen
POST /api/system/brightness - Helligkeit setzen (1-100)
- Persistiert in
brightness.txt für Wiederherstellung nach Neustart
Logging und Debugging
Docker Logs anzeigen
# Alle Logs live verfolgen
docker-compose logs -f dashboard
# Logs nach Request filtern
docker-compose logs dashboard | grep ">>>"
# Nur Fehler anzeigen
docker-compose logs dashboard | grep ERROR
# Letzte 50 Zeilen
docker-compose logs --tail=50 dashboard
Jeder API-Request wird geloggt mit:
- »> Request eingehend:
>>> GET /school/lessons | Client: 172.18.0.1
- «< Response erfolgreich:
<<< GET /school/lessons | Status: 200 | Time: 0.045s
- !!! Fehler aufgetreten:
!!! POST /school/lessons | ERROR: Validation error
Beispiel-Logs
2026-02-02 14:30:15 | INFO | app.main | >>> GET /health | Client: 172.18.0.1
2026-02-02 14:30:15 | INFO | app.database | Datenbankverbindung erfolgreich: family_dashboard mit 3 Collections
2026-02-02 14:30:15 | INFO | app.main | Health Check: System OK - MongoDB 5.0.28
2026-02-02 14:30:15 | INFO | app.main | <<< GET /health | Status: 200 | Time: 0.023s | Client: 172.18.0.1
Konfiguration
Umgebungsvariablen
MONGO_URL: MongoDB-Verbindungsstring (Standard: mongodb://admin:password@mongo:27017/family_dashboard?authSource=admin)
Docker-Compose
- Restart-Policy:
unless-stopped für automatische Wiederherstellung
- Volume-Mount:
./static:/app/static für Live-Updates der Frontend-Dateien
- Ports: Dashboard auf Port 80 (Standard-HTTP), MongoDB auf Port 27018
- MongoDB-Authentifizierung: admin/password (in Produktion ändern!)
- CORS: Aktiviert für Admin-Dashboard und Cross-Origin-Requests
- CORS: Aktiviert für Admin-Dashboard-Zugriffe
- CORS: Aktiviert für Admin-Dashboard-Zugriffe
Unterrichtszeiten anpassen
Die Unterrichtszeiten werden im Stundenplan-Editor konfiguriert:
- Öffne
http://localhost/editor
- Klicke auf “⏰ Unterrichtszeiten”
- Passe Start- und Endzeiten an
- Markiere Pausen mit der Checkbox
- Klicke “💾 Zeiten speichern”
Die Zeiten werden im Browser-LocalStorage gespeichert.
Verwendung
Stundenplan erstellen
- Öffne den Editor:
http://localhost/editor
- Erstelle Fächer mit Name, Raum und Farbe
- Ziehe Fächer per Drag & Drop in den Stundenplan
- Klicke “💾 Alles speichern” (Upsert-Logik verhindert Dubletten)
Live-Verbindungen einrichten (VBB API v6 Dashboard)
Empfohlen: 4-Stationen-Dashboard mit individuellen Filtern
Die Dashboard-Config ermöglicht es, für jede Station einen eigenen Ziel-Filter zu setzen. Dies ist besonders nützlich, wenn:
- Züge/Busse über mehrere Stationen fahren und Sie nur bestimmte Richtungen anzeigen möchten
- Sie Endziele als Filter verwenden (z.B. “Dessau” für Züge die über Ihre Station fahren)
# 1. Station-IDs finden
python3 set_config.py # Interaktiv oder:
docker-compose exec dashboard python find_station.py "Großräschen"
# 2. Config mit Filtern setzen
python3 set_config.py # Nutze das bereitgestellte Script
# Oder manuell per API:
curl -X PUT http://localhost/transport/dashboard-config \
-H "Content-Type: application/json" \
-d '{
"hinweg": {
"stations": [
{
"station_id": "900435339",
"destination_filter": "Senftenberg"
},
{
"station_id": "900435555",
"destination_filter": "Senftenberg"
}
]
},
"rueckweg": {
"stations": [
{
"station_id": "900435000",
"destination_filter": "Dessau"
},
{
"station_id": "900435300",
"destination_filter": "Pritzen"
}
]
}
}'
# 3. Config abrufen
curl http://localhost/transport/dashboard-config
# 4. Live-Abfahrten abrufen (mit Filterung)
curl http://localhost/transport/dashboard
Wichtige Hinweise zu Filtern:
- Filter verwenden das Endziel der Verbindung (nicht Zwischenstationen)
- Beispiel: Zug von Großräschen nach Dessau (über Senftenberg) → Filter muss “Dessau” sein
- Fuzzy-Matching: “Dessau” findet auch “Dessau, Hauptbahnhof”
- Leerer/null Filter: Zeigt alle Verbindungen an
- Keine passenden Verbindungen: Station wird automatisch ausgeblendet
Station-IDs finden:
# Methode 1: find_station.py Script (empfohlen)
docker-compose exec dashboard python find_station.py "Alexanderplatz"
docker-compose exec dashboard python find_station.py "S Westend"
# Methode 2: API-Endpunkt (im Browser oder mit curl)
curl "http://localhost/transport/search-stations?query=Alexanderplatz"
# Methode 3: Lokales Script in tools/ (wenn httpx installiert)
python3 tools/find_station.py "Zoo"
# Response-Beispiel:
# {
# "query": "Alexanderplatz",
# "count": 3,
# "results": [
# {
# "station_id": "900000100003",
# "name": "S+U Alexanderplatz Bhf (Berlin)",
# "type": "Bahnhof",
# "locality": "Berlin"
# },
# ...
# ]
# }
Dashboard-Response-Beispiel:
{
"hinweg": [
{
"station_id": "900435339",
"station_name": "Großräschen, Bahnhof",
"line": "RE7",
"direction": "Senftenberg, Bahnhof",
"planned_departure": "08:42",
"actual_departure": "08:42",
"minutes_until": 5,
"delay_minutes": null,
"cancelled": false,
"transport_type": "regional",
"icon": "🚆",
"error": null
}
],
"rueckweg": [
{
"station_id": "900435000",
"station_name": "Senftenberg, Bahnhof",
"line": "RE7",
"direction": "Dessau, Hauptbahnhof",
"planned_departure": "14:31",
"actual_departure": "14:33",
"minutes_until": 12,
"delay_minutes": 2,
"cancelled": false,
"transport_type": "regional",
"icon": "🚆",
"error": null
}
],
"last_update": "2026-02-02T14:19:00.000000+00:00",
"cache_expires_in": 60
}
API-Tests ausführen
Teste die dynamischen Features:
Müllabfuhr-Termine verwalten
Über die API (z.B. mit curl oder der Swagger UI):
# Termin erstellen
curl -X POST http://localhost/waste/schedule \
-H "Content-Type: application/json" \
-d '{
"waste_type": "Restmüll",
"pickup_date": "2026-02-10",
"color": "#FF5722",
"icon": "🗑️"
}'
# Nur anstehende Termine abrufen (Standard)
curl http://localhost/waste/schedule
# Alle Termine inkl. Vergangenheit
curl http://localhost/waste/schedule?include_past=true
ÖPNV-Verbindungen hinzufügen
# Verbindung mit Taktintervall erstellen
curl -X POST http://localhost/transport/schedule \
-H "Content-Type: application/json" \
-d '{
"transport_type": "Bus",
"line": "M29",
"destination": "Hauptbahnhof",
"departure_time": "08:15",
"days": "Mo-Fr",
"icon": "🚌",
"interval_minutes": 10
}'
# Nächste Abfahrten abrufen
curl http://localhost/transport/schedule?calculate_next=true"transport_type": "Bus",
"line": "5",
"destination": "Hauptbahnhof",
# Nächste Abfahrten abrufen
curl http://localhost:8000/transport/schedule?calculate_next=true
Features
- Responsives Design: Optimiert für Desktop, Tablet und Touchscreens
- Dark-Mode: Energieeffizient und augenschonend
- Echtzeit-Updates: Uhrzeit, Stundenplan-Updates alle 5 Minuten
- RESTful API: Vollständige CRUD-Operationen mit Validierung
- Dynamische Zeitberechnung:
- Transport: Nächste Abfahrt basierend auf Taktintervall
- Live-Abfahrten: VBB API-Integration mit Echtzeit-Daten
- Waste: Automatische Filterung vergangener Termine
- Smart Caching: 60 Sekunden Cache für externe API-Calls
- Upsert-Logik: Verhindert Dubletten bei Stundenplan-Speicherung
- Request-Logging: Jeder API-Call wird mit Timestamp, Status und Antwortzeit geloggt
- Health-Monitoring: Aktive MongoDB-Verbindungsprüfung mit detailliertem Status
- Error-Handling: Zentrales Exception-Management
- CORS-Unterstützung: Lokale Netzwerkzugriffe
- Asynchrone Operationen: Hochperformante Datenbankzugriffe
- Toast-Benachrichtigungen: Visuelles Feedback mit Fade-out Animation
Sicherheit
- Nicht-privilegierter Container-User
- Umgebungsvariablen für sensible Daten
- CORS-Restriktionen in Produktion empfohlen
- Regelmäßige Abhängigkeits-Updates
Erweiterungen
Das modulare Design ermöglicht einfache Erweiterungen:
- Neue Router für weitere Funktionen (z.B. Einkaufslisten, Termine)
- Integration externer APIs (Wetter, Verkehr) ✅ VBB bereits integriert
- Benutzerverwaltung und Authentifizierung
- Progressive Web App (PWA) Features
VBB API Hinweise
Die App nutzt die Open-Source API v6.vbb.transport.rest:
- ✅ Kostenlos und ohne API-Key
- ✅ Berliner Verkehrsbetriebe (BVG) + S-Bahn + Regional
- ✅ Echtzeit-Daten mit Verspätungsinformationen
- ✅ Individuelle Filterung pro Station
- ✅ Robuste Fehlerbehandlung bei API-Ausfällen
- ⚠️ Nur für Berlin/Brandenburg Region
- ⚠️ Respektvolle Nutzung (60s Refresh-Intervall implementiert)
Alternative APIs:
- Andere Regionen: Siehe https://transport.rest
- Deutsche Bahn: https://github.com/public-transport/hafas-client
Wichtig:
- Filter verwenden das Endziel der Verbindung
- Stationen ohne passende Verbindungen werden automatisch ausgeblendet
- Jede Station kann einen eigenen Filter haben
- Fuzzy-Matching erlaubt flexible Zielsuche
Changelog
v1.6.0 (2026-02-11)
- 📷 MJPEG-Streaming: VAIO sendet Frames per POST, Backend streamt als MJPEG
- 🎛️ Remote-Kamera-Kontrolle: Admin-Dashboard kann VAIO-Kamera zentral ein/ausschalten
- 🔄 Polling-Synchronisation: VAIO-Client prüft alle 5s Server-Status und startet/stoppt Webcam
- 🔌 Stromsparen: Webcam wird bei AUS komplett geschlossen
- 🌐 Cloudflare Tunnel: Stream ist lokal (.local) und global (.ovh) erreichbar
- 📖 VAIO-CLIENT-INSTALLATION.md: Deployment-Anleitung für VAIO-Hardware
v1.4.0 (2026-02-09)
- 🌐 Clean URLs: Routing ohne
/static/ Pfade (/, /admin, /editor)
- ⚙️ Admin-Dashboard: Zentrale Systemverwaltung mit VAIO-Monitoring und Helligkeitssteuerung
- 💻 VAIO-Integration: Client-Update-Endpoint für CPU-Auslastungs-Tracking
- 📄 Vertretungsplan-PDF: Live-Download vom Schul-Server mit Modal-Anzeige
- 🎯 Modal-Management: Verbesserte Überlagerungssteuerung mit closeAllModals()
- 🔌 Port 80: Standard-HTTP-Port für einfacheren Netzwerkzugriff
- 🔄 URL-Redirects: Automatische Weiterleitung von Legacy-URLs
- 📊 Admin-Daten-Aggregation: Kombinierte API für Energie, Netzwerk und VAIO-Status
v1.2.0 (2026-02-03)
- 📅 Kalender-Visualisierung: Farben-Mapping nach Mitglied, Heute-Marker mit Rahmen, freundliche Leere-Zustände
- 📱 Touch-Scrolling-Optimierung: Flüssiges Scrollen, Smooth Scrolling, Ghost-Click Prevention, Double-Tap-Zoom Blockierung
- 🧹 Code-Bereinigung: Entfernung temporärer Debug-Dateien und Test-Scripts
- 🎨 UI-Verbesserungen: Touch-action CSS für bessere Touch-UX auf großen Displays
v1.1.0 (2026-02-02)
- 🗑️ Müllabfuhr-Erweiterung: 7-Tage-Ansicht statt 2 Tagen, deutsche Müllbehälter-Erkennung
- 🔧 WebCAL-Fix: Automatische Konvertierung von
webcal:// zu https:// URLs
- 📱 Hardware-Optimierung: Layout für Sony SVJ202 (1600x900) und Vaio Tap 20
- 🌤️ Live-Wetter: Open-Meteo API Integration mit Berlin-Standort
- 💤 Ambient Mode: 3-Minuten-Inaktivitäts-Bildschirmschoner mit Uhr + Müll-Overlay
- 🎨 Layout-Verbesserungen: 3x3 Grid, Kamera-Zentrierung, dynamische Scrollbars
- 📝 UI-Polish: Überschriften-Optimierung, Touch-Feedback-Verbesserungen
- 🐛 Bugfixes: CSS-Syntax-Fehler behoben, Grid-Overflow korrigiert
v1.0.0 (2024-XX-XX)
- 📅 iCal-Kalender-Integration: Multi-Feed-Aggregation mit Caching
- 🚇 VBB Live-API: Echtzeit-ÖPNV-Abfahrten mit Verspätungsanzeige
- 📚 Stundenplan-Editor: Drag & Drop Interface mit Farbcodierung
- 🏠 Dashboard: Modulares Familien-Dashboard mit Dark Mode
- 🐳 Docker-Setup: Produktionsreife Container-Orchestrierung
- 🔒 Security: Nicht-privilegierter Container-User, CORS-Unterstützung
Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert.