Projektarbeit-MYP/backend/docs/STECKDOSENSCHALTZEITEN.md

9.0 KiB

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

- 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

# 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

pip install PyP100

Steckdose nicht erreichbar

  • IP-Adresse überprüfen
  • Netzwerkverbindung testen
  • TAPO-Anmeldedaten validieren

Debug-Informationen

// 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