Files
Symcon_Belevo_Energiemanage…/README.md
2025-06-12 17:08:46 +02:00

210 lines
8.2 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
- 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]` Prio 1 5 kWh aktuell 2000 W
- Verbraucher B: `[0,500,1500,2500]` Prio 2 0 kWh aktuell 500 W
- Verbraucher C: `[0,500,1500,4000]` Prio 2 10 kWh aktuell 0 W
- Verbraucher D: `[0,500,1200,2500]` Prio 2 15 kWh aktuell 0 W
- Verbraucher E: `[0,200,1500]` Prio 3 15 kWh aktuell 0 W
---
#### Sortierte Stufen-Arrays
**Prio 1**
[A0], [A1000], [A2000]
**Prio 2**
[B0], [C0], [D0],
[B500], [C500], [D500],
[D1200], [B1500], [C1500],
[B2500], [D2500], [C4000]
**Prio 3**
[E0], [E200], [E1500]
---
#### Verteilungsschritte
1. **Delta berechnen**
- Netzbezug = 5000 W
- Sollwert = 0 W
→ Differenz D = 5000 W
2. **Bereits verteilte Leistungen aufsummieren**
- A = 2000 W
- B = 500 W
→ GesamtVerteilbareLeistung = 5000 + 2000 + 500 = **7500 W**
3. **Prio 1**
7500 0 W (A0) = 7500
7500 1000 W (A1000) = 6500
(6500 + 1000 W vorher) 2000 W (A2000) = 5500
→ A erhält **2000 W**
→ Rest: 5500 W
4. **Prio 2**
5500 0 W (B0) = 5500
5500 0 W (C0) = 5500
5500 0 W (D0) = 5500
5500 500 W (B500) = 5000
5000 500 W (C500) = 4500
4500 500 W (D500) = 4000
(4000 + 500 W vorher) 1200 W (D1200) = 3300
(3300 + 500 W vorher) 1500 W (B1500) = 2300
(2300 + 500 W vorher) 1500 W (C1500) = 1300
(1300 + 1500 W vorher) 2500 W (B2500) = 300
(300 + 1500 W vorher) 2500 W (C2500) → negativ → nicht möglich
→ B erhält **2500 W**, C **1500 W**, D **1200 W**
→ Rest: 300 W
5. **Prio 3**
300 0 W (E0) = 300
300 200 W (E200) = 100
→ E erhält **200 W**
→ Verteilung beendet (Rest 100 W ungenutzt)
---
Durch dieses Verfahren Auf­addierung der bereits verteilten Leistungen, Sortierung nach Priorität und Fairness sowie sukzessive Abarbeitung der Stufen-Arrays wird die **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