407 lines
19 KiB
Markdown
407 lines
19 KiB
Markdown
# Verbraucher Warmwassererwaermer
|
|
|
|
> Status: implementiert fuer IP-Symcon 8.0+ und den Enelix-2-Vertrag `4.0`.
|
|
|
|
Das Modul bindet einen elektrischen Warmwasserspeicher mit einer oder mehreren
|
|
exklusiven Leistungsstufen an den Enelix-Manager an. Der Manager kann nur eine
|
|
der aktuell angebotenen Leistungen vorgeben. Mindesttemperatur, Hysterese,
|
|
Zeitplan und Legionellenfunktion bestimmen dabei zustands- und
|
|
betriebsartabhaengig das Leistungsangebot.
|
|
|
|
Das Modul ist eine gezielte Adaption des Enelix-1-Moduls
|
|
`Boiler_x_Stufig`. Zyklische Altlogik und alte Kommunikationsvariablen wurden
|
|
nicht uebernommen. Die Regelung arbeitet ereignisbasiert und verwendet
|
|
ausschliesslich den Enelix-2-Nachrichtenvertrag.
|
|
|
|
| Technisches Merkmal | Wert |
|
|
| --- | --- |
|
|
| Modulname | `VerbraucherWarmwassererwaermer` |
|
|
| Alias | `Wassererwärmer` |
|
|
| Modul-ID | `{B7C54AF4-AD7D-4FE4-B75D-203693906251}` |
|
|
| Modultyp | Geraeteinstanz (`3`) |
|
|
| Funktionspraefix | `ENELIX` |
|
|
| Enelix-Vertrag | `4.0` |
|
|
|
|
## Funktionsumfang
|
|
|
|
- beliebig viele, eindeutig konfigurierte Leistungsstufen inklusive `0 W`,
|
|
- exklusive Break-before-make-Schaltung der Stufenkontakte,
|
|
- lokale Mindest- und Maximaltemperatur mit Hysterese,
|
|
- optionale PT1-Glaettung des Temperaturmesswerts,
|
|
- thermische Vorhersage fuer taegliche Solltemperatur-Zeitpunkte,
|
|
- zweistufige Legionellenfunktion mit Fruehest- und Spaetestintervall,
|
|
- berechnete Istleistung, aktive Stufe und bezogene Energie,
|
|
- ereignisbasierte Regelung mit einstellbarer Lastwechselsperre,
|
|
- Kommunikation mit manuell oder automatisch zugeordneten Enelix-Managern,
|
|
- optionale Diagnosevariablen und Debug-Logging.
|
|
|
|
## Voraussetzungen
|
|
|
|
- IP-Symcon ab Version 8.0,
|
|
- installierte Bibliothek `Enelix-EMS` vom Branch `develop`,
|
|
- eine Integer- oder Floatvariable als Temperaturfuehler,
|
|
- mindestens eine positive Leistungsstufe,
|
|
- je Leistungsstufe eine eigene Booleanvariable mit funktionsfaehiger Aktion,
|
|
- ein Enelix-Manager, dem die Verbraucherinstanz aktiv zugeordnet wird.
|
|
|
|
Die Schaltkontakte duerfen nicht mehrfach verwendet werden. Der Anlagenaufbau
|
|
muss sicherstellen, dass die konfigurierten Leistungsstufen elektrisch
|
|
zulaessig sind. Die Software ersetzt keine hardwareseitigen Verriegelungen,
|
|
Temperaturbegrenzer oder Schutzorgane.
|
|
|
|
## Regelungsablauf
|
|
|
|
Eine Neuberechnung wird insbesondere ausgeloest durch:
|
|
|
|
- einen neuen oder aktualisierten Temperaturmesswert,
|
|
- das Ein- oder Ausschalten von `Aktiv`,
|
|
- eine neue Manager-Vorgabe,
|
|
- eine Aenderung der bedienbaren Temperatursollwerte,
|
|
- das Ende der Lastwechselsperre,
|
|
- das Uebernehmen einer neuen Instanzkonfiguration,
|
|
- eine periodische Vollmeldung an den Manager.
|
|
|
|
`Meldeintervall` ist kein Regelintervall. Es stellt die regelmaessige
|
|
vollstaendige Rueckmeldung sicher. Die Lastwechselsperre verwendet einen
|
|
einmaligen Timer und loest nach ihrem Ablauf genau eine Neuberechnung aus.
|
|
|
|
Die Zielentscheidung folgt der Enelix-1-Zustandsmatrix:
|
|
|
|
1. Bei deaktivierter Instanz oder ungueltiger Temperatur ist der Verbraucher
|
|
nicht verfuegbar und wird ausgeschaltet. Eine ungueltige Konfiguration wird
|
|
bereits beim Uebernehmen mit Status `202` abgewiesen.
|
|
2. Unter der wirksamen Mindesttemperatur sowie in der unteren Hysterese bei
|
|
aktiver Stufe gilt: PV erzwingt die Maximalleistung, Peak bietet
|
|
`[0, ...Leistungsstufen]` an.
|
|
3. Ausserhalb dieses Mindesttemperaturbereichs bietet Peak nur `[0]` an.
|
|
4. Im PV-Betrieb werden unterhalb von `Maximaltemperatur - Hysterese` alle
|
|
Stufen angeboten. In der oberen Hysterese gilt dies nur, solange bereits
|
|
eine Stufe aktiv ist.
|
|
5. An oder oberhalb der wirksamen Maximaltemperatur wird ausgeschaltet.
|
|
|
|
Eine erzwungene PV-Maximalleistung wird mit `AenderungMoeglich=false`
|
|
gemeldet. Das Peak-Array bleibt dagegen durch den Manager waehlbar.
|
|
|
|
## Konfiguration
|
|
|
|
Das Modul besitzt 19 Properties: sechs gemeinsame Verbraucher-Properties und
|
|
13 modulspezifische Properties.
|
|
|
|
### Manager und Zeitverhalten
|
|
|
|
| Ident | Typ | Standard | Beschreibung |
|
|
| --- | --- | ---: | --- |
|
|
| `PrioritaetPV` | Integer | `0` | Prioritaet im PV-Betrieb; kleinere Werte werden zuerst beruecksichtigt. |
|
|
| `PrioritaetPeak` | Integer | `0` | Prioritaet im Peak-Betrieb; kleinere Werte werden zuerst beruecksichtigt. |
|
|
| `Meldeintervall` | Integer | `10` | Abstand der vollstaendigen Verbraucherrueckmeldungen in Sekunden. |
|
|
| `VorgabeTimeout` | Integer | `120` | Zeit in Sekunden, nach der eine nicht erneuerte Manager-Vorgabe ungueltig wird. |
|
|
| `LastwechselSperrzeit` | Integer | `5` | Mindestzeit zwischen zwei Lastwechseln in Sekunden. |
|
|
|
|
### Speichereinstellungen
|
|
|
|
| Ident | Typ | Standard | Beschreibung |
|
|
| --- | --- | ---: | --- |
|
|
| `LeistungsStufen` | JSON-Liste | `[]` | Positive Leistung, Stufennummer und Boolean-Schaltkontakt jeder Stufe. |
|
|
| `Boilerfuehler_PT1` | Integer | `0` | Objekt-ID der Integer- oder Floatvariable fuer die Speichertemperatur. |
|
|
| `LegionellenfunktionAktiv` | Boolean | `true` | Aktiviert die periodische Anhebung auf Legionellentemperatur. |
|
|
| `LegionellenMinimalintervallTage` | Integer | `4` | Fruehestens: Legionellentemperatur wird zur Maximaltemperatur. |
|
|
| `LegionellenMaximalintervallTage` | Integer | `7` | Spaetestens: Legionellentemperatur wird zur Mindesttemperatur. |
|
|
|
|
Jeder Eintrag in `LeistungsStufen` besteht aus:
|
|
|
|
| Feld | Anforderung |
|
|
| --- | --- |
|
|
| `Stufe` | Positive Ganzzahl. |
|
|
| `Leistung` | Eindeutige positive Ganzzahl in Watt. |
|
|
| `Schaltkontakt_Stufe` | Eindeutige Objekt-ID einer Booleanvariable. |
|
|
|
|
Die Eintraege werden intern nach Leistung sortiert. `0 W` wird automatisch als
|
|
Aus-Zustand in das Leistungsangebot aufgenommen und darf nicht als eigene
|
|
Stufe konfiguriert werden.
|
|
|
|
### Erweiterte Speichereinstellungen
|
|
|
|
| Ident | Typ | Standard | Beschreibung |
|
|
| --- | --- | ---: | --- |
|
|
| `Boilervolumen` | Integer | `300` | Speichervolumen in Litern fuer die thermische Zeitplanprognose. |
|
|
| `Hysterese` | Float | `5.0` | Temperaturhysterese in Kelvin. |
|
|
| `Zeitplan` | JSON-Liste | `[]` | Taegliche Zielwerte mit `Uhrzeit` im Format `HH:MM` und `Solltemperatur`. |
|
|
|
|
Der jeweils naechste Zeitplaneintrag wird fuer heute oder den folgenden Tag
|
|
ermittelt. Reicht die verbleibende Zeit bei maximaler elektrischer Leistung
|
|
rechnerisch nicht mehr aus, wird das Zeitplanziel zur wirksamen
|
|
Mindesttemperatur. Im PV-Betrieb wird dann die hoechste Stufe erzwungen, im
|
|
Peakbetrieb werden alle Stufen angeboten. Die Berechnung verwendet Wasser mit
|
|
`4186 J/(kg K)` und beruecksichtigt keine Speicher- oder Leitungsverluste. Fuer
|
|
Datum und Uhrzeit gilt die in IP-Symcon eingestellte lokale Zeitzone.
|
|
|
|
### Erweiterte sonstige Einstellungen
|
|
|
|
| Ident | Typ | Standard | Beschreibung |
|
|
| --- | --- | ---: | --- |
|
|
| `TemperaturMaxAlter` | Integer | `30` | Maximal zulaessiges Alter des Temperaturmesswerts in Sekunden. |
|
|
| `BoilertemperaturGlaetten` | Boolean | `false` | Aktiviert die PT1-Glaettung. |
|
|
| `ZeitKonstante` | Integer | `120` | PT1-Zeitkonstante in Sekunden. |
|
|
| `EinstellungenInVisu` | Boolean | `false` | Zeigt Temperatursollwerte an und gibt ihre Bedienung frei. |
|
|
| `DiagnosevariablenAnzeigen` | Boolean | `false` | Legt die 14 Diagnosevariablen an. |
|
|
| `LoggingEin` | Boolean | `false` | Aktiviert laufende Debug-Ausgaben des Moduls. |
|
|
|
|
Alle Zeitwerte und Intervalle muessen groesser als `0` sein. Die beiden
|
|
Prioritaeten muessen mindestens `0` betragen. Das Legionellen-Minimalintervall
|
|
darf nicht groesser als das Maximalintervall sein.
|
|
|
|
## Temperaturverarbeitung
|
|
|
|
Der Rohwert des konfigurierten Fuehlers muss numerisch und juenger als
|
|
`TemperaturMaxAlter` sein. Andernfalls werden `TemperaturGueltig=false`,
|
|
`Verfuegbar=false` und eine Stoerung gemeldet; eine aktive Stufe wird
|
|
ausgeschaltet.
|
|
|
|
Ohne Glaettung entspricht `Boilertemperatur` dem letzten gueltigen Rohwert.
|
|
Mit aktivierter Glaettung verwendet das Modul ein PT1-Glied. Der erste Wert
|
|
initialisiert den Filter; danach wird die tatsaechlich seit der letzten
|
|
Temperaturberechnung vergangene Zeit verwendet.
|
|
|
|
Die Solltemperaturen werden bei der ersten Initialisierung auf folgende Werte
|
|
gesetzt:
|
|
|
|
| Variable | Initialwert |
|
|
| --- | ---: |
|
|
| `Mindesttemperatur` | `45.0 Grad C` |
|
|
| `Maximaltemperatur` | `60.0 Grad C` |
|
|
| `Legionellentemperatur` | `65.0 Grad C` |
|
|
|
|
Es gilt immer:
|
|
|
|
`Mindesttemperatur < Maximaltemperatur <= Legionellentemperatur`
|
|
|
|
Temperaturwerte muessen zwischen `0` und `100 Grad C` liegen. Bedienaktionen sind
|
|
nur erlaubt, wenn `EinstellungenInVisu=true` gesetzt ist.
|
|
|
|
## Hysterese und lokales Nachladen
|
|
|
|
Sinkt die Temperatur unter die wirksame Mindesttemperatur, erzwingt PV die
|
|
hoechste Leistungsstufe; Peak bietet dagegen Aus und alle Stufen an. In der
|
|
unteren Hysterese bis `Mindesttemperatur + Hysterese` bleibt dieses Verhalten
|
|
nur erhalten, solange bereits eine Stufe aktiv ist.
|
|
|
|
Im PV-Betrieb werden unter `Maximaltemperatur - Hysterese` alle Stufen
|
|
angeboten. Innerhalb der oberen Hysterese bleibt das Angebot nur bei einer
|
|
bereits aktiven Stufe erhalten. An der Maximaltemperatur wird ausgeschaltet.
|
|
|
|
## Legionellenfunktion
|
|
|
|
Die Legionellenfunktion arbeitet zweistufig:
|
|
|
|
1. Ab `LegionellenMinimalintervallTage` wird die Legionellentemperatur zur
|
|
wirksamen Maximaltemperatur. Der Manager kann die Aufheizung innerhalb des
|
|
verbleibenden Zeitfensters ermoeglichen.
|
|
2. Ab `LegionellenMaximalintervallTage` wird die Legionellentemperatur auch zur
|
|
wirksamen Mindesttemperatur. PV erzwingt dadurch die Maximalleistung; Peak
|
|
bietet das vollstaendige Stufenarray bis zum Ziel an.
|
|
|
|
Erreicht die gueltige Speichertemperatur die Legionellentemperatur, wird der
|
|
Zeitpunkt als erfolgreicher Abschluss gespeichert und das Intervall beginnt
|
|
neu. `LegioCounter` zeigt die Sekunden seit diesem Abschluss.
|
|
|
|
`Legionellentemperatur` wird nur als Symcon-Variable angelegt, wenn
|
|
`LegionellenfunktionAktiv=true` ist. Beim Ausschalten der Funktion wird die
|
|
Variable geloescht; der letzte Wert bleibt intern erhalten und steht bei einem
|
|
spaeteren Wiedereinschalten wieder zur Verfuegung.
|
|
|
|
## Lastwechselsperre und Schaltsicherheit
|
|
|
|
Nach jedem tatsaechlichen Lastwechsel wird fuer
|
|
`LastwechselSperrzeit` Sekunden kein weiterer regulaerer Wechsel zugelassen.
|
|
In dieser Zeit gilt:
|
|
|
|
- `AenderungMoeglich=false`,
|
|
- `Leistungswerte_W` enthaelt nur die aktuell gehaltene Leistung,
|
|
- eine abweichende Manager-Vorgabe wird abgewiesen,
|
|
- ein einmaliger Timer plant die Freigabe.
|
|
|
|
Ein sicherheitsbedingtes Ausschalten, beispielsweise bei ungueltiger
|
|
Temperatur oder erreichter Maximaltemperatur, darf die Sperre uebergehen.
|
|
Separate Variablen `Idle` oder `IdleCounter` existieren nicht.
|
|
|
|
Beim Schalten werden zuerst alle konfigurierten Kontakte ausgeschaltet und
|
|
anschliessend hoechstens der Kontakt der Zielstufe eingeschaltet. Schlaegt ein
|
|
Schaltvorgang fehl, versucht das Modul alle Kontakte auszuschalten, setzt die
|
|
berechnete Istleistung auf `0 W` und meldet einen Schaltfehler.
|
|
|
|
## Variablen
|
|
|
|
### Betriebs- und Einstellvariablen
|
|
|
|
| Ident | Typ / Zugriff | Sichtbarkeit | Beschreibung |
|
|
| --- | --- | --- | --- |
|
|
| `Aktiv` | Boolean / bedienbar | immer | Lokale EMS-Freigabe; Startwert `false`. |
|
|
| `Boilertemperatur` | Float / Anzeige | immer | Letzter gueltiger, gegebenenfalls geglaetteter Temperaturwert. |
|
|
| `Mindesttemperatur` | Float / bedienbar | bei `EinstellungenInVisu` | Untere Grenze fuer lokales Nachladen. |
|
|
| `Maximaltemperatur` | Float / bedienbar | bei `EinstellungenInVisu` | Abschaltgrenze im Normalbetrieb. |
|
|
| `Legionellentemperatur` | Float / bedienbar | Funktion aktiv; Anzeige freigegeben | Ziel des Legionellenprogramms. |
|
|
|
|
### Diagnosevariablen
|
|
|
|
Mit `DiagnosevariablenAnzeigen=true` werden diese 14 Variablen angelegt. Beim
|
|
Abschalten der Property werden sie wieder geloescht. Die Regellogik verwendet
|
|
persistente interne Zustaende und funktioniert unabhaengig von diesen
|
|
Anzeigevariablen.
|
|
|
|
| Ident | Typ | Bedeutung |
|
|
| --- | --- | --- |
|
|
| `Istleistung` | Float | Berechnete aktuelle Leistung in Watt. |
|
|
| `Leistungsquelle` | Integer | Immer `1` fuer berechnete Leistung. |
|
|
| `Sollleistung` | Integer | Aktuell angenommene oder lokal erzwungene Zielvorgabe in Watt. |
|
|
| `SollwertGueltig` | Boolean | Eine Manager-Vorgabe ist vorhanden und noch nicht abgelaufen. |
|
|
| `Verfuegbar` | Boolean | Das Modul kann grundsaetzlich durch das EMS gesteuert werden. |
|
|
| `AenderungMoeglich` | Boolean | Der Manager darf momentan eine neue Leistung vorgeben. |
|
|
| `Stoerung` | Boolean | Mindestens eine Stoerbedingung ist aktiv. |
|
|
| `Stoertext` | String | Zusammengefasste lesbare Stoerbeschreibung. |
|
|
| `AktiveStufe` | Integer | Stufennummer der berechneten aktuellen Leistung; `0` bedeutet aus. |
|
|
| `BezogeneEnergie` | Float | Aus Istleistung und verstrichener Zeit berechnete Energie in kWh. |
|
|
| `TemperaturGueltig` | Boolean | Temperaturfuehler vorhanden, numerisch und nicht veraltet. |
|
|
| `NachladenAktiv` | Boolean | Lokales Nachladen aufgrund der Mindesttemperatur ist aktiv. |
|
|
| `LegionellenbetriebAktiv` | Boolean | Das Fruehestintervall der Legionellenfunktion ist erreicht. |
|
|
| `LegioCounter` | Integer | Sekunden seit dem letzten erfolgreichen Legionellenabschluss. |
|
|
|
|
## Managerkommunikation
|
|
|
|
Das Modul implementiert
|
|
`VerbraucherSchnittstelle::ManagerdatenEmpfangen()` und verwendet den
|
|
Enelix-2-Vertrag `4.0`. Es besitzt keine Manager-ID-Property. Zugelassen sind
|
|
nur Manager, in deren manueller oder automatischer Verbraucherzuordnung die
|
|
Instanz aktiv eingetragen ist.
|
|
|
|
Eine Manager-Vorgabe wird nur angenommen, wenn:
|
|
|
|
- Vertragsversion, Absender, Empfaenger und Datentypen gueltig sind,
|
|
- der Manager die Instanz aktiv zugeordnet hat,
|
|
- `Sollleistung_W` im zuletzt berechneten `Leistungswerte_W` enthalten ist.
|
|
|
|
Rueckmeldungen erfolgen bei relevanten Ereignissen, kurz verzoegert nach einer
|
|
Manager-Vorgabe und zusaetzlich alle `Meldeintervall` Sekunden. Die kurze
|
|
Verzoegerung verhindert eine synchrone Manager-Verbraucher-Endlosschleife.
|
|
|
|
Die Verbraucherrueckmeldung enthaelt insbesondere:
|
|
|
|
- Prioritaeten fuer PV- und Peak-Betrieb,
|
|
- `Leistungswerte_W`, `AenderungMoeglich` und `Verfuegbar`,
|
|
- `Istleistung_W` mit `Leistungsquelle=1`,
|
|
- Zustandseintraege fuer Sollleistung, Wassertemperatur, Maximaltemperatur,
|
|
aktive Stufe, Nachladen, Legionellenbetrieb und Stoerungen.
|
|
|
|
Nach `VorgabeTimeout` Sekunden ohne Erneuerung wird eine Manager-Vorgabe
|
|
bei der naechsten Neuberechnung, spaetestens bei der folgenden Vollmeldung,
|
|
ungueltig. Beim Neustart wird keine alte Manager-Vorgabe ungeprueft wieder
|
|
aufgenommen.
|
|
|
|
## Abgrenzung des aktuellen Stands
|
|
|
|
- `Istleistung`, `AktiveStufe` und `BezogeneEnergie` sind berechnete Werte; das
|
|
Modul besitzt keinen Anschluss fuer einen elektrischen Leistungsmesser.
|
|
- Die Stufenkontakte sind Aktoren, keine separate physische Rueckmeldung. Ihr
|
|
Booleanzustand wird bei einer Regelberechnung auf Plausibilitaet geprueft.
|
|
- Externe Aenderungen an den Stufenkontakten loesen selbst keine
|
|
Neuberechnung aus. Der Temperaturfuehler ist die abonnierte Messvariable.
|
|
- Der Zeitplan beschreibt taeglich wiederkehrende Zielzeitpunkte und keine
|
|
einmaligen Kalendertermine.
|
|
|
|
## Status- und Fehlerzustaende
|
|
|
|
| Status | Bedeutung | Typische Ursache |
|
|
| ---: | --- | --- |
|
|
| `102` | Aktiv | Konfiguration und Temperaturmessung sind gueltig. |
|
|
| `201` | Temperaturmessung ungueltig | Fuehler fehlt, ist nicht numerisch oder zu alt. |
|
|
| `202` | Konfiguration ungueltig | Unzulaessige Intervalle, Temperaturen, Stufen, Kontakte oder Zeitplaneintraege. |
|
|
| `203` | Schaltfehler | Eine Aktion eines Stufenkontakts ist fehlgeschlagen. |
|
|
|
|
Eine Uebertemperatur liegt vor, wenn `Boilertemperatur` die hoehere Grenze aus
|
|
Maximal- und Legionellentemperatur um mehr als `Hysterese` ueberschreitet. Sie
|
|
wird ueber `Stoerung` und `Stoertext` gemeldet; der Modulstatus bleibt ohne
|
|
zusaetzlichen Schalt- oder Fuehlerfehler `102`.
|
|
|
|
## Installation und Inbetriebnahme
|
|
|
|
1. Im IP-Symcon Module Control den Branch `develop` der Bibliothek
|
|
`https://git.belevo.ch/ENELIX/Enelix-EMS.git` installieren oder
|
|
aktualisieren.
|
|
2. Unter **Instanz hinzufuegen** nach dem Alias **Wassererwärmer** oder dem
|
|
Modulnamen `VerbraucherWarmwassererwaermer` suchen und eine Instanz anlegen.
|
|
3. Den Temperaturfuehler auswaehlen und `TemperaturMaxAlter` passend zum
|
|
Aktualisierungsintervall des Fuehlers einstellen.
|
|
4. Alle Leistungsstufen mit positiver Leistung und jeweils eigenem
|
|
Boolean-Schaltkontakt konfigurieren.
|
|
5. Normal-, Legionellen- und Zeitplanwerte pruefen. Danach die Konfiguration
|
|
uebernehmen.
|
|
6. Die Instanz im Enelix-Manager manuell aktiv zuordnen oder bei automatischer
|
|
Suche in der gefundenen Liste aktivieren.
|
|
7. Fuer die Erstpruefung `DiagnosevariablenAnzeigen` und bei Bedarf
|
|
`LoggingEin` einschalten.
|
|
8. Unter Aufsicht `Aktiv` einschalten und jede Stufe einzeln pruefen. Dabei
|
|
kontrollieren, dass nie zwei Stufenkontakte gleichzeitig aktiv sind.
|
|
9. Eine Manager-Vorgabe fuer `0 W` und fuer jede konfigurierte Stufe pruefen.
|
|
10. Diagnosevariablen nach der Abnahme bei Bedarf wieder ausschalten.
|
|
|
|
## Abnahmecheckliste
|
|
|
|
- Die Instanz erreicht Status `102`.
|
|
- `Aktiv=false` schaltet alle Stufenkontakte aus.
|
|
- Der Fuehlerwert erscheint unverfaelscht oder erwartungsgemaess geglaettet in
|
|
`Boilertemperatur`.
|
|
- Unterhalb der Mindesttemperatur wird die hoechste Stufe lokal erzwungen.
|
|
- Oberhalb der Maximaltemperatur werden alle Stufen ausgeschaltet.
|
|
- Jede Manager-Vorgabe schaltet genau den zugeordneten Kontakt.
|
|
- Direkt nach einem Wechsel ist `AenderungMoeglich=false`; nach der
|
|
konfigurierten Sperrzeit wird ein regulaerer Wechsel wieder freigegeben.
|
|
- Eine Gegenanforderung waehrend der Sperre liegt nicht im gemeldeten
|
|
Leistungsangebot.
|
|
- Ein veralteter oder ungueltiger Fuehlerwert fuehrt zu Status `201`, einer
|
|
Stoerung und sicherem Ausschalten.
|
|
- Bei aktiver Legionellenfunktion wird `Legionellentemperatur` angelegt; nach
|
|
dem Abschalten der Funktion wird die Variable geloescht.
|
|
- Mit ausgeschalteten Diagnosevariablen bleiben Regelung und Kommunikation
|
|
funktionsfaehig.
|
|
|
|
## Diagnosehinweise
|
|
|
|
- Status `202`: zuerst Fuehler-ID, Leistungsstufen, eindeutige Kontakte,
|
|
Temperaturreihenfolge, Intervalle und Zeitplanformat pruefen.
|
|
- Status `201`: `VariableUpdated`, Datentyp des Fuehlers und
|
|
`TemperaturMaxAlter` kontrollieren.
|
|
- Status `203`: Aktionen der Boolean-Schaltkontakte einzeln in IP-Symcon
|
|
testen; das Modul versucht bei einem Fehler alle Kontakte auszuschalten.
|
|
- Manager-Vorgabe wird abgewiesen: Zuordnung im Manager,
|
|
`AenderungMoeglich` und das aktuelle `Leistungswerte_W` pruefen.
|
|
- Unerwartetes Nachladen: Mindesttemperatur, Hysterese, naechstes Zeitplanziel
|
|
und Alter des letzten Legionellenabschlusses kontrollieren.
|
|
|
|
## Tests
|
|
|
|
`WarmwasserReglerTest.php` prueft die reine Regellogik fuer Leistungsstufen,
|
|
PT1, Lastwechselsperre, Energieberechnung, thermische Prognose, Zeitplan und
|
|
Legionellengrenzen.
|
|
|
|
`WarmwassererwaermerModulstrukturTest.php` prueft Metadaten, Formular, alle 19
|
|
Properties, ereignisbasierte Lastwechselsperre, Vertrag `4.0`, bedarfsgesteuerte
|
|
Diagnosevariablen, Legionellentemperatur, Temperatursollwerte und
|
|
Break-before-make-Schaltung.
|
|
|
|
## Migration von Enelix 1
|
|
|
|
Die Zuordnung der uebernommenen, angepassten und entfallenen Felder des alten
|
|
Moduls `Boiler_x_Stufig` ist in
|
|
[`docs/migration/Boiler-x-Stufig.md`](../../migration/Boiler-x-Stufig.md)
|
|
dokumentiert.
|
|
|
|
Wesentliche Unterschiede:
|
|
|
|
- `Interval` entfaellt; die Regelung ist ereignisbasiert.
|
|
- `IdleCounterMax` wird durch `LastwechselSperrzeit` in Sekunden ersetzt.
|
|
- `Idle` und `IdleCounter` entfallen vollstaendig.
|
|
- `PowerSteps` wird durch das Vertragsfeld `Leistungswerte_W` ersetzt.
|
|
- Prioritaeten sind Properties; Betriebsart und Leistungsverteilung liegen im
|
|
Manager.
|
|
- Die neue Modul-ID erfordert eine neue Instanz; eine automatische Umwandlung
|
|
des Enelix-1-Objekts findet nicht statt.
|