Files
Projektarbeit-MYP/backend/DRUCKER_STATUS_REQUIREMENTS.md
Till Tomczak 956c24d8ca 🔧 Update: Enhanced error handling and logging across various modules
**Änderungen:**
-  app.py: Hinzugefügt, um CSRF-Fehler zu behandeln
-  models.py: Fehlerprotokollierung bei der Suche nach Gastanfragen per OTP
-  api.py: Fehlerprotokollierung beim Markieren von Benachrichtigungen als gelesen
-  calendar.py: Fallback-Daten zurückgeben, wenn keine Kalenderereignisse vorhanden sind
-  guest.py: Status-Check-Seite für Gäste aktualisiert
-  hardware_integration.py: Debugging-Informationen für erweiterte Geräteinformationen hinzugefügt
-  tapo_status_manager.py: Rückgabewert für Statusabfrage hinzugefügt

**Ergebnis:**
- Verbesserte Fehlerbehandlung und Protokollierung für eine robustere Anwendung
- Bessere Nachverfolgbarkeit von Fehlern und Systemverhalten

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-15 22:45:20 +02:00

5.5 KiB

Drucker-Status Anforderungen - Implementierungsnachweis

Erfüllte Anforderungen

1. Drucker müssen IMMER und unter JEDEN UMSTÄNDEN angezeigt werden

Implementierung:

  • Filter-Checkboxen "Offline-Drucker anzeigen" und "Wartungsmodus anzeigen" sind standardmäßig aktiviert (checked)
  • Alle 6 statischen Mercedes-Benz Drucker werden aus der Datenbank geladen und angezeigt
  • API-Endpunkt /api/printers/status gibt ALLE Drucker zurück, unabhängig vom Status

Dateien:

  • templates/printers.html Zeilen 769, 775: checked Attribute hinzugefügt
  • blueprints/printers.py Zeilen 91-92: Alle Drucker werden aus DB geladen
  • models.py: Statische Drucker-Konfiguration für 6 Mercedes-Benz Arbeitsplätze

2. Korrekte Status-Logik: Check → Erreichbar/Nicht erreichbar → Darstellung

Implementierung:

  • Erste Stufe: Erreichbarkeit der Steckdose wird über Tapo-Controller geprüft
  • Zweite Stufe: Bei erreichbarer Steckdose wird der Schaltzustand abgefragt
  • Dritte Stufe: Status wird entsprechend interpretiert und dargestellt

Dateien:

  • blueprints/printers.py Zeilen 127-174: Live Tapo-Status-Abfrage implementiert
  • utils/tapo_status_manager.py: Erweiterte Status-Manager-Funktionalität
  • utils/hardware_integration.py: Debug-Ausgaben für Tapo-Kommunikation

3. Status-Interpretation: Erreichbar → Tapo-Status (an/aus)

Implementierung:

  • Erreichbar + aus → Status: available → "Verfügbar & Frei" → kann reserviert werden
  • Erreichbar + an → Status: busy → "Druckt - Besetzt" → Drucker läuft
  • Nicht erreichbar → Status: unreachable → "Nicht erreichbar"

Dateien:

  • blueprints/printers.py Zeilen 137-152: Status-Logik implementiert
  • templates/printers.html Zeilen 1775-1787: Frontend-Status-Texte aktualisiert

4. Visueller Status-Indikator

Implementierung:

  • Verfügbar & Frei: Grüner Indikator
  • Druckt - Besetzt: Orange pulsierender Indikator
  • Nicht erreichbar: Grauer Indikator
  • Nicht konfiguriert: Blauer Indikator

Dateien:

  • templates/printers.html Zeilen 1755-1771: Neue Status-Klassen
  • templates/printers.html Zeilen 1787-1791: Neue Status-Icons

5. Debug-Ausgaben für Tapo-Steckdosen

Implementierung:

  • Verbindungsaufbau: Debug-Ausgaben für Handshake und Login
  • Status-Abfrage: Detaillierte Logging der Geräteinformationen
  • Reaktionszeit: Messung und Logging der Response-Zeit
  • Fehlerbehandlung: Detaillierte Fehlerdiagnose

Dateien:

  • utils/hardware_integration.py Zeilen 126-184: Debug-Ausgaben für toggle_plug
  • utils/hardware_integration.py Zeilen 268-333: Debug-Ausgaben für check_outlet_status
  • utils/hardware_integration.py Zeilen 625-670: Debug-Ausgaben für device_info

6. IP-Beschränkung (192.168.0.100-106, außer .105)

Implementierung:

  • IP-Security-Modul: Neue Klasse für IP-Validierung
  • Erlaubte IPs: 192.168.0.100, .101, .102, .103, .104, .106
  • Gesperrte IP: 192.168.0.105 ist explizit ausgeschlossen
  • Decorator-Schutz: @require_plug_ip_access für Steckdosen-Funktionen

Dateien:

  • utils/ip_security.py: Neues IP-Sicherheitsmodul
  • utils/utilities_collection.py Zeilen 46-53: Konfiguration angepasst

🔧 Technische Umsetzung

API-Workflow

# 1. Drucker aus Datenbank laden (ALLE 6 statischen Drucker)
printers = db_session.query(Printer).all()

# 2. Für jeden Drucker: Live-Status über Tapo abrufen
for printer in printers:
    if printer.plug_ip:
        live_status = tapo_manager.get_printer_status(printer.id)
        
        # 3. Status basierend auf Erreichbarkeit und Schaltzustand
        if not live_status['plug_reachable']:
            status = 'unreachable'  # Nicht erreichbar
        elif live_status['power_status'] == 'on':
            status = 'busy'         # An → Besetzt
        elif live_status['power_status'] == 'off':
            status = 'available'    # Aus → Verfügbar

Frontend-Darstellung

// Status-Texte
'available': 'Verfügbar & Frei'        // Grün → kann reserviert werden
'busy': 'Druckt - Besetzt'             // Orange → Drucker läuft  
'unreachable': 'Nicht erreichbar'      // Grau → Steckdose offline
'unconfigured': 'Nicht konfiguriert'   // Blau → keine Steckdose

// Filter standardmäßig aktiviert
<input type="checkbox" id="show-offline" checked>
<input type="checkbox" id="show-maintenance" checked>

Debug-Ausgaben

# Beispiel Debug-Output für Tapo-Kommunikation
🔌 Versuch 1/3: Verbinde zu Tapo-Steckdose 192.168.0.100
🤝 Handshake mit 192.168.0.100...
🔐 Login bei 192.168.0.100...
 Schalte 192.168.0.100 EIN...
⏱️ Schaltvorgang für 192.168.0.100 abgeschlossen in 245ms
📊 Drucker Mercedes 3D Printer 1: Status=available, Plug-IP=192.168.0.100, Erreichbar=True, Power=off

🎯 Zusammenfassung

Alle Anforderungen sind vollständig implementiert:

  1. Drucker werden IMMER angezeigt (Filter standardmäßig aktiviert)
  2. Korrekte 3-stufige Status-Logik (Check → Erreichbar → Tapo-Status)
  3. Richtige Interpretation:
    • aus = verfügbar & frei (kann reserviert werden)
    • an = druckt & besetzt (Drucker läuft)
  4. Debug-Ausgaben für Status, Fehler und Reaktionszeit
  5. IP-Beschränkung auf 192.168.0.100-106 (außer .105)

Das System zeigt jetzt unter http://127.0.0.1:5000/printers alle 6 Mercedes-Benz Drucker mit korrekter Status-Logik an.