# Enelix Manager

Dieses Modul steuert in festgelegten Intervallen die Leistungsverteilung auf Verbraucher-Instanzen, wählt zwischen Solarladen und Peak-Shaving und verteilt die Leistung in definierten Schritten an die Verbraucher. 

---

## Inhaltsverzeichnis

1. [Funktionsumfang](#1-funktionsumfang)
2. [Voraussetzungen](#2-voraussetzungen)
3. [Installation](#3-installation)
4. [Instanz anlegen & Konfiguration](#4-instanz-anlegen--konfiguration)
5. [Statusvariablen](#5-statusvariablen)
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`) wird die Energieverteilung über den Timer `Timer_DistributeEnergy` ausgelöst.
- **Betriebsmodus:** Automatische oder statische Umschaltung zwischen Solarladen (`Is_Peak_Shaving = false`) und Peak-Shaving (`Is_Peak_Shaving = true`), abhängig vom `Netzbezug` und den parametrierten Schwellwerten.
- **Priorisierung:** Sortierung der Verbraucher nach `PV_Prio` (Solarmodus) oder `Sperre_Prio` (Peak-Shaving). Bei gleicher Priorität entscheidet die `Bezogene_Energie`.
- **Energieverteilung:** Die verbleibende Leistung wird basierend auf den `PowerSteps` der Verbraucher abgearbeitet und zugeteilt.
- **Externe Steuerung (Hauptmanager):** Integration in übergeordnete Managementsysteme (z.B. V-ZEV, LEG) über die Variablen `DatenHoch` und `DatenZuruck`, Funktion ist in der aktuellen Version erst beschränkt verfügbar.

---

## 2. Voraussetzungen

- IP-Symcon **≥ 8.0** 
- Modul-URL: `https://git.belevo.ch/dh/enelix.git`
- Zuweisung der Verbraucher-Instanzen in der `Verbraucher_Liste`

---

## 3. Installation

1. In IP-Symcon **Module Control** öffnen  
2. **Hinzufügen → Git-Repository**  
3. URL eintragen:   https://git.belevo.ch/dh/enelix.git
4. Modul installieren

---

## 4. Instanz anlegen & Konfiguration

### 4.1 Instanz anlegen

- Rechtsklick **Instanzen** → **Instanz hinzufügen** 
- Filter: **Belevo** 
- Auswahl: **Manager** 

### 4.2 Properties

| Name | Typ | Beschreibung |
|---|---|---|
| **Peakleistung** | Integer | Sollwert-Vorgabe für Peak-Shaving (Watt) |
| **Ueberschussleistung** | Integer | Sollwert-Vorgabe für Solarladen (Watt) |
| **Netzbezug** | Integer | Objekt-ID der Variable mit dem aktuellen Netzbezug |
| **Verbraucher_Liste** | String | JSON-Liste aller zu steuernden Verbraucher-Instanzen |
| **UmschaltpunktStatisch** | Boolean | Aktiviert statische Umschaltpunkte (Ignoriert dynamische Mittelwertberechnung) |
| **Umschalt_Solarladen** | Integer | Schwellwert für den Wechsel in den Solarladen-Modus (bei statischer Umschaltung) |
| **Umschalt_Peakshaving** | Integer | Schwellwert für den Wechsel in den Peak-Shaving-Modus (bei statischer Umschaltung) |
| **HauptmanagerAktiv** | Boolean | Aktiviert die externe Steuerung durch einen übergeordneten Manager |
| **ManagerID** | Integer | Eindeutige ID für die externe Manager-Kommunikation |
| **DatenHoch** | Integer | Objekt-ID der Variable zum Senden von JSON-Daten an den Hauptmanager |
| **DatenZuruck** | Integer | Objekt-ID der Variable zum Empfangen von JSON-Daten vom Hauptmanager |
| **Interval** | Integer | Berechnungsintervall für den Timer und die neuverteilung der Leistungsdaten in Sekunden |

---

## 5. Statusvariablen

| Ident | Typ | Beschreibung |
|---|---|---|
| **Is_Peak_Shaving** | Boolean | Modusanzeige (`false` = Solarladen, `true` = Peak-Shaving) |

---

## 6. WebFront / Bedienung

Dem Managermodul müssen bei Erstinbetriebnahme eine Variable mit dem zu regelnden Netzbezug sowie die zu Steuernden Verbraucher konfiguriert werden. Anschliessend läuft das Modul autononom gemäss [Funktionsumfang](#1-funktionsumfang). Einzig wird im WebFront der aktuelle Modus über die Statusvariable `Is_Peak_Shaving` visualisiert.

---

## 7. Mapping auf Code-Komponenten

| Komponente | Funktion im Code (`module.php`) |
|---|---|
| **Timer-Registrierung** | `ApplyChanges()` setzt das Intervall für `Timer_DistributeEnergy`. |
| **Zyklischer Aufruf** | Timer löst `RequestAction()` mit dem Ident `DistributeEnergy` aus. |
| **Mode-Entscheidlogik** | Dynamisch: Abgleich von `$Netzbezug` mit Mittelwert aus Peak und Überschuss. <br>Statisch: Schwellwertprüfung über Properties `Umschalt_Solarladen` / `Umschalt_Peakshaving`. |
| **Leistungszuteilung** | Funktion `DistributeEnergy()` berechnet die Schritte und steuert Verbraucher via `IPS_RequestAction(..., "SetAktuelle_Leistung", ...)`. |
| **Externe Kommunikation** | Funktion `DistributeEnergy_Extern()` liest/schreibt Arrays über die festgelegten Variablen-IDs. |

---

## 8. Zukünftige Erweiterungen

- **Automatische Registrierung** neuer Verbraucher (ohne manuelles Eintragen, Eingetragen auf Verbruacherseite)