Hallo zusammen,
da dies mein erster Beitrag hier im Forum ist, kann ich leider noch keine Screenshots oder Dateien anhängen – ich möchte aber trotzdem gerne meinen aktuellen Testlauf mit euch teilen, die Berechnungen dahinter komplett offenlegen und vor allem euer Feedback zu den physikalischen Annahmen einholen.
Auslöser für das Ganze war das Video von Andreas zum Thema Heizen mit Split-Klimaanlagen und intelligenter Regelung bzw. Optimierung sowie die vielen Diskussionen hier im Forum rund um Wärmestau unter der Decke, Takten in der Übergangszeit, Einfluss der Lüfterstufe auf die Kondensationstemperatur und die Problematik bei Multi-Split-Anlagen.
Wichtig vorab: Ich habe das ganze mit einem Freund gebaut und sehe das Ganze ausdrücklich als experimentellen Testlauf in meinem eigenen Haus. Es läuft komplett lokal als eigene Custom Integration in Python direkt in Home Assistant (kein Cloud-Dienst, kein externes LLM/API-Key nötig, Rechenzeit pro 3-Minuten-Zyklus unter 2 ms).
- Mein Hardware-Setup (Status Quo)
Ich heize mehrere Räume über Gree Split-Klimageräte (eingebunden über die lokale UDP-Integration von robhofmann) und messe die elektrische Leistungsaufnahme über einen Shelly Pro 4PM:
- Kanal 0 am Shelly Pro 4PM: Eine Single-Split im Wohnzimmer/Küche
- Kanal 1 am Shelly Pro 4PM: Eine 3er Multi-Split-Außeneinheit, an der Büro , Schlafzimmer und Keller hängen
- Zusätzlich: Externe Raumtemperatursensoren auf Sitzhöhe, ein eigener Außentemperatursensor (Wetterstation, da Cloud-Wetterdaten oft träge oder ungenau sind), Tür-/Fensterkontakte sowie Präsenzmelder.
- Warum die interne Gree-Regelung allein oft Probleme macht
Wer mit Gree-Geräten heizt, kennt vermutlich folgende Effekte:
- Der interne NTC-Fühler sitzt oben im Innengerät unter der Decke. Durch thermische Schichtung (Wärmestau) misst das Gerät dort oben oft 1,5 bis 4,0 K mehr als auf Sitzhöhe im Raum.
- Gree gibt die interne Ist-Temperatur nur in groben 1-Grad-Schritten aus (und meldet im Standby/Ventil-Pause teilweise 16 °C als Platzhalterwert).
- Wenn man naiv per Automation einfach alle paar Minuten den Sollwert hoch- und runterstellt, fängt die Anlage an zu jagen (Ratcheting / Hunting), übersteuert die interne PI-Regelung des Inverters oder schickt im schlimmsten Fall 16 °C, sobald der Raum minimal über Soll liegt – woraufhin der Kompressor hart abschaltet und taktet.
- Außerdem fluten zu schnelle Sollwert-Änderungen das WLAN-Modul der Gree per UDP, sodass Pakete verschluckt werden.
- Architektur unseres Testlaufs (Kaskadenregelung + Sicherheits-Envelope)
Nach einigen Rückschlägen mit einem ersten reinen MPC-Ansatz (der genau in dieses Aufschaukeln gegen den internen Gree-Regler gelaufen ist) haben wir die Architektur in eine klassische Kaskadenregelung umgebaut, bei der unsere Integration der langsame äußere Regler (Raumtemperatur auf Sitzhöhe) und das Gree-Gerät der schnelle innere Regler (Inverter-Modulation) ist.
Hier sind die konkreten Berechnungen, die im Hintergrund im 3-Minuten-Takt (dt = 180 s) laufen:
A) Thermisches 2R2C-Gebäudemodell mit Extended Kalman Filter (EKF) Statt einer einfachen Geradengleichung modellieren wir jeden Raum als 2-Knoten-Widerstands-Kapazitäts-Netzwerk (2R2C):
- Knoten 1: Raumluft-Temperatur T_air (reagiert schnell, Wärmekapazität C_air)
- Knoten 2: Gebäudemasse / Wände / Möbel T_wall (reagiert träge über Stunden, Wärmekapazität C_wall)
Die Zustandsgleichungen lauten: C_air * dT_air/dt = UA_ao * (T_out - T_air) + UA_aw * (T_wall - T_air) + Q_therm + d_gains C_wall * dT_wall/dt = UA_aw * (T_air - T_wall) + UA_wo * (T_out - T_wall)
Dabei sind:
- UA_ao, UA_aw, UA_wo die Wärmeleitwerte zwischen Raumluft, Wandmasse und Außenluft (in W/K)
- Q_therm die geschätzte abgegebene Heizleistung des Innengeräts (in W)
- d_gains nicht gemessene interne Wärmegewinne (Personen, PC, Sonne)
Ein Extended Kalman Filter (mit Joseph-Form für das Kovarianz-Update, damit die Matrix numerisch immer positiv definit bleibt) schätzt online sowohl die nicht direkt messbare Wandtemperatur T_wall als auch den effektiven Wärmeverlustkoeffizienten UA des Raums. Wenn ein Fenster geöffnet wird (über Binärsensor oder über einen zweistufigen Temperaturgradienten-Detektor erkannt, falls dT/dt < -2,5 K/h UND die Kalman-Innovation stark negativ ist), wird das Lernen sofort eingefroren, damit das Modell sich durch die Kaltluft nicht verstellt.
B) Äußerer PI-Regler mit Feedforward & Schmitt-Trigger-Quantisierer (Offset-frei) Damit die Raumtemperatur im stationären Zustand ohne bleibende Regelabweichung (Droop) gehalten wird, berechnet der Regler zunächst einen kontinuierlichen Sollwert u(t):
-
Tiefpassfilterung des Raumsensors (Zeitkonstante tau = 180 s), damit 0,1-K-Quantisierungsrauschen des Zigbee/BLE-Sensors keine Stellbefehle auslöst: T_room_filt(t) = T_room_filt(t-1) + (dt / (dt + tau)) * (T_room(t) - T_room_filt(t-1)) Regelfehler: e(t) = T_target - T_room_filt(t)
-
Feedforward-Offset (Decken-Schichtungskompensation): FF(T_target, T_out, Fan) = (b0 + b1 * (T_target - T_out) / 20) * StratScale(Fan) Hier fließt direkt die Erkenntnis aus dem Forum ein: Höhere Lüfterstufe = größere Wurfweite = weniger Wärmestau unter der Decke. Unser Skalierungsfaktor StratScale(Fan) liegt bei:
- Quiet: 1,28
- Low: 1,14
- Medium-Low: 1,05
- Medium / Auto: 1,00
- Medium-High: 0,92
- High: 0,85 Die Parameter b0 und b1 adaptieren sich langsam (Lernrate 0,01), aber nur wenn sich der Raum im eingeschwungenen Zustand befindet (|e| < 0,4 K).
-
PI-Gesetz mit Anti-Windup (Conditional Integration): u(t) = T_target + FF + Kp * e(t) + I(t) mit Kp = 0,85 und Nachstellzeit Ti = 2400 s (40 Minuten). Der Integrator I(t) = I(t-1) + (Kp * dt / Ti) * e(t) ist auf [-1,5 K, +3,5 K] begrenzt und wird sofort eingefroren, wenn:
- die Stellgröße an den Sicherheitsgrenzen sättigt,
- das Außengerät abtaut (Defrost erkannt),
- ein offenes Fenster erkannt wurde,
- der Raumsensor ausgefallen ist, oder
- die Slew-Rate den Schritt noch zurückhält.
-
Schmitt-Trigger-Quantisierung & asymmetrische Mindestverweilzeit (Dwell Time): Da die Gree nur ganze 1,0-°C-Schritte akzeptiert, wird nicht einfach mathematisch gerundet (das würde bei 22,50 °C ständig zwischen 22 und 23 °C pendeln), sondern über einen Schmitt-Trigger mit Hysterese h (abhängig vom Eco-Gewicht ca. 0,18 bis 0,30 K) geschaltet:
- Schritt +1 °C nur wenn: u(t) >= q_alt + 0,5 + h UND Mindestverweilzeit (Dwell Up = 15–20 Min.) abgelaufen.
- Schritt -1 °C nur wenn: u(t) <= q_alt - 0,5 - h UND Mindestverweilzeit (Dwell Down = 20–30 Min.) abgelaufen.
- Pro Regelzyklus ist maximal +/- 1 °C Schrittweite erlaubt (Slew-Rate-Limit), außer bei Sicherheitsereignissen (z. B. Fenster auf).
- Zusätzlich gibt es ein 24-Stunden-Bewegungsbudget: Wenn an einem Tag schon mehr als 60 % des Schaltbudgets verbraucht wurden, strecken sich die Verweilzeiten automatisch, um das Gerät zu beruhigen.
C) Physik der Lüfterstufen & Ausblastemperatur (Formeln aus dem Forum) Für die thermische Leistung und Abschätzung der Ausblastemperatur nutzen wir den bekannten Zusammenhang für trockene Luft:
P_therm (in W) = 0,34 Wh/(m^3*K) * V_punkt (in m^3/h) * (T_Ausblas - T_Ansaug)
bzw. umgestellt nach der Ausblastemperatur: T_Ausblas = T_Ansaug + P_therm / (0,34 * V_punkt)
Da die Gree über die Integration keine Drehzahl in RPM meldet, hinterlegen wir die Stufen der Gree-Innengeräte mit ihren typischen Volumenströmen V_punkt:
- Quiet: 250 m^3/h
- Low: 320 m^3/h
- Medium-Low: 380 m^3/h
- Auto: 420 m^3/h
- Medium: 445 m^3/h
- Medium-High: 510 m^3/h
- High: 570 m^3/h
- Turbo: 650 m^3/h
Für die Lüfterregelung nutzen wir keine nervöse Kostenfunktion mehr, die jede Viertelstunde die Stufe wechselt, sondern eine ruhige "Fan Ladder" mit Haltezeiten:
- Im Normalbetrieb bleibt der Lüfter im akustisch angenehmen Komfortbereich (Low -> Medium-Low -> Medium).
- Erst wenn der Raumfehler e(t) länger als 20 Minuten über +0,6 K liegt, schaltet der Lüfter eine Stufe höher (bessere Durchmischung, niedrigere Kondensationstemperatur).
- Erst wenn der Fehler länger als 45 Minuten über +1,2 K liegt (Aufheizphase), wird kurzzeitig Medium-High freigegeben. Turbo und High werden im Dauerbetrieb komplett gemieden.
D) Relativer COP-Index & Carnot-Hub (inkl. Abtau-Senke) Ohne eigenen Wärmeengergiezähler bzw. festen Ausblas-Temperaturfühler im Luftstrom kann man den echten physikalischen COP nicht exakt messen (wer aus dem geschätzten Raummodell gleichzeitig den Wärmeverlust UA und den COP lernen will, landet in einem Zirkelschluss, weil nur das Produkt aus beiden beobachtbar ist). Deshalb berechnen wir einen physikalisch fundierten relativen Effizienz-Index aus drei Faktoren:
COP_rel = 3,6 * f_Teillast(P_Kompressor) * f_Carnot(T_out, T_room) * f_Condenser(Fan, P_unit)
-
f_Carnot(T_out, T_room): Wir rechnen mit realen Kältemittel-Temperaturen statt Lufttemperaturen: T_cond = T_room + 20 K + 273,15 T_evap = T_out - 6 K + 273,15 Carnot_Lift = T_cond / max(15 K, T_cond - T_evap), normiert auf den Referenzpunkt A7/W20 (T_out = 7 °C, T_room = 20 °C). Zusätzlich modellieren wir zwischen -7 °C und +5 °C Außentemperatur (Maximum um +0,5 °C bei feuchtkaltem Wetter) einen sanften Abtau-Abschlag von bis zu 12 %.
-
f_Teillast(P_Kompressor): Stückweise linear interpolierte Teillastkurve des Inverters mit Effizienz-Sweet-Spot im unteren/mittleren Teillastbereich (~260 bis 400 W) und abfallender Effizienz bei hoher Last (>800 W). Bei der Multi-Split wird hierfür die Gesamtleistung des Außenkompressors herangezogen, nicht nur das Teilstück eines einzelnen Raums.
-
f_Condenser(Fan, P_unit): Wenn bei hoher Heizleistung der Volumenstrom V_punkt zu klein ist, steigt T_Ausblas - T_Ansaug stark an (> 11 K). Jedes Kelvin zusätzliche Überhöhung am Wärmetauscher kostet durch den höheren Kondensationsdruck ca. 1,2 % Effizienz: f_Condenser = clamp(1,0 - 0,012 * max(0, Delta_T_Ausblas - 11 K), 0,84, 1,06).
E) Multi-Split Leistungsaufteilung (1 Shelly-Kanal für 3 Innengeräte) Da Büro, Schlafzimmer und Keller gemeinsam an Kanal 1 des Shelly Pro 4PM hängen, teilt ein gemeinsamer "MultiSplitHub" die gemessene Gesamtleistung P_meter konsistent auf:
P_netto = max(0, P_meter - P_base)
wobei P_base (ca. 15–25 W für Standby, Elektronik, Wannenheizung) in Leerlaufphasen gelernt wird. Für jedes aktive Innengerät i im Heizmodus wird eine Aktivitätsgewichtung u_i berechnet: u_i = DemandFactor_i * (V_punkt_i / 480 m^3/h)
Wichtig dabei:
- Der DemandFactor_i hängt NICHT von der absoluten Höhe des eingestellten Sollwerts ab (sonst würde das bloße Hochstellen eines Sollwerts künstlich Leistung von Raum A nach Raum B umbuchen), sondern davon, ob das Innengerät Wärme anfordert (1,0 bis Sollwert + 0,5 K, danach sanfte lineare Rampe auf 0,15 bis Sollwert + 2,0 K, damit die groben 1-°C-Sprünge des Gree-Sensors keine harten 0-Watt-Sprünge auslösen).
- Außerdem fängt der Hub den bekannten Gree-Firmware-Bug ab, bei dem current_temperature im Heizbetrieb plötzlich 16,0 °C meldet, und wertet das nicht fälschlicherweise als "Raum ist warm / Gerät fertig".
- Über ein normiertes LMS-Verfahren (Least Mean Squares) lernt der Hub aus Phasen, in denen nur 1 oder 2 Geräte laufen, die individuellen Gewichtungsfaktoren beta_i der Räume, wobei immer exakt gilt: Summe aller P_i = P_netto (Energieerhaltung).
- Zusätzlich verhindert der Hub, dass zwei Innengeräte innerhalb von 90 Sekunden gleichzeitig ihren Sollwert verstellen, damit der gemeinsame Außenkompressor nicht durch gleichzeitige Stellbefehle ins Schwingen gerät.
F) Präsenz-Lernen & Vorausschauendes Vorheizen (Bayesian Habit Learner) Wenn ein Präsenzmelder im Raum vorhanden ist, lernt ein Beta-Binomial-Modell für 48 Zeitfenster (24 Stunden Werktag + 24 Stunden Wochenende) die Belegungswahrscheinlichkeit P(anwesend | Wochentag, Stunde) mit exponentiellem Vergessen (0,995).
- Ist der Raum leer, senkt die Regelung das Ziel nach einer Entprellzeit (Debounce = 15 Min.) um den Eco-Setback (z. B. 1,5 K) ab.
- Steigt die gelernte Wahrscheinlichkeit für die nächste Stunde aber über 58 % (z. B. morgens vor Arbeitsbeginn im Büro), hebt der Regler das Ziel rechtzeitig vorher wieder auf Komforttemperatur an. Dadurch heizt die Klima frühzeitig im effizienten Teillastbereich (~250–350 W) hoch, statt bei Betreten des Raums mit >1000 W und schlechtem COP nachheizen zu müssen.
G) Harte Sicherheitsgrenzen (Safety Envelope & Command Gate) Vor jedem Senden an Home Assistant läuft der berechnete Sollwert durch eine deterministische Sicherheitsstufe ("Safety Envelope"):
- Nie 16 °C im Heizbetrieb: Solange das Raumziel über 16,5 °C liegt, darf der Regler niemals 16 °C an die Gree senden (verhindert das harte Abschalten und Auskühlen, das uns in einer frühen Version passiert ist).
- Untere Schranke im normalen Heizbetrieb: Der Klima-Sollwert fällt nie unter (Effektives_Raumziel - 1,5 K). Dadurch wird ein zu warmer Raum sanft über das Schließen des EEV / Heruntermodulieren geregelt und nicht durch Zwangsabschaltung.
- Obere Schranke: Maximal (Effektives_Raumziel + Max_Offset, Standard +4 K).
- Degradierter Raumsensor: Falls der externe Raumsensor länger als 60 Minuten keine neuen Werte liefert, wechselt die Integration in den Modus SENSOR_DEGRADED, schickt eine Warnung und hält einen sicheren Komfortwert, ohne blind weiter hochzuregeln.
- Command Gate gegen UDP-Paketverlust: Da das Gree-WLAN-Modul ab und zu UDP-Pakete verschluckt, merkt sich unser Command Gate den Zustand vor dem Befehl. Wenn ein gesendeter Befehl (z. B. 20 °C -> 19 °C) nach 180 Sekunden Echo-Fenster nicht am Gerät ankommt und das Gerät einfach weiter auf dem alten Wert (20 °C) steht, erkennt die Integration das als verschlucktes UDP-Paket (und versucht es beim nächsten Budget-Slot erneut), statt es fälschlicherweise als manuellen Eingriff per Infrarot-Fernbedienung zu interpretieren. Ändert sich der Wert am Gerät hingegen auf einen völlig anderen Wert (z. B. 23 °C), erkennt das System den manuellen Eingriff an der Fernbedienung und pausiert die Automatik für 120 Minuten.
- Erste Erfahrungen & offene Fragen an euch
In unseren geschlossenen 72-Stunden-Simulationen auf dem 2R2C-Modell und den ersten Live-Läufen zeigt sich:
- Der mittlere Regelfehler liegt bei unter 0,1 K ohne das frühere 6-Minuten-Jagen (die Anzahl der Sollwert-Schaltvorgänge pro Tag ist von über 100 auf unter 20–30 gesunken).
- Durch die Sperre gegen schnelle Befehlsketten (mindestens 15 s Hardware-Abstand + Warten auf das Echo des vorherigen Befehls) bricht das Gree-WLAN-Modul nicht mehr weg.
- Kurze Abtauzyklen (Defrost) werden erkannt, ohne dass der Regler während der Abtauung panisch den Sollwert hochreißt oder fälschlicherweise ein offenes Fenster vermutet.
Mich würde jetzt vor allem eure Meinung zu folgenden Punkten interessieren:
- Wie sind eure Erfahrungen mit dem Verhältnis aus Lüfterstufe und Decken-Wärmestau bei Gree-Geräten? Passen unsere Skalierungsfaktoren (Quiet 1,28 bis High 0,85) zu euren Messungen?
- Hat jemand von euch an einer Gree (Single- oder Multi-Split) feste DS18B20 / ESPHome-Sensoren direkt im Ansaug- und Ausblasstrom verbaut und könnte echte Messreihen für (T_Ausblas - T_Ansaug) über der elektrischen Leistung teilen, damit wir unsere Teillast-Kurve dagegen validieren können?
- Gibt es bei Multi-Split-Anlagen noch bessere Indikatoren über die Gree-Integration, um die Stellung der einzelnen Expansionsventile (EEV) ohne Eingriff in die Hardware abzuschätzen?
Ich freue mich auf eure Kritik, Ideen und Verbesserungsvorschläge!
Viele Grüße
Dan

