Einen externen Temperatursensor mit einem smarten Thermostat von Aqara zu koppeln ist aktuell über die WebGUI von zigbee2MQTT nicht möglich. Über einen kleinem Umweg/Workaround geht es aber doch.
Allen smarten Thermostaten ist es gemein, dass diese die aktuellen Raumtemperaturen direkt am Thermostat messen. Das verfälscht die tatsächliche Raumtemperaturmessung und ein Raum wir nicht wirklich effizient geheizt.
Sinnvoller ist es da, einen externen, sich direkt in der Mitte des Raumes befindenden Temperatursensor einzusetzen. Dieser soll die Werte an das Thermostat senden. Das Thermostat öffnet bzw. schliesst dann ausgehend von diesen Werten das Ventil.
In diesem Beispiel zeige ich das Setup mit folgenden Komponenten:
Aqara Thermostat E1 (Model: SRTS-A01 (Fw. mind. 0.0.00-0.a.1e)
Aqara Temperatur und Luftfeuchte Sensor WSDCGQ11LM
zigbee2MQTT Version 2.6.0 (derzeit aktuellstes stable)
Frontend-Version 0.9.20 (derzeit aktuellstes stable)
Beide Geräte sind entsprechend in FHEM eingebunden und liefern die erforderlichen Werte. Das Setup besteht grundsätzlich aus einem zigbee2MQTT Docker Container und einer FHEM Instanz.
FHEM selbst ist der MQTT Broker (Server). Ein expliziter MQTT_CLIENT ist in meinem Setup also nicht erforderlich.
Setzt man einen externen, FHEM-unabhängigen Broker ein (bsp. mosquitto), muss in FHEM zuvor ein entsprechender MQTT_Client zur Kommunikation mit dem Broker eingerichtet werden. Der Rest bleibt gleich.
Anpassungen an den zigbee2MQTT Geräten
Zunächst gibt man in der zigbee2MQTT WebGui an, dass das Thermostat auf einen externen Temperatursensor reagieren soll. Dafür wechselt man in das entsprechende Gerät und setzt die Sensoreinstellung auf external (Reiter Details):

Fährt man anschliessend mit dem Mauszeiger einfach über den Punkt „External temperature input„, sieht man das erforderlich property, welches aktualisiert werden muss. Dieses notiert man sich:

„external_temperature_input“
FHEM Notify zur Aktualisierung des Gerätewertes „local_temperature“ am Thermostat
Wenn man mehrere Thermostate und Temperatursensoren im Einsatz hat, bietet es sich an, dass Notify in FHEM entsprechend dynamisch aufzubauen. Natürlich kann man auch pro Gerät/Thermostat und Sensor einzelne Notifies definieren.
Da ich mehrere im Einsatz habe und das Ganze übersichtlich halten will, kommt alles in ein dynamisches Notify mit einem Mapping:
MQTT2_zigbee_TH\.(Sensor1|Sensor2|Sendor3|Sensor4) {
# nur reagieren, wenn das Event zum Reading "temperature" gehört
return unless ($EVENT =~ /^temperature\b/);
my %map = (
Antonia => 'Hz.1',
Julian => 'Hz.2',
Bad => 'Hz.3',
WC => 'Hz.4'
);
# Key aus dem auslösenden Device-Namen gewinnen
my ($key) = $NAME =~ /^MQTT2_zigbee_TH\.(.+)$/;
return unless defined $key && exists $map{$key};
# Direkt-Publish
fhem("set DeinMQTTClient_o_Broker publish zigbee2mqtt/$map{$key}/set {\"external_temperature_input\":[MQTT2_zigbee_TH.$key:temperature]}");
}
Was passiert?
Immer dann, wenn sich ein Wert eines der externen Sensoren ändert, wird ein Event ausgelöst. FHEM liest dann den Wert temperature aus dem Sensor und published diesen direkt an das entsprechend gemappte Gerät/Thermostat in das property „external_temperature_input“. Geräteintern wird dann der Wert „local_temperature“ mit dem Wert aus external_temperature_input ersetzt. Das macht die Firnmware.
Die Werte des externen Sensors und die im reading „local_temperature“ des Thermostats sind also immer gleich und das Thermostat regelt nach dem externen Sensor und nicht mehr nach dem internen des Thermostats.
externer Sensor:

Thermostat:

Es ist angekündigt, in einer der kommenden stable Versionen von zigbee2MQTT eine direkte Kopplung von Sensoren an Thermostate bereitzustellen. Wann dieses jedoch soweit sein wird, steht in den Sternen.