**Ä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>
5.5 KiB
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ügtblueprints/printers.py
Zeilen 91-92: Alle Drucker werden aus DB geladenmodels.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 implementiertutils/tapo_status_manager.py
: Erweiterte Status-Manager-Funktionalitätutils/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 implementierttemplates/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-Klassentemplates/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_plugutils/hardware_integration.py
Zeilen 268-333: Debug-Ausgaben für check_outlet_statusutils/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-Sicherheitsmodulutils/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:
- ✅ Drucker werden IMMER angezeigt (Filter standardmäßig aktiviert)
- ✅ Korrekte 3-stufige Status-Logik (Check → Erreichbar → Tapo-Status)
- ✅ Richtige Interpretation:
- aus = verfügbar & frei (kann reserviert werden)
- an = druckt & besetzt (Drucker läuft)
- ✅ Debug-Ausgaben für Status, Fehler und Reaktionszeit
- ✅ 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.