# Enelix-Verbrauchermodul Batterie

Dieses Modul integriert Batteriespeicher als steuerbare Verbraucher/Erzeuger in das Belevo Energiemanagement-System (Enelix). Es berechnet dynamisch Lade- und Entladevorgaben, kommuniziert mit dem übergeordneten Manager und steuert native Wechselrichter-Schnittstellen.

---

## 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.
- **Hersteller-Integration:** Native Steuerlogik für spezifische Wechselrichter (Goodwe, Solaredge, Sig Energy). Die Modus-Umschaltung (Laden/Entladen/Standby) erfolgt automatisch durch setzen der passenden Hersteller-Codes.
- **PowerSteps-Generierung:** Das Modul meldet dem Enelix-Manager ein Array an möglichen Leistungsschritten (`PowerSteps`), berechnet aus der maximalen Lade- (`MaxBatterieleistung`) und Entladeleistung (`MaxNachladen`). Dies geschieht in 250 Watt schritten, wobei zur feineren Regelung um den aktuellen Sollwert noch 50W-Schritte verteilt werden.
- **Peak-Shaving vs. PV-Überschuss:** Automatische Anpassung der angebotenen `PowerSteps` basierend auf dem vom Manager vorgegebenen Modus (`Is_Peak_Shaving`). Im Peak-Shaving-Modus arbeitet die Batterie im unteren SoC-Bereich um lastspitzen zu brechen, im Solarmodus im oberen Bereich um den Eigenverbruach zu optimieren.
- **Peak-Shaving-Reserve:** Berücksichtigung des Ladezustands (SoC). Eine einstellbare Reserve (`AufdasNachladen`) wird für das Peak-Shaving vorgehalten. Bei Unterschreitung der Minimalkapazität (`MinimumEntladen`) wird die Entladung blockiert.

---

## 2. Voraussetzungen

- IP-Symcon **≥ 8.0**
- Modul-URL: `https://git.belevo.ch/dh/enelix.git`
- Vorhandener und eingerichteter Enelix Manager.
- Anbindung der Wechselrichter-Variablen (Netzbezug, SoC, Batterieleistung) in IP-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: **Batterie (Verbraucher)**

### 4.2 Properties

| Name | Typ | Beschreibung |
|---|---|---|
| **IdleCounterMax** | NumberSpinner | Anzahl der Intervall-Zyklen zwischen zwei Leistungsänderungen. |
| **Interval** | NumberSpinner | Berechnungsintervall in Sekunden. |
| **Batterietyp** | Select | Wechselrichter-Typ (0: Unabhängig, 1: Goodwe, 2: Solaredge, 3: Sig Energy). |
| **MaxBatterieleistung** | SelectVariable | Maximale Ladeleistung der Batterie (Watt). |
| **MaxNachladen** | SelectVariable | Maximalen Entladeleistung der Batterie (Watt). |
| **AufdasNachladen** | NumberSpinner | Nachladekapazität (Reserve für Peak-Shaving in %). |
| **MinimumEntladen** | NumberSpinner | Minimale Kapazität (Tiefenentladeschutz in %). |
| **Batteriemanagement** | Select | Steuerung der Batterie durch (1: Wechselrichter, 2: Manager Enelix). |
| **Batterieladezustand**| SelectVariable | Variable mit dem aktuellen Batterieladestand (SoC in %). |
| **Netzbezug** | SelectVariable | Variable mit dem zu regelnden Netzbezug (identisch mit Manager). |
| **AktuelleBatterieleistung**| SelectVariable| Variable mit der aktuellen Ist-Leistung der Batterie. |

---

## 5. Statusvariablen & Profile

| Ident | Typ | Beschreibung |
|---|---|---|
| **PowerSteps** | String | JSON-Array der dem Manager angebotenen Leistungsschritte. |
| **Aktuelle_Leistung** | Integer | Die aktuell von der Batterie erbrachte Leistung. |
| **Power** | Integer | Interner  | Die aktuell vom Manager zugewiesene Soll-Leistung. |
| **Laden_Entladen** | Integer | Herstellerspezifischer Code zum Einstellen des Lademodi (z.B. Goodwe: 11=Laden, 12=Entladen). |
| **Idle** | Boolean | Status der Sperrzeit (`true` = bereit für neue Werte, `false` = gesperrt). |
| **Hysterese** | Boolean | Zeigt an, ob die Batterie aktuell in Hystere nachregelt. |
| **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 |
| **Bezogene_Energie** | Float | Rechnerisch aufsummierte Energie (Leistung × Zeit). |
| **Is_Peak_Shaving** | Boolean | Vom Manager übermittelter aktueller Betriebsmodus. |
| **Goodwe_EntLadeleistung** | Interner | Zusatzvariable für Steuerung der Sollleistung bei Goodwespeichern |
| **Ladeleistung** | Interner | Sollladelesistung Speicher |
| **Entladeleistung** | Interner | Sollentladeleistung Speicher |

*(Die Variabeln `Goodwe_EntLadeleistung`, `Ladeleistung` oder `Entladeleistung` werden in abhängigkeit von `Batterietyp` angelegt).*

---

## 6. WebFront / Bedienung

Die Anbindung der Batterie sowie die regelung der Prioritäten wird über folgende Variabeln eingestellt:
`Laden_Entladen`- Signalisation ob Speicher laden soll oder entladen (Herstellerunabhängig 0 = Laden, 1 = Entladen, ansonsten Herstellerabhängige Werte)
`Ladeleistung` - Soll Ladeleistung Speicher
`Entladeleistung` - Soll Entladeleistung Speicher
`Goodwe_EntLadeleistung`- Zusatzvariable Entladeleistung für Goodwe-Speicher

`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

## 7. Mapping auf Code-Komponenten

| Komponente | Funktion im Code (`module.php`) |
|---|---|
| **Timer-Registrierung** | `ApplyChanges()` setzt `Timer_Do_UserCalc_Battery` basierend auf `Interval`. Erstellt die passenden Variabeln auf basis des Batterietyps |
| **PowerSteps Generierung**| `GeneratePowerSteps()` baut das Raster aus zulässigen Werten basierend auf MaxLaden/Entladen in 250er/50er Schritten auf. |
| **Betriebslogik & Limits**| `GetCurrentData($Peak)` filtert die `PowerSteps` je nach SoC, Hysterese und Peak-Modus. |
| **Leistungszuteilung** | `SetAktuelle_Leistung($power)` übersetzt die vom Manager geforderte Leistung in herstellerspezifische Variablen und Steuercodes. |


---

## 8. Zukünftige Erweiterungen

- **Wetter- und Prognosedaten:** Dynamische Anpassung des Parameters `AufdasNachladen` basierend auf dem zu erwartenden Solarertrag, Anpassung des Parameters auf Monate umd Peak auf Monatsende zu optimieren.
