# Enelix-Verbrauchermodul Heizung x-stufig

Dieses Modul integriert mehrstufige Heizungen als steuerbare Verbraucher in das Belevo Energiemanagement-System (Enelix). Es berechnet dynamisch verfügbare Leistungsstufen, kommuniziert mit dem übergeordneten Manager und schaltet die hinterlegten Heizstufen anhand von Temperatur, 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.
* **Mehrstufige Heizungssteuerung:** Beliebig viele Leistungsstufen können mit Leistung und zugehörigem Schaltkontakt definiert werden.
* **PowerSteps-Generierung:** Das Modul meldet dem Enelix-Manager ein Array an möglichen Leistungsschritten (`PowerSteps`), basierend auf Temperatur, Betriebsmodus und den konfigurierten Heizstufen.
* **Peak-Shaving vs. PV-Überschuss:** Automatische Anpassung der angebotenen `PowerSteps` basierend auf dem vom Manager vorgegebenen Modus (`Is_Peak_Shaving`). Im Peak-Shaving-Modus wird nur die Mindesttemperatur sichergestellt, im PV-Modus wird zusätzlicher Überschuss zur Wärmeerzeugung genutzt.
* **Temperaturüberwachung:** Berücksichtigung von Mindesttemperatur (`Mindesttemperatur`), Maximaltemperatur (`Maximaltemperatur`) und Hysterese zur Vermeidung unnötiger Schaltvorgänge.
* **Temperaturglättung:** Optional kann die gemessene Temperatur über eine PT1-Filterung geglättet werden um Temperatursprünge und Messrauschen zu reduzieren.
* **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.
* Temperaturfühler als Variable in IP-Symcon.
* Schaltbare Kontakte mit aktivierter Aktion für die einzelnen Heizstufen.

---

## 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: **Heizung x-stufig**

### 4.2 Properties

| Name                           | Typ            | Beschreibung                                                     |
| ------------------------------ | -------------- | ---------------------------------------------------------------- |
| **Heizungstemperatur_glätten** | Select         | Aktiviert die PT1-Glättung der gemessenen Temperatur.            |
| **ZeitKonstante**              | NumberSpinner  | Zeitkonstante des PT1-Filters in Sekunden.                       |
| **Interval**                   | NumberSpinner  | Berechnungsintervall in Sekunden.                                |
| **IdleCounterMax**             | NumberSpinner  | Anzahl der Intervall-Zyklen zwischen zwei Leistungsänderungen.   |
| **Hysterese**                  | NumberSpinner  | Temperatur-Hysterese in °C.                                      |
| **LeistungsStufen**            | List           | Liste der verfügbaren Heizstufen mit Leistung und Schaltkontakt. |
| **Heizungsfuehler**            | SelectVariable | Variable mit der aktuellen Temperatur.                           |

---

## 5. Statusvariablen & Profile

| Ident                  | Typ     | Beschreibung                                                                   |
| ---------------------- | ------- | ------------------------------------------------------------------------------ |
| **PowerSteps**         | String  | JSON-Array der dem Manager angebotenen Leistungsschritte.                      |
| **Aktuelle_Leistung**  | Integer | Die aktuell geschaltete Heizleistung.                                          |
| **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 × 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.                             |
| **Heizungstemperatur** | Float   | Aktuelle Heiztemperatur (roh oder geglättet).                                  |
| **Mindesttemperatur**  | Integer | Untere Temperaturgrenze.                                                       |
| **Maximaltemperatur**  | Integer | Obere Temperaturgrenze.                                                        |
| **Disable**            | Boolean | Freigabe des Verbrauchers.                                                     |
| **IdleCounter**        | Integer | Interner Zähler für die Sperrzeit.                                             |
| **Leistung_Delta**     | Integer | Interne Variable für Leistungsdifferenzen.                                     |

---

## 6. WebFront / Bedienung

Die Temperaturgrenzen sowie die Prioritäten werden über folgende Variablen eingestellt:

`Mindesttemperatur` - Temperatur unter welcher die Heizung zwingend freigegeben wird.

`Maximaltemperatur` - Temperatur bis zu welcher PV-Überschüsse zur Wärmeerzeugung genutzt werden dürfen.

`Disable` - Freigabe des Verbrauchers.

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

`Heizungstemperatur` - Aktuelle Temperatur des Speichers oder Boilers.

---

## 7. Mapping auf Code-Komponenten

| Komponente                 | Funktion im Code (`module.php`)                                                                             |
| -------------------------- | ----------------------------------------------------------------------------------------------------------- |
| **Timer-Registrierung**    | `ApplyChanges()` setzt `Timer_Do_UserCalc_Heizung` basierend auf `Interval`.                                |
| **Leistungsstufen laden**  | `LadeUndSortiereLeistungen()` liest und sortiert die konfigurierten Leistungsstufen.                        |
| **PowerSteps Generierung** | `GetCurrentData($Peak)` erstellt die verfügbaren Leistungsstufen abhängig von Temperatur und Betriebsmodus. |
| **Temperaturglättung**     | `GetCurrentData($Peak)` berechnet optional die PT1-gefilterte Temperatur.                                   |
| **Aktive Stufenerkennung** | `IstEineStufeAktiv()` prüft ob aktuell mindestens eine Heizstufe aktiv ist.                                 |
| **Leistungszuteilung**     | `SetAktuelle_Leistung($power)` schaltet den zugehörigen Schaltkontakt der angeforderten Leistung.           |
| **Kontaktzuordnung**       | `GetKontaktIDZuLeistung($leistung)` ermittelt den passenden Schaltkontakt einer Leistungsstufe.             |
| **Idle-Logik**             | `ProcessIdleCounter()` verwaltet die Sperrzeit zwischen Leistungsänderungen.                                |

---

## 8. Zukünftige Erweiterungen


