# 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.