Verbraucher 1-Stufig um Mindestzeiten erweitern
Tests / test (push) Successful in 42s

This commit is contained in:
dh
2026-09-17 10:23:39 +00:00
parent 49fe18c2eb
commit 5c5ef73fb8
14 changed files with 487 additions and 184 deletions
@@ -2,56 +2,73 @@
## Status
Akzeptiert.
Akzeptiert, am 17. September 2026 um getrennte Mindestzeiten erweitert.
## 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.
bildete Lastwechselsperren ueber `Interval`, `IdleCounterMax` und weitere
zyklusabhaengige Zaehler ab. Ein erster Enelix-2-Stand ersetzte dies durch
einen allgemeinen `Umschaltabstand`. Dieser konnte unterschiedliche
Geraeteanforderungen fuer Ein- und Aus-Zustand nicht ausdruecken.
Bei einem asynchron schaltenden Geraet kann ausserdem der Aktorbefehl nicht als
physische Zustandsbestaetigung gelten.
## Entscheidung
Der neue `VerbraucherEinStufig` verwendet keine zyklische Regelberechnung.
Der `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.
Der allgemeine `Umschaltabstand` entfaellt. An seine Stelle treten:
- `Mindesteinschaltdauer` in Sekunden, Standard 5,
- `Mindestausschaltdauer` in Sekunden, Standard 5.
Die passende Mindestzeit beginnt mit dem bestaetigten Zustandswechsel. Ohne
separate Rueckmeldung bestaetigt die Aktorvariable den Wechsel unmittelbar.
Mit separater Rueckmeldung beginnt die Mindestzeit erst, wenn deren Wert den
Zielzustand erreicht.
Bis dahin bleiben Istleistung und Leistungsangebot beim rueckgemeldeten
Zustand. `SchaltbefehlAusstehend=true`,
`AenderungMoeglich=false` und `Schaltbereit=false` machen die laufende
Umschaltung fuer den Manager sichtbar.
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.
gezaehlt. Bei separater Rueckmeldung zaehlt ausschliesslich der bestaetigte
Ein-Zustand.
## Alternativen
- Ein fester Regelzyklus wurde verworfen, weil Reaktionszeit und Sperrzeit
- Ein fester Regelzyklus wurde verworfen, weil Reaktionszeit und Zeitregeln
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.
- Ein allgemeiner Umschaltabstand wurde verworfen, weil Ein- und Aus-Zustand
unterschiedliche Mindestzeiten benoetigen koennen.
- Der Aktorbefehl als sofortige physische Bestaetigung wurde bei vorhandener
Rueckmeldung verworfen.
- Ein zusaetzlicher Rueckmelde-Timeout wurde nicht eingefuehrt. Ein
ausstehender Befehl bleibt transparent sichtbar, bis ein neues Ereignis den
Zustand klaert.
## 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.
- `Interval`, `IdleCounterMax` und `Umschaltabstand` entfallen.
- Waerend Mindestzeiten und ausstehenden Rueckmeldungen wird nur die
bestaetigte Istleistung angeboten.
- Der Manager erhaelt Status und Restmindestzeit als Zustandseintraege.
- Eine unerwartete Abweichung zwischen Aktor und Rueckmeldung ausserhalb eines
laufenden Schaltvorgangs wird als Stoerung gemeldet.
- Tageslaufzeit und Mindestzeiten sind unabhaengig von einer Zyklusdauer.
- Das Modul bleibt vollstaendig im Repository Enelix EMS.
## Offene Punkte
- Eine spaetere sperrbare Variante wird separat spezifiziert.
- Unterschiedliche Ein- und Ausschaltabstaende benoetigen eine neue
Architekturentscheidung.
- Ein konfigurierbarer Rueckmelde-Timeout benoetigt eine eigene Entscheidung.
+24 -23
View File
@@ -1,27 +1,28 @@
# Migration von Verbraucher_1_Stufig
Das Enelix-1-Modul wird nicht in-place aktualisiert. Das neue Modul verwendet
eine neue Modul-ID, den Vertrag `3.0` und eine ereignisbasierte Regelung.
eine neue Modul-ID, Vertrag `3.0` und eine ereignisbasierte Regelung.
## Eigenschaften
| Enelix 1 | Enelix 2 | Migration |
| Enelix 1 / bisheriges Enelix 2 | Aktuelles Enelix 2 | Migration |
| --- | --- | --- |
| `BoilerLeistung` | `Nennleistung` | Wert in ganzen Watt uebernehmen. |
| `Schaltkontakt1` | `SchaltkontaktVariableID` | Boolean-Aktor uebernehmen und Aktion pruefen. |
| nicht vorhanden | `SchaltkontaktInvertiert` | Nur bei umgekehrter Aktorlogik aktivieren. |
| nicht vorhanden | `RueckmeldungVariableID` | Optional eine echte Boolean-Rueckmeldung zuordnen. |
| `Mindesttlaufzeit` | `Mindestlaufzeit` | Alter Wert war in Minuten gedacht; fuer gleiches Verhalten mit 60 multiplizieren und als Sekunden eintragen. |
| `Zeit_Zwischen_Zustandswechseln` | `Umschaltabstand` | Alte Minuten nicht uebernehmen. Neuen Sekundenwert bewusst festlegen; Standard ist 5 s. |
| `Interval` | entfaellt | Keine zyklische Regelberechnung mehr. |
| `IdleCounterMax` | entfaellt | Keine zyklusbasierte Idle-Erkennung mehr. |
| `Mindesttlaufzeit` | `Mindestlaufzeit` | Alten Minutenwert fuer gleiches Verhalten mit 60 multiplizieren. |
| `Zeit_Zwischen_Zustandswechseln` | `Mindesteinschaltdauer`, `Mindestausschaltdauer` | Alte Minuten nicht ungeprueft uebernehmen; beide Sekundenwerte geraetespezifisch setzen. |
| `Umschaltabstand` aus fruehem Enelix 2 | `Mindesteinschaltdauer`, `Mindestausschaltdauer` | Der alte Wert wird nicht automatisch uebertragen; beide Werte haben Standard 5 s. |
| `Interval` | entfaellt | Keine zyklische Regelberechnung. |
| `IdleCounterMax` | entfaellt | Keine zyklusbasierte Idle-Erkennung. |
## Variablen und Verhalten
| Enelix 1 | Enelix 2 |
| Alt | Aktuell |
| --- | --- |
| `DailyOnTime` | `Tageslaufzeit` in echten Sekunden |
| `IstNacht` | entfaellt; Mindestlaufzeit wird am spaetestmoeglichen Start des lokalen Kalendertags erzwungen |
| `DailyOnTime` | `Tageslaufzeit` in bestaetigten echten Sekunden |
| `IstNacht` | entfaellt; Tagesmindestlaufzeit wird spaetestmoeglich erzwungen |
| `IsTimerActive` | entfaellt; interne einmalige Timer |
| `Aktuelle_Leistung` | gemeinsames `Istleistung` |
| `Power` | gemeinsames `Sollleistung` |
@@ -32,25 +33,25 @@ eine neue Modul-ID, den Vertrag `3.0` und eine ereignisbasierte Regelung.
| `Leistung_Delta` | entfaellt; Leistungsverteilung liegt im Manager |
| `Idle`, `IdleCounter` | entfallen |
Die feste Enelix-1-Nachtzeit von 22:00 bis 07:00 wird nicht uebernommen.
Enelix 2 plant nur den Zeitpunkt, ab dem die verbleibende Mindestlaufzeit vor
dem lokalen Tagesende zwingend eingeschaltet werden muss.
Bei konfigurierter Rueckmeldung bestimmt nicht mehr der ausgegebene
Aktorbefehl, sondern erst der rueckgemeldete Zustand die Istleistung, die
Tageslaufzeit und den Start der jeweiligen Mindestzeit.
## Inbetriebnahme
1. Bestehende Instanzkonfiguration und aktuelle Aktorlogik dokumentieren.
2. Neue Instanz **Verbraucher 1-Stufig** anlegen.
1. Bestehende Instanzkonfiguration und Aktorlogik dokumentieren.
2. Neue Instanz **Verbraucher 1-Stufig** anlegen oder die bestehende
Enelix-2-Instanz aktualisieren.
3. Leistung, Aktor, Invertierung und optional Rueckmeldung konfigurieren.
4. Mindestlaufzeit von Minuten in Sekunden umrechnen.
5. `Umschaltabstand` neu in Sekunden festlegen; nicht den alten Minutenwert
kopieren.
4. Tagesmindestlaufzeit gegebenenfalls von Minuten in Sekunden umrechnen.
5. Mindest-Ein- und Mindest-Aus-Zeit getrennt anhand der Geraeteanforderungen
setzen.
6. Neue Instanz im Enelix-2-Manager aktiv zuordnen.
7. Bei ausgeschalteter lokaler EMS-Freigabe Ein/Aus und Rueckmeldung
beaufsichtigt pruefen.
8. Alte Instanz erst deaktivieren, danach `Aktiv` an der neuen Instanz
einschalten.
9. Mindestens einen Timeout, einen verhinderten Lastwechsel und einen
Tageswechsel kontrollieren.
7. Ein- und Ausschalten zuerst ohne reale Last oder unter Aufsicht pruefen.
8. Bei separater Rueckmeldung kontrollieren, dass
`SchaltbefehlAusstehend` erst mit deren Zustandswechsel verschwindet.
9. Mindestens je einen verhinderten Ein- und Ausschaltvorgang testen.
10. Tageslaufzeit und Tageswechsel kontrollieren.
## Rueckkehr
+118 -63
View File
@@ -3,9 +3,10 @@
> Status: implementiert fuer IP-Symcon 8 und den Enelix-2-Vertrag `3.0`.
Das Modul schaltet einen elektrischen Ein-/Aus-Verbraucher. Im freien Zustand
meldet es dem Manager das Leistungsangebot `[0, Nennleistung]`. Waehrend der
Umschaltsperre und bei lokal erzwungener Mindestlaufzeit wird nur der aktuell
zulaessige Leistungswert angeboten.
meldet es dem Manager das Leistungsangebot `[0, Nennleistung]`. Waerend einer
Mindest-Ein- oder Mindest-Aus-Zeit, waehrend einer ausstehenden Rueckmeldung
und bei lokal erzwungener Tagesmindestlaufzeit wird nur der aktuelle
bestaetigte Leistungswert angeboten.
## Architekturentscheidung
@@ -14,18 +15,19 @@ Die Regelung ist ereignisbasiert. Neuberechnungen werden ausgeloest durch:
- eine neue Manager-Vorgabe,
- eine Aenderung an Schaltkontakt oder optionaler Rueckmeldung,
- das Ein- oder Ausschalten der lokalen EMS-Freigabe,
- das Ende des Umschaltabstands,
- das Ende der zustandsabhaengigen Mindestzeit,
- das Ablaufen einer Manager-Vorgabe,
- den naechsten relevanten Zeitpunkt der Tageslaufzeitplanung.
Es gibt keinen Regelzyklus, kein `Interval` und keinen `IdleCounterMax`.
`Meldeintervall` bleibt als vertraglich geforderte periodische Vollmeldung
bestehen und steuert keine Regelberechnung.
Es gibt keinen Regelzyklus, kein `Interval`, keinen `IdleCounterMax` und
keinen allgemeinen `Umschaltabstand`. `Meldeintervall` bleibt als
vertraglich geforderte periodische Vollmeldung bestehen und steuert keine
Regelberechnung.
## Properties
Zu den sechs gemeinsamen Verbraucher-Properties aus
[`Schnittstelle.md`](../../Schnittstelle.md) kommen sieben
[`Schnittstelle.md`](../../Schnittstelle.md) kommen acht
Modul-Properties hinzu.
| Ident | Typ | Standard | Beschreibung |
@@ -33,14 +35,19 @@ Modul-Properties hinzu.
| `Nennleistung` | Integer | `0` | Positive elektrische Leistung in W. |
| `SchaltkontaktVariableID` | Integer | `0` | Boolean-Aktor mit Standard- oder benutzerdefinierter Aktion. |
| `SchaltkontaktInvertiert` | Boolean | `false` | Kehrt die Ein-/Aus-Semantik des Aktors um. |
| `RueckmeldungVariableID` | Integer | `0` | Optionale Boolean-Rueckmeldung; `true` bedeutet eingeschaltet. |
| `RueckmeldungVariableID` | Integer | `0` | Optionale Boolean-Rueckmeldung; `true` bedeutet physisch eingeschaltet. |
| `Mindestlaufzeit` | Integer | `0` | Geforderte Laufzeit pro lokalem Kalendertag in Sekunden, maximal 86400. |
| `Umschaltabstand` | Integer | `5` | Sekunden bis zum naechsten erlaubten Lastwechsel. |
| `DiagnosevariablenAnzeigen` | Boolean | `false` | Legt gemeinsame Diagnosevariablen und `Rueckmeldefehler` an. |
| `Mindesteinschaltdauer` | Integer | `5` | Mindestzeit in Sekunden, die ein bestaetigter Ein-Zustand gehalten wird. |
| `Mindestausschaltdauer` | Integer | `5` | Mindestzeit in Sekunden, die ein bestaetigter Aus-Zustand gehalten wird. |
| `DiagnosevariablenAnzeigen` | Boolean | `false` | Legt gemeinsame und modulspezifische Diagnosevariablen an. |
Beide Mindestzeiten duerfen `0` sein. Die lokale Aktion `Aktiv=false`
bleibt der einzige bewusste Override und schaltet sicher aus, auch wenn die
Mindesteinschaltdauer noch laeuft.
`EinstellungenInVisu` ist Teil der gemeinsamen Verbraucherbasis. Das Modul
besitzt derzeit keine zusaetzlichen bedienbaren Einstellvariablen und wertet
diese Property deshalb noch nicht weiter aus.
diese Property deshalb nicht weiter aus.
## Variablen
@@ -49,10 +56,10 @@ Immer sichtbar:
| Ident | Typ / Zugriff | Beschreibung |
| --- | --- | --- |
| `Aktiv` | Boolean / bedienbar | Lokale EMS-Freigabe; Startwert `false`. |
| `Schaltzustand` | Boolean / Anzeige | Rueckgemeldeter oder aus dem Aktor berechneter Zustand. |
| `Tageslaufzeit` | Integer / Anzeige | Laufzeit des lokalen Kalendertags in Sekunden. |
| `Schaltzustand` | Boolean / Anzeige | Bestaetigter oder aus dem Aktor berechneter Zustand. |
| `Tageslaufzeit` | Integer / Anzeige | Bestaetigte Laufzeit des lokalen Kalendertags in Sekunden. |
Mit `DiagnosevariablenAnzeigen` werden diese Variablen zusaetzlich angelegt:
Mit `DiagnosevariablenAnzeigen` werden zusaetzlich angelegt:
- `Istleistung`
- `Leistungsquelle`
@@ -63,47 +70,83 @@ Mit `DiagnosevariablenAnzeigen` werden diese Variablen zusaetzlich angelegt:
- `Stoerung`
- `Stoertext`
- `Rueckmeldefehler`
- `SchaltbefehlAusstehend`
- `RestMindestzeit`
Die Regellogik arbeitet mit persistenten Attributen und ist nicht von der
Sichtbarkeit der Diagnosevariablen abhaengig.
## Zeit- und Schaltverhalten
## Mindest-Ein- und Mindest-Aus-Zeit
Nach jedem Lastwechsel wird `AenderungMoeglich=false` gemeldet und das
Leistungsangebot auf den aktuellen Wert eingeschraenkt. Nach
`Umschaltabstand` Sekunden gibt ein einmaliger Timer den naechsten
Lastwechsel frei. Der Standardwert betraegt 5 Sekunden.
Nach einer bestaetigten Einschaltung wird fuer
`Mindesteinschaltdauer` Sekunden kein regulaeres Ausschalten angeboten. Nach
einer bestaetigten Ausschaltung blockiert `Mindestausschaltdauer` ein
regulaeres Einschalten.
Waerend einer Mindestzeit gilt:
- `AenderungMoeglich=false`,
- `Schaltbereit=false`,
- `RestMindestzeit_s` enthaelt die verbleibenden Sekunden,
- `Leistungswerte_W` enthaelt nur die bestaetigte Istleistung.
Ein einmaliger Timer loest am Ende der Mindestzeit genau eine Neuberechnung
aus. Der fruehere allgemeine `Umschaltabstand` ist vollstaendig entfallen.
## Rueckmeldung und Schaltbereitschaft
Ohne separate Rueckmeldung wird der logische Zustand der Aktorvariable als
sofortige Schaltbestaetigung verwendet.
Mit `RueckmeldungVariableID` ist ausschliesslich deren Booleanwert fuer
`Schaltzustand`, `Istleistung_W`, Tageslaufzeit und den Beginn der
Mindestzeit massgeblich. Nach einem Aktorbefehl und vor der passenden
Rueckmeldung meldet das Modul:
- die bisherige bestaetigte Istleistung,
- `SchaltbefehlAusstehend=true`,
- `Schaltbereit=false`,
- `AenderungMoeglich=false`,
- nur den bisherigen Leistungswert in `Leistungswerte_W`.
Sobald die Rueckmeldung den Zielzustand bestaetigt, beginnt die passende
Mindest-Ein- oder Mindest-Aus-Zeit. Es gibt bewusst keinen zusaetzlichen
zyklischen Rueckmelde-Timeout. Bleibt die Rueckmeldung aus, bleibt der
Schaltbefehl sichtbar ausstehend.
Weichen Aktor- und Rueckmeldezustand ohne ausstehenden Schaltbefehl voneinander
ab, wird `Rueckmeldefehler=true`, `Verfuegbar=false` und eine Stoerung
gemeldet.
## Tagesmindestlaufzeit
Die Tageslaufzeit wird mit der in IP-Symcon eingestellten lokalen Zeitzone
gefuehrt. Sommer- und Winterzeit sowie der Wechsel um Mitternacht werden
beruecksichtigt. Ist die konfigurierte Mindestlaufzeit noch nicht erreicht,
wird der Verbraucher erst zum spaetestmoeglichen Zeitpunkt lokal
eingeschaltet, an dem die Restlaufzeit bis Mitternacht noch erfuellt werden
kann. In dieser Phase meldet er `AenderungMoeglich=false`.
beruecksichtigt. Nur der bestaetigte Ein-Zustand zaehlt.
Bei Aktivierung sehr kurz vor Tagesende kann eine unmoeglich hohe Restlaufzeit
naturgemaess nicht mehr vollstaendig nachgeholt werden. Der Verbraucher wird
dann sofort eingeschaltet und die tatsaechliche Laufzeit erfasst.
## Rueckmeldung und Fehler
Ohne separate Rueckmeldung wird der Schaltzustand aus der Aktorvariable
berechnet. Mit `RueckmeldungVariableID` wartet das Modul bis zum Ende des
Umschaltabstands auf den angeforderten Zustand. Liegt er dann nicht an, werden
`Rueckmeldefehler=true`, `Stoerung=true` und `Verfuegbar=false` gemeldet.
Die Istleistung ist immer berechnet: `0` oder `Nennleistung`. Deshalb wird
`Leistungsquelle=1` gemeldet, auch wenn der Boolean-Schaltzustand ueber eine
physische Rueckmeldung erfasst wird.
Ist die konfigurierte Tagesmindestlaufzeit noch nicht erreicht, wird der
Verbraucher zum spaetestmoeglichen Zeitpunkt angefordert, an dem die
Restlaufzeit bis Mitternacht noch erfuellt werden kann. Eine noch aktive
Mindestausschaltdauer hat dabei Vorrang; eine unmoegliche Restlaufzeit kann
nicht rueckwirkend nachgeholt werden.
## Managerkommunikation
Das Modul implementiert
`VerbraucherSchnittstelle::ManagerdatenEmpfangen()` und verwendet
ausschliesslich den Vertrag `3.0`. Der Verbraucher besitzt keine
ausschliesslich Vertrag `3.0`. Der Verbraucher besitzt keine
Manager-ID-Property. Er akzeptiert nur Manager, in deren manueller oder
automatischer Verbraucherzuordnung seine Instanz aktiv eingetragen ist.
Neben den gemeinsamen Vertragsfeldern werden diese Zustaende gemeldet:
- `Schaltzustand`
- `SchaltbefehlAusstehend`
- `Schaltbereit`
- `RestMindestzeit_s`
- `Tageslaufzeit_s`
- `Rueckmeldefehler`
Rueckmeldungen erfolgen bei relevanten Ereignissen, kurz verzoegert nach einer
Manager-Vorgabe und zusaetzlich alle `Meldeintervall` Sekunden. Eine Vorgabe
wird nach `VorgabeTimeout` Sekunden ohne Erneuerung ungueltig.
@@ -116,16 +159,14 @@ wird nach `VorgabeTimeout` Sekunden ohne Erneuerung ungueltig.
2. Unter **Instanz hinzufuegen** nach **Verbraucher 1-Stufig** suchen und eine
Instanz anlegen.
3. `Nennleistung` in ganzen Watt eintragen.
4. Als `Schaltkontakt` eine Booleanvariable mit funktionsfaehiger Aktion
auswaehlen. Bei umgekehrter Aktorlogik `SchaltkontaktInvertiert`
aktivieren.
4. Als Schaltkontakt eine Booleanvariable mit funktionsfaehiger Aktion
auswaehlen und bei Bedarf `SchaltkontaktInvertiert` aktivieren.
5. Optional eine separate Boolean-Rueckmeldung auswaehlen. Dort muss
`true` dem physisch eingeschalteten Verbraucher entsprechen.
6. Prioritaeten, `Mindestlaufzeit`, `Umschaltabstand`,
`Meldeintervall` und `VorgabeTimeout` einstellen und die Konfiguration
uebernehmen.
7. Die neue Instanz im Manager manuell aktiv zuordnen oder bei automatischer
Suche in der gefundenen Liste aktivieren.
6. Tagesmindestlaufzeit, Mindest-Einschaltdauer und Mindest-Ausschaltdauer
passend zum angeschlossenen Geraet festlegen.
7. Die Instanz im Manager manuell aktiv zuordnen oder bei automatischer Suche
in der gefundenen Liste aktivieren.
8. Fuer die Erstpruefung `DiagnosevariablenAnzeigen` und bei Bedarf
`LoggingEin` einschalten.
9. Unter Aufsicht `Aktiv` einschalten und ueber den Manager je eine Ein- und
@@ -134,23 +175,37 @@ wird nach `VorgabeTimeout` Sekunden ohne Erneuerung ungueltig.
## Abnahmecheckliste
- `Aktiv=false` schaltet den Ausgang aus.
- `Aktiv=true` und eine Manager-Vorgabe `Nennleistung` schalten den Ausgang
ein.
- Direkt nach einem Wechsel ist `AenderungMoeglich=false`; nach 5 Sekunden
wird es mit Standardkonfiguration wieder `true`.
- Eine Gegenanforderung waehrend der Sperre wird vom Leistungsangebot
ausgeschlossen.
- Die optionale Rueckmeldung folgt dem Ausgang innerhalb des
Umschaltabstands; andernfalls erscheint eine Stoerung.
- `Tageslaufzeit` steigt nur im eingeschalteten Zustand und beginnt am
lokalen Tageswechsel wieder bei 0.
- Nach Ablauf von `VorgabeTimeout` wird ohne neue Manager-Vorgabe
ausgeschaltet, sobald der Umschaltabstand dies zulaesst.
- Nach Neustart oder erneuter Konfiguration wird der reale Schaltzustand
eingelesen; alte Manager-Vorgaben werden nicht ungeprueft fortgesetzt.
- Eine Ein-Vorgabe setzt zuerst den Aktor; mit separater Rueckmeldung bleibt
`SchaltbefehlAusstehend=true`, bis diese einschaltet.
- Die Mindesteinschaltdauer beginnt erst mit der Ein-Rueckmeldung.
- Vor Ablauf der Mindesteinschaltdauer wird kein Ausschalten angeboten.
- Nach bestaetigter Ausschaltung beginnt die Mindestausschaltdauer.
- Vor Ablauf der Mindestausschaltdauer wird kein Einschalten angeboten.
- `RestMindestzeit_s` erreicht 0 und `Schaltbereit` wird danach true.
- `Tageslaufzeit` steigt nur bei bestaetigtem Ein-Zustand.
- Ein unerwarteter Unterschied zwischen Aktor und Rueckmeldung erzeugt eine
Stoerung.
- Nach einem Neustart wird keine alte Manager-Vorgabe ungeprueft fortgesetzt.
## Tests
Nur dieses Modul:
```bash
composer check:verbraucher-einstufig
```
Gesamtes Repository inklusive dieser Modulsuite:
```bash
composer check
```
Die separate Suite und ihre Struktur sind unter
[`tests/VerbraucherEinStufig`](../../../tests/VerbraucherEinStufig/README.md)
dokumentiert.
## Migration
Die Zuordnung der Enelix-1-Felder, Einheiten und bewusst entfallenen
Kommunikationsvariablen steht in
Die Zuordnung der Enelix-1- und bisherigen Enelix-2-Zeitwerte steht in
[`docs/migration/Verbraucher-1-Stufig.md`](../../migration/Verbraucher-1-Stufig.md).