đ§ Auto TPI: Detaillierter technischer Leitfaden
NOTE
Dieses Dokument richtet sich an fortgeschrittene Benutzer, die den Auto-TPI-Algorithmus im Detail verstehen möchten. Eine zugĂ€nglichere EinfĂŒhrung finden Sie im Auto TPI Benutzerleitfaden.
Inhaltsverzeichnis
- Der TPI-Algorithmus
- Detaillierter Lernzyklus
- Kalibrierung der thermischen KapazitÀt
- Algorithmen zur Koeffizientenberechnung
- Automatische Korrekturmechanismen
- Erweiterte Parameter und Konstanten
- Dienste und API
- Erweiterte Diagnose und Fehlerbehebung
Der TPI-Algorithmus
Grundlegendes Prinzip
Der TPI-Algorithmus (Time Proportional & Integral) berechnet bei jedem Zyklus einen Leistungsprozentsatz. Dieser Prozentsatz bestimmt, wie lange die Heizung wÀhrend des Zyklus aktiv ist (z. B. 60 % bei einem 10-Minuten-Zyklus = 6 Minuten Heizen).
Basiskonzept
Leistung = (Kint Ă ÎT_innen) + (Kext Ă ÎT_auĂen)
Wobei:
- Kint (
tpi_coef_int): Innenkoeffizient, reagiert auf die Differenz zum Sollwert - Kext (
tpi_coef_ext): AuĂenkoeffizient, kompensiert thermische Verluste - ÎT_innen = Sollwert â Innentemperatur
- ÎT_auĂen = Sollwert â AuĂentemperatur
graph LR
subgraph Eingaben
A[Innentemperatur]
B[AuĂentemperatur]
C[Sollwert]
end
subgraph TPI-Berechnung
D["ÎT_int = Sollwert - T_int"]
E["ÎT_ext = Sollwert - T_ext"]
F["Leistung = KintĂÎT_int + KextĂÎT_ext"]
end
subgraph Ausgabe
G["Leistung % (0-100%)"]
H["AN/AUS-Zeit"]
end
A --> D
C --> D
B --> E
C --> E
D --> F
E --> F
F --> G
G --> H
Rolle der Koeffizienten
| Koeffizient | Rolle | Lern-Situation |
|---|---|---|
| Kint | Steuert die ReaktivitÀt: Je höher er ist, desto schneller reagiert die Heizung auf Abweichungen | WÀhrend des Temperaturanstiegs (Abweichung > 0,05°C, Leistung < 99%) |
| Kext | Kompensiert thermische Verluste: Je höher er ist, desto mehr antizipiert die Heizung die AbkĂŒhlung | WĂ€hrend der Stabilisierung um den Sollwert (Abweichung < 0,5°C) |
Detaillierter Lernzyklus
Ablauf-Ăbersicht
flowchart TD
subgraph Initialisierung
A[Sitzung starten] --> B{Heizrate = 0?}
B -->|Ja| C[Historische Vorkalibrierung]
B -->|Nein| G[Aktives Lernen]
C --> D{ZuverlÀssigkeit >= 20%?}
D -->|Ja| G
D -->|Nein| E[Bootstrap-Modus]
E -->|3 aggressive Zyklen| F[GeschÀtzte KapazitÀt]
F --> G
end
subgraph "Lernschleife"
G --> H[TPI-Zyklus starten]
H --> I[Anfangszustand erfassen]
I --> J[Heizung AN/AUS ausfĂŒhren]
J --> K[Zyklusende: ÎT messen]
K --> L{GĂŒltige Bedingungen?}
L -->|Nein| M[Lernen ĂŒberspringen]
L -->|Ja| N{Situation analysieren}
N -.->|Ăberschwingen| O[đž Kext-Korrektur<br/>optional]
N -.->|Stagnation| P[đž Kint-Boost<br/>optional]
N -->|T° steigt| Q[Kint-Lernen]
N -->|Stabilisierung| R[Kext-Lernen]
O -.-> S[Koeffizienten aktualisieren]
P -.-> S
Q --> S
R --> S
M --> H
S --> H
end
subgraph Finalisierung
S --> T{50 Zyklen Kint UND Kext?}
T -->|Nein| H
T -->|Ja| U[In Konfig speichern]
U --> V[End-Benachrichtigung]
end
style O fill:#fff3cd,stroke:#ffc107,stroke-width:2px
style P fill:#fff3cd,stroke:#ffc107,stroke-width:2px
NOTE
Gelbe Boxen mit gestrichelten Linien (đž) stellen optionale Korrekturmechanismen dar. Diese mĂŒssen explizit ĂŒber die Parameter des Dienstes set_auto_tpi_mode aktiviert werden.
Details zur Zustandserfassung (Snapshot)
Zu Beginn jedes Zyklus erfasst der Algorithmus den aktuellen Zustand:
| Erfasste Daten | Verwendung |
|---|---|
last_temp_in | Innentemperatur zu Zyklusbeginn |
last_temp_out | AuĂentemperatur zu Zyklusbeginn |
last_order | Sollwert zu Zyklusbeginn |
last_power | Berechnete Leistung fĂŒr diesen Zyklus (0,0 bis 1,0) |
last_state | HVAC-Modus (Heizen/KĂŒhlen) |
Am Ende des Zyklus werden diese Werte mit den aktuellen Messungen verglichen, um den Fortschritt zu berechnen.
Validierungsbedingungen fĂŒr Zyklen
Ein Zyklus wird fĂŒr das Lernen ignoriert, wenn:
| Bedingung | Grund |
|---|---|
| Leistung = 0% oder 100% | SĂ€ttigung: Keine verwertbaren Informationen zur Effizienz |
| Sollwert geÀndert | Zielwert mitten im Zyklus geÀndert |
| Lastabwurf aktiv | Heizung wurde vom Power Manager zwangsweise AUS geschaltet |
| Fehler erkannt | Anomalie festgestellt (Heizung ohne Wirkung) |
| Zentralheizkessel AUS | Thermostat fordert an, aber Kessel reagiert nicht |
| Erster Zyklus nach Neustart | Keine gĂŒltigen Referenzdaten |
Kalibrierung der thermischen KapazitÀt
Definition
Die thermische KapazitĂ€t (oder Heizrate) reprĂ€sentiert die maximale Geschwindigkeit des Temperaturanstiegs Ihres Systems, ausgedrĂŒckt in °C pro Stunde (°C/h).
Beispiel: Eine KapazitÀt von 2,0 °C/h bedeutet, dass Ihr Heizkörper die Temperatur unter idealen (adiabatischen) Bedingungen bei voller Leistung in einer Stunde um 2 °C anheben kann.
Bestimmungsmethoden
graph TD
A[Heizrate = 0?] -->|Ja| B[Vorkalibrierung]
A -->|Nein| C[Konfigurierten Wert nutzen]
B --> D{Historie verfĂŒgbar?}
D -->|Ja| E[Historien-Analyse]
D -->|Nein| F[Bootstrap-Modus]
E --> G{ZuverlÀssigkeit >= 20%?}
G -->|Ja| H[Kalibrierte KapazitÀt]
G -->|No| F
F --> I[3 aggressive Zyklen Kint=1.0 Kext=0.1]
I --> J[TatsÀchlichen Anstieg messen]
J --> K[GeschÀtzte KapazitÀt]
H --> L[Kint/Kext Lernen]
K --> L
C --> L
Vorkalibrierung via Historien-Analyse
Der Dienst auto_tpi_calibrate_capacity analysiert die Sensorhistorie:
- Abruf der Daten von
temperature_slopeundpower_percentĂŒber 30 Tage - Filterung: BehĂ€lt nur Punkte bei, an denen
power >= 95 %war - AusreiĂer-Eliminierung mittels IQR-Methode (Interquartile Range)
- Berechnung des 75. Perzentils der Steigungen (reprÀsentativer als der Median)
- Adiabatische Korrektur:
KapazitĂ€t = P75 + Kext Ă ÎT - Anwendung einer Sicherheitsmarge: standardmĂ€Ăig 20 %
Bootstrap-Modus
Wenn die Historie unzureichend ist (ZuverlÀssigkeit < 20 %), wechselt das System in den Bootstrap-Modus:
- Aggressive Koeffizienten: Kint = 1.0, Kext = 0.1
- Dauer: mindestens 3 Zyklen
- Ziel: Einen signifikanten Temperaturanstieg auslösen, um die tatsÀchliche KapazitÀt zu messen
- Sicherheits-Timeout: Wenn nach 5 Zyklen kein Erfolg eintritt, wird eine StandardkapazitĂ€t von 0,3 °C/h angenommen (fĂŒr langsame Systeme)
Algorithmen zur Koeffizientenberechnung
Kint-Lernen (Innenkoeffizient)
Der Algorithmus passt Kint an, wenn die Temperatur in Richtung des Sollwerts steigt.
Detaillierte Formel
flowchart LR
subgraph "1. Effektive KapazitÀt"
A["C_eff = C_ref Ă (1 - Kext Ă ÎT_ext)"]
end
subgraph "2. Max. möglicher Anstieg"
B["max_rise = C_eff Ă Zyklusdauer Ă Effizienz"]
end
subgraph "3. Angepasstes Ziel"
C["target = min(Sollwert-Differenz, max_rise)"]
end
subgraph "4. VerhÀltnis"
D["ratio = (target / tatsÀchlicher_Anstieg) à AggressivitÀt"]
end
subgraph "5. Neues Kint"
E["Kint_neu = Kint_alt Ă ratio"]
end
A --> B --> C --> D --> E
Verwendete Variablen
| Variable | Beschreibung | Typischer Wert |
|---|---|---|
C_ref | Kalibrierte ReferenzkapazitÀt | 1.5 °C/h |
Kext | Aktueller AuĂenkoeffizient | 0.02 |
ÎT_ext | Differenz Innen-/AuĂentemp | 15°C |
Zyklusdauer | In Stunden | 0.167 (10 Min.) |
Effizienz | Verwendeter Leistungsprozentsatz | 0.70 |
AggressivitÀt | Moderationsfaktor | 0.9 |
Kext-Lernen (AuĂenkoeffizient)
Der Algorithmus passt Kext an, wenn die Temperatur nahe am Sollwert ist (|Abweichung| < 0,5°C).
Formel
Korrektur = Kint Ă (Abweichung_innnen / Abweichung_auĂen)
Kext_neu = Kext_alt + Korrektur
- Wenn Abweichung_innen negativ (Ăberschwingen) â Negative Korrektur â Kext sinkt
- Wenn Abweichung_innen positiv (Unterschreiten) â Positive Korrektur â Kext steigt
GlÀttungsmethoden
Es stehen zwei Methoden zur GlĂ€ttung neuer Werte zur VerfĂŒgung:
Gewichteter Durchschnitt ("Discovery"-Modus)
Kint_final = (Kint_alt Ă ZĂ€hler + Kint_neu) / (ZĂ€hler + 1)
| Zyklus | Altes Gewicht | Neues Gewicht | Einfluss des neuen Wertes |
|---|---|---|---|
| 1 | 1 | 1 | 50% |
| 10 | 10 | 1 | 9% |
| 50 | 50 | 1 | 2% |
Der ZÀhler ist bei 50 gedeckelt, um eine minimale ReaktivitÀt zu erhalten.
EWMA ("Fine Tuning"-Modus)
Kint_final = (1 - α) à Kint_alt + α à Kint_neu
α(n) = αâ / (1 + decay_rate Ă n)
| Parameter | Standard | Beschreibung |
|---|---|---|
αâ (initiales Alpha) | 0.08 | UrsprĂŒngliches Gewicht neuer Werte |
decay_rate | 0.12 | Verringerungsgeschwindigkeit von Alpha |
Automatische Korrekturmechanismen
Ăberschwing-Korrektur (Kext Deboost)
Aktivierung: Parameter
allow_kext_compensation_on_overshootim Dienstset_auto_tpi_mode
Erkennt und korrigiert, wenn die Temperatur den Sollwert ĂŒberschreitet, ohne wieder zu sinken.
flowchart TD
A{T° > Sollwert + 0.2°C?} -->|Ja| B{Leistung > 5%?}
B -->|Ja| C{T° sinkt nicht?}
C -->|Ja| D[Kext-Korrektur]
A -->|Nein| E[Keine Korrektur]
B -->|Nein| E
C -->|Nein| E
D --> F["Reduktion = Ăberschwingen Ă Kint / ÎT_auĂen"]
F --> G["Kext_Ziel = max(0.001, Kext - Reduktion)"]
G --> H[Anwenden mit Alpha-Boost Ă2]
Stagnations-Korrektur (Kint Boost)
Aktivierung: Parameter
allow_kint_boost_on_stagnationim Dienstset_auto_tpi_mode
Erkennt und korrigiert, wenn die Temperatur trotz signifikantem Bedarf stagniert.
flowchart TD
A{Abweichung > 0.5°C?} -->|Ja| B{Fortschritt < 0.02°C?}
B -->|Ja| C{Leistung < 99%?}
C -->|Ja| D{Konsektutive Boosts < 5?}
D -->|Ja| E[Kint-Boost]
A -->|No| F[Keine Korrektur]
B -->|No| F
C -->|No| F
D -->|No| G[Alarm: Unterdimensionierte Heizung]
E --> H["Boost = 8% Ă min(Abweichung/0.3, 2.0)"]
H --> I["Kint_Ziel = Kint Ă (1 + Boost)"]
Erweiterte Parameter und Konstanten
Interne Konstanten (Nicht konfigurierbar)
| Konstante | Wert | Beschreibung |
|---|---|---|
MIN_KINT | 0.01 | Untergrenze fĂŒr Kint zur Aufrechterhaltung der ReaktivitĂ€t |
OVERSHOOT_THRESHOLD | 0.2°C | Schwelle fĂŒr Ăberschwingen zur Auslösung der Korrektur |
OVERSHOOT_POWER_THRESHOLD | 5% | Mindestleistung, um Ăberschwingen als Kext-Fehler zu werten |
OVERSHOOT_CORRECTION_BOOST | 2.0 | Alpha-Multiplikator wÀhrend der Korrektur |
NATURAL_RECOVERY_POWER_THRESHOLD | 20% | Max Leistung, um Lernen bei natĂŒrlicher Erholung zu ĂŒberspringen |
INSUFFICIENT_RISE_GAP_THRESHOLD | 0.5°C | Mindestabweichung fĂŒr Kint-Boost |
MAX_CONSECUTIVE_KINT_BOOSTS | 5 | Limit vor Alarm wegen Unterdimensionierung |
MIN_PRE_BOOTSTRAP_CALIBRATION_RELIABILITY | 20% | MindestzuverlÀssigkeit zur Umgehung des Bootstrap |
Konfigurierbare Parameter
| Parameter | Typ | Standard | Bereich |
|---|---|---|---|
| Aggressiveness | Slider | 1.0 | 0.5 - 1.0 |
| Heating Time | Minuten | 5 | 1 - 30 |
| Cooling Time | Minuten | 7 | 1 - 60 |
| Heating Rate | °C/h | 0 (auto) | 0 - 5.0 |
| Initial Weight (Discovery) | Ganzzahl | 1 | 1 - 50 |
| Alpha (Fine Tuning) | Float | 0.08 | 0.01 - 0.3 |
| Decay Rate | Float | 0.12 | 0.0 - 0.5 |
Dienste und API
versatile_thermostat.set_auto_tpi_mode
Steuert den Start/Stopp des Lernens.
service: versatile_thermostat.set_auto_tpi_mode
target:
entity_id: climate.mein_thermostat
data:
auto_tpi_mode: true # true = Start, false = Stopp
reinitialise: true # true = VollstÀndiger Reset, false = Fortsetzen
allow_kint_boost_on_stagnation: false # Kint bei Stagnation boosten
allow_kext_compensation_on_overshoot: false # Kext bei Ăberschwingen korrigieren
versatile_thermostat.auto_tpi_calibrate_capacity
Kalibriert die thermische KapazitÀt anhand der Historie.
service: versatile_thermostat.auto_tpi_calibrate_capacity
target:
entity_id: climate.mein_thermostat
data:
start_date: "2024-01-01T00:00:00+00:00" # Optional
end_date: "2024-02-01T00:00:00+00:00" # Optional
min_power_threshold: 95 # Min. Leistung in %
capacity_safety_margin: 20 # Sicherheitsmarge in %
save_to_config: true # In Konfig speichern
RĂŒckgabewerte des Dienstes:
| SchlĂŒssel | Beschreibung |
|---|---|
max_capacity | Berechnete BruttokapazitÀt (°C/h) |
recommended_capacity | KapazitÀt nach Marge (°C/h) |
reliability | ZuverlÀssigkeitsindex (%) |
samples_used | Anzahl verwendeter Proben |
outliers_removed | Anzahl entfernter AusreiĂer |
Erweiterte Diagnose und Fehlerbehebung
Diagnose-Sensor
EntitÀt: sensor.<Name>_auto_tpi_learning_state
| Attribut | Beschreibung |
|---|---|
active | Lernen lÀuft |
heating_cycles_count | Gesamtzahl beobachteter Zyklen |
coeff_int_cycles | Validierte Kint-Zyklen |
coeff_ext_cycles | Validierte Kext-Zyklen |
model_confidence | Vertrauen 0.0 - 1.0 |
calculated_coef_int | Aktuelles Kint |
calculated_coef_ext | Aktuelles Kext |
last_learning_status | Status des letzten Zyklus |
capacity_heat_status | learning oder learned |
capacity_heat_value | Aktuelle KapazitÀt (°C/h) |
HĂ€ufige Lernstatus-Meldungen
| Status | Bedeutung | Empfohlene Aktion |
|---|---|---|
learned_indoor_heat | Kint erfolgreich aktualisiert | Normal |
learned_outdoor_heat | Kext erfolgreich aktualisiert | Normal |
power_out_of_range | Leistung bei 0 % oder 100 % | Auf nicht-gesÀttigten Zyklus warten |
real_rise_too_small | Anstieg < 0,01 °C | Sensor oder Zyklusdauer prĂŒfen |
setpoint_changed_during_cycle | Sollwert geÀndert | Sollwert wÀhrend des Zyklus nicht verÀndern |
no_capacity_defined | Keine kalibrierte KapazitÀt | Auf Kalibrierung/Bootstrap warten |
corrected_kext_overshoot | Ăberschwing-Korrektur angewandt | Normal, falls Kext zu hoch |
corrected_kint_insufficient_rise | Kint-Boost angewandt | Normal, falls Kint zu niedrig |
max_kint_boosts_reached | 5 konsekutive Boosts | Heizung unterdimensioniert |
Diagnose-Entscheidungsbaum
flowchart TD
A[Problem erkannt] --> B{Kint oder Kext?}
B -->|Kint zu niedrig| C[T° steigt zu langsam]
C --> D{Nach 10 Zyklen?}
D -->|Ja| E[Heiz-/KĂŒhlzeiten prĂŒfen]
D -->|Nein| F[Konvergenz abwarten]
B -->|Kint zu hoch| G[T°-Oszillationen]
G --> H[AggressivitÀt reduzieren]
B -->|Kext zu niedrig| I[T° fÀllt unter Sollwert]
I --> J[AuĂensensor prĂŒfen]
B -->|Kext zu hoch| K[Anhaltendes Ăberschwingen]
K --> L[allow_kext_compensation aktivieren]
A --> M{Kein Lernen?}
M -->|power_out_of_range| N[GesÀttigte Heizung]
N --> O[GĂŒnstige Bedingungen abwarten]
M -->|no_capacity_defined| P[Keine Kalibrierung]
P --> Q[Historie prĂŒfen oder Wert erzwingen]
Persistenzdatei
Speicherort: .storage/versatile_thermostat_{unique_id}_auto_tpi_v2.json
Diese Datei enthÀlt den kompletten Lernzustand und wird bei einem Neustart von Home Assistant wiederhergestellt. Sie kann gelöscht werden, um einen vollstÀndigen Reset zu erzwingen (nicht empfohlen).
AnhÀnge
Empfohlene Referenzwerte
| Heizungstyp | Aufheizzeit | AbkĂŒhlzeit | Typische KapazitĂ€t |
|---|---|---|---|
| Elektrokonvektor | 2-5 Min. | 3-7 Min. | 2.0-3.0 °C/h |
| Speicherheizung | 5-10 Min. | 10-20 Min. | 1.0-2.0 °C/h |
| FuĂbodenheizung | 15-30 Min. | 30-60 Min. | 0.3-0.8 °C/h |
| Zentralheizkessel | 5-15 Min. | 10-30 Min. | 1.0-2.5 °C/h |
VollstÀndige mathematische Formeln
Effektive KapazitÀt:
Adaptives Alpha (EWMA):
ZuverlÀssigkeit der Kalibrierung:
Wobei CV = Variationskoeffizient (Standardabweichung / Mittelwert)