ich hatte immer wieder folgendes Problem mit den Wand-Thermostaten:
Wenn ein Fenster geöffnet ist, gilt die "Window-Open-Temperatur" von 6°.
Ändert sich nun jedoch die Soll-Temperatur (z.B. weil zeitgesteuert über die Zentrale oder im Auto-Modus eine neue Temperatur eingestellt wird), so wird die Window-Open-Temperatur damit überschrieben und die Heizung heizt zum offenen Fenster heraus...
Ich habe nun ein Script geschrieben, das diesen Fall abfängt und das Thermostat wieder auf 6° zurück stellt.
Dazu reagiert das Script auf die Änderung des Soll-Wertes. Sollte dieser nicht 6° entsprechen, dann prüft das Script, welche Fenster mit dem Thermostat verknüpft sind. Ist eines dieser Fenster offen, wird wieder auf 6° zurück geregelt.
Zur Abfrage, welche Fenster verknüpft sind, wird ein einfaches TCL-Script benötigt, das man mittels ftp auf die CCU kopieren muss. Der Rest ist natives Homematic-Script.
Hier das TCL-Script "getlinkpeers.tcl":
Code: Alles auswählen
#
# Zeigt die LinkPeers von getLinkPeers
# =================================================
# (C) Sebastian Dworok
# auf Basis von setparam.tcl von Oliver Wagner <owagner@vapor.com>
#
# tclsh getlinkpeers <addresse>
# z.B.
# tclsh getlinkpeers IEQ0123456:3
#
# Diese Version ist fuer Funk. Fuer Wired muss unten der Port von 2001 auf 2000 geaendert werden.
#
load tclrpc.so
set ausgabe [xmlrpc http://127.0.0.1:2001/ getLinkPeers [list string [lindex $argv 0]] ]
puts $ausgabe
/usr/local/addons/tcl
Dann erstellt man folgendes Programm, in das man alle im Haus vorhandenen Thermostate einfügt: Und fügt folgendes Script ein:
Code: Alles auswählen
! Thermostat-WOT-Script
! Prüft bei Änderung der Temperatur, ob die Temperatur der WOT-Temperatur entspricht.
! Wenn nicht, wird geprüft, ob doch noch Fenster offen sind.
! Wenn ja, wird wieder die WOT eingestellt.
! (C) Sebastian Dworok
! Konstanten (WOT = Window_Open_Temperature; WCT = Window_Close_Temperature)
var WOT = "6";
! Auslösenden Heizungsregler ermitteln
var channelid = dom.GetObject("$src$").Channel();
var deviceid = dom.GetObject(channelid).Device();
var address = dom.GetObject(deviceid).Address();
var setpoint = "$val$";
if (setpoint.ToFloat() != WOT.ToFloat()) {
! Temperatur entspricht nicht der WOT
!Verknüpfte Fensterkontakte ermitteln und prüfen, ob eines davon offen steht (WindowOpen = true)
var stdout;
var stderr;
system.Exec("tclsh /usr/local/addons/tcl/getlinkpeers.tcl "+address+":3",&stdout,&stderr);
string Link;
boolean WindowOpen = false;
foreach (Link, stdout.Substr(0, stdout.Length()-1).Split(" ")){
var channel=dom.GetObject("BidCos-RF." # Link # ".STATE");
if (channel.Value() == true) {WindowOpen = true;}
}
if (WindowOpen) {
! Ein Fenster ist auf
! Setpoint manuell auf WOT setzen
dom.GetObject("BidCos-RF." # address # ":2.SETPOINT").State(WOT);
}
}
Der Vorteil gegenüber der Lösung im hier im Forum bereits vorhandenen Heizungs-Script ist, dass die Direktverknüpfungen der Fenster mit dem Thermostat erhalten bleiben können und damit auch das "Fenster offen"-Symbol im Display angezeigt wird.
Folgende Verbessungen könnte man noch einfügen:
Es wird generell angenommen, dass die WOT 6° beträgt. Man könnte hier (dazu wird wieder ein TCL-Script benötigt) noch die tatsächlich am Thermostat programmierte WOT auslesen. Da ich aber an allen Thermostaten 6° eingestellt habe, benötige ich diese Funktion aktuell nicht.
Vielleicht nutzt es dem einen oder anderen ja etwas.
Viele Grüße,
Sebastian