🛠️ "Implementiere TP-Link Tapo P110 Unterstützung für Druckerüberwachung und -steuerung"
- Aktualisiere die `check_printer_status()` Funktion zur Verwendung des PyP100-Moduls für die Tapo-Steckdosen. - Füge neue API-Endpunkte hinzu: `test-tapo` für die Verbindungstests einzelner Drucker und `test-all-tapo` für Massentests. - Verbessere die Fehlerbehandlung und Logging für Tapo-Verbindungen. - Aktualisiere die Benutzeroberfläche, um den Datei-Upload als optional zu kennzeichnen. - Implementiere umfassende Tests für die Tapo-Verbindungen in `debug_drucker_erkennung.py` und verbessere die Validierung der Konfiguration in `job_scheduler.py`.
This commit is contained in:
@@ -1,3 +1,106 @@
|
||||
# MYP Platform - Behobene Fehler und Verbesserungen
|
||||
|
||||
## 🎯 **KRITISCH BEHOBEN: 2025-05-29 21:16 - Druckererkennung mit TP-Link Tapo P110-Steckdosen** ✅
|
||||
|
||||
### Problem
|
||||
Die Erkennung der "Drucker" (TP-Link Tapo P110-Steckdosen) funktionierte nicht zuverlässig:
|
||||
- Veraltete HTTP-basierte API-Anfragen anstatt des PyP100-Moduls
|
||||
- Fehlende Unterstützung für das spezielle Tapo-Protokoll
|
||||
- Keine zuverlässige Steckdosen-Status-Erkennung
|
||||
- Unvollständige Fehlerdiagnose-Tools
|
||||
|
||||
### Behebung durchgeführt
|
||||
|
||||
#### 1. **PyP100-Modul korrekt implementiert**
|
||||
- **`utils/printer_monitor.py`**:
|
||||
- `_check_outlet_status()` komplett überarbeitet für PyP100
|
||||
- `_turn_outlet_off()` modernisiert mit Tapo P110-Unterstützung
|
||||
- Direkte Verwendung von `PyP110.P110()` mit `handshake()` und `login()`
|
||||
|
||||
- **`app.py`**:
|
||||
- `check_printer_status()` Funktion modernisiert für Tapo P110
|
||||
- Ersetzt HTTP-Anfragen durch PyP100-Modul
|
||||
- Verbesserte Fehlerbehandlung und Logging
|
||||
|
||||
- **`utils/job_scheduler.py`**:
|
||||
- `toggle_plug()` verbessert mit Konfigurationvalidierung
|
||||
- Bessere Fehlerbehandlung und detailliertes Logging
|
||||
- Neue `test_tapo_connection()` Funktion hinzugefügt
|
||||
|
||||
#### 2. **Neue Test- und Debug-Funktionen**
|
||||
- **API-Routen hinzugefügt:**
|
||||
- `POST /api/admin/printers/<id>/test-tapo` - Einzeltest einer Steckdose
|
||||
- `POST /api/admin/printers/test-all-tapo` - Massentest aller Steckdosen
|
||||
- Beide nur für Administratoren verfügbar
|
||||
|
||||
- **Debug-Skript erweitert:**
|
||||
- `utils/debug_drucker_erkennung.py` um `test_tapo_connections()` erweitert
|
||||
- Detaillierte Fehleranalyse mit spezifischen Ursachen
|
||||
- Zusammenfassung mit Erfolgsrate und Empfehlungen
|
||||
|
||||
#### 3. **Verbesserte Fehlerdiagnose**
|
||||
- **Detaillierte Logging-Nachrichten:**
|
||||
- Emojis für bessere Lesbarkeit (✅ ❌ ⚠️ 🔐 🌐)
|
||||
- Spezifische Fehlermeldungen für verschiedene Verbindungsprobleme
|
||||
- Konfigurationvalidierung vor Verbindungsversuchen
|
||||
|
||||
- **Erweiterte Geräteinformationen:**
|
||||
- Gerätename (nickname) aus Tapo-Steckdose
|
||||
- Ein/Aus-Status mit device_on
|
||||
- Betriebszeit und Stromverbrauch (falls verfügbar)
|
||||
|
||||
### Technische Details
|
||||
|
||||
#### Ersetzt
|
||||
```python
|
||||
# ALT: HTTP-Anfragen mit Basic Auth
|
||||
response = requests.get(f"http://{ip}/status", auth=(user, pass))
|
||||
```
|
||||
|
||||
#### Durch
|
||||
```python
|
||||
# NEU: PyP100-Modul mit Tapo-Protokoll
|
||||
p110 = PyP110.P110(ip_address, username, password)
|
||||
p110.handshake() # Authentifizierung
|
||||
p110.login() # Login
|
||||
device_info = p110.getDeviceInfo()
|
||||
status = "on" if device_info.get('device_on', False) else "off"
|
||||
```
|
||||
|
||||
### Verwendung
|
||||
|
||||
#### Test einer einzelnen Steckdose
|
||||
```python
|
||||
from utils.job_scheduler import test_tapo_connection
|
||||
result = test_tapo_connection("192.168.1.100", "username", "password")
|
||||
print(f"Verbindung: {'✅' if result['success'] else '❌'}")
|
||||
print(f"Status: {result['status']}")
|
||||
```
|
||||
|
||||
#### Test aller Drucker via API
|
||||
```bash
|
||||
curl -X POST http://localhost:5000/api/admin/printers/test-all-tapo \
|
||||
-H "Authorization: Bearer <admin-token>"
|
||||
```
|
||||
|
||||
#### Debug-Kommandos
|
||||
```bash
|
||||
# Vollständige Diagnose inkl. Tapo-Tests
|
||||
python utils/debug_drucker_erkennung.py
|
||||
|
||||
# Test der Steckdosen-Initialisierung
|
||||
curl -X POST http://localhost:5000/api/printers/monitor/initialize-outlets
|
||||
```
|
||||
|
||||
### Ergebnis
|
||||
✅ **Zuverlässige Druckererkennung über TP-Link Tapo P110-Steckdosen**
|
||||
✅ **Korrekte Verwendung des PyP100-Moduls**
|
||||
✅ **Umfassende Test- und Debug-Tools**
|
||||
✅ **Detaillierte Fehlerdiagnose und Logging**
|
||||
✅ **Production-ready mit Admin-API-Endpunkten**
|
||||
|
||||
---
|
||||
|
||||
# JavaScript-Fehler behoben - MYP Platform
|
||||
|
||||
## Übersicht der behobenen Probleme
|
||||
@@ -319,4 +422,101 @@ Falsche Verwendung des Rate-Limiting-Decorators:
|
||||
- `blueprints/printer_monitor.py` - Decorator-Syntax korrigiert
|
||||
- `docs/live_drucker_system.md` - Dokumentation aktualisiert
|
||||
|
||||
---
|
||||
---
|
||||
|
||||
## 2025-05-29 20:55 - ThreadPoolExecutor und Rate-Limiting-Probleme behoben
|
||||
|
||||
### Problem
|
||||
Das Live-Drucker-Monitor-System warf zwei kritische Fehler:
|
||||
1. **ThreadPoolExecutor-Fehler**: "max_workers must be greater than 0" wenn keine aktiven Drucker vorhanden sind
|
||||
2. **Rate-Limiting**: Die Limits waren zu niedrig gesetzt:
|
||||
- `printer_monitor_live`: nur 5 Requests/60s
|
||||
- `printer_monitor_summary`: nur 10 Requests/30s
|
||||
|
||||
### Ursache
|
||||
1. **ThreadPoolExecutor**: Der Code versuchte einen ThreadPool mit `min(len(printers), 8)` Workers zu erstellen, was bei 0 Druckern zu max_workers=0 führte
|
||||
2. **Rate-Limiting**: Die Limits waren zu niedrig gesetzt:
|
||||
- `printer_monitor_live`: nur 5 Requests/60s
|
||||
- `printer_monitor_summary`: nur 10 Requests/30s
|
||||
|
||||
### Lösung
|
||||
1. **ThreadPoolExecutor-Fix** in `utils/printer_monitor.py` und `app.py`:
|
||||
```python
|
||||
# Fehlerhafte Version:
|
||||
with ThreadPoolExecutor(max_workers=min(len(printers), 8)) as executor:
|
||||
|
||||
# Korrigierte Version:
|
||||
if not printers:
|
||||
monitor_logger.info("ℹ️ Keine aktiven Drucker gefunden")
|
||||
return status_dict
|
||||
|
||||
max_workers = min(max(len(printers), 1), 8)
|
||||
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
||||
```
|
||||
|
||||
2. **Rate-Limiting gelockert** in `utils/rate_limiter.py`:
|
||||
```python
|
||||
# Alte Limits:
|
||||
'printer_monitor_live': RateLimit(5, 60, "..."),
|
||||
'printer_monitor_summary': RateLimit(10, 30, "..."),
|
||||
|
||||
# Neue Limits:
|
||||
'printer_monitor_live': RateLimit(30, 60, "..."),
|
||||
'printer_monitor_summary': RateLimit(60, 60, "..."),
|
||||
```
|
||||
|
||||
### Auswirkungen
|
||||
- ✅ Keine ThreadPoolExecutor-Fehler mehr bei leeren Drucker-Listen
|
||||
- ✅ Live-Monitoring funktioniert auch ohne konfigurierte Drucker
|
||||
- ✅ Rate-Limits ermöglichen häufigere Live-Updates
|
||||
- ✅ Bessere Logging-Ausgaben für Debugging
|
||||
- ✅ Robustere Fehlerbehandlung
|
||||
|
||||
### Getestete Szenarien
|
||||
- System-Start ohne konfigurierte Drucker
|
||||
- Live-Status-Updates mit häufigen API-Aufrufen
|
||||
- Parallel-Status-Checks mit verschiedenen Drucker-Anzahlen
|
||||
|
||||
---
|
||||
|
||||
## 2025-05-29 17:45 - Live-Drucker-Überwachungssystem implementiert
|
||||
|
||||
### Implementierte Features
|
||||
1. **PrinterMonitor-Klasse** (`utils/printer_monitor.py`)
|
||||
- Multi-Level-Caching (Session 30s, DB 5min)
|
||||
- Thread-sichere Implementierung
|
||||
- Parallele Drucker-Abfragen via ThreadPoolExecutor
|
||||
|
||||
2. **Automatische Steckdosen-Initialisierung**
|
||||
- Beim Systemstart werden alle Steckdosen ausgeschaltet
|
||||
- Fehlertolerante Implementierung mit detailliertem Logging
|
||||
- Manuelle Admin-Initialisierung möglich
|
||||
|
||||
3. **Smart-Plug-Integration**
|
||||
- Unterstützung für TP-Link Tapo und generische APIs
|
||||
- Ping-Tests + HTTP-Status-Abfragen
|
||||
- Multiple Endpunkt-Tests mit Fallbacks
|
||||
|
||||
4. **API-Endpunkte**
|
||||
- `GET /api/printers/monitor/live-status` - Live-Status mit Caching
|
||||
- `GET /api/printers/monitor/summary` - Schnelle Status-Übersicht
|
||||
- `POST /api/printers/monitor/clear-cache` - Cache-Verwaltung
|
||||
- `POST /api/printers/monitor/initialize-outlets` - Admin-Initialisierung
|
||||
|
||||
5. **Frontend-Integration**
|
||||
- JavaScript PrinterMonitor-Klasse (`static/js/printer_monitor.js`)
|
||||
- Auto-Start auf relevanten Seiten
|
||||
- Event-basierte Updates mit adaptiven Intervallen
|
||||
|
||||
6. **Status-Kategorien**
|
||||
- Online, Standby, Offline, Unreachable, Unconfigured
|
||||
- Umfassende Status-Verfolgung mit visuellen Indikatoren
|
||||
|
||||
7. **Performance-Features**
|
||||
- Parallele Abfragen (max 8 Workers)
|
||||
- Multi-Level-Caching
|
||||
- Adaptive Timeouts und Exponential Backoff
|
||||
- Sichtbarkeits-basierte Update-Intervalle
|
||||
|
||||
### Systemdokumentation
|
||||
Vollständige Dokumentation erstellt in `docs/live_drucker_system.md` mit Architektur, API-Beispielen und Troubleshooting-Guide.
|
||||
Reference in New Issue
Block a user