145 lines
3.6 KiB
Markdown
145 lines
3.6 KiB
Markdown
# PrinterMonitor - Vollständige Fehlerbehebung
|
|
|
|
## 🔧 Gelöste Probleme
|
|
|
|
### 1. HTTP 500 Error bei `/api/printers/status`
|
|
|
|
**Problem:**
|
|
```javascript
|
|
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:**
|
|
```python
|
|
# 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:**
|
|
```javascript
|
|
// 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:**
|
|
```javascript
|
|
// 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:
|
|
```bash
|
|
cd backend
|
|
python app.py
|
|
```
|
|
|
|
### 2. Browser-Konsole öffnen und testen:
|
|
```javascript
|
|
// 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:
|
|
|
|
```json
|
|
{
|
|
"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. |