# Enelix-Verbrauchermodul Ansteuerung Askoheat Dieses Modul integriert einen Askoheat-Heizstab als steuerbaren Boiler-Verbraucher in das Belevo Energiemanagement-System (Enelix). Es berechnet dynamisch verfügbare Leistungsstufen, kommuniziert mit dem übergeordneten Manager und steuert die Askoheat-Leistungsvariable anhand von Boilertemperatur, Zeitplan, Legionellenschutz, PV-Überschuss und Peak-Shaving-Anforderungen. --- ## 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 * **Zyklische Steuerung:** In konfigurierbaren Intervallen (`Interval`) berechnet das Modul die aktuell verfügbaren Leistungsschritte und aktualisiert den Status. * **Askoheat-Leistungsansteuerung:** Die vom Manager zugewiesene Leistung wird auf eine Heizstufe von `0` bis `7` umgerechnet und an die konfigurierte Leistungsvariable (`Variable_Leistung`) gesendet. * **PowerSteps-Generierung:** Das Modul meldet dem Enelix-Manager ein Array an möglichen Leistungsschritten (`PowerSteps`), basierend auf Boilertemperatur, Betriebsmodus und Boilergrenzen. * **Peak-Shaving vs. PV-Überschuss:** Im Peak-Shaving-Modus werden Leistungsschritte nur zur Sicherstellung der Mindesttemperatur angeboten. Im PV-Modus können zusätzliche Leistungsschritte bis zur Maximaltemperatur angeboten werden. * **Temperaturüberwachung:** Berücksichtigung von Mindesttemperatur (`Mindesttemperatur`), Maximaltemperatur (`Maximaltemperatur`) und Legionellentemperatur (`Legionellentemperatur`). * **Temperaturglättung:** Optional kann die gemessene Boilertemperatur über eine PT1-Filterung geglättet werden. * **Zeitplan:** Über einen Solltemperatur-Zeitplan kann das Modul prüfen, ob die nächste Zieltemperatur mit der verfügbaren Leistung rechtzeitig erreichbar ist. * **Legionellenschutz:** Wird die Legionellentemperatur längere Zeit nicht erreicht, erhöht das Modul temporär die Temperaturanforderung. * **Idle-Schutz:** Nach einer Leistungsänderung kann eine konfigurierbare Sperrzeit (`IdleCounterMax`) berücksichtigt werden, bevor weitere Leistungsänderungen erfolgen. --- ## 2. Voraussetzungen * IP-Symcon **>= 8.0** * Modul-URL: `https://git.belevo.ch/dh/enelix.git` * Vorhandener und eingerichteter Enelix Manager. * Askoheat- oder Heizstab-Steuerung mit einer schaltbaren Leistungsstufenvariable. * Temperaturfühler als Variable in IP-Symcon. * Aktivierte Aktion auf der Leistungsstufenvariable (`Variable_Leistung`). --- ## 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: **Ansteuerung_Askoheat** ### 4.2 Properties | Name | Typ | Beschreibung | | ---------------------------- | -------------- | ----------------------------------------------------------------------- | | **IdleCounterMax** | NumberSpinner | Anzahl der Intervall-Zyklen zwischen zwei Leistungsänderungen. | | **Interval** | NumberSpinner | Berechnungsintervall in Sekunden. | | **BoilerLeistung** | NumberSpinner | Maximale Askoheat-Leistung in Watt. | | **Variable_Leistung** | SelectVariable | Variable, an welche die Askoheat-Heizstufe `0` bis `7` gesendet wird. | | **Variable_Temperatur_Ist** | SelectVariable | Variable mit der aktuellen Boilertemperatur. | | **Boilertemperatur_glätten** | Select | Aktiviert die PT1-Glättung der gemessenen Boilertemperatur. | | **ZeitKonstante** | NumberSpinner | Zeitkonstante des PT1-Filters in Sekunden. | | **Boilervolumen** | NumberSpinner | Boilervolumen in Litern für die Berechnung der benötigten Wärmemenge. | | **Zeitplan** | List | Liste aus Uhrzeit und Solltemperatur für geplante Boiler-Zielwerte. | --- ## 5. Statusvariablen & Profile | Ident | Typ | Beschreibung | | ------------------------ | ------- | ------------------------------------------------------------------------------ | | **PowerSteps** | String | JSON-Array der dem Manager angebotenen Leistungsschritte. | | **Aktuelle_Leistung** | Integer | Die aktuell geschaltete Soll-Leistung in Watt. | | **Power** | Integer | Die aktuell vom Manager zugewiesene Soll-Leistung. | | **Idle** | Boolean | Status der Sperrzeit (`true` = bereit für neue Werte, `false` = gesperrt). | | **Bezogene_Energie** | Float | Rechnerisch aufsummierte Energie (Leistung x Zeit). | | **PV_Prio** | Integer | Priorität des Verbrauchers für PV-Optimierung, tiefe Nummer = hohe Priorität. | | **Sperre_Prio** | Integer | Priorität des Verbrauchers für Peak-Optimierung, tiefe Nummer = hohe Priorität. | | **Is_Peak_Shaving** | Boolean | Vom Manager übermittelter aktueller Betriebsmodus. | | **Boilertemperatur** | Float | Aktuelle Boilertemperatur, roh oder geglättet. | | **Mindesttemperatur** | Integer | Untere Temperaturgrenze für den Boiler. | | **Maximaltemperatur** | Integer | Obere Temperaturgrenze für PV-Überschussnutzung. | | **Legionellentemperatur**| Integer | Zieltemperatur für den Legionellenschutz. | | **LegioCounter** | Integer | Interner Zähler für die Legionellenschutzlogik. | | **IdleCounter** | Integer | Interner Zähler für die Sperrzeit. | | **Leistung_Delta** | Integer | Interne Variable für Leistungsdifferenzen. | Es werden keine eigenen Variablenprofile angelegt. --- ## 6. WebFront / Bedienung Die Temperaturgrenzen sowie die Prioritäten werden über folgende Variablen eingestellt: `Mindesttemperatur` - Temperatur, unter welcher der Boiler zwingend freigegeben wird. `Maximaltemperatur` - Temperatur, bis zu welcher PV-Überschüsse zur Warmwassererzeugung genutzt werden dürfen. `Legionellentemperatur` - Zieltemperatur für die Legionellenschutzfunktion. `PV_Prio` - Priorität des Verbrauchers für PV-Optimierung, tiefe Nummer = hohe Priorität. `Sperre_Prio` - Priorität des Verbrauchers für Peak-Optimierung, tiefe Nummer = hohe Priorität. `PowerSteps` - Dem Manager angebotene mögliche Leistungsstufen. `Aktuelle_Leistung` - Tatsächlich geschaltete Leistung. `Boilertemperatur` - Aktuelle Temperatur des Boilers. --- ## 7. Mapping auf Code-Komponenten | Komponente | Funktion im Code (`module.php`) | | ----------------------------- | ----------------------------------------------------------------------------------------------- | | **Timer-Registrierung** | `ApplyChanges()` setzt `Timer_Do_UserCalc_Verb` basierend auf `Interval`. | | **Leistungszuteilung** | `SetAktuelle_Leistung($power)` setzt `Power`, `Aktuelle_Leistung`, `Bezogene_Energie` und Idle. | | **Askoheat-Stufenumrechnung** | `SetAktuelle_Leistung($power)` rechnet Watt auf eine Heizstufe von `0` bis `7` um. | | **PowerSteps-Berechnung** | `GetCurrentData($Peak)` erstellt die verfügbaren Leistungsstufen abhängig vom Betriebsmodus. | | **7-Stufen-Berechnung** | `Calc_Seven_Steps($power)` erzeugt Leistungsschritte von `0` bis zur maximalen Boilerleistung. | | **Temperaturglättung** | `GetCurrentData($Peak)` berechnet optional die PT1-gefilterte Boilertemperatur. | | **Zeitplanprüfung** | `getNextTimeAndTemperature()`, `calculateRemainingTime()` und `canBoilerReachTemperature()`. | | **Wärmemengenberechnung** | `calculateRequiredHeat()` berechnet die benötigte Energie für eine Temperaturdifferenz. | | **Legionellenschutz** | `GetCurrentData($Peak)` verwaltet `LegioCounter`, `Maximaltemperatur` und `Mindesttemperatur`. | | **Idle-Logik** | `ProcessIdleCounter()` verwaltet die Sperrzeit zwischen Leistungsänderungen. | | **Nachtprüfung** | `ist_nachts()` prüft den Zeitraum von 22:00 bis 07:00 Uhr. | --- ## 8. Zukünftige Erweiterungen