# Belevo EMS Manager

Dieses Modul ist das Herzstück des Belevo Energiemanagement-Systems. Es steuert in festgelegten Intervallen die Leistungsverteilung auf Ihre Verbraucher-Instanzen, trifft den Solarlade- vs. Peak-Shaving-Entscheid und verteilt entsprechend die Leistungen 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. [Status­variablen & 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`) wird die Methode `DistributeEnergy()` ausgelöst.
- **Mode-Entscheid**  
  Basierend auf der aktuellen Netz-Sollleistung (`Sollleistung_Max`) und der PV-Überschuss-Grenze (`Ueberschussleistung`) wählt der Manager automatisch zwischen  
  - **Solarlade-Mode** (`Is_Peak_Shaving = false`)  
  - **Peak-Shaving-Mode** (`Is_Peak_Shaving = true`)
- **Leistungskonten**  
  Jeder Verbraucher meldet über seine Instanzvariablen (`Power`, `Bezogene_Energie`, `PowerSteps`, `PV_Prio` / `Sperre_Prio`) seinen Bedarf bzw. Reduktions- oder Einspeise-Potential.
- **Priorisierung & Fairness**  
  1. Sortierung der Verbraucher nach Priorität (`PV_Prio` im Solarmode, `Sperre_Prio` im Shaving-Mode)  
  2. Bei Gleichpriorität abwechselnde Zuteilung nach bisher bezogener Energie (`Bezogene_Energie`)
- **Differenz-Verteilung**  
  Die verbleibende Soll–Ist-Differenz D wird in Stufen (je Verbraucher aus `PowerSteps`) abgearbeitet, bis D ≃ 0.
- **Externe Kommunikation**  
  Über die Properties `DatenHoch` und `DatenZuruck` (Variable-IDs) können mehrere Manager zu einem Übergeordneten Hauptmanager zusammengefasst werden (V-ZEV, LEG). 

---

## 2. Voraussetzungen

- IP-Symcon **≥ 8.0**  
- Modul-URL:  
https://git.belevo.ch/dh/Symcon_Belevo_Energiemanagement_testing.git

yaml
Kopieren
Bearbeiten
- Einmalige manuelle Anmeldung aller Verbraucher in `Verbraucher_Liste`

---

## 3. Installation

1. In IP-Symcon **Module Control** öffnen  
2. **Hinzufügen → Git-Repository**  
3. URL eingeben (oben) und **Installieren**  
4. IP-Symcon neu starten  

---

## 4. Instanz anlegen & Konfiguration

### 4.1 Instanz anlegen

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

### 4.2 Properties

| Name                     | Typ             | Beschreibung                                                               |
|--------------------------|-----------------|----------------------------------------------------------------------------|
| **Peakleistung**         | NumberSpinner   | Sollwert-Vorgabe für Peak-Shaving (Watt)                                   |
| **Ueberschussleistung**  | NumberSpinner   | Sollwert-Vorgabe für Solarladen (Watt)                                     |
| **Netzbezug**            | SelectVariable  | Variable mit dem aktuellen Netz-Ist-Wert (Watt)                            |
| **HauptmanagerAktiv**    | CheckBox        | Schaltet die Ünergeordnete Manager-Logik global ein/aus                    |
| **ManagerID**            | NumberSpinner   | Eindeutige ID für externe Manager‐Kommunikation                            |
| **DatenHoch**            | SelectVariable  | Variable, in die Manager-Statistiken oder Statusdaten geschrieben werden   |
| **DatenZuruck**          | SelectVariable  | Variable, aus der Verbraucherdaten importiert werden                       |
| **Interval**             | NumberSpinner   | Intervall für Neuberechnung der Werte (Sekunden)                           |
| **Verbraucher_Liste**    | List            | Auswahl aller Verbraucher-Instanzen, die gesteuert werden sollen           |

---

## 5. Status­variablen & Profile

| Ident                   | Typ        | Profil         | Beschreibung                                                      |
|-------------------------|------------|----------------|-------------------------------------------------------------------|
| **Is_Peak_Shaving**     | Boolean    | —              | Modusanzeige (false = Solarladen, true = Peak-Shaving)            |
| **LetzteBerechnung**    | DateTime   | —              | Zeitpunkt der letzten Zyklus-Ausführung                           |
| **Aktuelle_Differenz**  | Float      | ~Watt~~W~      | Zuletzt berechnete Soll–Ist-Differenz                             |

---

## 6. WebFront / Bedienung

Im WebFront können Sie  
- den **aktuellen Modus** (`Is_Peak_Shaving`) beobachten  

---

## 7. Mapping auf Code-Komponenten

| Komponente                | Modul-Datei                 | Funktion                                                   |
|---------------------------|-----------------------------|------------------------------------------------------------|
| **Timer-Registrierung**   | `Manager/module.php`        | `ApplyChanges()` → `SetTimerInterval('Interval', …)`       |
| **Zyklischer Aufruf**     | `Manager/module.php`        | `ManageTimer()` ruft `DistributeEnergy()` auf              |
| **Mode-Entscheidlogik**   | `Manager/module.php`        | Berechnung:  
```php
$isPeak = $ist > (($peak + $solar) / 2);
$this->SetValue('Is_Peak_Shaving', $isPeak);
```                                                          |
| **Datenzugriff**          | `Manager/module.php`        | `$this->ReadPropertyInteger('Peakleistung')` usw.          |
| **Verbraucher-Schleife**  | `Manager/module.php`        | `$this->ReadPropertyArray('Verbraucher_Liste')`            |
| **Leistungszuteilung**    | `Manager/module.php`        | `DistributeEnergy()` → Round-Robin über `PowerSteps`        |
| **Externe Schnittstelle** | `Manager/module.php`        | Verwendung von `DatenHoch` / `DatenZuruck` Variablen-IDs    |

---

## 8. Zukünftige Erweiterungen

- **Automatische Registrierung** neuer Verbraucher (ohne manuelles Eintragen)  

---