# Steckdosen-Test-System Dokumentation

## Übersicht

Das Steckdosen-Test-System ermöglicht es Ausbildern und Administratoren, die Stromversorgung der 3D-Drucker sicher zu testen und zu steuern. Die Funktionalität ist speziell für geschultes Personal entwickelt und beinhaltet umfassende Sicherheitsmechanismen.

## Funktionsumfang

### 🔍 Status-Überwachung
- **Echtzeit-Status** aller konfigurierten Steckdosen
- **Energieverbrauch-Monitoring** (bei unterstützten Geräten)
- **Netzwerk-Verbindungsstatus** zu jeder Steckdose
- **Geräte-Informationen** (Modell, Firmware-Version, etc.)

### ⚡ Testfunktionen
- **Einzelne Steckdose testen** - gezielter Test einer spezifischen Steckdose
- **Massenübersicht** - Status aller Steckdosen auf einen Blick
- **Ein-/Ausschalt-Tests** mit Sicherheitsprüfungen
- **Protokollierung** aller Test-Aktivitäten

### 🛡️ Sicherheitsfeatures
- **Warnsystem** bei aktiven Druckjobs
- **Force-Modus** für Notfälle mit expliziter Bestätigung
- **Risiko-Bewertung** basierend auf aktueller Nutzung
- **Audit-Trail** aller durchgeführten Tests

## API-Endpunkte

### Status-Abfrage

#### Einzelne Steckdose prüfen
```http
GET /api/printers/test/socket/{printer_id}
```

**Beschreibung:** Liefert detaillierten Status einer spezifischen Steckdose mit Sicherheitsbewertung.

**Berechtigung:** Admin-Rechte erforderlich

**Response-Struktur:**
```json
{
  "success": true,
  "printer": {
    "id": 1,
    "name": "Prusa i3 MK3S",
    "model": "Prusa i3 MK3S+",
    "location": "Werkstatt A",
    "status": "online"
  },
  "socket": {
    "status": "online",
    "info": {
      "device_on": true,
      "signal_level": 3,
      "current_power": 45.2,
      "device_id": "TAPO_P110_ABC123",
      "model": "P110",
      "hw_ver": "1.0",
      "fw_ver": "1.2.3"
    },
    "error": null,
    "ip_address": "192.168.1.100"
  },
  "safety": {
    "risk_level": "medium",
    "warnings": [
      "Drucker verbraucht aktuell 45.2W - vermutlich aktiv"
    ],
    "recommendations": [
      "Prüfen Sie den Druckerstatus bevor Sie die Steckdose ausschalten"
    ],
    "active_jobs_count": 0,
    "safe_to_test": false
  },
  "timestamp": "2025-01-05T10:30:00Z"
}
```

#### Alle Steckdosen prüfen
```http
GET /api/printers/test/all-sockets
```

**Beschreibung:** Liefert Status aller konfigurierten Steckdosen mit Zusammenfassung.

**Berechtigung:** Admin-Rechte erforderlich

**Response-Struktur:**
```json
{
  "success": true,
  "sockets": [
    {
      "printer": {...},
      "socket": {...},
      "warnings": [],
      "active_jobs": 0,
      "safe_to_test": true
    }
  ],
  "summary": {
    "total_sockets": 5,
    "online": 4,
    "offline": 1,
    "error": 0,
    "with_warnings": 1,
    "safe_to_test": 4
  },
  "timestamp": "2025-01-05T10:30:00Z"
}
```

### Steckdosen-Steuerung

#### Test-Steuerung
```http
POST /api/printers/test/socket/{printer_id}/control
```

**Beschreibung:** Steuert eine Steckdose für Testzwecke mit Sicherheitsprüfungen.

**Berechtigung:** Admin-Rechte erforderlich

**Request-Body:**
```json
{
  "action": "on",  // "on" oder "off"
  "force": false,  // Sicherheitswarnungen überschreiben
  "test_reason": "Routinetest der Steckdose"
}
```

**Response-Struktur:**
```json
{
  "success": true,
  "message": "Steckdose für Test erfolgreich eingeschaltet",
  "test_info": {
    "admin": "Admin Name",
    "reason": "Routinetest der Steckdose",
    "forced": false,
    "status_before": false,
    "status_after": true
  },
  "printer": {
    "id": 1,
    "name": "Prusa i3 MK3S",
    "status": "starting"
  },
  "action": "on",
  "warnings": [],
  "timestamp": "2025-01-05T10:30:00Z"
}
```

