feat: benutzerfreundliche GUI für Device-Konfiguration mit Auto-Config-Push
Hauptänderungen:
─────────────
✨ Benutzerfreundliche GUI statt JSON-Eingabe
• Abrechnungs-Intervall (Minuten) - klar verständlich statt heartbeat_interval_s
• Einschalt-/Arbeits-Schwellen (Watt) - statt technischer Begriffe
• Anlauf-/Abschalt-Verzögerung (Sekunden) - erklärt was es tut
• Icons, Hilfe-Texte, Beispiele direkt am Feld
🔄 Auto-Config-Push an Bridge
• write() Hook: Automatischer Push bei Feldänderungen
• create() Hook: Push bei neuem Device
• unlink() Hook: Push bei Device-Löschung
• Retry-Logic: 3 Versuche mit exponential backoff
• Manueller Button: 🔄 Push Config to Bridge
📊 Transparente Abrechnung
• Duration-Breakdown: Total = Working + Standby + Idle
• Alle Zeiten in Minuten (billing-friendly)
• Idle-Zeit zeigt Overhead (Debounce/Timeout) transparent
🧹 Code-Cleanup
• Deprecated write() Hook entfernt
• Überflüssige _onchange_session_strategy() entfernt
• Computed Field: strategy_config automatisch generiert
• Validation mit verständlichen deutschen Fehlermeldungen
Technische Details:
──────────────────
Models (mqtt_device.py):
• billing_interval_min, power_on_threshold_w, active_work_threshold_w,
startup_delay_s, shutdown_delay_s, message_timeout_s
• Computed: strategy_config = f(alle benutzerfreundlichen Felder)
• relevant_fields erweitert für Auto-Push Trigger
Views (mqtt_device_views.xml):
• ⚡ Leistungs-Schwellenwerte
• ⏱️ Zeitsteuerung
• 💰 Abrechnung mit Info-Box
• Generierte Config (readonly) für Debugging
Sessions (mqtt_session.py):
• idle_duration_s = max(0, total - working - standby)
• *_duration_min Felder für alle Zeiten
• Displays konvertiert: hours → minutes
Bridge (session_detector.py):
• Payload standardisiert: power_w, state (konsistent in allen Events)
• Heartbeat-Intervall aus Odoo billing_interval_min
Feature Request:
• Implementierungsstatus aktualisiert (Phase 1+2 komplett)
• Lessons Learned dokumentiert
• Nächste Schritte definiert
✅ Tests bestätigt:
• Events kommen im konfigurierten Abrechnungs-Intervall (1 Min)
• Config-Push funktioniert automatisch
• Duration-Breakdown ist transparent
• GUI ist verständlich und hilfreich