# PrinterMonitor HTTP 500 Error Fix ## 🔧 Problem Der PrinterMonitor JavaScript-Code erhält einen HTTP 500 Fehler beim Aufruf von `/api/printers/status`: ```javascript printer_monitor.min.js:13 ❌ Fehler beim Abrufen des Drucker-Status: Error: HTTP 500:INTERNAL SERVER ERROR ``` ## 🔍 Ursache Die `api_get_printer_status` Funktion in `app.py` importierte den `tapo_controller` nicht korrekt: 1. Der Import verwendete einen Alias, der die globale Variable überschrieb 2. Bei Fehlern wurde keine robuste Fehlerbehandlung durchgeführt ## ✅ Lösung ### 1. Import-Korrektur **Vorher:** ```python from utils.hardware_integration import tapo_controller as tapo_ctrl tapo_controller = tapo_ctrl # Überschreibt die Variable ``` **Nachher:** ```python from utils.hardware_integration import tapo_controller # Direkte Verwendung ohne Alias ``` ### 2. Verbesserte Fehlerbehandlung Die Funktion wurde bereits mit robuster Fehlerbehandlung aktualisiert: - Tapo-Controller wird nur importiert, wenn Drucker mit Steckdosen vorhanden sind - Fehler beim Import werden abgefangen und geloggt - Jeder Drucker erhält einen vollständigen Status, auch wenn die Hardware-Integration fehlschlägt - Konsistente JSON-Response-Struktur mit `success` Flag ## 📝 Test-Schritte ### 1. Server neu starten: ```bash cd backend python app.py ``` ### 2. API testen: ```javascript // In der Browser-Konsole: fetch('/api/printers/status', { credentials: 'include' }) .then(r => r.json()) .then(data => { console.log('Status Response:', data); console.log('Anzahl Drucker:', data.count); data.printers.forEach(p => { console.log(`${p.name}: ${p.plug_status || 'no plug'}`); }); }); ``` ### 3. Erwartete Response: ```json { "success": true, "printers": [ { "id": 1, "name": "Drucker 1", "status": "offline", "location": "Raum 101", "model": "Prusa i3", "ip_address": "192.168.1.100", "active": true, "plug_status": "off", "plug_reachable": true, "plug_ip": "192.168.1.50", "has_plug": true } ], "count": 1, "timestamp": "2025-01-15T10:30:00" } ``` ## 🚀 Weitere Verbesserungen ### 1. Caching für Hardware-Status Um die Performance zu verbessern, könnte ein Cache für Steckdosen-Status implementiert werden: ```python from functools import lru_cache from time import time @lru_cache(maxsize=128) def get_cached_plug_status(plug_ip: str, cache_time: int): return tapo_controller.check_outlet_status(plug_ip) # Verwendung mit 30-Sekunden-Cache: cache_key = int(time() / 30) status = get_cached_plug_status(printer.plug_ip, cache_key) ``` ### 2. Asynchrone Status-Abfragen Für viele Drucker könnten die Status-Abfragen parallelisiert werden: ```python from concurrent.futures import ThreadPoolExecutor with ThreadPoolExecutor(max_workers=5) as executor: futures = [] for printer in printers: if printer.plug_ip: future = executor.submit( tapo_controller.check_outlet_status, printer.plug_ip ) futures.append((printer, future)) ``` ## ✅ Status Der HTTP 500 Fehler sollte nun behoben sein. Die API gibt auch bei Hardware-Fehlern eine gültige JSON-Response zurück.