NEWS
Thermostat mit ext. Ist-Temperatursensor (Empfehlung)
-
Das selbe Problem hatte ich bei mir auch. Allerdings hatte ich nicht darauf geachtet, ob das Thermostat das kann sondern einfach eines gekauft, welches Zigbee spricht.
Meine Lösung: Ein kleines Skript, was auf den Sollwert des Thermostats die Differenz zwischen Temperatur des Thermostats und Temperatur des Thermometers addiert.
Im Detail: Ich habe mir einen Datenpunkt 0_userdata.0.SollTemperatur erstellt, in dem ich die gewünschte Temperatur einstelle.
Außerdem gibt es einen Datenpunkt 0_userdata.0.Fensteröffnung (boolean), an dem festgehalten wird ob eines der Fenster geöffnet ist.Im Skript:
const id_thermostat = "zigbee.0.847127fffe0a488b"; const id_thermometer = "zigbee.0.00124b0022e97dce"; async function setThermostat (obj) { if (getState ("0_userdata.0.Fensteröffnung").val) { setState (id_thermostat + ".target_temperature", 5); return; } // Differenz berechnen und auf max. +/-5°C beschränken let d = getState("0_userdata.0.SollTemperatur").val - getState(id_thermometer + ".temperature").val; if (d < -5) d = -5; else if (d > 5) d = 5; const old_temperature = getState (id_thermostat + ".target_temperature").val; const new_temperature = getState (id_thermostat + ".local_temp").val + d; const diff = old_temperature - new_temperature; if (diff < 0 || diff > 0.5) { setState(id_thermostat + ".target_temperature", new_temperature); } } on({id: new RegExp('0_userdata\\.0\\.SollTemperatur' + "$|" + 'zigbee\\.0\\.00124b0022e97dce\\.temperature' + "$|" + '0_userdata\\.0\\.Fensteröffnung' + "$|" + 'zigbee\\.0\\.847127fffe0a488b\\.local_temp' + "$"), change: "ne"}, setThermostat); setThermostat ({});Beim Reduzieren der Temperatur habe ich noch eine Schwelle von 0.5°C eingebaut, da ich festgestellt habe, dass dadurch die Temperatur etwas schneller und besser erreicht wird und um die Änderungshäufigkeit etwas zu reduzieren.
Ich bekam gerade folgende Frage per Chat:
Was tut das Script, wenn der Datenpunkt 0_userdata.0.Fensteröffnung auf true steht?
Ich antworte mal hier, damit andere, denen sich die Frage stellt, auch etwas davon haben ;)
Nochmal kurz die Stelle um die es geht:if (getState ("0_userdata.0.Fensteröffnung").val) { setState (id_thermostat + ".target_temperature", 5); return; }Wenn in dem Objekt Fensteröffnung der Wert true steht, dann wird das Heizkörperthermostat auf 5°C gesetzt. Das ist die niedrigste Einstellung, die bei dem Thermostat möglich ist und entspricht der Frostschutztemperatur.
Also: Fenster offen -> Heizung aus. Durch das return wird danach auch keine weitere Anweisung dieser Funktion ausgeführt.Das Objekt Fensteröffnung wird durch ein anderes Skript gesetzt, da ich zum einen in dem Zimmer mehrere Fenster habe und zum anderen auch noch weitere Dinge darüber steuere.
-
Die Shelly TRV kannst Du dafür nutzen, da Du die IST Temperatur über HTTP API oder mqtt setzen kannst. Damit bist Du völlig unabhängig von der Hardware und kannst über den IOBroker steuern. Damit ist auch die Frage des Protokolls des Temperatursensors obsolet.