# Tapo-Steckdosen-Steuerung - MYP Platform

## Übersicht

Die Tapo-Steckdosen-Steuerung ist eine eigenständige Web-Interface für die direkte Kontrolle aller TP-Link Tapo-Steckdosen (P100/P110) über die MYP Platform. Diese Funktion ermöglicht es Benutzern, Smart-Steckdosen unabhängig von den Druckern zu verwalten und zu steuern.

## Features

### 🔌 Hauptfunktionen
- **Live-Status-Überwachung**: Echtzeit-Status aller konfigurierten Tapo-Steckdosen
- **Direkte Steuerung**: Ein- und Ausschalten einzelner Steckdosen
- **Automatische Erkennung**: Suche nach neuen Tapo-Steckdosen im Netzwerk
- **Batch-Operationen**: Gleichzeitiges Steuern mehrerer Steckdosen
- **Verbindungstest**: Testen der Erreichbarkeit einzelner Geräte

### 🛡️ Sicherheit & Berechtigungen
- **Rollenbasierte Zugriffskontrolle**: Nur Benutzer mit `CONTROL_PRINTER` Berechtigung haben Zugriff
- **Admin-Funktionen**: Erweiterte Funktionen nur für Administratoren
- **Audit-Logging**: Alle Aktionen werden protokolliert
- **CSRF-Schutz**: Schutz vor Cross-Site Request Forgery

### 📱 Benutzeroberfläche
- **Responsive Design**: Optimiert für Desktop und Mobile
- **Live-Updates**: Automatische Status-Aktualisierung alle 30 Sekunden
- **Moderne UI**: Glassmorphism-Design mit Dark-Mode-Unterstützung
- **Intuitive Bedienung**: Einfache Ein-Klick-Steuerung

## Zugriff & Navigation

### Haupt-Dashboard
```
URL: /tapo/
Berechtigung: CONTROL_PRINTER
```

Das Haupt-Dashboard zeigt alle konfigurierten Tapo-Steckdosen mit:
- Live-Status (Online/Offline, Ein/Aus)
- Zugehöriger Drucker-Name
- IP-Adresse
- Standort-Information
- Direkte Steuerungsbuttons

### Manuelle Steuerung (Admin)
```
URL: /tapo/manual-control
Berechtigung: ADMIN
```

Erweiterte Funktionen für Administratoren:
- Steuerung beliebiger IP-Adressen
- Verbindungstests
- Notaus-Funktion (alle Steckdosen ausschalten)
- Status-Abfrage ohne Drucker-Zuordnung

## API-Endpunkte

### Steckdosen-Steuerung
```http
POST /tapo/control
Content-Type: application/json

{
    "ip": "192.168.1.100",
    "action": "on|off"
}
```

### Status abfragen
```http
GET /tapo/status/{ip}
```

### Alle Status abrufen
```http
GET /tapo/all-status
```

### Automatische Erkennung
```http
POST /tapo/discover
```

### Verbindungstest
```http
POST /tapo/test/{ip}
```

## Konfiguration

### Tapo-Anmeldedaten
Die globalen Tapo-Anmeldedaten werden in `utils/settings.py` konfiguriert:

```python
TAPO_USERNAME = "ihr_tapo_username"
TAPO_PASSWORD = "ihr_tapo_passwort"
```

### Standard-IP-Bereiche
Für die automatische Erkennung können Standard-IP-Adressen definiert werden:

```python
DEFAULT_TAPO_IPS = [
    "192.168.0.100",
    "192.168.0.101",
    "192.168.0.102",
    # weitere IPs...
]
```

### Timeout-Einstellungen
```python
TAPO_TIMEOUT = 5  # Sekunden
TAPO_RETRY_COUNT = 3  # Wiederholungsversuche
```

## Installation & Setup

### 1. Abhängigkeiten installieren
```bash
pip install PyP100
```

### 2. Tapo-Steckdosen konfigurieren
1. Steckdosen über Tapo-App einrichten
2. Statische IP-Adressen zuweisen
3. Anmeldedaten in der Plattform konfigurieren

### 3. Drucker-Zuordnung
Steckdosen werden automatisch erkannt wenn sie in den Drucker-Einstellungen konfiguriert sind:
- Admin → Drucker verwalten → Drucker bearbeiten
- IP-Adresse der Tapo-Steckdose eingeben

## Fehlerbehebung

### Häufige Probleme

