Verbraucher 1-Stufig eventbasiert implementieren
Tests / test (push) Failing after 39s

This commit is contained in:
dh
2026-09-17 09:32:17 +00:00
parent 29cfd8ceaa
commit d4828f1ee5
13 changed files with 1652 additions and 29 deletions
@@ -0,0 +1,57 @@
# ADR 0002: Verbraucher 1-Stufig arbeitet ereignisbasiert
## Status
Akzeptiert.
## Kontext
Das Enelix-1-Modul berechnete seinen Zustand in einem festen Intervall und
bildete die Lastwechselsperre ueber `Interval`, `IdleCounterMax` und weitere
zyklusabhaengige Zaehler ab. Dieses Verhalten passt nicht zur
ereignisbasierten Enelix-2-Kommunikation und machte reale Zeitabstaende von
mehreren Properties abhaengig.
## Entscheidung
Der neue `VerbraucherEinStufig` verwendet keine zyklische Regelberechnung.
Schaltkontakt, Rueckmeldung, Manager-Vorgabe, Freigabe, Vorgabeablauf und
Tagesplanung loesen die Regelung direkt aus.
Als einziger modulspezifischer Wert fuer die Lastwechselbegrenzung wird
`Umschaltabstand` in Sekunden registriert. Der Standardwert ist 5 Sekunden.
Das Ende der Sperre wird durch einen einmaligen Timer ausgeloest.
Das gemeinsame `Meldeintervall` bleibt erhalten, weil Vertrag `3.0`
zusaetzlich zu Ereignismeldungen eine periodische Vollmeldung fordert. Dieser
Timer ist kein Regelzyklus.
Die Tagesmindestlaufzeit wird in realen Sekunden und lokaler Symcon-Zeitzone
gezaehlt. Das Modul erzwingt den Betrieb erst zum spaetestmoeglichen Zeitpunkt,
an dem die fehlende Laufzeit vor Mitternacht noch erreicht werden kann.
## Alternativen
- Ein fester Regelzyklus wurde verworfen, weil Reaktionszeit und Sperrzeit
wieder voneinander abhaengen wuerden.
- Getrennte Ein- und Ausschaltzeiten wurden verworfen, weil sie fuer diese
Adaption nicht freigegeben sind.
- Die feste Nachtphase aus Enelix 1 wurde verworfen, weil sie weder
konfigurierbar noch Teil der Enelix-2-Spezifikation ist.
## Folgen
- Lastwechsel reagieren ohne Polling auf relevante Ereignisse.
- `Interval` und `IdleCounterMax` entfallen.
- Der Manager sieht waehrend einer Sperre nur die aktuelle Leistung und
`AenderungMoeglich=false`.
- Ein optionaler Rueckmeldekontakt muss innerhalb des Umschaltabstands folgen.
- Tageslaufzeit und Mindestlaufzeit sind unabhaengig von einer Zyklusdauer.
- Das Modul bleibt vollstaendig im Repository Enelix EMS; Enelix Utils erhaelt
keine geraetespezifische Logik.
## Offene Punkte
- Eine spaetere sperrbare Variante wird separat spezifiziert.
- Unterschiedliche Ein- und Ausschaltabstaende benoetigen eine neue
Architekturentscheidung.