Zwei Wandthermostate synchronisieren

In seltenen Fällen kann es notwendig oder sinnvoll sein, dass man zwei Wandthermostate synchronisieren möchte.
Sei es, dass man zwei Räume immer auf gleicher Temperatur halten möchte oder sei es, dass es in einem Raum einfach an zwei Stellen die Möglichkeit geben soll, die Temperatur im Raum einzustellen.

Da keine direkten Verknüpfungen zwischen den Thermostaten möglich sind, kann man nur den Weg über ein Zentralenprogramm mit Skript wählen.

Als erstes erstellen wir ein Zentralenprogramm, das die beiden zu synchronisierenden Thermostate als Trigger enthält.
Als Bedingung wird die Solltemperatur und als Wertebereich größer als 5.00° C ausgewählt und bei Aktualisierung auslösen. Die beiden Thermostate werden als Trigger mit ODER verknüpft, denn die Änderung an einem von beiden – und zwar egal an welchem – soll die Aktivität: Dann… ausführen.

WTH Sync

Unter Aktivität: Dann… wählen wir Skript aus und fügen dort folgendes Skript ein:

!Thermostate
string thermostat_a = "000C98A98F27A3";
string thermostat_b = "000C970996690C";

!Ab hier nichts mehr ändern
object trigger = dom.GetObject("$src$");
if(trigger)
{
    string tname = trigger.Name();
    boolean a_source = tname.Contains("HmIP-RF." # thermostat_a # ":1.SET_POINT_TEMPERATURE");
    boolean b_source = tname.Contains("HmIP-RF." # thermostat_b # ":1.SET_POINT_TEMPERATURE");
}

if (a_source == true) {
   var new_temp = dom.GetObject("HmIP-RF." # thermostat_a # ":1.SET_POINT_TEMPERATURE").Value();
   var old_temp  = dom.GetObject("HmIP-RF." # thermostat_a # ":1.SET_POINT_TEMPERATURE").LastValue();
   var thermostat_b_temp = dom.GetObject("HmIP-RF." # thermostat_b # ":1.SET_POINT_TEMPERATURE").Value();
   if ((new_temp != old_temp) && (new_temp != thermostat_b_temp)) {
      dom.GetObject("HmIP-RF." # thermostat_b # ":1.SET_POINT_TEMPERATURE").State(new_temp);
   }
}
else {
  if (b_source == true) {
     var new_temp = dom.GetObject("HmIP-RF." # thermostat_b # ":1.SET_POINT_TEMPERATURE").Value();
     var old_temp  = dom.GetObject("HmIP-RF." # thermostat_b # ":1.SET_POINT_TEMPERATURE").LastValue();
     var thermostat_a_temp = dom.GetObject("HmIP-RF." # thermostat_a # ":1.SET_POINT_TEMPERATURE").Value();
     if ((new_temp != old_temp) && (new_temp != thermostat_a_temp)) {
        dom.GetObject("HmIP-RF." # thermostat_a # ":1.SET_POINT_TEMPERATURE").State(new_temp);
     }
  }
}
 

Nun editieren wir die beiden Zeilen 2. und 3. und tragen dort die Seriennummern unserer Thermostate ein.
string thermostat_a = "000C98A98F27A3";
string thermostat_b = "000C970996690C";

Die Seriennummer der Thermostate finden wir unter Einstellungen -> Geräte
WTH Serial

Das Skript erkennt, welches Thermostat das Programm durch Änderung der Soll-Temperatur getriggert hat.
Nun vergleicht das Skript die aktuelle Soll-Temperatur mit der vorherigen Soll-Temperatur dieses Thermostaten und ob die aktuelle Soll-Temperatur von der des zweiten Thermostaten abweicht. Nur wenn beides zutrifft, wird das zweite Thermostat auf dieselbe Temperatur gestellt.

Wichtiger Hinweis
Bei dieser Art der Synchronisation von zwei Thermostaten ist es wichtig, dass entweder beide Thermostate im manuellen Modus sind oder maximal ein Thermostat im Automodus arbeitet.