212 lines
8.3 KiB
Markdown
212 lines
8.3 KiB
Markdown
# Verbraucher 1-Stufig
|
|
|
|
> 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]`. 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
|
|
|
|
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 der zustandsabhaengigen Mindestzeit,
|
|
- das Ablaufen einer Manager-Vorgabe,
|
|
- den naechsten relevanten Zeitpunkt der Tageslaufzeitplanung.
|
|
|
|
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 acht
|
|
Modul-Properties hinzu.
|
|
|
|
| Ident | Typ | Standard | Beschreibung |
|
|
| --- | --- | ---: | --- |
|
|
| `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 physisch eingeschaltet. |
|
|
| `Mindestlaufzeit` | Integer | `0` | Geforderte Laufzeit pro lokalem Kalendertag in Sekunden, maximal 86400. |
|
|
| `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 nicht weiter aus.
|
|
|
|
## Variablen
|
|
|
|
Immer sichtbar:
|
|
|
|
| Ident | Typ / Zugriff | Beschreibung |
|
|
| --- | --- | --- |
|
|
| `Aktiv` | Boolean / bedienbar | Lokale EMS-Freigabe; Startwert `false`. |
|
|
| `Schaltzustand` | Boolean / Anzeige | Bestaetigter oder aus dem Aktor berechneter Zustand. |
|
|
| `Tageslaufzeit` | Integer / Anzeige | Bestaetigte Laufzeit des lokalen Kalendertags in Sekunden. |
|
|
|
|
Mit `DiagnosevariablenAnzeigen` werden zusaetzlich angelegt:
|
|
|
|
- `Istleistung`
|
|
- `Leistungsquelle`
|
|
- `Sollleistung`
|
|
- `SollwertGueltig`
|
|
- `Verfuegbar`
|
|
- `AenderungMoeglich`
|
|
- `Stoerung`
|
|
- `Stoertext`
|
|
- `Rueckmeldefehler`
|
|
- `SchaltbefehlAusstehend`
|
|
- `RestMindestzeit`
|
|
|
|
Die Regellogik arbeitet mit persistenten Attributen und ist nicht von der
|
|
Sichtbarkeit der Diagnosevariablen abhaengig.
|
|
|
|
## Mindest-Ein- und Mindest-Aus-Zeit
|
|
|
|
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. Nur der bestaetigte Ein-Zustand zaehlt.
|
|
|
|
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 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.
|
|
|
|
## Installation und Inbetriebnahme
|
|
|
|
1. Im IP-Symcon Module Control den Testing-Branch `develop` der Bibliothek
|
|
`https://git.belevo.ch/ENELIX/Enelix-EMS.git` installieren oder
|
|
aktualisieren.
|
|
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 und bei Bedarf `SchaltkontaktInvertiert` aktivieren.
|
|
5. Optional eine separate Boolean-Rueckmeldung auswaehlen. Dort muss
|
|
`true` dem physisch eingeschalteten Verbraucher entsprechen.
|
|
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
|
|
Aus-Vorgabe pruefen.
|
|
|
|
## Abnahmecheckliste
|
|
|
|
- `Aktiv=false` schaltet den Ausgang aus.
|
|
- 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- und bisherigen Enelix-2-Zeitwerte steht in
|
|
[`docs/migration/Verbraucher-1-Stufig.md`](../../migration/Verbraucher-1-Stufig.md).
|