Files
Symcon_Belevo_Energiemanage…/README.md
T
2025-06-12 16:45:40 +02:00

215 lines
8.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Symcon Belevo Energiemanagement Modul
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)**
---
## Besonderheiten & Vorteile
- **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 das Git-Repository
---
## Installation
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 IP-Symcon neu starten
---
## 1. Manager-Instanz anlegen
1. Rechtsklick auf **Instanzen****Instanz hinzufügen**
2. Filter: **Belevo**
3. **„Manager“** auswählen und Instanz erstellen
### Manager-Eigenschaften
| 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 | `true` = Peak-Shaving-Mode; `false` = Solarlade-Mode |
| **LetzteBerechnung** | DateTime | Zeitstempel der letzten Ausführung |
| **Aktuelle_Differenz** | Float (W) | Zuletzt berechnete SollIst-Differenz |
---
## 2. Verbraucher-Instanzen anlegen
Für jedes zu steuernde Gerät:
1. Rechtsklick auf **Instanzen****Instanz hinzufügen**
2. Filter: **Belevo**
3. **„Belevo EMS Verbraucher“** auswählen und Instanz erstellen
### Verbraucher-Eigenschaften
| 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]` |
### 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 Verbraucher gerade keine Änderung benötigt |
---
## 3. Funktionsweise
### 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 SollIst-Berechnung
- Differenz **D** = `Sollleistung_Max` Ist-Wert
- **D > 0**: Bedarf → Solarlade-Zuteilung
- **D < 0**: Überschuss → Peak-Shaving-Reduktion
### 3.3 Leistungszuweisung
- Zunächst ermittelt der Manager die **SollIst-Differenz**
```text
D = Sollleistung_Max Ist-Netzbezug
Dann addiert er alle aktuell zugeteilten Verbraucher­leistungen zum Sollwert:
text
Kopieren
Bearbeiten
GesamtVerteilbareLeistung = D + ∑(bereits zugeteilte Leistungen)
Die Verbraucher werden nach Priorität und Fairness sortiert:
Aufsteigend nach PV_Prio (niedrig = höher)
Bei gleicher Priorität Round-Robin anhand Bezogene_Energie (weniger Energie → zuerst)
Innerhalb jeder Prioritätsstufe wird ein „Stufen-Array“ aufgebaut, das alle möglichen Leistungsstufen aller Verbraucher enthält, sortiert nach der Reihenfolge, in der sie zugeteilt werden dürfen.
Beispiel
Gegeben
Sollleistung_Max = 0 W, Ist-Netzbezug = 5000 W → D = 5000 W
Bereits zugeteilte Leistungen: A=2000 W, B=500 W → GesamtVerteilbareLeistung = 5000 + 2000 + 500 = 7500 W
Verbraucher
yaml
Kopieren
Bearbeiten
A: [0,1000,2000], Prio 1, Bezogene_Energie 5 kWh, aktuell 2000 W
B: [0,500,1500,2500], Prio 2, Bezogene_Energie 0 kWh, aktuell 500 W
C: [0,500,1500,4000], Prio 2, Bezogene_Energie 10 kWh, aktuell 0 W
D: [0,500,1200,2500], Prio 2, Bezogene_Energie 15 kWh, aktuell 0 W
E: [0,200,1500], Prio 3, Bezogene_Energie 15 kWh, aktuell 0 W
Stufen-Array pro Prio
yaml
Kopieren
Bearbeiten
Prio 1: A0, A1000, A2000
Prio 2: B0, C0, D0, B500, C500, D500, D1200, B1500, C1500, B2500, D2500, C4000
Prio 3: E0, E200, E1500
Verteilung
Prio 1
7500 W 0 W (A0) = 7500 W
7500 W 1000 W (A1000) = 6500 W
6500 W 2000 W (A2000) = 4500 W → A erhält 2000 W
Prio 2
4500 W 0 W (B0) = 4500 W
4500 W 0 W (C0) = 4500 W
4500 W 0 W (D0) = 4500 W
4500 W 500 W (B500) = 4000 W
4000 W 500 W (C500) = 3500 W
3500 W 500 W (D500) = 3000 W
3000 W 1200 W (D1200)= 1800 W
1800 W 1500 W (B1500)= 300 W
300 W 1500 W (C1500)= (negativ) → nicht möglich
→ B erhält 2500 W, C 1500 W, D 1200 W
Prio 3
Rest 300 W
300 W 0 W (E0) = 300 W
300 W 200 W (E200) = 100 W
→ E erhält 200 W (Rest 100 W ungenutzt)
Fazit: Durch Aufaddieren der bereits verteilten Leistungen vor der Neuverteilung und das schrittweise Abarbeiten der Stufen-Arrays in Prioritäts- und Fairness-Reihenfolge wird die verfügbare Gesamtleistung optimal und gerecht auf alle Verbraucher verteilt.
---
## 4. Registrierung der Verbraucher
- **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 & Entwicklung
- **Issues & Feature-Requests** bitte im Git-Repository eröffnen.
- **Entwickler**: Belevo AG