7.0 KiB
7.0 KiB
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
- Funktionsumfang
- Voraussetzungen
- Installation
- Instanz anlegen & Konfiguration
- Statusvariablen & Profile
- WebFront / Bedienung
- Mapping auf Code-Komponenten
- 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
Maximaltemperaturmit überschüssiger PV-Leistung. Fällt die Temperatur unterMindesttemperatur, wird mit maximaler Leistung geheizt.
- Peak-Shaving: Heizen nur bei Unterschreitung der
- Legionellenschutz: Ein interner Zähler (
LegioCounter) überwacht die Zeit seit der letzten Hochtemperaturphase. Wird ein Grenzwert überschritten, wird dieMaximaltemperatur(bzw. später auch dieMindesttemperaturim Nachtbetrieb) automatisch auf dieLegionellentemperaturangehoben. - 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
- In IP-Symcon Module Control öffnen.
- Hinzufügen → Git-Repository.
- URL eingeben und Installieren.
- 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,MaximaltemperaturundLegionellentemperatur. - Ü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.