Files
Projektarbeit-MYP/backend/docs/printer-monitor-complete-fix.md

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:

  1. HTTP 500 Error behoben
  2. API-Endpoint korrigiert
  3. Response-Verarbeitung angepasst
  4. PrinterMonitor funktioniert wieder korrekt

Das System sollte nun ohne Fehler funktionieren und die Drucker-Status live aktualisieren.