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