mein Name ist Thomas und ich bin neu hier! Vor 2 Wochen habe ich mir eine Homematic CCU2 und diverse Komponenten zugelegt. In mehreren Stufen habe ich meine Heizungssteuerung umgesetzt und bin nun sehr glücklich mit der jetzigen Lösung.
- 1. Einbau der Heizungsthermostate und anbinden an die CCU - OK
- 2. Heizungsscript pro Raum und Anbindung der Fenster Sensoren – OK
- 3. Steuern der Heizungstherme über Homematic - OK
- 4. Einschalten der Therme bei Bedarf durch eine Anforderung eines Raumes – OK
Hier meine Lösung für die Steuerung der Therme.
Da ich zur Miete Wohne, konnte ich nicht ohne weiteres an der Therme Veränderungen vornehmen, daher wollte ich das Thermostat ersetzen – weit gefehlt. Das Raumthermostat wird mit 24V aus der Therme angesteuert und versorgt somit die Schaltuhr, die wiederum die Therme ein und aus schaltet. Was mir nicht klar war, dass über ein drittes Kabel von dem Thermostat weitere Infos an die Therme gesendet werden, die z.B. die Umwälzpumpe noch 3 min laufen lässt, wenn ich die Raumtemperatur erreicht wurde und die Gaszufuhr unterbrochen wird. Also bleib mir nur die Möglichkeit, das Schalten der Schaltuhr zu simulieren.
Hierzu habe ich einen Schließer HM-LC-Sw1-Ba-PCB parallel zum Schließer der Schaltuhr angebracht. Dies hat den Vorteil, dass die HM übersteuert werden kann, falls defekt oder ausgefallen. Zum anderen ändere ich nichts an der Thermen Steuerung. (Außer etwas Lötzinn an den Kontakten)
Die Spannungversorgung des Schliessers habe ich über einen Spannungswandler von 24V auf 12V realisiert.
Nun konnte ich die Therme über die HM ansteuern und ein/ausschalten. Nun wollte ich, dass wenn ich z.B. außerhalb der normalen Zeiten den Heizkörper manuell aufdrehe, dass die Therme anspringt. Nach viel experimentieren und holprigen Versuchen der Scriptsprache bin ich zu einer für mich zufriedenstellenden Lösung gekommen.
Sicherlich kann dies noch optimiert werden, aber es funktioniert so bisher recht gut!
Das Script läuft alle 5 Min und fragt die einzelnen Räume ab, ob evtl. ein Thermotat den Steller weit geöffnet hat und die IST-Temperatur unterhalb der Soll-Temperatur liegt.
(Die Werte können pro Raum unterschiedlich sein, weil verschiedene Ventile verbaut sind)
Code: Alles auswählen
! Thermostate abfragen
! ----------------------------------------------------
object ThermostatRaum1;
string sRegler = "KEQ0512040";
integer HzRaum1=0;
integer HzBad=0;
integer HzWhz=0;
integer HzRaum2=0;
real toleanz_Temp = 1;
integer HZ_Status=0;
! aktueller Istwert von HM-CC-TC ermitteln
object ThermostatRaum1= dom.GetObject("BidCos-RF." # sRegler # ":4.ACTUAL_TEMPERATURE");
real akt_TempRaum1= ThermostatRaum1.Value();
! Eingestellten Sollwert von HM-CC-TC ermitteln
object ThermostatRaum1= dom.GetObject("BidCos-RF." # sRegler # ":4.SET_TEMPERATURE");
real soll_TempRaum1 = ThermostatRaum1.Value();
! Aktuelle Ventiloeffnung (%) von HM-CC-TC ermitteln
object ThermostatRaum1 = dom.GetObject("BidCos-RF." # sRegler # ":4.VALVE_STATE");
real akt_VentilRaum1 = ThermostatRaum1.Value();
! ----------------------------------------------------
! Kontrolle ob Heizung benötigt
! ----------------------------------------------------
if ((akt_TempRaum1 > soll_TempRaum1) && (akt_VentilRaum1<15))
{HzRaum1=0;}
if ((akt_TempRaum1 < (soll_TempRaum1 - toleanz_Temp)) || (akt_VentilRaum1>95))
{HzRaum1=1;}
! ----------------------------------------------------
! Thermostat Raum2 abfragen
! ----------------------------------------------------
object ThermostatRaum2;
string sRaum2Regler = "KEQ0734490";
! aktueller Istwert von HM-CC-TC ermitteln
object ThermostatRaum2= dom.GetObject("BidCos-RF." # sRaum2Regler # ":4.ACTUAL_TEMPERATURE");
real akt_TempRaum2 = ThermostatRaum2.Value();
string strAkt_TempRaum2 = ThermostatRaum2.Value();
! Eingestellten Sollwert von HM-CC-TC ermitteln
object ThermostatRaum2= dom.GetObject("BidCos-RF." # sRaum2Regler # ":4.SET_TEMPERATURE");
real soll_TempRaum2 = ThermostatRaum2.Value();
! Aktuelle Ventiloeffnung (%) von HM-CC-TC ermitteln
object ThermostatRaum2 = dom.GetObject("BidCos-RF." # sRaum2Regler # ":4.VALVE_STATE");
real akt_VentilRaum2 = ThermostatRaum2.Value();
! ----------------------------------------------------
! Kontrolle ob Heizung benötigt
! ----------------------------------------------------
if ((akt_TempRaum2 > soll_TempRaum2) && (akt_VentilRaum2 <20))
{HzRaum2=0;}
if ((akt_TempRaum2 < (soll_TempRaum2 - toleanz_Temp)) || (akt_VentilRaum2>95))
{HzRaum2=2;}
! ----------------------------------------------------
! Thermostate Bad abfragen
! ----------------------------------------------------
object ThermostatBad;
string sBadRegler = "KEQ0518109";
! aktueller Istwert von HM-CC-TC ermitteln
object ThermostatBad= dom.GetObject("BidCos-RF." # sBadRegler # ":4.ACTUAL_TEMPERATURE");
real akt_TempBad= ThermostatBad.Value();
string strAkt_TempBad= ThermostatBad.Value();
! Eingestellten Sollwert von HM-CC-TC ermitteln
object ThermostatBad= dom.GetObject("BidCos-RF." # sBadRegler # ":4.SET_TEMPERATURE");
real soll_TempBad = ThermostatBad.Value();
! Aktuelle Ventiloeffnung (%) von HM-CC-TC ermitteln
object ThermostatBad = dom.GetObject("BidCos-RF." # sBadRegler # ":4.VALVE_STATE");
real akt_VentilBad = ThermostatBad.Value();
! ----------------------------------------------------
! Kontrolle ob Heizung benötigt
! ----------------------------------------------------
if ((akt_TempBad > soll_TempBad) && (akt_VentilBad<20))
{HzBad=0;}
if ((akt_TempBad < (soll_TempBad - toleanz_Temp)) || (akt_VentilBad>95))
{HzBad=4;}
! ----------------------------------------------------
! Thermostate Whz abfragen
! ----------------------------------------------------
object ThermostatWhz;
string sWhzRegler = "KEQ0079670";
string sWhzSteller = "KEQ0086561";
! aktueller Istwert von HM-CC-TC ermitteln
object ThermostatWhz= dom.GetObject("BidCos-RF." # sWhzRegler # ":1.TEMPERATURE");
real akt_TempWhz= ThermostatWhz.Value();
string strAkt_TempWhz= ThermostatWhz.Value();
! Eingestellten Sollwert von HM-CC-TC ermitteln
object ThermostatWhz= dom.GetObject("BidCos-RF." # sWhzRegler # ":2.SETPOINT");
real soll_TempWhz = ThermostatWhz.Value();
! Aktuelle Ventiloeffnung (%) von HM-CC-TC ermitteln
object StellerWhz= dom.GetObject("BidCos-RF." # sWhzSteller # ":1.VALVE_STATE");
real akt_VentilWhz = StellerWhz.Value();
! ----------------------------------------------------
! Kontrolle ob Heizung benötigt
! ----------------------------------------------------
if ((akt_TempWhz > soll_TempWhz) && (akt_VentilWhz<15))
{HzWhz=0;}
if ((akt_TempWhz < (soll_TempWhz)) || (akt_VentilWhz>95))
{HzWhz=8;}
! ----------------------------------------------------
! Kontrolle aller Heizungen und ob einschalten/ausschalten
! ----------------------------------------------------
if ((HzRaum1 + HzBad + HzWhz + HzRaum2)>0)
{
var switch=dom.GetObject("BidCos-RF.KEQ0237566:1.STATE");
switch.State(1);
}
else
{
var switch=dom.GetObject("BidCos-RF.KEQ0237566:1.STATE");
switch.State(0);
}
! ----------------------------------------------------------------------------------
! Variable HZ_Status setzen
!
object sysHZ_Zustand=dom.GetObject('HZ_Status').State();
HZ_Status=(HzRaum1 + HzBad + HzWhz + HzRaum2);
dom.GetObject('HZ_Status').State(HZ_Status);
Soweit die Infos zu meiner ersten Homematic Umsetzung.
Kritik oder Verbesserungen werden gerne angenommen!
Gruß
Thomas