Projektarbeit-MYP/backend/docs/STECKDOSENSCHALTZEITEN.md

303 lines
9.0 KiB
Markdown

# 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