All checks were successful
Build & Deploy docs / build-deploy (push) Successful in 4m22s
Vue d'ensemble : entrées, protection contre la surcharge, cycle de répartition en six étapes, optimiseur en option, adaptateurs, charges. Rangs et domaines : une seule liste pour le moteur ; les domaines ne servent qu'à l'affichage de l'app, un chauffe-eau peut être servi en dernier. Encadré : une borne détectée arrive en fin de liste. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ry3vBrJT1tHdxAaXdCWi6L
197 lines
10 KiB
Markdown
197 lines
10 KiB
Markdown
# Wie die Engine entscheidet
|
||
|
||
<span class="badge community">COMMUNITY</span>
|
||
|
||
Die Energie-Engine der Box steuert Ihre Verbraucher selbstständig: Wallboxen,
|
||
Warmwasserbereiter, SG-Ready-Wärmepumpe, Relais. Sie ist frei (GPL-3.0) und entscheidet in
|
||
der **Community**-Version. Diese Seite beschreibt ihre Logik für Installateure und
|
||
Integratoren; die folgenden Seiten erläutern die einzelnen Funktionen.
|
||
|
||
## Überblick
|
||
|
||
```mermaid
|
||
flowchart TB
|
||
CPT["Netzanschlusszähler<br/>Strom je Phase, Einspeisung, Bezug"]
|
||
BAT["Batterie<br/>Ladezustand"]
|
||
APP["App<br/>einmalige Anforderungen"]
|
||
CFG["Einstellungen des Installateurs<br/>Ränge, Grenzen, Pflichten"]
|
||
|
||
subgraph M["Energie-Engine, auf der Box"]
|
||
PROT["Überlastschutz<br/>bei jeder Messung, vorrangig"]
|
||
subgraph C["Verteilungszyklus, jede Minute"]
|
||
C1["1. Messung und Bezugsspielraum"] --> C2["2. Ladefristen"]
|
||
C2 --> C3["3. Batteriereserve"]
|
||
C3 --> C4["4. Eco-Durchlauf<br/>einmalige Anforderungen, Pflichten"]
|
||
C4 --> C5["5. Komfort-Durchlauf<br/>Überschuss kaskadiert, nach Rang"]
|
||
C5 --> C6["6. Ein Befehl pro Verbraucher"]
|
||
end
|
||
AD["Adapter<br/>Grenzen und Sperren jedes Verbrauchers"]
|
||
end
|
||
|
||
OPT["Optimierer, optional<br/>schlägt die Verteilung vor"]
|
||
|
||
VE["Wallboxen"]
|
||
ECS["Warmwasserbereiter<br/>per Relais oder regelbar"]
|
||
PAC["SG-Ready-Wärmepumpe"]
|
||
REL["Relais"]
|
||
|
||
CPT --> PROT
|
||
CPT --> C1
|
||
BAT --> C3
|
||
APP --> C4
|
||
CFG --> C
|
||
OPT -. "Plan" .-> C6
|
||
C6 --> AD
|
||
PROT --> AD
|
||
AD --> VE & ECS & PAC & REL
|
||
```
|
||
|
||
Überlastschutz und Adapter bleiben in jedem Fall bei der Engine: Ein
|
||
[Optimierer](../optimiseur/index.md) schlägt, falls angeschlossen, nur die Verteilung vor.
|
||
|
||
## Zwei Schleifen, zwei Prioritäten
|
||
|
||
Die Engine trennt Sicherheit und Verteilung. Es sind zwei getrennte Schleifen, mit
|
||
unterschiedlichem Takt und unterschiedlicher Priorität.
|
||
|
||
- **Der Überlastschutz, bei jeder Messung.** Sobald sich die gemessene Bilanz ändert,
|
||
liest die Engine den Strom jeder Phase am Netzanschlusszähler. Überschreitet eine Phase
|
||
die eingestellte Grenze, senkt sie **sofort** den Ladestrom der Wallboxen und gibt ihn
|
||
wieder frei, sobald genug Reserve da ist. Die übrigen Verbraucher (Warmwasserbereiter,
|
||
Wärmepumpe, Relais) werden zu Beginn des nächsten Zyklus abgeworfen
|
||
([Lastabwurf](delestage.md)). Dieser Schutz hat Vorrang vor jeder
|
||
Verteilungsentscheidung.
|
||
- **Der Verteilungszyklus, jede Minute.** Er verteilt die verfügbare Leistung auf die
|
||
Verbraucher, auf Basis der Minutenmessung der elektrischen Bilanz, und läuft sofort
|
||
erneut, wenn Sie eine Einstellung ändern. Nur hier greift eine Strategie ein: die
|
||
eingebauten Regeln oder, falls angeschlossen, ein [Optimierer](../optimiseur/index.md).
|
||
|
||
**Schweigt der Netzanschlusszähler** (mehr als 90 s ohne Messwert), setzt die Engine die
|
||
Verteilung aus und bringt die Verbraucher in eine sichere Stellung: regelbare Verbraucher
|
||
auf 0 W, Relais offen, Wärmepumpe im Normalbetrieb, bereits ladende Wallboxen auf
|
||
Mindeststrom, kein neuer Verbraucher wird gestartet. Der Überlastschutz bleibt aktiv. Die
|
||
Verteilung setzt im Zyklus nach der Rückkehr des Zählers wieder ein.
|
||
|
||
## Die Regeln, in ihrer Reihenfolge
|
||
|
||
In jedem Zyklus durchläuft die Engine dieselben Schritte, in derselben Reihenfolge.
|
||
|
||
1. **Messen.** Ausgangspunkt ist der Messwert des Netzanschlusszählers (Einspeisung und
|
||
Bezug). Daraus leitet die Engine auch den **Bezugsspielraum** ab: was die Anlage noch
|
||
aus dem Netz beziehen kann, ohne die Phasengrenze zu überschreiten. Kein Netzbezug,
|
||
gleich aus welchem Grund, geht darüber hinaus.
|
||
2. **Ladefristen bedienen.** Ein Fahrzeug, das bis zu einer bestimmten Uhrzeit geladen
|
||
sein muss, wird aus dem Netz bedient, außerhalb der Überschussverteilung.
|
||
3. **Die Batterie schützen.** Liegt ein Hausspeicher unter seiner Reserveschwelle, geht der
|
||
Überschuss zuerst an ihn: Die gesteuerten Verbraucher erhalten nichts davon. Oberhalb
|
||
der Schwelle zählt, was er aufnimmt, als verfügbarer Überschuss. Seine Entladung wird
|
||
nie als Überschuss gezählt.
|
||
4. **Zugesicherte Bedarfe („Eco“-Durchlauf).** Zuerst die **einmaligen Anforderungen** aus
|
||
der App („jetzt heizen“): Der Verbraucher erhält seine volle Leistung, unabhängig von
|
||
seinem Rang. Danach die **täglichen Pflichten**, etwa eine Mindestenergie für den
|
||
Warmwasserbereiter bis zu einer bestimmten Uhrzeit: Die Engine kauft das Fehlende aus
|
||
dem Netz, gleichmäßig bis zur Frist verteilt, und schaltet auf volle Leistung, wenn nur
|
||
noch die gerade nötige Zeit bleibt. Diese Bezüge bleiben im Bezugsspielraum.
|
||
5. **Den Überschuss kaskadiert verteilen („Komfort“-Durchlauf).** Die Verbraucher werden
|
||
in der von Ihnen festgelegten **Priorität** bedient (1 = zuerst). Jeder erhält, was vom
|
||
Budget übrig ist, innerhalb seiner Grenzen, und das Budget wird entsprechend
|
||
verringert. Es gibt **ein einziges** Budget: Ohne es sähen drei Manager jeweils „2 kW
|
||
Überschuss“ und zögen zusammen 6. Der Reihe nach, für jeden Verbraucher:
|
||
- was er bereits aufnimmt, wird ihm gutgeschrieben: Ein laufender Verbraucher wird
|
||
nicht gegen sich selbst gerechnet;
|
||
- unterhalb seiner Mindestleistung bleibt er aus, statt halb zu laufen, und das Budget
|
||
geht an den nächsten. Eine Wallbox kann dennoch mit einem kleinen Zuschuss aus dem
|
||
Netz starten, innerhalb der eingestellten Toleranz;
|
||
- ein **gesperrter** Verbraucher (Mindestlauf- oder Mindeststillstandszeit, Wartezeit
|
||
zwischen zwei Änderungen) behält seine aktuelle Leistung;
|
||
- ein **nicht verfügbarer** Verbraucher behält seine aktuelle Leistung, ohne neuen
|
||
Sollwert; sein Verbrauch wird weiter gezählt.
|
||
6. **Ein Befehl pro Verbraucher.** Zugesicherter Bedarf und Überschussanteil desselben
|
||
Verbrauchers werden zusammengeführt: Jeder Verbraucher erhält einen einzigen Sollwert,
|
||
mit seinem Grund.
|
||
|
||
### Ränge und Domänen
|
||
|
||
Die Engine kennt **nur eine einzige Liste**: Jeder Verbraucher hat einen Rang, über alle
|
||
Kategorien hinweg, und die Kaskade folgt diesem Rang. Die **Domäne** eines Verbrauchers
|
||
(Elektrofahrzeug, Warmwasser, Klimatisierung, Heizung, Batterie) ist ein vom Installateur
|
||
gewähltes Etikett: Die Engine liest es nicht, um zu entscheiden.
|
||
|
||
Die App nutzt es, um die Bedienreihenfolge **nach Domänen** darzustellen: Man ordnet die
|
||
Domänen untereinander, dann die Verbraucher innerhalb jeder Domäne. Bei der
|
||
Inbetriebnahme schlägt sie vor: Elektrofahrzeug, Warmwasser, Klimatisierung, Heizung. Da
|
||
alles auf der einen Liste beruht, müssen die Verbraucher einer Domäne nicht
|
||
aufeinanderfolgen: Ein Zusatz-Warmwasserbereiter kann **ganz zuletzt** bedient werden,
|
||
nach der Heizung, und eine Wallbox kann vor dem Warmwasser kommen, eine andere danach.
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
subgraph AV["Vorgeschlagene Reihenfolge"]
|
||
direction TB
|
||
a1["1 · Wallbox Garage"] --> a2["2 · Wallbox Gäste"] --> a3["3 · Warmwasser Haupt"] --> a4["4 · Warmwasser Zusatz"] --> a5["5 · Wärmepumpe"]
|
||
end
|
||
subgraph AP["Nach der Einstellung"]
|
||
direction TB
|
||
b1["1 · Wallbox Garage"] --> b2["2 · Warmwasser Haupt"] --> b3["3 · Wallbox Gäste"] --> b4["4 · Wärmepumpe"] --> b5["5 · Warmwasser Zusatz"]
|
||
end
|
||
AV ==>|"nur Ränge ändern sich"| AP
|
||
|
||
classDef ev stroke:#3b82f6,stroke-width:3px
|
||
classDef ecs stroke:#ef4444,stroke-width:3px
|
||
classDef chauf stroke:#f59e0b,stroke-width:3px
|
||
class a1,a2,b1,b3 ev
|
||
class a3,a4,b2,b5 ecs
|
||
class a5,b4 chauf
|
||
```
|
||
|
||
Blauer Rand: Elektrofahrzeug · rot: Warmwasser · orange: Heizung.
|
||
|
||
!!! tip "Ränge bei der Inbetriebnahme festlegen"
|
||
Eine erkannte Wallbox wird automatisch **ans Ende der Liste** gesetzt, unabhängig von
|
||
ihrer Domäne. Zwei Verbraucher mit gleichem Rang werden über ihre Kennung getrennt –
|
||
das hat niemand so gewählt. Legen Sie die Reihenfolge bei der Inbetriebnahme in der App
|
||
fest.
|
||
|
||
### Die Grenzen jedes Verbrauchers
|
||
|
||
Jeder Verbraucher hat vom Installateur eingetragene Grenzen, die **jede** Entscheidung
|
||
einhält, gleich welche Strategie:
|
||
|
||
- eine **Unter-** und eine **Obergrenze** der Leistung. Bei einer Wallbox sind sie als
|
||
Strom angegeben (mal Anzahl der Phasen), und die Obergrenze wird zusätzlich durch die
|
||
Phasengrenze beschränkt;
|
||
- **Sperren gegen Takten**: Mindestlauf- und Mindeststillstandszeit, Wartezeit zwischen
|
||
zwei Änderungen. Eine Wallbox hat eigene (Wartezeit zwischen Ein und Aus, Wartezeit
|
||
zwischen zwei Stromänderungen);
|
||
- bei einer SG-Ready-Wärmepumpe: der Zustand wird nach der geschätzten Leistung jedes
|
||
Zustands gewählt, mit Hysterese und Mindesthaltedauer. Der Sperrzustand wird nie durch
|
||
den Überschuss ausgelöst.
|
||
|
||
## Der Grund jeder Entscheidung
|
||
|
||
Die Engine trifft keine Entscheidung, ohne ihren Grund zu nennen. Jede Entscheidung trägt
|
||
einen nicht leeren **Grund** (`decisionReason`): einen stabilen Code mit Parametern, den
|
||
die App in Ihrer Sprache anzeigt — „Überschuss reicht nicht“, „unter der
|
||
Mindestleistung“, „Ladefrist“… Die Liste der Codes ist mit dem
|
||
[Optimierer-Protokoll](../optimiseur/protocole.md#reponse) veröffentlicht.
|
||
|
||
## Die Messung, nie das Ergebnis der Steuerung
|
||
|
||
Der Überschuss wird aus der **Rohmessung** des Netzanschlusszählers berechnet, so wie sie
|
||
gemessen wird. Nie aus einer nach der Steuerung neu berechneten Bilanz: Die Engine würde
|
||
sich selbst lesen und schwingen.
|
||
|
||
## Ohne Internet
|
||
|
||
All das läuft auf der Box. Ohne Internet steuert die Engine, wendet die Sicherheit an und
|
||
antwortet der App in Ihrem lokalen Netz. Nur die [PV-Prognose](prevision-pv.md) setzt
|
||
aus. In der Community-Version fließen weder die Prognose noch der
|
||
[eingegebene Tarif](../tarifs.md) in die Entscheidungen der Regeln ein: Beide werden
|
||
angezeigt und gespeichert, aber nie zum Entscheiden verwendet.
|
||
|
||
## Und ein Optimierer?
|
||
|
||
Ein Optimierer kann anhand der Prognosen einen Plan über mehrere Stunden vorschlagen. Er
|
||
ersetzt den Verteilungsschritt, **nie** den Überlastschutz oder die Grenzen. Siehe
|
||
Abschnitt [Optimierer](../optimiseur/index.md).
|