# Wie die Engine entscheidet
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
Strom je Phase, Einspeisung, Bezug"]
BAT["Batterie
Ladezustand"]
APP["App
einmalige Anforderungen"]
CFG["Einstellungen des Installateurs
Ränge, Grenzen, Pflichten"]
subgraph M["Energie-Engine, auf der Box"]
PROT["Überlastschutz
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
einmalige Anforderungen, Pflichten"]
C4 --> C5["5. Komfort-Durchlauf
Überschuss kaskadiert, nach Rang"]
C5 --> C6["6. Ein Befehl pro Verbraucher"]
end
AD["Adapter
Grenzen und Sperren jedes Verbrauchers"]
end
OPT["Optimierer, optional
schlägt die Verteilung vor"]
VE["Wallboxen"]
ECS["Warmwasserbereiter
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).