# 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) 