HM-CC-TC Raumthermostate automatisch steuern

In den vergangenen Jahren ärgerte mich eigentlich immer wieder, wenn eines der Raumthermostate mal wieder auf „Manuell“ stand, obwohl eigentlich ein Profil soch um die Temperatur kümmern sollte.

Natürlich macht es manchmal Sinn, die Temperatur auch manuell einzustellen, aber dann sollte diese Einstellung auch wieder irgendwann automatisiert werden – was man nur allzuleicht vergisst.

Die Möglichkeit dazu liegt eigentlich schon lange vor, da ich ja auch mit einer CCU (bzw seit geraumer Zeit RaspiMatic) arbeite. Nur.. bisher war der Leidensdruck nicht hoch genug, um den „Arsch hochzukriegen“. Heute soll es endlich passieren.

Eine Lösung fand ich jetzt hier: http://www.wikimatic.de/wiki/Funk-Wandthermostat_(HM-CC-TC)#Sonstiges bzw dort wird direkt weiterverlinkt auf: http://www.fhz-forum.de/viewtopic.php?f=31&t=5621

Dazu wird zunächst ein TCL-Skript „/usr/local/setparam.tcl“ in der CCU angelegt mit dem folgenden Inhalt:

#
# Aufruf für ein putParamset (z.B. via system.Exec)
# =================================================
# von Oliver Wagner <owagner@vapor.com>
#
# tclsh setparam <addresse> <item> <datentyp> <wert>
# z.B.
# tclsh setparam GEQ004711:2 MODE_TEMPERATUR_REGULATOR int 1
#
# Diese Version ist fuer Funk. Fuer Wired muss unten der Port von 2001 auf 2000 geaendert werden.
#
load tclrpc.so
set item [lindex $argv 1]
set datatype [lindex $argv 2]
set val [lindex $argv 3]
set cmd "{$item {$datatype $val}}"
xmlrpc http://127.0.0.1:2001/ putParamset [list string [lindex $argv 0]] [list string "MASTER"] [list struct $cmd]

Das folgende WebUI-Skript stellt dann alle Raumthermostate aus dem Gewerker Heizung auf „Auto“. Dieses Skript lasse ich dann zeitgesteuert aktuell jede Nacht um 1:00 ausführen:

! Heizungs-Mode setzen
! Version 1.0
! Script setzt alle Heizungsregler aus dem Gewerk HEIZUNG in den Modus 0=MANU, 1=Auto, 2=CENT
! Script von Erik Groennerud - 11.12.2010
! http://homematic-forum.de/forum/viewtopic.php?f=31&t=5621&p=36987#p36987

var Mode=1;

var myAssembly = dom.GetObject("Heizung");
     string itemID;
     foreach(itemID, myAssembly.EnumUsedIDs())
     {
       var item = dom.GetObject(itemID);
       if (item.IsTypeOf(OT_CHANNEL))
       {

         var device = dom.GetObject(item.Device());
         if (device.HssType() == "HM-CC-TC")
         {
           var addr=dom.GetObject(device).Address();
					 var stdout;
					 var stderr;
					 system.Exec("tclsh /usr/local/setparam.tcl "+addr+":2 MODE_TEMPERATUR_REGULATOR int "+Mode,&stdout,&stderr);
         }
       }
     }

Eigentlich bin ich jetzt noch auf der Suche nach einer Möglichkeit, Heiz-Profile in den Thermostaten einzustellen, um zB. darauf reagieren zu können, Gäste zu haben und dann im Gästezimmer ohne viel Aufwand ein passendes Profil einzustellen.

Die andere Option, generell durch die Zentrale skriptgesteuert die Temperatur einzustellen, scheiterte unlängst an einem nicht mehr funktionierenden (relativ altem) WebUI-Skript aus dem Homematic-Forum. an der Tatsache, dass ich einen Raum als „Gaeste“ benannt hatte, das Skript eine Systemvariable „Gaeste“ abfragt, dort aber als Objekt den Raum zurückbekommt… (Dazu schreibe ich vielleicht demnächst auch noch einen kurzen Beitrag.)