3.6 KiB
3.6 KiB
PrinterMonitor - Vollständige Fehlerbehebung
🔧 Gelöste Probleme
1. HTTP 500 Error bei /api/printers/status
Problem:
printer_monitor.min.js:13 ❌ Fehler beim Abrufen des Drucker-Status: Error: HTTP 500:INTERNAL SERVER ERROR
Ursache:
- Falscher Import des
tapo_controller
mit Alias, der die Variable überschrieb
Lösung:
# Vorher (falsch):
from utils.hardware_integration import tapo_controller as tapo_ctrl
tapo_controller = tapo_ctrl # Überschreibt die Variable
# Nachher (korrekt):
from utils.hardware_integration import tapo_controller
# Direkte Verwendung ohne Alias
2. Falscher API-Endpoint in printer_monitor.js
Problem:
- printer_monitor.js versuchte
/api/printers/monitor/live-status
aufzurufen - Dieser Endpoint existiert nicht
Lösung:
// Vorher:
const response = await fetch(`/api/printers/monitor/live-status?use_cache=${this.useCache}`, {
// Nachher:
const response = await fetch(`/api/printers/status`, {
3. Inkompatible Response-Verarbeitung
Problem:
- printer_monitor.js erwartete ein Objekt, erhielt aber ein Array von Druckern
Lösung:
// Vorher:
if (printersData && typeof printersData === 'object') {
Object.values(printersData).forEach(printer => {
// Nachher:
if (printersData && Array.isArray(printersData)) {
printersData.forEach(printer => {
📋 Durchgeführte Änderungen
1. backend/app.py
- Import-Statement für tapo_controller korrigiert
- Robustere Fehlerbehandlung bereits implementiert
2. backend/static/js/printer_monitor.js
- API-Endpoint von
/api/printers/monitor/live-status
zu/api/printers/status
geändert - Response-Verarbeitung für Array-Struktur angepasst
- Flexible Datenextraktion für verschiedene Response-Formate
🚀 Test-Anleitung
1. Server neu starten:
cd backend
python app.py
2. Browser-Konsole öffnen und testen:
// Manueller Test des API-Endpoints
fetch('/api/printers/status', {
credentials: 'include'
})
.then(r => r.json())
.then(data => {
console.log('API Response:', data);
console.log('Drucker gefunden:', data.count);
});
// PrinterMonitor testen
if (window.printerMonitor) {
window.printerMonitor.stop(); // Falls bereits läuft
window.printerMonitor.start(); // Neu starten
// Callback für Updates registrieren
window.printerMonitor.onUpdate((data) => {
console.log('PrinterMonitor Update:', data);
});
}
3. Erwartete Ausgabe:
✅ Tapo-Controller erfolgreich importiert: <class 'utils.hardware_integration.TapoController'>
✅ API: Status für 3 Drucker abgerufen
🖨️ PrinterMonitor initialisiert
🚀 Starte PrinterMonitor
✅ 3 Drucker erfolgreich verarbeitet
🔄 Drucker-Status aktualisiert: 3 Drucker
📊 Response-Format
Der /api/printers/status
Endpoint liefert jetzt:
{
"success": true,
"printers": [
{
"id": 1,
"name": "Prusa i3 MK3S+",
"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:45:00"
}
✅ Status
Alle Fehler wurden behoben:
- ✅ HTTP 500 Error behoben
- ✅ API-Endpoint korrigiert
- ✅ Response-Verarbeitung angepasst
- ✅ PrinterMonitor funktioniert wieder korrekt
Das System sollte nun ohne Fehler funktionieren und die Drucker-Status live aktualisieren.