diff --git a/MQTTPublishHelper/README.md b/MQTTPublishHelper/README.md deleted file mode 100644 index b19ff47..0000000 --- a/MQTTPublishHelper/README.md +++ /dev/null @@ -1,143 +0,0 @@ -# Enelix - -Diese Modulbibliothek implementiert das Energiemanagementsystem der Belevo AG (Enelix) 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/Enelix.git -4. Modul installieren -5. Ein Managermodul sowie die gewünschen Verbrauchermodule erstellen und konfigurieren. - ---- - -## 1 Funktionsweise - -### 1.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. - -### 1.2 Soll–Ist-Berechnung - -- Differenz **D** = `Sollleistung_Max` − Ist-Wert -- **D > 0**: Bedarf → Solarlade-Zuteilung -- **D < 0**: Überschuss → Peak-Shaving-Reduktion - -### 1.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. - - -## Für das oben beschriebene Verteilverfahren ist ein Patentanmeldeverfahren für den Europäischen Raum im Gange (25207583.3 - 1002) -## Anmelder/Patentinhaber ist die Belevo AG - diff --git a/MQTTPublishHelper/form.json b/MQTTPublishHelper/form.json deleted file mode 100644 index 839399e..0000000 --- a/MQTTPublishHelper/form.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "elements": [ -{ - "type": "Label", - "caption": "Dieses Modul published MQTT-Nachrichten für das andere Modul." -} - ] -} \ No newline at end of file diff --git a/MQTTPublishHelper/module.json b/MQTTPublishHelper/module.json deleted file mode 100644 index c4ac1fa..0000000 --- a/MQTTPublishHelper/module.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": "{34978110-F1AA-5FCC-F692-766359C13A57}", - "name": "MQTTPublishHelper", - "type": 3, - "vendor": "Belevo AG", - "aliases": [ - "MQTT Publish Helper" - ], - "parentRequirements": [ - "{043EA491-0325-4ADD-8FC2-A30C8EEB4D3F}" - ], - "childRequirements": [], - "implemented": [ - "{7F7632D9-FA40-4F38-8DEA-C83CD4325A32}" - ], - "prefix": "MBPUB", - "url": "" -} \ No newline at end of file diff --git a/MQTTPublishHelper/module.php b/MQTTPublishHelper/module.php deleted file mode 100644 index 24fab17..0000000 --- a/MQTTPublishHelper/module.php +++ /dev/null @@ -1,37 +0,0 @@ -ConnectParent('{F7A0DD2E-7684-95C0-64C2-D2A9DC47577B}'); - } - - public function ApplyChanges() - { - parent::ApplyChanges(); - $this->SetStatus(IS_ACTIVE); - } - - public function Publish(string $topic, string $payload) - { - if ($topic == '') { - return; - } - - $this->SendDebug('Publish', $topic . ' => ' . $payload, 0); - - $this->SendDataToParent(json_encode([ - 'DataID' => '{043EA491-0325-4ADD-8FC2-A30C8EEB4D3F}', - 'PacketType' => 3, - 'QualityOfService' => 0, - 'Retain' => false, - 'Topic' => $topic, - 'Payload' => $payload - ])); - } -} - -?> \ No newline at end of file