# Steckdosenschaltzeiten System

## Übersicht

Das Steckdosenschaltzeiten-System ermöglicht Administratoren eine detaillierte Kalenderübersicht aller Schaltungen der Smart Plug Steckdosen (TAPO). Das System protokolliert automatisch:

- **Verbindungsstatus**: Wann eine Steckdose vom Strom getrennt war
- **Schaltzustände**: Wann eine Steckdose ein- oder ausgeschaltet war  
- **Systemereignisse**: Automatische Checks, manuelle Änderungen, API-Zugriffe
- **Performance-Daten**: Antwortzeiten, Energieverbrauch, Firmware-Versionen

## Funktionen

### 📅 Kalenderansicht mit FullCalendar
- Moderne FullCalendar-Integration mit deutscher Lokalisierung
- Monat-, Wochen- und Tages-Ansichten
- Farbkodierte Events basierend auf Schaltungsstatus
- Interaktive Event-Details mit detaillierten Informationen

### 🔌 Automatisches Logging
- Kontinuierliche Überwachung aller registrierten Steckdosen
- Automatische Protokollierung bei Statusänderungen
- Integration in das bestehende Drucker-Monitor-System

### 📊 Administrator-Dashboard  
- Dedizierte Übersicht unter `/admin/steckdosenschaltzeiten`
- Verlinkt über Footer (nur für Administratoren sichtbar)
- Echtzeit-Statistiken mit modernen Karten-Design

### 🔍 Erweiterte Filterung
- Filter nach Drucker im Kalender
- Verschiedene Ansichtsmodi (Monat/Woche/Tag)
- Legende für bessere Übersichtlichkeit

### 🧹 Automatische Bereinigung
- Konfigurierbare Löschung alter Logs
- Performance-Optimierung durch Cache-Management
- Datenschutz-konforme Datenhaltung

## Kalender-Features

### Farbkodierung
- **🟢 Grün**: Steckdose EIN (Status: `on`)
- **🔴 Orange**: Steckdose AUS (Status: `off`)
- **🔌 Blau**: Verbunden (Status: `connected`)
- **❌ Rot**: Getrennt (Status: `disconnected`)

### Event-Details
Beim Klick auf ein Kalenderereignis werden folgende Details angezeigt:
- Zeitpunkt der Schaltung
- Drucker-Name
- Status und Quelle der Änderung
- Benutzer (bei manueller Schaltung)
- Technische Daten (Antwortzeit, Verbrauch, Spannung, Strom)
- Notizen und Fehlermeldungen

### Ansichtsmodi
- **Monatsansicht**: Übersicht aller Schaltungen im Monat
- **Wochenansicht**: Detaillierte Tageszeiten sichtbar
- **Tagesansicht**: Stündliche Aufschlüsselung

## Datenbankmodell

### PlugStatusLog
```python
- id (Primary Key)
- printer_id (Foreign Key -> Printer)
- status (String): 'connected', 'disconnected', 'on', 'off'
- timestamp (DateTime): Zeitpunkt der Statusänderung
- ip_address (String): IP der Steckdose
- power_consumption (Float): Stromverbrauch in Watt
- voltage (Float): Spannung in Volt  
- current (Float): Stromstärke in Ampere
- source (String): 'system', 'manual', 'api', 'scheduler'
- user_id (Foreign Key -> User): Bei manueller Änderung
- notes (Text): Zusätzliche Notizen
- response_time_ms (Integer): Antwortzeit in Millisekunden
- error_message (Text): Fehlermeldung bei Problemen
- firmware_version (String): Firmware-Version der Steckdose
```

## API-Endpunkte

### Kalender-Daten abrufen
```
GET /api/admin/plug-schedules/calendar
Parameter:
- start (required): Start-Datum im ISO-Format
- end (required): End-Datum im ISO-Format
- printer_id (optional): Filter nach Drucker
```

### Logs abrufen
```
GET /api/admin/plug-schedules/logs
Parameter:
- printer_id (optional): Filter nach Drucker
- status (optional): Filter nach Status
- hours (optional): Zeitraum in Stunden (Standard: 24)
- page (optional): Seite für Paginierung
- per_page (optional): Einträge pro Seite
```

### Statistiken abrufen
```
GET /api/admin/plug-schedules/statistics
Parameter:
- hours (optional): Zeitraum in Stunden (Standard: 24)
```

### Alte Logs bereinigen
```
POST /api/admin/plug-schedules/cleanup
Body:
{
  "days": 30  // Logs älter als X Tage löschen
}
```

## Integration

### Printer Monitor Integration
Das System ist vollständig in das bestehende `printer_monitor.py` integriert:

- `_check_outlet_status()`: Loggt jeden Status-Check
- `_turn_outlet_off()`: Loggt Schaltbefehle
- `initialize_all_outlets_on_startup()`: Loggt Startup-Initialisierung

### Automatisches Logging
```python
# Beispiel: Status-Änderung loggen
PlugStatusLog.log_status_change(
    printer_id=1,
    status="on",
    source="manual",
    user_id=current_user.id,
    ip_address="192.168.1.100",
    response_time_ms=250,
    notes="Manuell eingeschaltet über Admin-Panel"
)
```

## Konfiguration

### FullCalendar-Einstellungen
- **Lokalisierung**: Deutsche Sprache und Formate
- **Höhe**: Automatische Anpassung an Container
- **Events**: Asynchrones Laden vom Server
- **Navigation**: Vor/Zurück, Heute, Ansichtswechsel

### Cache-Einstellungen
- **Session-Cache**: 30 Sekunden für schnelle Zugriffe
- **DB-Cache**: 5 Minuten für persistente Daten
- **Log-Cache**: Performance-optimierte Abfragen

