family_dashboard

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

🏠 Dashboard

Technologien

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

  1. Repository klonen:
    git clone <repository-url>
    cd family-dashboard
    
  2. Virtuelle Umgebung erstellen:
    python -m venv venv
    source venv/bin/activate  # Windows: venv\Scripts\activate
    
  3. Abhängigkeiten installieren:
    pip install -r requirements.txt
    
  4. MongoDB starten (Docker):
    docker run -d -p 27018:27017 --name mongo mongo:5.0
    
  5. Anwendung starten:
    uvicorn app.main:app --reload
    

Docker-Produktion

  1. Container bauen und starten:
    docker-compose up --build -d
    
  2. 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: ViewCommand Palette → “Forward a Port” → 80
    Oder nutze direkt die Server-IP im lokalen Netzwerk.

  3. API-Dokumentation:
    • Swagger UI: http://localhost/docs
    • ReDoc: http://localhost/redoc
    • Health-Check: http://localhost/health
  4. 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
    
  5. 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)

Tracker (Hunde-Tracker) 🐕

Waste (Müllabfuhr)

Transport (ÖPNV)

Statische Fahrpläne:

Live-Verbindungen (VBB API v5 - 2 Slots):

Dashboard (VBB API v6 - 4 Stationen):Empfohlen

Hilfsfunktionen:

Calendar (Kalender / iCal-Import) 📅

iCal-Quellen verwalten:

Events abrufen:

Cache-Verwaltung:

Siehe CALENDAR-iCAL-SETUP.md für:

System

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

Log-Format

Jeder API-Request wird geloggt mit:

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

Docker-Compose

Unterrichtszeiten anpassen

Die Unterrichtszeiten werden im Stundenplan-Editor konfiguriert:

  1. Öffne http://localhost/editor
  2. Klicke auf “⏰ Unterrichtszeiten”
  3. Passe Start- und Endzeiten an
  4. Markiere Pausen mit der Checkbox
  5. Klicke “💾 Zeiten speichern”

Die Zeiten werden im Browser-LocalStorage gespeichert.

Verwendung

Stundenplan erstellen

  1. Öffne den Editor: http://localhost/editor
  2. Erstelle Fächer mit Name, Raum und Farbe
  3. Ziehe Fächer per Drag & Drop in den Stundenplan
  4. 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:

# 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:

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:

python test_api.py

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

Sicherheit

Erweiterungen

Das modulare Design ermöglicht einfache Erweiterungen:

VBB API Hinweise

Die App nutzt die Open-Source API v6.vbb.transport.rest:

Alternative APIs:

Wichtig:

Changelog

v1.6.0 (2026-02-11)

v1.4.0 (2026-02-09)

v1.2.0 (2026-02-03)

v1.1.0 (2026-02-02)

v1.0.0 (2024-XX-XX)

Lizenz

Dieses Projekt ist unter der MIT-Lizenz lizenziert.