303 lines
9.0 KiB
Markdown
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 |