### Bereinigung
- **Standard**: 30 Tage alte Logs löschen
- **Konfigurierbar**: 1-365 Tage
- **Automatisch**: Über Scheduler oder manuell

## Sicherheit

### Zugriffskontrolle
- Nur Administratoren haben Zugriff
- CSRF-Schutz für alle Änderungen
- Login-Requirement für alle API-Endpunkte

### Datenschutz
- Konfigurierbare Löschung alter Daten
- Anonymisierung nach Löschung von Druckern
- Audit-Trail für alle Änderungen

## Status-Bedeutungen

| Status | Bedeutung | Beschreibung | Farbe im Kalender |
|--------|-----------|--------------|-------------------|
| `connected` | Verbunden | Steckdose ist erreichbar und antwortet | 🔌 Blau |
| `disconnected` | Getrennt | Steckdose ist nicht erreichbar | ❌ Rot |
| `on` | Eingeschaltet | Steckdose ist an - Drucker druckt aktiv | 🟢 Grün |
| `off` | Ausgeschaltet | Steckdose ist aus - Drucker bereit | 🔴 Orange |

## Quellenarten

| Source | Bedeutung | Beschreibung |
|--------|-----------|--------------|
| `system` | System | Automatische Checks durch Monitor |
| `manual` | Manuell | Manuelle Änderung durch Administrator |
| `api` | API | Programmatische Änderung über API |
| `scheduler` | Scheduler | Geplante Aktion durch Scheduler |

## UI-Komponenten

### Statistik-Karten
- **Schaltungen (24h)**: Anzahl der Statusänderungen
- **Erfolgsrate**: Prozentsatz erfolgreicher Verbindungen
- **Ø Antwortzeit**: Durchschnittliche Reaktionszeit
- **Fehlerzahl**: Anzahl der Verbindungsfehler

### Steuerungselemente
- **Drucker-Filter**: Dropdown zur Filterung nach Drucker
- **Ansicht-Buttons**: Wechsel zwischen Monat/Woche/Tag
- **Aktualisieren**: Manuelle Datenaktualisierung
- **Bereinigen**: Löschung alter Logs

### Modal-Details
Detailansicht für Kalenderereignisse mit:
- Vollständige Event-Informationen
- Technische Parameter
- Fehlerdetails (falls vorhanden)
- Benutzernotizen

## Performance

### Optimierungen
- Asynchrone Kalender-Events mit Lazy Loading
- Intelligentes Caching auf mehreren Ebenen  
- Paginierte Datenabfrage für große Datensätze
- Index-optimierte Datenbankabfragen
- FullCalendar-Performance-Optimierung

### Monitoring-Metriken
- Durchschnittliche Antwortzeit der Steckdosen
- Fehlerrate bei Verbindungen
- Anzahl Logs pro Zeitraum
- Top-Drucker nach Aktivität

## Fehlerbehebung

### Häufige Probleme

**FullCalendar lädt nicht**
- JavaScript-Konsole auf Fehler prüfen
- CDN-Verfügbarkeit überprüfen
- Browser-Cache leeren

**Kalender-Events fehlen**
- API-Endpunkt `/api/admin/plug-schedules/calendar` testen
- Datums-Parameter überprüfen
- Administratorberechtigung validieren

**PyP100-Modul nicht verfügbar**
```bash
pip install PyP100
```

**Steckdose nicht erreichbar**
- IP-Adresse überprüfen
- Netzwerkverbindung testen
- TAPO-Anmeldedaten validieren

### Debug-Informationen
```javascript
// Kalender-Debug im Browser
console.log(calendar.getEvents());

// API-Test
fetch('/api/admin/plug-schedules/calendar?start=2025-01-01&end=2025-01-31')
  .then(r => r.json())
  .then(console.log);
```

## Wartung

### Regelmäßige Aufgaben
1. **Wöchentlich**: Logs älter als 30 Tage bereinigen
2. **Monatlich**: Cache-Performance überprüfen
3. **Quartal**: Datenbankgröße und Indizes optimieren
4. **Jährlich**: FullCalendar-Version aktualisieren

### Backup-Empfehlungen
- Steckdosen-Logs in reguläre Backups einbeziehen
- Export-Funktionen für langfristige Archivierung
- Disaster-Recovery-Tests durchführen

## Changelog

### Version 2.0.0 (Januar 2025)
- ✅ Umbenennung zu "Steckdosenschaltzeiten"
- ✅ FullCalendar-Integration implementiert
- ✅ Moderne Kalenderansicht mit deutschen Lokalisierung
- ✅ Event-Details Modal hinzugefügt
- ✅ Farbkodierte Ereignisse nach Status
- ✅ Interaktive Drucker-Filterung
- ✅ Responsive Design für mobile Geräte
- ✅ Performance-Optimierungen für Kalender-Daten

### Version 1.0.0 (Januar 2025)
- ✅ Grundlegendes Monitoring-System implementiert
- ✅ Administrator-Dashboard erstellt  
- ✅ API-Endpunkte entwickelt
- ✅ Integration in Printer Monitor
- ✅ Automatisches Logging aktiviert
- ✅ Footer-Link für Administratoren hinzugefügt
- ✅ Bereinigungsfunktionen implementiert

## Support

Für Fragen oder Probleme:
1. Logs in `/logs/printer_monitor/` prüfen
2. Administrator-Dashboard auf Fehler überprüfen  
3. Browser-Konsole auf JavaScript-Fehler prüfen
4. FullCalendar-Kompatibilität validieren
5. Bei persistenten Problemen System-Admin kontaktieren 