#### Steckdose nicht erreichbar
1. **Netzwerk-Verbindung prüfen**
   ```bash
   ping 192.168.1.100
   ```

2. **Tapo-App-Konfiguration überprüfen**
   - Steckdose in Tapo-App sichtbar?
   - WLAN-Verbindung stabil?
   - Remote-Zugriff aktiviert?

3. **Anmeldedaten verifizieren**
   - Username/Passwort korrekt?
   - Account nicht gesperrt?

#### Verbindung funktioniert, aber keine Steuerung
1. **Berechtigungen prüfen**
   - Hat der Benutzer `CONTROL_PRINTER` Berechtigung?
   - Ist die Steckdose einem aktiven Drucker zugeordnet?

2. **Firewall/Router-Einstellungen**
   - Port 9999 (Tapo-Standard) offen?
   - Keine Blockierung zwischen Subnets?

#### Performance-Probleme
1. **Timeout-Werte anpassen**
   ```python
   TAPO_TIMEOUT = 10  # Erhöhen bei langsamen Verbindungen
   ```

2. **Anzahl gleichzeitiger Verbindungen reduzieren**
3. **WLAN-Signal der Steckdosen verbessern**

### Debug-Logging
Für detaillierte Fehlermeldungen Debug-Logging aktivieren:

```python
# In utils/logging_config.py
TAPO_LOG_LEVEL = "DEBUG"
```

Logs finden Sie unter:
```
backend/logs/tapo_controller/tapo_controller.log
```

## Sicherheitshinweise

### Netzwerk-Sicherheit
- **VLAN-Isolation**: Tapo-Steckdosen in separates VLAN
- **Firewalling**: Nur notwendige Ports öffnen
- **Monitoring**: Ungewöhnliche Aktivitäten überwachen

### Zugriffskontrolle
- **Starke Passwörter**: Für Tapo-Accounts verwenden
- **Berechtigungen**: Minimale notwendige Rechte vergeben
- **Audit-Logs**: Regelmäßig überprüfen

### Physische Sicherheit
- **Steckdosen-Zugang**: Physischen Zugang beschränken
- **Reset-Buttons**: Vor unbefugtem Zugriff schützen

## Erweiterte Funktionen

### Zeitgesteuerte Schaltungen
```python
# Beispiel für geplante Abschaltung
from utils.tapo_controller import tapo_controller
import schedule

def shutdown_all_outlets():
    results = tapo_controller.initialize_all_outlets()
    print(f"Alle Steckdosen ausgeschaltet: {results}")

# Jeden Tag um 22:00 alle ausschalten
schedule.every().day.at("22:00").do(shutdown_all_outlets)
```

### Energiemonitoring (P110)
```python
# P110-spezifische Funktionen für Energiemessung
device_info = tapo_controller._collect_device_info(p100, device_info)
power_consumption = device_info.get('power_consumption')
voltage = device_info.get('voltage')
current = device_info.get('current')
```

### Integration mit anderen Systemen
Die API-Endpunkte können auch von externen Systemen genutzt werden:

```bash
# cURL-Beispiele
curl -X POST http://localhost:5000/tapo/control \
  -H "Content-Type: application/json" \
  -d '{"ip": "192.168.1.100", "action": "on"}'

curl http://localhost:5000/tapo/status/192.168.1.100
```

## Best Practices

### Performance
1. **Caching nutzen**: Status-Abfragen werden automatisch gecacht
2. **Batch-Operationen**: Mehrere Steckdosen gleichzeitig steuern
3. **Timeout-Optimierung**: Für lokale Netzwerke niedrigere Werte

### Zuverlässigkeit
1. **Retry-Mechanismus**: Automatische Wiederholung bei Fehlern
2. **Fallback-Strategien**: Alternative Steuerungsmethoden vorbereiten
3. **Monitoring**: Kontinuierliche Überwachung der Verfügbarkeit

### Wartung
1. **Regelmäßige Updates**: Tapo-Firmware aktuell halten
2. **Log-Rotation**: Große Log-Dateien vermeiden
3. **Backup**: Konfigurationen sichern

## Lizenz & Credits

Diese Implementierung basiert auf:
- **PyP100**: Python-Library für TP-Link Tapo-Geräte
- **Flask**: Web-Framework
- **MYP Platform**: 3D-Druck-Management-System

Entwickelt für die IHK-Abschlussprüfung 2025.

---

**Autor**: MYP Development Team  
**Version**: 1.0.0  
**Datum**: Juni 2025 