190 lines
4.9 KiB
Markdown
190 lines
4.9 KiB
Markdown
# Tapo-Integration Implementation - MYP System
|
|
|
|
## 🎯 Implementierte Funktionalitäten
|
|
|
|
### 1. **TapoStatusManager** - Zentrale Status-Verwaltung
|
|
|
|
Der neue `TapoStatusManager` in `backend/utils/tapo_status_manager.py` bietet:
|
|
|
|
#### **Die 3 Status-Zustände:**
|
|
- **`on`** - Steckdose eingeschaltet (grün)
|
|
- **`off`** - Steckdose ausgeschaltet (grau)
|
|
- **`unreachable`** - Steckdose nicht erreichbar (rot)
|
|
|
|
#### **Hauptfunktionen:**
|
|
```python
|
|
# Status eines Druckers abrufen
|
|
status = tapo_status_manager.get_printer_status(printer_id)
|
|
|
|
# Status aller Drucker abrufen
|
|
all_status = tapo_status_manager.get_all_printer_status()
|
|
|
|
# Steckdose steuern
|
|
success, msg = tapo_status_manager.control_plug(printer_id, "on"|"off")
|
|
|
|
# Automatische Job-Steuerung
|
|
tapo_status_manager.check_and_control_for_jobs()
|
|
```
|
|
|
|
### 2. **Automatische Steckdosen-Steuerung**
|
|
|
|
Die automatische Steuerung wurde in den `JobScheduler` integriert:
|
|
|
|
- **Job startet**: Steckdose wird automatisch eingeschaltet
|
|
- **Job endet**: Steckdose wird automatisch ausgeschaltet
|
|
- **Fehlerbehandlung**: Jobs werden trotzdem gestartet/beendet, auch wenn Steckdose nicht erreichbar
|
|
|
|
### 3. **API-Endpunkte**
|
|
|
|
#### **Drucker-Status** (`/api/printers/status`)
|
|
```json
|
|
{
|
|
"success": true,
|
|
"printers": [
|
|
{
|
|
"id": 1,
|
|
"name": "3D-Drucker 1 - Halle A",
|
|
"plug_status": "on|off|unreachable",
|
|
"plug_reachable": true|false,
|
|
"has_plug": true,
|
|
"status_display": {
|
|
"text": "An|Aus|Nicht erreichbar",
|
|
"color": "green|gray|red",
|
|
"icon": "power|power-off|exclamation-triangle"
|
|
},
|
|
"current_job": {...},
|
|
"next_job": {...}
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### 4. **Kalender-Integration für Admins**
|
|
|
|
Die Kalender-Events enthalten für Admins erweiterte Informationen:
|
|
|
|
```javascript
|
|
event = {
|
|
"id": "job_123",
|
|
"title": "Druckauftrag XYZ",
|
|
"extendedProps": {
|
|
"plugStatus": "on|off|unreachable",
|
|
"plugReachable": true|false,
|
|
"statusDisplay": {
|
|
"text": "An",
|
|
"color": "green",
|
|
"icon": "power"
|
|
}
|
|
},
|
|
"tooltip": "Job: XYZ\nDrucker: 1\nSteckdose: An\n✓ Steckdose erreichbar"
|
|
}
|
|
```
|
|
|
|
### 5. **Die 6 Standard-Drucker**
|
|
|
|
Die folgenden 6 Drucker sind standardmäßig konfiguriert:
|
|
|
|
1. **3D-Drucker 1 - Halle A** (Prusa MK3S+)
|
|
- IP: 192.168.1.101
|
|
- Steckdose: 192.168.1.201
|
|
|
|
2. **3D-Drucker 2 - Halle A** (Prusa MK3S+)
|
|
- IP: 192.168.1.102
|
|
- Steckdose: 192.168.1.202
|
|
|
|
3. **3D-Drucker 3 - Halle B** (Ultimaker S5)
|
|
- IP: 192.168.1.103
|
|
- Steckdose: 192.168.1.203
|
|
|
|
4. **3D-Drucker 4 - Halle B** (Ultimaker S5)
|
|
- IP: 192.168.1.104
|
|
- Steckdose: 192.168.1.204
|
|
|
|
5. **3D-Drucker 5 - Labor** (Formlabs Form 3)
|
|
- IP: 192.168.1.105
|
|
- Steckdose: 192.168.1.205
|
|
|
|
6. **3D-Drucker 6 - Werkstatt** (Markforged X7)
|
|
- IP: 192.168.1.106
|
|
- Steckdose: 192.168.1.206
|
|
|
|
## 🧪 Test-Skripte
|
|
|
|
### **test_printer_setup.py**
|
|
Interaktives Skript zum Einrichten und Testen der Drucker:
|
|
```bash
|
|
cd backend
|
|
python scripts/test_printer_setup.py
|
|
```
|
|
|
|
### **test_tapo_integration.py**
|
|
Umfassende Pytest-Suite für alle Funktionalitäten:
|
|
```bash
|
|
cd backend
|
|
python -m pytest tests/test_tapo_integration.py -v
|
|
```
|
|
|
|
## 🔧 Konfiguration
|
|
|
|
### **Umgebungsvariablen**
|
|
```bash
|
|
# In .env oder als Systemvariablen
|
|
TAPO_USERNAME=admin@email.com
|
|
TAPO_PASSWORD=secure_password
|
|
```
|
|
|
|
### **Drucker-Konfiguration**
|
|
Jeder Drucker benötigt:
|
|
- `plug_ip` - IP-Adresse der Tapo-Steckdose
|
|
- `plug_username` - Tapo-Account-Benutzername
|
|
- `plug_password` - Tapo-Account-Passwort
|
|
|
|
## 📊 Status-Darstellung
|
|
|
|
### **UI-Komponenten**
|
|
- **Drucker-Übersicht**: Zeigt alle 6 Drucker mit aktuellem Status
|
|
- **Kalender**: Erweiterte Tooltips mit Steckdosen-Status für Admins
|
|
- **Admin-Dashboard**: Übersicht über alle Steckdosen-Stati
|
|
|
|
### **Status-Farben**
|
|
- 🟢 **Grün**: Steckdose eingeschaltet
|
|
- ⚪ **Grau**: Steckdose ausgeschaltet
|
|
- 🔴 **Rot**: Steckdose nicht erreichbar
|
|
|
|
## 🚀 Verwendung
|
|
|
|
### **Manueller Test der Steckdosen**
|
|
1. Als Admin einloggen
|
|
2. Zu "Tapo-Steuerung" navigieren
|
|
3. Drucker auswählen und "Ein/Aus" klicken
|
|
|
|
### **Automatische Steuerung**
|
|
1. Job erstellen mit Start- und Endzeit
|
|
2. System schaltet Steckdose automatisch ein/aus
|
|
3. Status wird im Kalender angezeigt
|
|
|
|
## 🔒 Sicherheit
|
|
|
|
- Nur Admins können Steckdosen manuell steuern
|
|
- Passwörter werden verschlüsselt gespeichert
|
|
- Fehlerhafte Steckdosen blockieren keine Jobs
|
|
|
|
## 📝 Logging
|
|
|
|
Alle Steckdosen-Operationen werden geloggt:
|
|
- In `PlugStatusLog` Tabelle
|
|
- In `logs/tapo_controller/*.log`
|
|
- In `logs/tapo_status_manager/*.log`
|
|
|
|
## ⚠️ Fehlerbehandlung
|
|
|
|
- **Steckdose nicht erreichbar**: Job läuft trotzdem
|
|
- **Falsches Passwort**: Fehlermeldung in UI
|
|
- **Netzwerkfehler**: Automatischer Retry nach 30 Sekunden
|
|
|
|
## 🎯 Nächste Schritte
|
|
|
|
1. **Dashboard-Widget** für Echtzeit-Status
|
|
2. **Energieverbrauch-Tracking** (wenn von Tapo unterstützt)
|
|
3. **Automatische Fehler-Benachrichtigungen** per E-Mail
|
|
4. **Zeitbasierte Steckdosen-Profile** (z.B. Nachtabschaltung) |