From ae7f3e4349b149efa59cf6b47f900d67bb9f681e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=A4fliger?= Date: Thu, 12 Jun 2025 15:58:11 +0200 Subject: [PATCH] no message --- HauptManager/README.md | 116 +++++++++++++++++----------- Manager/README.md | 146 ++++++++++++++++++++++++----------- README.md | 171 ++++++++++++++++++++--------------------- 3 files changed, 259 insertions(+), 174 deletions(-) diff --git a/HauptManager/README.md b/HauptManager/README.md index b059e3a..99f5ee7 100644 --- a/HauptManager/README.md +++ b/HauptManager/README.md @@ -1,67 +1,95 @@ -# Manager_1 -Beschreibung des Moduls. +# Belevo EMS Hauptmanager -### Inhaltsverzeichnis +Das **Belevo EMS Hauptmanager**-Modul fasst mehrere untergeordnete **Belevo EMS Manager**-Instanzen zusammen und verteilt die globale verfügbare Leistung direkt auf die einzelnen Verbraucher-Instanzen – nicht nur auf die Manager. Jeder Unter-Manager meldet seine Verbraucher-Daten als JSON, der Hauptmanager berechnet die finalen Zuweisungen und liefert für jeden Unter-Manager ein JSON mit den fertigen Verbraucher-Leistungen zurück. -1. [Funktionsumfang](#1-funktionsumfang) -2. [Voraussetzungen](#2-voraussetzungen) -3. [Software-Installation](#3-software-installation) -4. [Einrichten der Instanzen in IP-Symcon](#4-einrichten-der-instanzen-in-ip-symcon) -5. [Statusvariablen und Profile](#5-statusvariablen-und-profile) -6. [WebFront](#6-webfront) -7. [PHP-Befehlsreferenz](#7-php-befehlsreferenz) +--- -### 1. Funktionsumfang +## Inhaltsverzeichnis -* +1. [Beschreibung](#beschreibung) +2. [Voraussetzungen](#voraussetzungen) +3. [Installation](#installation) +4. [Instanz anlegen & Konfiguration](#instanz-anlegen--konfiguration) +5. [Statusvariablen](#statusvariablen) +6. [Funktionsweise](#funktionsweise) + 1. [Mode-Entscheid](#1-mode-entscheid) + 2. [Datenaggregation](#2-datenaggregation) + 3. [Globale Soll-Ist-Differenz](#3-globale-soll-ist-differenz) + 4. [Verbraucher-Priorisierung](#4-verbraucher-priorisierung) + 5. [Leistungszuweisung](#5-leistungszuweisung) + 6. [Rückgabe an Unter-Manager](#6-rückgabe-an-unter-manager) +7. [Beispiel-Workflow](#beispiel-workflow) +8. [Mapping auf Code-Komponenten](#mapping-auf-code-komponenten) +9. [Zukünftige Erweiterungen](#zukünftige-erweiterungen) +10. [Support](#support) -### 2. Voraussetzungen +--- -- IP-Symcon ab Version 7.1 +## Beschreibung -### 3. Software-Installation +Der Hauptmanager koordiniert beliebig viele Unter-Manager (z. B. Hausanschluss, ZEV-Cluster, LEG-Center). Jeder Unter-Manager sammelt in seinem Zyklus die Daten aller angeschlossenen Verbraucher (JSON-Array mit Feldern wie `deviceID`, `priority`, `requestedLevels`, `currentDrawn`, `receivedTotal` usw.) und stellt dieses JSON in seiner `DatenZurueck`-Variable bereit. Der Hauptmanager -* Über den Module Store das 'Manager_1'-Modul installieren. -* Alternativ über das Module Control folgende URL hinzufügen +1. liest alle `DatenZurueck` JSONs der Unter-Manager ein, +2. entscheidet global über Solarlade- oder Peak-Shaving-Mode, +3. berechnet eine einzige **globale** Soll–Ist-Differenz, +4. führt Priorisierung und Fair-Round-Robin über **alle** Verbraucher durch, +5. verteilt die verfügbare Leistung in Stufen (je Verbraucher aus `PowerSteps`), +6. erzeugt für jeden Unter-Manager ein JSON mit den finalen `assignedLevel`-Werten pro `deviceID`, +7. schreibt diese JSONs in die jeweilige `DatenHoch`-Variable. -### 4. Einrichten der Instanzen in IP-Symcon +Die Unter-Manager übernehmen das JSON und senden die fertigen `assignedLevel`-Werte an ihre lokalen Verbraucher-Instanzen. - Unter 'Instanz hinzufügen' kann das 'Manager_1'-Modul mithilfe des Schnellfilters gefunden werden. - - Weitere Informationen zum Hinzufügen von Instanzen in der [Dokumentation der Instanzen](https://www.symcon.de/service/dokumentation/konzepte/instanzen/#Instanz_hinzufügen) +--- -__Konfigurationsseite__: +## Voraussetzungen -Name | Beschreibung --------- | ------------------ - | - | +- IP-Symcon **≥ 8.0** +- Bereits installierte **Belevo EMS Manager**-Instanzen +- Zugriff auf Git-Repository: +https://git.belevo.ch/dh/Symcon_Belevo_Energiemanagement_testing.git -### 5. Statusvariablen und Profile +yaml +Kopieren +Bearbeiten -Die Statusvariablen/Kategorien werden automatisch angelegt. Das Löschen einzelner kann zu Fehlfunktionen führen. +--- -#### Statusvariablen +## Installation -Name | Typ | Beschreibung ------- | ------- | ------------ - | | - | | +1. In IP-Symcon **Module Control** öffnen +2. **Hinzufügen → Git-Repository** +3. URL eintragen (s. o.) +4. Modul **„Belevo EMS Hauptmanager“** installieren +5. IP-Symcon neu starten -#### Profile +--- -Name | Typ ------- | ------- - | - | +## Instanz anlegen & Konfiguration -### 6. WebFront +1. Rechtsklick auf **Instanzen** → **Instanz hinzufügen** +2. Filter: **Belevo** +3. **„Belevo EMS Hauptmanager“** auswählen und Instanz erstellen -Die Funktionalität, die das Modul im WebFront bietet. +### Properties -### 7. PHP-Befehlsreferenz +| Name | Typ | Beschreibung | +|------------------------|----------------|------------------------------------------------------------------------------| +| **HauptmanagerAktiv** | Boolean | Schaltet globale Verteilungslogik ein/aus | +| **Interval** | Integer (s) | Zyklusintervall für Verteilung und Mode-Entscheid | +| **Sollleistung_Max** | Float (W) | Max. Gesamtleistung, die verteilt werden darf | +| **Ueberschussleistung**| Float (W) | Untergrenze für Solarlade-Mode (z. B. 0 W) | +| **Manager_Liste** | InstanceList | Liste aller untergeordneten Belevo EMS Manager-Instanzen | +| **DatenZurueck** | SelectVariable | Variable-ID (Integer) in jeder Unter-Manager-Instanz, aus der JSON gelesen wird | +| **DatenHoch** | SelectVariable | Variable-ID in jeder Unter-Manager-Instanz, in die JSON geschrieben wird | -`boolean GEF_BeispielFunktion(integer $InstanzID);` -Erklärung der Funktion. +--- -Beispiel: -`GEF_BeispielFunktion(12345);` \ No newline at end of file +## Statusvariablen + +| Ident | Typ | Profil | Beschreibung | +|--------------------------|-----------|--------------|-----------------------------------------------------| +| **LetzteBerechnung** | DateTime | — | Zeitstempel der letzten Verteilung | +| **Globale_Differenz** | Float | ~Watt~~W~ | Zuletzt berechnete Soll–Ist-Differenz global (W) | +| **Anzahl_Manager** | Integer | — | Anzahl aktuell verbundener Unter-Manager | + +--- \ No newline at end of file diff --git a/Manager/README.md b/Manager/README.md index b059e3a..e6e5f34 100644 --- a/Manager/README.md +++ b/Manager/README.md @@ -1,67 +1,125 @@ -# Manager_1 -Beschreibung des Moduls. +# Belevo EMS Manager -### Inhaltsverzeichnis +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. -1. [Funktionsumfang](#1-funktionsumfang) -2. [Voraussetzungen](#2-voraussetzungen) -3. [Software-Installation](#3-software-installation) -4. [Einrichten der Instanzen in IP-Symcon](#4-einrichten-der-instanzen-in-ip-symcon) -5. [Statusvariablen und Profile](#5-statusvariablen-und-profile) -6. [WebFront](#6-webfront) -7. [PHP-Befehlsreferenz](#7-php-befehlsreferenz) +--- -### 1. Funktionsumfang +## 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) -### 2. Voraussetzungen +--- -- IP-Symcon ab Version 7.1 +## 1. Funktionsumfang -### 3. Software-Installation +- **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). -* Über den Module Store das 'Manager_1'-Modul installieren. -* Alternativ über das Module Control folgende URL hinzufügen +--- -### 4. Einrichten der Instanzen in IP-Symcon +## 2. Voraussetzungen - Unter 'Instanz hinzufügen' kann das 'Manager_1'-Modul mithilfe des Schnellfilters gefunden werden. - - Weitere Informationen zum Hinzufügen von Instanzen in der [Dokumentation der Instanzen](https://www.symcon.de/service/dokumentation/konzepte/instanzen/#Instanz_hinzufügen) +- IP-Symcon **≥ 8.0** +- Modul-URL: +https://git.belevo.ch/dh/Symcon_Belevo_Energiemanagement_testing.git -__Konfigurationsseite__: +yaml +Kopieren +Bearbeiten +- Einmalige manuelle Anmeldung aller Verbraucher in `Verbraucher_Liste` -Name | Beschreibung --------- | ------------------ - | - | +--- -### 5. Statusvariablen und Profile +## 3. Installation -Die Statusvariablen/Kategorien werden automatisch angelegt. Das Löschen einzelner kann zu Fehlfunktionen führen. +1. In IP-Symcon **Module Control** öffnen +2. **Hinzufügen → Git-Repository** +3. URL eingeben (oben) und **Installieren** +4. IP-Symcon neu starten -#### Statusvariablen +--- -Name | Typ | Beschreibung ------- | ------- | ------------ - | | - | | +## 4. Instanz anlegen & Konfiguration -#### Profile +### 4.1 Instanz anlegen -Name | Typ ------- | ------- - | - | +- Rechtsklick **Instanzen** → **Instanz hinzufügen** +- Filter: **Belevo** +- Auswahl: **Manager** -### 6. WebFront +### 4.2 Properties -Die Funktionalität, die das Modul im WebFront bietet. +| 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 | -### 7. PHP-Befehlsreferenz +--- -`boolean GEF_BeispielFunktion(integer $InstanzID);` -Erklärung der Funktion. +## 5. Status­variablen & Profile -Beispiel: -`GEF_BeispielFunktion(12345);` \ No newline at end of file +| 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) + +--- \ No newline at end of file diff --git a/README.md b/README.md index 0acc70c..43fde45 100644 --- a/README.md +++ b/README.md @@ -1,58 +1,66 @@ # Symcon Belevo Energiemanagement Modul -Dieses Modul implementiert das neuartige Energiemanagementsystem von Belevo in IP-Symcon. Es verteilt elektrische Leistung auf mehrere Verbraucher (z. B. Elektroauto-Ladestationen, Boiler, Speicher) dynamisch nach Priorität und Fairness und unterstützt sowohl Solarlade- als auch Peak-Shaving-Betrieb. +Dieses Modul implementiert das neuartige Energiemanagementsystem der Belevo AG in IP-Symcon. +Es verteilt elektrische Leistung auf mehrere Verbraucher (z. B. Elektroauto-Ladestationen, Boiler, Speicher) dynamisch nach Priorität und Fairness. Unterstützt werden: + +- **Einzel­haus-Anschlüsse** +- **ZEV/V-ZEV-Verbundsysteme** +- **Lasten­management-Gemeinschaften (LEG)** --- -## Übersicht +## Besonderheiten & Vorteile -- **Manager-Instanz** - Zentrale Logik für Soll-Ist-Vergleich, Priorisierung und Leistungsverteilung. -- **Verbraucher-Instanzen** - Jedes ansteuerbare Gerät (Ladestation, Boiler etc.) ist eine eigene Instanz, die ihre Leistungswünsche über standardisierte Variablen meldet. +- **Vollständige Skalierbarkeit** von Einfamilienhaus über ZEV/V-ZEV bis LEG +- **Standardisierte Schnittstelle** für Manager ↔ Verbraucher (kein ständiges Nachkonfigurieren) +- **Fairness** bei gleicher Priorität durch Round-Robin-Verteilung der Leistungsschritte +- **Bidirektionaler Betrieb** (z. B. Batteriespeicher, bidirektionale Ladestationen) +- **Dynamische Tarif­gestaltung** über Prioritätsklassen +- **Automatisches Peak-Shaving** ohne teure Netzspitzen +- **Einfaches Hinzufügen/Entfernen** von Verbrauchern (aktuell manuell, später automatisch möglich) --- ## Voraussetzungen - IP-Symcon **≥ 8.0** -- Zugriff auf Git-Repository +- Zugriff auf das Git-Repository --- ## Installation -1. In IP-Symcon → **Module Control** öffnen. -2. Auf **“Hinzufügen”** → **“Git-Repository”** klicken. +1. In IP-Symcon **Module Control** öffnen +2. **Hinzufügen → Git-Repository** 3. URL eintragen: https://git.belevo.ch/dh/Symcon_Belevo_Energiemanagement_testing.git -4. Modul installieren und neu laden. +4. Modul installieren und IP-Symcon neu starten --- ## 1. Manager-Instanz anlegen 1. Rechtsklick auf **Instanzen** → **Instanz hinzufügen** -2. Filter: „Belevo EMS Manager“ -3. Instanz erstellen und aufrufen +2. Filter: **Belevo** +3. **„Manager“** auswählen und Instanz erstellen ### Manager-Eigenschaften -| Property | Typ | Beschreibung | -|-----------------------------------|-----------|--------------------------------------------------------------------------------------------------| -| **Zeit_Zwischen_Zustandswechseln**| Integer | Dauer (Sekunden) zwischen zwei Zustandswechsel-Zyklen (Default: 5 s) | -| **Interval** | Integer | Haupt-Timer-Intervall zur Neuberechnung und Leistungsverteilung (Sekunden) | -| **Sollleistung_Max** | Float | Maximale Gesamtleistung am Netzanschluss (Watt) | -| **Ueberschussleistung** | Float | Untergrenze (Watt) für PV-Überschuss-Mode (→ Solarladen) | -| **HauptmanagerAktiv** | Boolean | Schaltet die Manager-Logik global ein/aus | -| **Verbraucher_Liste** | InstanceList | Liste aller Verbraucher-Instanzen, die der Manager steuern soll | +| Property | Typ | Beschreibung | +|------------------------------------|-----------------|------------------------------------------------------------------------------| +| **Zeit_Zwischen_Zustandswechseln** | Integer (Sek.) | Dauer zwischen zwei Zyklen (Default: 5 s) | +| **Interval** | Integer (Sek.) | Haupt-Timerintervall zur Neuberechnung | +| **Sollleistung_Max** | Float (Watt) | Maximale erlaubte Gesamtleistung am Netzanschluss | +| **Ueberschussleistung** | Float (Watt) | Untergrenze für Solarlade-Mode (z. B. 0 W) | +| **HauptmanagerAktiv** | Boolean | Schaltet die gesamte Manager-Logik ein/aus | +| **Verbraucher_Liste** | InstanceList | Liste aller Verbraucher-Instanzen, die der Manager steuern soll | ### Manager-Statusvariablen -| Ident | Typ | Beschreibung | -|------------------------|---------|-------------------------------------------------------------------| -| **Is_Peak_Shaving** | Boolean | `false` = Solarladen-Mode; `true` = Peak-Shaving-Mode | -| **LetzteBerechnung** | DateTime| Zeitstempel der letzten Zyklus-Ausführung | -| **Aktuelle_Differenz** | Float | Letzte Soll-Ist-Leistungsdifferenz (Watt) | +| Ident | Typ | Beschreibung | +|-------------------------|-----------|------------------------------------------------------------------------------| +| **Is_Peak_Shaving** | Boolean | `true` = Peak-Shaving-Mode; `false` = Solarlade-Mode | +| **LetzteBerechnung** | DateTime | Zeitstempel der letzten Ausführung | +| **Aktuelle_Differenz** | Float (W) | Zuletzt berechnete Soll–Ist-Differenz | --- @@ -61,82 +69,73 @@ Dieses Modul implementiert das neuartige Energiemanagementsystem von Belevo in I Für jedes zu steuernde Gerät: 1. Rechtsklick auf **Instanzen** → **Instanz hinzufügen** -2. Filter: „Belevo EMS Verbraucher“ -3. Instanz erstellen und aufrufen +2. Filter: **Belevo** +3. **„Belevo EMS Verbraucher“** auswählen und Instanz erstellen ### Verbraucher-Eigenschaften -| Property | Typ | Beschreibung | -|-----------------------|-----------|---------------------------------------------------------------------------| -| **PV_Prio** | Integer | Prioritätsstufe beim Solarladen (niedriger Wert = höhere Priorität) | -| **Sperre_Prio** | Integer | Prioritätsstufe im Peak-Shaving (niedriger Wert = höhere Priorität) | -| **PowerSteps** | String | JSON-Array möglicher Leistungsstufen (z. B. `[2000,4000,6000]` in Watt) | +| Property | Typ | Beschreibung | +|-----------------|------------|----------------------------------------------------------------------------| +| **PV_Prio** | Integer | Priorität im Solarlade-Mode (niedriger = höhere Priorität) | +| **Sperre_Prio** | Integer | Priorität im Peak-Shaving-Mode (niedriger = höhere Priorität) | +| **PowerSteps** | String | JSON-Array möglicher Leistungsstufen in Watt, z. B. `[0,1000,2000]` | -### Verbraucher-Variablen (automatisch angelegt) +### Automatisch angelegte Variablen -| Ident | Typ | Profil | Beschreibung | -|-----------------------|---------|----------|------------------------------------------------------------------------------| -| **Power** | Float | ~Watt~~W~| Aktuell angeforderte Leistung (W) | -| **Aktuelle_Leistung** | Float | ~Watt~~W~| Vom Manager zugewiesene Leistung im aktuellen Zyklus (W) | -| **Bezogene_Energie** | Float | Wh | Kumulierte Energieabnahme seit Zyklusstart (Wh) | -| **Leistung_Delta** | Float | ~Watt~~W~| Differenz zwischen `Power` und `Aktuelle_Leistung` (W) | -| **Idle** | Boolean | — | `true`, wenn keine Anpassung erforderlich war | +| Ident | Typ | Profil | Beschreibung | +|----------------------|----------|--------------|-----------------------------------------------------------------------| +| **Power** | Float | ~Watt~~W~ | Aktuell angeforderte Leistung (W) | +| **Aktuelle_Leistung**| Float | ~Watt~~W~ | Vom Manager zugewiesene Leistung im aktuellen Zyklus (W) | +| **Bezogene_Energie** | Float | Wh | Kumulierte Energieabnahme seit Zyklusstart (Wh) | +| **Leistung_Delta** | Float | ~Watt~~W~ | Differenz zwischen `Power` und `Aktuelle_Leistung` (W) | +| **Idle** | Boolean | — | `true`, wenn Verbraucher gerade keine Änderung benötigt | --- ## 3. Funktionsweise -1. **Zyklischer Aufruf** -— Der Manager-Timer (Interval s) startet den Verteilungszyklus. -2. **Soll-Ist-Berechnung** -— Manager liest `Sollleistung_Max` und summiert alle `Aktuelle_Leistung` der Verbraucher → Istwert I. -— D = Soll – I → erforderliche Zuteilung oder Reduktion. -3. **Modus-Entscheid** -- **Solarladen (Is_Peak_Shaving = false):** - • Füllt PV-Überschuss auf bis `Ueberschussleistung`. - • Nutzt `PV_Prio` für Priorisierung. -- **Peak-Shaving (Is_Peak_Shaving = true):** - • D > 0 → reduziert Verbraucher-Leistung nach `Sperre_Prio`. -4. **Priorisierung & Fairness** -- Sortierung nach Priorität (niedrigerer Wert zuerst). -- Bei Gleichpriorität: Verbraucher mit geringerem `Bezogene_Energie` zuerst. -5. **Leistungszuweisung** -- Jeder Verbraucher erhält seine nächsthöhere Stufe aus `PowerSteps`, die ≤ D ist. -- `Aktuelle_Leistung` wird gesetzt, `Bezogene_Energie` und `Leistung_Delta` aktualisiert. -6. **Kommunikation** -- Manager schreibt neue `Aktuelle_Leistung` direkt in die Verbraucher-Variable. -- Verbraucher regeln ihre Hardware (z. B. Ladestrom) entsprechend. +### 3.1 Mode-Entscheid + +- In jedem Zyklus liest der Manager den **aktuellen Ist-Netzanschlusswert** (Summe aller `Aktuelle_Leistung`). +- Er berechnet den **Schwellwert** als +Threshold = (Sollleistung_Max + Ueberschussleistung) / 2 + +markdown +Kopieren +Bearbeiten +- Ist der Ist-Wert **> Threshold**, setzt er **Peak-Shaving** (`Is_Peak_Shaving = true`), sonst **Solarladen** (`false`). +- Diese Boolean teilt er allen Verbrauchern mit, damit sie ihre `PowerSteps`-Arrays entsprechend vorbereiten. + +### 3.2 Soll–Ist-Berechnung + +- Differenz **D** = `Sollleistung_Max` − Ist-Wert +- **D > 0**: Bedarf → Solarlade-Zuteilung +- **D < 0**: Überschuss → Peak-Shaving-Reduktion + +### 3.3 Leistungszuweisung + +- Für jeden Verbraucher wählt der Manager die **höchste** Stufe aus `PowerSteps`, die die verbleibende Differenz |D| **nicht überschreitet**. +- Er durchläuft die Verbraucher nacheinander (Round-Robin), bis |D| annähernd erschöpft ist. + +**Beispiel:** +- Verbraucher A: `[0,1000,2000]` +- Verbraucher B: `[0,500,1500,2000]` +- Differenz D = 3000 W + +1. A erhält 1000 W → Rest 2000 W +2. B erhält 1500 W → Rest 500 W +3. Nächster Zyklus oder weitere Verteilschritte mit Rest 500 W --- -## 4. Beispiel-Workflow +## 4. Registrierung der Verbraucher -1. **Manager**: -- `Sollleistung_Max` = 11 000 W -- `Ueberschussleistung` = 0 W -- `Interval` = 5 s - -2. **Verbraucher A (E-Auto):** -- `PV_Prio` = 2, `Sperre_Prio` = 3 -- `PowerSteps` = `[6000, 4000, 2000]` - -3. **Verbraucher B (Boiler):** -- `PV_Prio` = 3, `Sperre_Prio` = 2 -- `PowerSteps` = `[6000]` - -| Zyklus | Modus | Reihenfolge | Zuteilung A (W) | Zuteilung B (W) | -|--------|----------------|----------------|-----------------|-----------------| -| 1 | Solarladen | A → B | 6000 | 4000 | -| 2 | Solarladen | A → B | 6000 | 4000 | -| … | … | … | … | … | -| Peak | Peak-Shaving | B → A | −6000 (Reduktion)| −4000 (Reduktion)| +- **Aktuell müssen alle Verbraucher manuell** in `Verbraucher_Liste` eingetragen werden. +- **Zukünftige Versionen** werden eine automatische Geräteerkennung unterstützen, so dass neue Verbraucher ohne Konfigurationsaufwand hinzukommen können. --- -## 5. Support & Feedback +## 5. Support & Entwicklung -Bei Problemen oder Feature-Wünschen öffne bitte ein Issue im Git-Repository oder kontaktiere das Entwickler-Team. - ---- - -© 2025 Belevo AG +- **Issues & Feature-Requests** bitte im Git-Repository eröffnen. +- **Entwickler**: Belevo AG