**Fehler-Response (bei Sicherheitsbedenken):**
```json
{
  "success": false,
  "error": "Aktion blockiert aufgrund von Sicherheitsbedenken",
  "warnings": [
    "WARNUNG: 1 aktive Job(s) würden abgebrochen!"
  ],
  "hint": "Verwenden Sie 'force': true um die Aktion trotzdem auszuführen",
  "requires_force": true
}
```

## Webinterface

### Zugriff
- **URL:** `/socket-test`
- **Berechtigung:** Nur für Administratoren
- **Navigation:** Admin-Menü → Steckdosen-Test

### Funktionen

#### 1. Übersicht aller Steckdosen
- **Statistik-Dashboard** mit Gesamtzahlen
- **Karten-Ansicht** aller konfigurierten Steckdosen
- **Status-Ampel** (Grün/Gelb/Rot) basierend auf Risikobewertung
- **Schnell-Aktionen** für jede Steckdose

#### 2. Einzeltest-Bereich
- **Drucker-Auswahl** via Dropdown
- **Detaillierte Status-Anzeige** mit allen verfügbaren Informationen
- **Sicherheitshinweise** und Empfehlungen
- **Test-Buttons** für Ein-/Ausschalten

#### 3. Sicherheitsfeatures
- **Bestätigungsmodal** für alle Aktionen
- **Grund-Eingabe** für Audit-Trail
- **Force-Checkbox** für Notfälle
- **Echtzeit-Warnungen** bei kritischen Zuständen

## Sicherheitskonzept

### Zugriffskontrolle
- **Authentifizierung:** Login erforderlich
- **Autorisierung:** Admin-Berechtigung erforderlich
- **Session-Management:** Automatisches Logout bei Inaktivität
- **CSRF-Schutz:** Token-basierte Anfrageverifizierung

### Risikobewertung
```python
def bewerte_risiko(aktive_jobs, stromverbrauch, steckdosen_status):
    if aktive_jobs > 0:
        return "high"  # Hoches Risiko
    elif steckdosen_status == "online" and stromverbrauch > 10:
        return "medium"  # Mittleres Risiko
    else:
        return "low"  # Geringes Risiko
```

### Sicherheitswarnungen
- **Aktive Jobs:** Warnung bei laufenden Druckaufträgen
- **Hoher Stromverbrauch:** Hinweis auf aktive Geräte
- **Netzwerkfehler:** Information über Verbindungsprobleme
- **Konfigurationsfehler:** Meldung bei fehlenden Einstellungen

### Force-Modus
Der Force-Modus erlaubt das Überschreiben von Sicherheitswarnungen:
- **Explizite Bestätigung** erforderlich
- **Zusätzliche Protokollierung** aller Force-Aktionen
- **Begründung** muss angegeben werden
- **Erweiterte Audit-Informationen** werden gespeichert

## Protokollierung

### Log-Kategorien
- **Normale Tests:** INFO-Level mit Grundinformationen
- **Force-Aktionen:** WARNING-Level mit erweiterten Details
- **Fehler:** ERROR-Level mit Fehlerbeschreibung
- **Sicherheitsereignisse:** Spezielle Security-Logs

### Log-Format
```
🧪 TEST DURCHGEFÜHRT: ON für Prusa i3 MK3S | 
Admin: Hans Müller | Grund: Routinetest | 
Force: false | Status: false → true
```

### Gespeicherte Informationen
- **Zeitstempel** der Aktion
- **Admin-Name** des ausführenden Benutzers
- **Drucker-Informationen** (Name, ID)
- **Aktion** (Ein/Aus)
- **Grund** für den Test
- **Force-Status** (verwendet/nicht verwendet)
- **Status-Änderung** (Vorher/Nachher)

## Fehlerbehebung

### Häufige Probleme

#### 1. Steckdose nicht erreichbar
**Symptome:** Status "error", Verbindungsfehler
**Lösungsansätze:**
- Netzwerkverbindung prüfen
- IP-Adresse verifizieren
- Steckdose neu starten
- Konfiguration überprüfen

