Versatile Thermostat + Home Assistant MCP
Diese Dokumentation beschreibt das Hinzufügen von LLM/MCP-Werkzeugen zu Versatile Thermostat (VTherm) über den offiziellen MCP-Server von Home Assistant.
Die bereitgestellte Datei llm.py stellt Folgendes bereit:
- 4 Werkzeuge zum Lesen, Diagnostizieren und für den Verlauf;
- 3 einfache Aktionswerkzeuge: Temperatur, Preset und HVAC-Modus;
- 2 TPI-Lesewerkzeuge und 1 TPI-Werkzeug für explizite Änderungen;
- Beschreibungen und Anweisungen, die auf Französisch und Englisch verwendet werden können;
- Links zur VTherm-Dokumentation, zum Log-Sammler und zum Log-Analysator für die Fehlersuche.
Die Datei erstellt keinen eigenen MCP-Server. Sie verwendet die native LLM-Plattform von Home Assistant; anschließend veröffentlicht der offizielle Model Context Protocol Server diese Werkzeuge für MCP-Clients.
1. Zu installierende Datei
Die folgenden vier Dateien in das Integrationsverzeichnis kopieren:
/config/custom_components/versatile_thermostat/llm.py
/config/custom_components/versatile_thermostat/recorder_export.py
/config/custom_components/versatile_thermostat/tpi_history.py
/config/custom_components/versatile_thermostat/tpi_identification.py
Diese Module aus derselben Revision installieren. Bei einer manuellen Aktualisierung llm.py, tpi_history.py und tpi_identification.py gemeinsam ersetzen: TPIHistory enthält den Home-Assistant-Kontext und die Quellen eines Thermostats, TPIIdentification dessen Raster und Analyseparameter. Die interne Klassenstruktur erhält die bestehenden MCP-Werkzeuge und Berechnungen.
Verzeichnisstruktur:
/config/custom_components/versatile_thermostat/
├── __init__.py
├── climate.py
├── const.py
├── manifest.json
├── ...
├── llm.py
├── recorder_export.py
├── tpi_history.py
└── tpi_identification.py
Es ist nicht erforderlich, manifest.json zu ändern, um die Plattform llm zu deklarieren.
Home Assistant erkennt Integrationsplattformen dynamisch und lädt llm.py bei Bedarf, wenn eine LLM-API die Werkzeuge der Integration benötigt.
Nach dem Kopieren der Datei einen vollständigen Neustart von Home Assistant durchführen.
Achtung: Wenn
llm.pymanuell zu einer von HACS verwalteten VTherm-Installation hinzugefügt wurde, kann ein zukünftiges HACS-Update das Integrationsverzeichnis ersetzen. Bewahre eine Kopie der Datei auf, bis sie direkt in das VTherm-Projekt integriert wurde.
2. Bereitgestellte Werkzeuge
Bei Verwendung der LLM-API assist fügt der Home-Assistant-MCP-Server den Werkzeugnamen das Präfix assist__ hinzu.
Nur Lesen — Stufe 1
assist__versatile_thermostat__list_vtherms
assist__versatile_thermostat__get_status
assist__versatile_thermostat__diagnose
assist__versatile_thermostat__get_history
Aktionen — Stufe 2A
assist__versatile_thermostat__set_temperature
assist__versatile_thermostat__set_preset
assist__versatile_thermostat__set_hvac_mode
Die ersten drei Werkzeuge sind wie folgt gekennzeichnet:
read_only=True
destructive=False
idempotent=True
open_world=False
Die drei Aktionswerkzeuge sind wie folgt gekennzeichnet:
read_only=False
destructive=False
idempotent=True
open_world=False
Sie ändern tatsächlich den Zustand des Thermostats, jedoch ausschließlich über die standardmäßigen Home-Assistant-Dienste climate.*.
3. list_vtherms
Dieses Werkzeug listet ausschließlich VTherm-Entitäten auf, die:
- in Home Assistant geladen sind;
- zur Domäne
climategehören; - einem Versatile-Thermostat-Konfigurationseintrag zugeordnet sind;
- für Assist freigegeben sind.
Für jeden Thermostat werden unter anderem folgende Informationen zurückgegeben:
entity_id
name
hvac_mode
hvac_action
preset_mode
current_temperature
target_temperature
target_minus_current
min_temperature
max_temperature
target_temperature_step
hvac_modes
preset_modes
thermostat_type
messages
Vereinfachtes Beispiel:
{
"entity_id": "climate.thermostat_salon",
"hvac_mode": "heat",
"hvac_action": "heating",
"preset_mode": "comfort",
"current_temperature": 18.7,
"target_temperature": 19.5,
"target_minus_current": 0.8,
"hvac_modes": ["heat", "off"],
"preset_modes": ["none", "frost", "eco", "comfort", "boost"]
}
4. get_status
get_status gibt den vollständigen Rohzustand der VTherm-Entität zurück:
entity_id
state
last_changed
last_updated
attributes
attributes enthält die Home-Assistant-Attribute sowie die auf der Entität verfügbaren VTherm-spezifischen Attribute.
Dieses Werkzeug ist nützlich, wenn der Agent Informationen benötigt, die nicht in die strukturierte Diagnoseausgabe übernommen wurden.
5. diagnose
diagnose ist das bevorzugte Werkzeug für Anfragen wie:
- „Warum heizt mein Thermostat nicht?“
- „Warum ist er im Zustand idle?“
- „Wird er wegen Lastabwurf deaktiviert?“
- „Gibt es ein Problem mit einem Fenster?“
- „Warum wurde VTherm gestoppt?“
- „Debug the living-room thermostat.“
- „Diagnose why this VTherm is not heating.“
Es gibt unter anderem Folgendes zurück:
Aktueller Zustand
hvac_mode
hvac_action
preset_mode
current_temperature
target_temperature
target_minus_current
hvac_modes
preset_modes
VTherm-Gründe
Die Datei priorisiert Informationen, die von VTherm selbst berechnet wurden:
specific_states.messages
hvac_off_reason
hvac_mode_reason
should_device_be_active
device_actives
unavailable_underlying_entities
temperature_slope
is_sleeping
is_recalculate_scheduled
Ziel ist es zu verhindern, dass das Modell allein aus der Differenz zwischen aktueller Temperatur und Solltemperatur eine Ursache erfindet.
Diagnoseabschnitte
Sofern vorhanden, werden die folgenden Abschnitte vollständig zurückgegeben:
configuration
current_state
requested_state
specific_states
preset_temperatures
presence_manager
motion_manager
power_manager
window_manager
safety_manager
auto_start_stop_manager
lock_manager
heating_failure_detection
vtherm_over_switch
vtherm_over_climate
vtherm_over_valve
Ein Abschnitt, der auf der Entität nicht vorhanden ist, wird einfach nicht zurückgegeben.
6. VTherm-Dokumentation und Fehlersuche
Das Ergebnis von diagnose enthält außerdem support_resources mit französischen und englischen Ressourcen:
documentation_fr
documentation_en
reference_fr
reference_en
log_collector_fr
log_collector_en
log_analyzer
official_repository
log_download_action
Wichtige Links:
- Französische Dokumentation: https://www.versatile-thermostat.org/fr/
- Englische Dokumentation: https://www.versatile-thermostat.org/en/
- Französische Referenz: https://www.versatile-thermostat.org/fr/docs/reference/
- Englische Referenz: https://www.versatile-thermostat.org/en/docs/reference/
- Französischer Log-Sammler: https://www.versatile-thermostat.org/fr/docs/feature-logs-collector/
- Englischer Log-Sammler: https://www.versatile-thermostat.org/en/docs/feature-logs-collector/
- Log-Analysator: https://www.versatile-thermostat.org/fr/debugger/
- Offizielles VTherm-Repository: https://github.com/jmcollin78/versatile_thermostat
Für komplexe Fehlersuche weist der an das LLM übergebene Prompt das Modell an:
- zuerst die von VTherm zurückgegebenen Informationen zu verwenden;
- keine Ursache zu erfinden, die nicht in den Daten enthalten ist;
- die französische oder englische Dokumentation passend zur Sprache der Anfrage aufzurufen, sofern der Client Webzugriff hat;
- den Log-Sammler und anschließend den Log-Analysator vorzuschlagen, wenn der momentane Zustand keine eindeutige Schlussfolgerung zulässt.
Wichtig
llm.py lädt selbst keine Webseiten herunter.
Die Datei stellt dem LLM-Client URLs und Anweisungen bereit. Wenn der verwendete Client (Codex, Gemini, Claude usw.) über Webzugriff verfügt, kann er die Dokumentation aufrufen. Andernfalls kann er dem Benutzer zumindest die Links bereitstellen.
Die Website versatile-thermostat.org weist selbst darauf hin, dass es sich um eine Community-Website handelt, und stellt klar, dass die offizielle Quelle des Projekts weiterhin das VTherm-GitHub-Repository ist.
7. Log-Sammler
VTherm stellt folgende Aktion bereit:
versatile_thermostat.download_logs
Die Datei llm.py führt diese Aktion nicht automatisch aus; sie weist lediglich als Ressource für die Fehlersuche darauf hin.
Home-Assistant-Beispiel:
action: versatile_thermostat.download_logs
data:
entity_id: climate.thermostat_salon
log_level: DEBUG
Die erzeugte Datei kann anschließend in den Analysator geladen werden:
https://www.versatile-thermostat.org/fr/debugger/
Stufe 2 — Aktionen
8. set_temperature
Verwendet:
climate.set_temperature
MCP-Parameter:
{
"entity_id": "climate.thermostat_salon",
"temperature": 19.5
}
Vor dem Aufruf prüft das Werkzeug:
- dass VTherm für Assist freigegeben ist;
- dass dem Aufruf ein authentifizierter Home-Assistant-Benutzer zugeordnet ist;
- dass der Benutzer die Berechtigung besitzt, diese Entität zu steuern;
- dass die angeforderte Temperatur innerhalb der Min-/Max-Werte des Thermostats liegt, sofern diese verfügbar sind.
Das Ergebnis enthält:
success
action
requested
state_after_call
note
state_after_call ermöglicht dem Modell, den Zustand direkt nach dem Befehl zu überprüfen.
VTherm kann den effektiven Zustand anschließend entsprechend seinen eigenen Regeln ändern: Zentralmodus, Fenster, Lastabwurf, Sicherheit, Preset, Auto-Start/-Stopp, Regelung usw.
9. set_preset
Verwendet:
climate.set_preset_mode
Parameter:
{
"entity_id": "climate.thermostat_salon",
"preset": "comfort"
}
Vor der Aktion muss das angeforderte Preset in folgendem Attribut vorhanden sein:
preset_modes
und zwar für die Zielentität.
Ein Modell kann daher nicht beliebig ein Preset anfordern, das für diesen Thermostat nicht verfügbar ist.
10. set_hvac_mode
Verwendet:
climate.set_hvac_mode
Parameter:
{
"entity_id": "climate.thermostat_salon",
"hvac_mode": "heat"
}
Der Modus muss in folgendem Attribut enthalten sein:
hvac_modes
Um einen Thermostat auszuschalten, wenn off unterstützt wird:
{
"entity_id": "climate.thermostat_salon",
"hvac_mode": "off"
}
Die Datei stellt bewusst kein toggle-Werkzeug bereit: Der gewünschte Zustand muss explizit angegeben werden.
11. Sicherheit der Aktionen
Die drei obigen Climate-Aktionen verwenden diese Schutzmechanismen (die TPI-Aktion wird separat beschrieben):
- ausschließlich für Assist freigegebene VTherm-Entitäten;
- ein Home-Assistant-Benutzerkontext ist für Schreibvorgänge zwingend erforderlich;
- die Berechtigung
CONTROLwird geprüft; - Presets und HVAC-Modi werden gegen die tatsächliche Entität validiert;
- der zulässige Temperaturbereich wird geprüft;
- es werden ausschließlich die standardmäßigen Dienste
climate.*verwendet; - die interne VTherm-Konfiguration wird nicht verändert;
- TPI, Lastabwurf, Fenster-, Sicherheits- oder Algorithmuseinstellungen werden nicht verändert.
Aktionen sind mit read_only=False gekennzeichnet. Dadurch kann der Home-Assistant-MCP-Server sie ausblenden, wenn seine Option Read only aktiviert ist.
Installation des offiziellen Home-Assistant-MCP-Servers
12. MCP-Server aktivieren
In Home Assistant:
Einstellungen
→ System
→ KI
→ Model Context Protocol
Den MCP-Server bei Bedarf aktivieren.
Er kann auch über folgenden Weg hinzugefügt werden:
Einstellungen
→ Geräte & Dienste
→ Integration hinzufügen
→ Model Context Protocol Server
Home Assistant stellt anschließend eine MCP-URL bereit, typischerweise im lokalen Netzwerk:
http://homeassistant.local:8123/api/mcp
13. Empfohlene Konfiguration des MCP-Servers
In den Optionen des Model Context Protocol Server:
Expose all LLM APIs : OFF (empfohlen, um die freigegebene Oberfläche zu begrenzen)
Control Home Assistant : Assist / Device control
Require administrator : ON
Read only : OFF für Stufe 2
Wenn Read only aktiviert ist
Die Aktionswerkzeuge:
set_temperature
set_preset
set_hvac_mode
set_tpi_coefficients
werden aus dem MCP-Katalog gefiltert, da sie als read_only=False deklariert sind.
Die Diagnosewerkzeuge bleiben verfügbar.
Das ist nützlich, wenn vorübergehend wieder nur Stufe 1 verwendet werden soll, ohne llm.py zu ändern.
14. VTherm für Assist freigeben
Die Werkzeuge greifen nur auf Thermostate zu, die für Assist freigegeben sind.
In Home Assistant die benötigten Entitäten freigeben, zum Beispiel:
climate.thermostat_salon
climate.thermostat_cuisine
climate.thermostat_salle
Es ist nicht erforderlich, alle Geräte im Haus freizugeben.
Verbindung mit Codex
15. MCP-Server hinzufügen
codex mcp add homeassistant \
--url http://homeassistant.local:8123/api/mcp
Codex öffnet Home Assistant im Browser für die OAuth-Authentifizierung.
Überprüfung:
codex mcp list
Beispiel:
homeassistant http://homeassistant.local:8123/api/mcp enabled
Zur Installation und Konfiguration des offiziellen Home-Assistant-MCP-Servers siehe die Home-Assistant-Referenzdokumentation.
16. VTherm-Werkzeuge überprüfen
Prompt:
Verwende ausschließlich den MCP-Server homeassistant.
Liste alle auf diesem Server verfügbaren Werkzeuge auf, deren Name
versatile_thermostat enthält. Führe keine Aktion aus.
Mit Stufe 2A sollten folgende Werkzeuge verfügbar sein:
assist__versatile_thermostat__list_vtherms
assist__versatile_thermostat__get_status
assist__versatile_thermostat__diagnose
assist__versatile_thermostat__get_history
assist__versatile_thermostat__set_temperature
assist__versatile_thermostat__set_preset
assist__versatile_thermostat__set_hvac_mode
assist__versatile_thermostat__check_tpi_optimization
assist__versatile_thermostat__analyze_tpi_coefficients
assist__versatile_thermostat__set_tpi_coefficients
Der vollständige Katalog enthält sechs Lese- und vier Schreibwerkzeuge. Mit Read only bleiben nur die sechs Lesewerkzeuge sichtbar.
Beispielfragen
17. Französisch — Lesen und Diagnose
Liste mes Versatile Thermostat et donne-moi leur température actuelle,
leur consigne et leur état de chauffe.
Diagnostique climate.thermostat_salon et explique pourquoi il ne chauffe pas.
N'invente aucune cause non présente dans les données VTherm.
Pourquoi le thermostat du salon est-il idle alors que la température est
inférieure à la consigne ? Regarde aussi le délestage, la sécurité et les fenêtres.
Fais un diagnostic de climate.thermostat_salon. Si les données ne suffisent pas,
indique quelle documentation VTherm consulter et rappelle-moi comment utiliser
le collecteur et l'analyseur de logs.
18. Französisch — Aktionen
Mets la consigne du thermostat du salon à 19,5 °C.
Passe climate.thermostat_salon en preset comfort.
Passe climate.thermostat_salon en mode HVAC off.
Remets climate.thermostat_salon en mode heat puis affiche son état.
19. Englisch — Lesen und Diagnose
List my Versatile Thermostats and show their current temperature,
target temperature and HVAC action.
Diagnose climate.thermostat_salon and explain why it is not heating.
Do not infer a cause that is not supported by the VTherm diagnostic data.
Debug climate.thermostat_salon. Check power shedding, safety, window detection,
auto start/stop and unavailable underlying entities.
If the current diagnostic data is not enough, tell me which VTherm documentation
page or log-analysis workflow I should use next.
20. Englisch — Aktionen
Set climate.thermostat_salon to 19.5 °C.
Set climate.thermostat_salon preset to comfort.
Set climate.thermostat_salon HVAC mode to off.
Fehlersuche
21. Kein VTherm-Werkzeug erscheint
Prüfen:
-
ob die Datei hier vorhanden ist:
/config/custom_components/versatile_thermostat/llm.py
/config/custom_components/versatile_thermostat/recorder_export.py /config/custom_components/versatile_thermostat/tpi_history.py /config/custom_components/versatile_thermostat/tpi_identification.py
2. Home Assistant wurde neu gestartet;
3. VTherm wurde normal geladen;
4. mindestens eine VTherm-`climate`-Entität ist für Assist freigegeben;
5. die Assist-/Device-Control-API wird vom MCP-Server bereitgestellt;
6. der MCP-Client hat sich nach dem Neustart erneut verbunden.
Die Plattform `llm.py` wird bei Bedarf geladen: Das Fehlen einer Meldung beim Start von Home Assistant bedeutet nicht zwangsläufig, dass sie nicht erkannt wurde.
---
## 22. Lesewerkzeuge erscheinen, Aktionswerkzeuge jedoch nicht
Folgende Option prüfen:
```text
Model Context Protocol Server → Read only
Für Stufe 2A:
Read only = OFF
23. Eine Aktion wird abgelehnt
Das Werkzeugergebnis nennt normalerweise den Grund:
- kein authentifizierter Benutzerkontext;
- unzureichende Berechtigung;
- Temperatur außerhalb des zulässigen Bereichs;
- Preset nicht vorhanden;
- HVAC-Modus nicht unterstützt;
- Fehler vom Home-Assistant-Dienst zurückgegeben.
Mit list_vtherms oder get_status können die tatsächlich von der Entität unterstützten Werte abgerufen werden.
TPI-Koeffizienten anhand des Verlaufs optimieren
Eine einfache Frage genügt, etwa: „Sind die Koeffizienten des Thermostats im Elternschlafzimmer optimal?“ oder „Sind meine Koeffizienten gut eingestellt?“. Die Werkzeugbeschreibungen führen den Assistenten zur schreibgeschützten TPI-Prüfung und Berechnung; bei Bedarf wird der Raumname aufgelöst. Werkzeugnamen oder eine entity_id sind in der Frage nicht erforderlich, ebenso wenig der Zugriff auf das Dashboard. Der gewählte Konnektor muss jedoch check_tpi_optimization und analyze_tpi_coefficients bereitstellen: Eine andere Formulierung macht fehlende Werkzeuge nicht verfügbar. Ergebnisse bleiben explorative Schätzungen, kein Nachweis eines Optimums.
Drei Werkzeuge ergänzen die bisherigen Funktionen:
Werkzeug (Suffix versatile_thermostat__…) | Zugriff | Schritt |
|---|---|---|
check_tpi_optimization | Nur Lesen | 1/3 — Prüfung |
analyze_tpi_coefficients | Nur Lesen | 2/3 — Analyse |
set_tpi_coefficients | Explizites Schreiben | 3/3 — optionale Anwendung |
Lesewerkzeuge benötigen nur entity_id. Der Client kündigt jeden Schritt vor dem Aufruf an; Hintergrundarbeit wird nicht simuliert. Jede Antwort enthält stage, stage_number, stage_total und state_changed.
Die Analyse erfordert klassisches TPI (proportional_function=tpi), ohne konfiguriertes Auto-TPI, aktives Lernen oder kontinuierliche Außenkompensation. Diese Version unterstützt over_switch mit einem oder mehreren physischen Schaltern. Aufgezeichnete EIN-Zeiten werden integriert und gemäß VTherms gleichen Leistungsanteilen device_power / N gemittelt, einschließlich versetzter Phasen und Übergänge innerhalb einer Minute. Die absolute Heizleistung ist nicht erforderlich. Unterschiedliche individuelle Heizleistungen werden dadurch nicht gemessen.
Für over_climate, over_valve und Climate-Ventilregelung liefert die Antwort ausdrücklich eligible: false, supported: false, reason: unsupported_thermostat_type: Für diesen Typ ist die Analyse noch nicht verfügbar. Mehrdeutige virtuelle Befehle werden ebenfalls abgelehnt; kein blinder Rückgriff auf hvac_action.
Recorder liefert höchstens die letzten 14 Tage. Nach Ausschlüssen sind mindestens 7 Tage tatsächlich nutzbarer Minuten erforderlich. Innen- und Außensensor stammen aus der effektiven VTherm-Konfiguration einschließlich zentraler Konfiguration. Ergebnisse enthalten sources, history_requested_days, history_available_days, history_usable_days, Ausschlüsse und aktuelle Einstellungen. Eine Recorder-Aufbewahrungsdauer wird nicht vorausgesetzt.
Die Antwort enthält applicability_note (FR/EN): Die Koeffizienten sind explorative Schätzungen aus dem analysierten Zeitraum; ihre Eignung unter anderen Bedingungen ist nicht nachgewiesen. Bei wesentlichen Änderungen der Heizbedingungen oder Wohnungsnutzung oder bei einer Verschlechterung der Regelung die Analyse für einen repräsentativen Zeitraum wiederholen, bevor eine Anpassung erwogen wird. Eine Änderung der Außentemperatur allein erfordert keine Neuberechnung.
Der Kalman-Vergleich ist in der MCP-Antwort deaktiviert: Simulationen zeigen, dass Koeffizienten innerhalb der Grenzen dennoch ungenau sein können. experimental_estimator meldet unavailable mit dem Grund experimental_model_not_validated_for_application, ohne Kalman-Berechnung oder Koeffizienten. Für Offline-Untersuchungen bleibt der Schätzer verfügbar; Werte außerhalb [0, 10] (innen) und [0, 1] (außen), unzureichende Anregung und instabile Schätzungen werden abgelehnt. Beschneiden macht aus einer fehlgeschlagenen Schätzung kein brauchbares Ergebnis. Diese Filter beweisen keine Zuverlässigkeit; OLS bleibt explorativ und die Anwendung erfolgt niemals automatisch. Bootstrap-Intervalle bleiben unkalibriert und werden nicht auf die Dienstgrenzen gekürzt.
Temperaturen werden auf einem Minutenraster kausal höchstens 60 Minuten gehalten. Anders als bei der Außeninterpolation des Referenzskripts werden keine zukünftigen Messungen verwendet. Binäre HA-Zustände gelten bis zum nächsten Ereignis; unknown/unavailable machen das Intervall ungültig. Physische sowie Diagnose-Sensoren für Sicherheit, Lastabwurf und Fenster werden über Recorder gelesen, da Climate-Diagnoseabschnitte oft nicht aufgezeichnet werden. Fehlende notwendige Filterquellen führen zur Ablehnung. HVAC-Zeiträume außerhalb von heat, aktive Schutzfunktionen, offene Fenster und Datenlücken werden ausgeschlossen. Jede Auflösung meldet ausgeschlossene Fensterzyklen. Diese Version erfordert eine VTherm-Konfiguration in °C; Quellsensoren in °F werden in °C umgerechnet.
Das Modell behält ΔT = g × (T_ext - T_int) + B × u + q, coef_ext = g/B, A = 1-g und coef_int = (A-exp(-dt/tau_cl))/B bei. Bevorzugte Konvergenz bleibt 6 h, mit einer Tabelle für 3/4/5/6/8/10/12 h. Tatsächliches cycle_min hat Vorrang neben 10/20/30/60 Minuten; gegebenenfalls erfolgt ein ausdrücklich gemeldeter Rückgriff auf die nächste gültige Auflösung. Jeder Fit erfordert 40 Zyklen, 80 % gültige Minuten und die physikalischen Grenzen des Referenzskripts. Fehlende Intervalle werden nie unbemerkt zu längeren Zyklen.
Chronologische Aufteilung 70 % Training / 30 % Validierung, OLS numpy.linalg.lstsq, MAE, RMSE, ΔT-R² und Konditionierung bleiben erhalten. Zeitlicher Bootstrap verwendet 1000 Wiederholungen, 24-Stunden-Blöcke und Seed 20261030; Lücken verkürzen die Blöcke nicht. Ungefähre 95%-Konfidenzintervalle werden ausgegeben. Weniger als 30 akzeptierte physikalische Wiederholungen führen zu bootstrap_failed. Nichtphysikalische Modelle oder Konditionszahlen ≥1000 werden abgelehnt; 100–1000 erfordert Vorsicht. Ein niedriges R² allein ist kein Ablehnungsgrund. Relative coef_ext-Spannweite über 25 %, weniger als drei Auflösungen oder ein breites Intervall erzeugen Warnungen. Bei recommendation_reliable: false darf der Kandidat nicht als zuverlässig beschrieben werden. CSV, Grafiken, Berichte oder andere Dateien sind weder erforderlich noch werden sie erzeugt; keine zusätzlichen pandas/matplotlib-Abhängigkeiten.
Die Analyse wendet niemals Koeffizienten an. Ergebnisse, Grenzen und Vergleich darstellen, dann die Benutzerentscheidung abwarten. Eine explizite direkte Änderung benötigt weder Verlauf noch Analyse:
{"entity_id": "climate.thermostat_salon", "coef_int": 0.35, "coef_ext": 0.025}
Mindestens ein Koeffizient ist erforderlich; Teiländerungen sind möglich. VTherm-Dienstgrenzen: 0 <= coef_int <= 10, 0 <= coef_ext <= 1, nur endliche Werte. Das Werkzeug prüft Assist-Freigabe, klassisches TPI, authentifizierten Benutzer und CONTROL erneut und ruft ausschließlich versatile_thermostat.set_tpi_parameters mit diesem Kontext auf. Zentrale Konfiguration und Sperren werden weiterhin vom vorhandenen Dienst geprüft. Der Dienst kann Einstellungen speichern; das Werkzeug schreibt niemals direkt in eine ConfigEntry.
large_change bedeutet eine absolute Änderung von 0.15 für coef_int, 0.01 für coef_ext oder eine relative Änderung von 50 % (jede Änderung ausgehend von null gilt als groß). Dies sind Bestätigungsschwellen, keine thermischen Sicherheitsgarantien. Ohne Schreibzugriff liefert das Werkzeug large_change_confirmation_required, confirmation_required: true, Vergleich und confirmation_token. Nach zusätzlicher ausdrücklicher Benutzerbestätigung dieselben Werte mit confirm_large_change: true und dem Token erneut aufrufen. Er läuft nach 10 Minuten ab und gilt nur für Benutzer, Thermostat und exakten Vergleich; geänderte aktuelle Einstellungen machen ihn ungültig.
Nach dem Aufruf werden Werte vom geladenen VTherm-Objekt erneut gelesen, auch nach einem Neuladen: previous, requested, applied. Fehler nach einem Dienstaufruf liefern state_changed: null und erfordern eine Prüfung; sie behaupten nicht, dass nichts geändert wurde. Ablehnungen vor dem Aufruf melden, dass kein Koeffizient geändert wurde. Ablehnungen niemals über generische Dienste umgehen.
MCP Read only behält beide Analysewerkzeuge und blendet set_tpi_coefficients wie die anderen Aktionen aus.
Technische Referenzen
-
Home Assistant — Model Context Protocol Server
https://www.home-assistant.io/integrations/mcp_server/ -
Home Assistant Core — LLM-Plattform
climate
https://github.com/home-assistant/core/blob/dev/homeassistant/components/climate/llm.py -
Home Assistant Core — API
Tool,ToolResult,ToolAnnotations
https://github.com/home-assistant/core/blob/dev/homeassistant/helpers/llm.py -
Home Assistant Core — Dienste
climate
https://github.com/home-assistant/core/blob/dev/homeassistant/components/climate/ -
Home Assistant Core — MCP-Server-Konfiguration (
read_only,require_admin)
https://github.com/home-assistant/core/blob/dev/homeassistant/components/mcp_server/config_flow.py -
Versatile Thermostat — offizielles Repository
https://github.com/jmcollin78/versatile_thermostat -
Versatile Thermostat — Referenzdokumentation
https://www.versatile-thermostat.org/fr/docs/reference/ -
Versatile Thermostat — Log-Sammler
https://www.versatile-thermostat.org/fr/docs/feature-logs-collector/ -
Versatile Thermostat — Log-Analysator
https://www.versatile-thermostat.org/fr/debugger/
Recorder-Verlauf: CSV-Exporte und Diagramme
Bei „Erstelle ein professionelles, kommentiertes Diagramm des Küchenthermostats über 48 Stunden“ wird der Assistent zu get_history und anschließend zur Diagrammerstellung im Client nach Abruf aller Seiten geführt. ApexCharts-/Lovelace-YAML wird nur bei ausdrücklichem Wunsch nach Dashboard-Konfiguration angeboten. Der Climate-Verlauf von SmartPI kann dargestellt werden, obwohl die TPI-Koeffizientenanalyse SmartPI ablehnt. Anmerkungen müssen auf aufgezeichneten Ereignissen beruhen; das Werkzeug liefert weder historische SmartPI-Leistung noch physische Relaisverläufe. Aktuelle Werte können diese Reihen nicht rekonstruieren. Fehlt get_history im Konnektorkatalog, muss der Assistent diese Grenze erklären.
Das Lesewerkzeug versatile_thermostat__get_history übermittelt dem MCP-Client den aufgezeichneten Verlauf der VTherm-climate-Entität: Zustand, gemessene Temperatur, Sollwert, HVAC-Aktion und Preset, soweit aufgezeichnet. Es unterstützt alle VTherm-Typen unabhängig von der TPI-Analyse. Es gibt weder den gesamten Recorder noch die Verläufe zugehöriger Sensoren und Relais frei.
Der Client (ChatGPT, Claude, Gemini, Codex usw.) ruft die Daten ab und erstellt je nach seinen Fähigkeiten CSV-Dateien oder Diagramme. Beispiele: „Exportiere eine Woche Wohnzimmerverlauf als CSV“ oder „Zeichne Bürotemperatur und Sollwert über zwei Tage“.
Parameter: entity_id, start_time, end_time (ISO 8601 mit Zeitzone), offset (Standard 0) und limit (Standard 500, maximal 500). Ein Zeitraum umfasst höchstens 14 Tage; längere Zeiträume aufteilen. Alle Seiten mit next_offset und unveränderten Zeitgrenzen bis null abrufen. Ergebnisse enthalten rows, total_rows, next_offset, pagination_complete, UTC-Zeitstempel und verfügbare aufgezeichnete Attribute. Die Seitennavigation ist kein eingefrorener Recorder-Schnappschuss.
Nur weiterhin für Assist freigegebene VTherms sind mit einem authentifizierten Benutzer mit Leseberechtigung zugänglich. Punkte sind aufgezeichnete Änderungen und keine regelmäßigen Messungen; Recorder kann einen Zustand zum Periodenbeginn fortschreiben. Fehlende Felder bleiben null, und unknown/unavailable bleiben ausdrücklich erhalten. Aufbewahrung, Ausschlüsse und Ausfälle können die Daten begrenzen; vollständig abgerufene Seiten garantieren keinen vollständigen Verlauf. Der Client muss diese Grenzen nennen und darf fehlende Werte nicht erfinden. Es wird keine Konfiguration geändert.