121 lines
7.0 KiB
Markdown
121 lines
7.0 KiB
Markdown
# Enelix-Verbrauchermodul Warmwasser (Boiler)
|
||
|
||
Dieses Modul integriert elektrische Warmwasserboiler mit geschalteten Heizstäben mit variablen Heizstufen in das Belevo Energiemanagement-System (Enelix). Es steuert die Leistungsstufen dynamisch nach PV-Überschuss, Peak-Shaving-Vorgaben, Temperaturvorgaben sowie Zeitplänen und integriert einen automatischen Legionellenschutz.
|
||
|
||
---
|
||
|
||
## Inhaltsverzeichnis
|
||
|
||
1. [Funktionsumfang](#1-funktionsumfang)
|
||
2. [Voraussetzungen](#2-voraussetzungen)
|
||
3. [Installation](#3-installation)
|
||
4. [Instanz anlegen & Konfiguration](#4-instanz-anlegen--konfiguration)
|
||
5. [Statusvariablen & Profile](#5-statusvariablen--profile)
|
||
6. [WebFront / Bedienung](#6-webfront--bedienung)
|
||
7. [Mapping auf Code-Komponenten](#7-mapping-auf-code-komponenten)
|
||
8. [Zukünftige Erweiterungen](#8-zukünftige-erweiterungen)
|
||
|
||
---
|
||
|
||
## 1. Funktionsumfang
|
||
|
||
- **Stufensteuerung (LeistungsStufen):** Definition beliebiger Leistungsschritte (Watt) mit direkter Zuweisung von IP-Symcon Schaltkontakten (Variablen-IDs).
|
||
- **Temperaturüberwachung & Glättung:** Auswertung eines Temperaturfühlers mit optionaler PT1-Glättung (Tiefpassfilter über `ZeitKonstante`), um Messrauschen zu minimieren.
|
||
- **Betriebsmodi (PV vs. Peak):**
|
||
- *Peak-Shaving:* Heizen nur bei Unterschreitung der `Mindesttemperatur` (Zwangsaufheizung), optional auch ganz deaktivierbar.
|
||
- *Solarladen:* Stufenweise Aufheizung bis zur `Maximaltemperatur` mit überschüssiger PV-Leistung. Fällt die Temperatur unter `Mindesttemperatur`, wird mit maximaler Leistung geheizt.
|
||
- **Legionellenschutz:** Ein interner Zähler (`LegioCounter`) überwacht die Zeit seit der letzten Hochtemperaturphase. Wird ein Grenzwert überschritten, wird die `Maximaltemperatur` (bzw. später auch die `Mindesttemperatur` im Nachtbetrieb) automatisch auf die `Legionellentemperatur` angehoben.
|
||
- **Vorausschauende Zeitpläne (Landwirtschaft):** Über einen JSON-Zeitplan können Zieltemperaturen zu bestimmten Uhrzeiten definiert werden. Das Modul berechnet über die physikalische Wärmekapazität (Volumen, Delta-T) vorausschauend, ob und wann die Heizung aktiviert werden muss, um das Ziel rechtzeitig zu erreichen.
|
||
- **Taktschutz (Idle-Logik):** Ein einstellbarer Zähler (`IdleCounterMax`) verhindert ein zu häufiges Schalten der Heizstäbe sowie eine Mindestlaufzeit.
|
||
|
||
---
|
||
|
||
## 2. Voraussetzungen
|
||
|
||
- IP-Symcon **≥ 8.0**
|
||
- Modul-URL: `https://git.belevo.ch/dh/enelix.git`
|
||
- Vorhandener und eingerichteter Enelix Manager.
|
||
- Physische Schaltaktoren für die Boiler-Heizstäbe.
|
||
- Temperaturfühler im Boiler mit Fühlerwert als Variable in Symcon.
|
||
|
||
---
|
||
|
||
## 3. Installation
|
||
|
||
1. In IP-Symcon **Module Control** öffnen.
|
||
2. **Hinzufügen → Git-Repository**.
|
||
3. URL eingeben und **Installieren**.
|
||
4. IP-Symcon neu starten.
|
||
|
||
---
|
||
|
||
## 4. Instanz anlegen & Konfiguration
|
||
|
||
### 4.1 Instanz anlegen
|
||
|
||
- Rechtsklick **Instanzen** → **Instanz hinzufügen**
|
||
- Filter: **Belevo**
|
||
- Auswahl: **Warmwasser (Verbraucher)**
|
||
|
||
### 4.2 Properties
|
||
|
||
| Name | Typ | Beschreibung |
|
||
|---|---|---|
|
||
| **LeistungsStufen** | String (JSON) | Konfiguration der Leistungsschritte und der verknüpften Aktor-Variablen-IDs. |
|
||
| **Boilerfuehler_PT1** | SelectVariable | Variablen-ID des Hardware-Temperaturfühlers. |
|
||
| **Boilertemperatur_glätten** | Boolean | Aktiviert das Software-Tiefpassfilter für den Fühlerwert. |
|
||
| **ZeitKonstante** | NumberSpinner | Zeitkonstante für die Temperatur-Glättung. |
|
||
| **Boilervolumen** | NumberSpinner | Boilervolumen in Litern (Basis für die thermodynamische Berechnung im Zeitplan). |
|
||
| **Zeitplan** | String (JSON) | Optionaler Zeitplan für Zieltemperaturen (Format: `[{"Uhrzeit":"06:00","Solltemperatur":55}]`). |
|
||
| **Interval** | NumberSpinner | Berechnungsintervall in Sekunden. |
|
||
| **IdleCounterMax** | NumberSpinner | Anzahl Intervall-Zyklen zwischen zwei Schaltvorgängen (Verzögerung). |
|
||
|
||
---
|
||
|
||
## 5. Statusvariablen & Profile
|
||
|
||
| Ident | Typ | Beschreibung |
|
||
|---|---|---|
|
||
| **Mindesttemperatur** | Integer | Unteres Limit. Wird dieser Wert unterschritten, wird immer geheizt (Netzbezug). |
|
||
| **Maximaltemperatur** | Integer | Oberes Limit für PV-Überschussladung. |
|
||
| **Legionellentemperatur**| Integer | Zieltemperatur für den automatischen Legionellenzyklus (z.B. 65°C). |
|
||
| **Boilertemperatur** | Float | Aktuelle, ggf. geglättete Ist-Temperatur des Boilers. |
|
||
| **LegioCounter** | Integer | Interner Zähler für die Laufzeit seit der letzten Legionellen-Desinfektion. |
|
||
| **Aktuelle_Leistung** | Integer | Die aktuell vom Manager zugewiesene Soll-Leistung in Watt. |
|
||
| **PowerSteps** | String | JSON-Array der dem Manager aktuell angebotenen möglichen Leistungsschritte. |
|
||
| **Idle** | Boolean | Status der Sperrzeit (`true` = bereit für neue Werte, `false` = gesperrt). |
|
||
| **Sperre_Prio** | Integer | Priorität für die Leistungszuteilung im Peak-Shaving-Modus. |
|
||
| **PV_Prio** | Integer | Priorität für die Leistungszuteilung im Solarlade-Modus. |
|
||
| **Bezogene_Energie** | Float | Rechnerisch aufsummierte Energie (Leistung × Zeit). |
|
||
| **Is_Peak_Shaving** | Boolean | Vom Manager übermittelter aktueller Betriebsmodus. |
|
||
|
||
Für alle Sollwerte wird jeweils eine Hysterese von 5 °C miteingehalten.
|
||
---
|
||
|
||
## 6. WebFront / Bedienung
|
||
|
||
Im WebFront dient die Instanz zur Kontrolle und Anpassung der Temperaturvorgaben:
|
||
- Einstellen von `Mindesttemperatur`, `Maximaltemperatur` und `Legionellentemperatur`.
|
||
- Überwachung der aktuellen `Boilertemperatur`.
|
||
- Visualisierung der vom Manager freigegebenen `Aktuelle_Leistung`.
|
||
- Die Anpassung von Prioritäten (`PV_Prio`, `Sperre_Prio`).
|
||
|
||
---
|
||
|
||
## 7. Mapping auf Code-Komponenten
|
||
|
||
| Komponente | Funktion im Code (`module.php`) |
|
||
|---|---|
|
||
| **Datenaufbereitung** | `LadeUndSortiereLeistungen()` decodiert das JSON-Array `LeistungsStufen` und sortiert die Watt-Werte aufsteigend. |
|
||
| **Temperaturberechnung**| `GetCurrentData()` liest den PT1-Fühler aus und berechnet abhängig von `Boilertemperatur_glätten` den gleitenden Durchschnitt. |
|
||
| **Zeitplan & Thermodynamik**| `calculateRequiredHeat()` und `canBoilerReachTemperature()` berechnen über Masse, Temperaturdifferenz und spezifische Wärmekapazität, ob die Restzeit zur Zielerreichung ausreicht. |
|
||
| **Betriebslogik & Limits**| `GetCurrentData($Peak)` wertet Temperaturen, Legionellen-Zähler und Peak-Shaving-Status aus und passt die angebotenen `PowerSteps` an. |
|
||
| **Leistungszuteilung** | `SetAktuelle_Leistung($power)` ermittelt über `GetKontaktIDZuLeistung()` die passende Aktor-ID und schaltet exakt den geforderten Heizstab ein (und alle anderen aus). |
|
||
| **Legionellenschutz** | Erhöht `LegioCounter` zyklisch. Bei Überschreiten definierter Grenzen (z.B. > 69120 Zyklen) wird `MaxTemp` = `LegioTemp` gesetzt. Priorisierter Nachtbetrieb via `ist_nachts()`. |
|
||
| **Taktschutz (Idle)** | `CheckIdle()` und `ProcessIdleCounter()` setzen bei Leistungsänderungen den Timer, um erneute Schaltvorgänge temporär zu blockieren. |
|
||
|
||
---
|
||
|
||
## 8. Zukünftige Erweiterungen
|
||
|
||
- **Temperaturschichtung:** Unterstützung für zwei Fühler (Boiler Oben / Boiler Unten) zur präziseren Erkennung der durchgeladenen Energie. |