#### 2. Falsche Anmeldedaten
**Symptome:** Authentifizierungsfehler
**Lösungsansätze:**
- Benutzername/Passwort in Drucker-Konfiguration prüfen
- Steckdose zurücksetzen
- Neue Anmeldedaten konfigurieren

#### 3. Keine Admin-Berechtigung
**Symptome:** 403 Forbidden-Fehler
**Lösungsansätze:**
- Benutzer-Rolle überprüfen
- Admin-Berechtigung zuweisen
- Neu anmelden

### Debug-Informationen
Bei Problemen sind folgende Informationen hilfreich:
- **Browser-Konsole** für JavaScript-Fehler
- **Netzwerk-Tab** für API-Anfragen
- **Server-Logs** für Backend-Fehler
- **Steckdosen-IP** und Erreichbarkeit

## Konfiguration

### Drucker-Steckdosen-Zuordnung
Jeder Drucker kann eine Steckdose konfiguriert haben:

```python
class Printer(Base):
    # ... andere Felder ...
    plug_ip = Column(String(50), nullable=False)        # IP der Steckdose
    plug_username = Column(String(100), nullable=False) # Benutzername
    plug_password = Column(String(100), nullable=False) # Passwort
```

### Unterstützte Steckdosen
- **TP-Link Tapo P110** (Smart Plug mit Energiemessung)
- **Kompatible PyP100-Geräte**

### Netzwerk-Anforderungen
- **Gleiche Subnetz:** Steckdosen müssen im gleichen Netzwerk erreichbar sein
- **Port 9999:** Standard-Port für TP-Link Tapo-Kommunikation
- **Keine Firewall-Blockierung:** Zwischen Server und Steckdosen

## Best Practices

### Für Administratoren
1. **Immer Status prüfen** bevor Tests durchgeführt werden
2. **Begründung angeben** für bessere Nachverfolgbarkeit
3. **Force-Modus sparsam verwenden** nur in Notfällen
4. **Regelmäßige Tests** zur Funktionsüberprüfung
5. **Dokumentation führen** über durchgeführte Wartungen

### Für Ausbilder
1. **Schulung** vor erster Nutzung
2. **Sicherheitsregeln beachten** bei aktiven Jobs
3. **Koordination** mit anderen Nutzern
4. **Protokollierung** aller Testaktivitäten
5. **Eskalation** bei Problemen an IT-Support

### Für Entwickler
1. **Error-Handling** für alle API-Calls
2. **Timeout-Behandlung** für Netzwerk-Anfragen
3. **Caching** für bessere Performance
4. **Logging** für Debug-Zwecke
5. **Testing** aller Szenarien

## Integration

### Bestehende Systeme
Das Steckdosen-Test-System integriert sich nahtlos in:
- **Drucker-Management:** Nutzung der bestehenden Drucker-Datenbank
- **Benutzer-System:** Verwendung der Admin-Berechtigungen
- **Logging-System:** Einheitliche Log-Struktur
- **API-Framework:** Konsistente REST-API

### Erweiterungsmöglichkeiten
- **Zeitgesteuerte Tests:** Automatische periodische Tests
- **Benachrichtigungen:** E-Mail/Push bei kritischen Ereignissen
- **Dashboard-Integration:** Einbindung in Haupt-Dashboard
- **Reporting:** Erweiterte Berichte und Statistiken

## Wartung

### Regelmäßige Aufgaben
- **Verbindungstests** zu allen Steckdosen
- **Log-Rotation** zur Speicherplatz-Verwaltung
- **Konfiguration-Backup** der Steckdosen-Einstellungen
- **Performance-Monitoring** der API-Endpoints

### Update-Verfahren
1. **Backup** der aktuellen Konfiguration
2. **Test-Environment** für neue Version
3. **Schrittweise Einführung** mit Fallback-Plan
4. **Dokumentation** aller Änderungen

## Support

### Kontakt
- **IT-Support:** für technische Probleme
- **Ausbilder-Team:** für fachliche Fragen
- **Entwickler-Team:** für Feature-Requests

### Dokumentation
- **API-Dokumentation:** für Entwickler
- **Benutzer-Handbuch:** für Administratoren
- **Troubleshooting-Guide:** für Support-Team

---

*Dokumentation erstellt am: 2025-01-05*
*Version: 1.0*
*Autor: KI-Assistent* 