Programmierung der Fußbodenheizung mit der Homematic CCU2

Wie schon im Artikel Fussbodenheizung mit der Homematic steuern  beschrieben, kann man sehr komfortabel Heizungsteuerung mit der Homematic umsetzten. Auf der ELV Seite bzw im Forum von ELV wird davon abgeraten, da es keine entsprechende Steuerung gibt.

Ich habe diese jetzt 3 Jahre im Einsatz und kann nicht negatives darüber berichten. Mit den alten Thermostaten mit Bimetall gab es auch nur eine 2 Punkt Regelung mit einer sehr grossen Hysterese, die meist zu starken Schwankungen der Temperatur geführt haben. Auch eine Nacht Absenkung konnte nur über die Heizung geregelt werden. 

Das Ganze hat ist nicht nur Luxus sondern bietet auch viel Spar potenzial. Insgesamt 4 Pumpen laufen mit je 80 Watt meist unkoordiniert. Es gibt zwar Überströmventile oder auch die Möglichkeit intelligente Pumpen zu nutzen. Diese Pumpen liegen meist bei mehr als 300 € und mehr. Das kann auch mit der Entsprechenden Steuerung erfolgen.

Der Aufbau ist wie folgt:

Es  gibt 2 Heiszkreise, eine für die Fussbodenheizung und eine für die normalen Heizkörper (Badezimmer).  Für jeden Heizkreis gibt es eine eigene Pumpe.

Die 3 Pumpe ist für die Warmwasser Zirkulation und die 4 für den Warmwassertank. Auf diese beiden Pumpen werden ich auf einen späteren Artikel zurückkommen.

Die Ventile für die Fußbodenheizung sind 230 Volt Thermo Antriebe die stromlos geschlossen sind. Gesteuert werden diese über ein Homematic Hutschienen Modul „HomeMatic RS485 I/O-Modul, 12 Eingänge, 7 Schaltausgänge“

Bilder zur Umsetzung findet Ihr im alten Artikel Fussbodenheizung mit der Homematic steuern.

Die Heizkörper in den Badezimmer sind Homematic Funkstellantriebe. Die mit genügent Adaptern geliefert werden so das diese an fast jeden Heizkörper passen. Die Thermostate können dann ist und soll Temperatur bereitstellen. in den Thermostaten wird dann das Heizprogramm (Tag und Nacht Temperatur) hinterlegt.  Im Badezimmer habe ich noch ein Wand Thermostat angebaut. Das Wand thermostat wurde dann mit dem Funkstellantrieb als eine Gruppe verbunden. Zur Auswertung wird dann das neue Virtuelle Device benutzt. Diese Variante habe ich gewählt aus 2 Gründen. Der Stellantrieb liegt unten am Heizkörper und lässt sich dort nur schwer bedienen und der Stellantrieb liefert keine Feuchtigkeitswerte. Diese benötige ich aber um die Lüftung zu steuern.

In allen anderen Räumen sind Wand Thermostate verbaut. Von der Programmierung her haben diese die gleichen Funktion wie die Stellantriebe, nur das die Wand Thermostat noch Feuchtigkeitswerte übermittelt.

In der Übersichtszeichnung kann man das Prinzip sehen. Als Beispiel sind nur 2 Räume und ein Heizkreis abgebildet. Natürlich kann man für die Pumpe auch ein Funkmodul nutzen, wenn diese nicht mit Kabel zu erreichen ist.

Und an dieser Stelle noch mal als Hinweis:

WICHTIG: Arbeiten am 230V Netz dürfen nur von ausgebildeten Facharbeitern/Elektriker durchgeführt werden.

Homematic Fussboden Steuerung
Homematic Fussboden Steuerung

 Ich habe den RS485 Bus einmal in den Fußbodenverteiler und dort ein Wired Modul verbaut sowie ein Wired Modul im Heizungskeller. Damit ich dort alle 4 Pumpen steuern kann. Desweiteren kann über das Wired Modul auch über div 0-10V Eingänge die Temperaturen gemessen werden. Dazu schaut Euch mal diesen Beitrag an.Homematic Temperatur Messung.

 Zur Programmierung:

Es gibt 3 Varianten

  1.  Fußbodenheizung mit Wand Thermostat
  2.  Fußbodenheizung und Heizkörper mit Funkstellantrieb
  3.  Fußbodenheizung mit Wand Thermostat und Funkstellantrieb

Als erstes brauchen wir einige Systemvariablen mit den wir die Steuerung komfortabler machen können und beeinflussen können. Diese müssen auch angelegt werden, wenn sie nicht benötigt werden. Diese Variablen können dann über die Homdroid APP über ein Tablet dann verändert werden. Wichtig Gross und Kleinschreibung muss beachtet werden

Variablen:

Debug: Typ varchar

Diese Variable ist nur für Log Ausgaben.  Im Script muss in der Zeile var LOGGING=false; auf true stehen, wenn Ausgaben erzeugt werden sollen und die Variable muss bei Protokolliert ein Haken haben.

Heizung_Wartung:Typ Werteliste (normal;Wartung)

Einmal die Woche wird eine Entkalkung Programm gemacht. Dazu mehr im nächsten Artikel.

Heizung_Modus:Typ Werteliste (heizen;kühlen)

Mit der Einstellung kann soll und ist Temperatur getauscht werden und die Steuerung umgekehrt erfolgen. Wenn man im Sommer Kühlen will wird die Umkehrung benötigt

Variante 1:

Um das Script zu nutzen legt man ein Programm an. Wichtig ist das bei „Aktualisierung“ ausgewählt wird. Jedesmal wenn eine neue IST Temperatur gesendet wird, wird das Programm und das Script ausgeführt. Alternativ kann das auch noch mit einer „ODER“ Verknüpfung für die SOLL Temperatur geschehen. Dann wird sofort bei Manueller Änderung der Soll Temperatur das Programm ausgeführt und ggf das Ventil geöffnet oder geschlossen. Für jeden Raum muss ein Programm eingerichtet werden mit dem entsprechenden Thermostat. Im Script müssen dann noch die richtigen Thermostate und Ventile eingetragen werden.

thermostaht

(Script siehe unten)

Variante 2:

Die Variante 2 unterscheidet fast nichts von 1. Das Wand Thermostat und der Funkstellantrieb werden in einem Virtuellen Devices zusammengefasst in der Homematic. Nun bezieht man sich auf das Virtuelle Devices.

Variante 3:

Bad

Hier wird zusätzlich noch die Ventil Position abgefragt. Da die Ventile nicht Digital arbeiten, sondern eine Heizkurve haben. Ansonsten würde der Fußboden nicht warm werden aber der Heizkörper. Das gleiche auch im Script.

 

Script Variante 1+2:

var TempSensorSN = "BidCos-RF.LEQ0000430";        !Temperatur Sensor
var SchaltaktorSN = "BidCos-Wired.JEQ0497783:14"; !Fussboden Aktor
var TemperaturAussenSN="CUxD.CUX3100001";
var HeizungWartungSN="Heizung_Wartung";
var HeizungModusSN="Heizung_Modus";

var LOG = dom.GetObject('Debug');
var LOGNAME="Wohnzimmer Heizung: ";
var LOGGING=false;

if (LOGGING==true){LOG.State(LOGNAME+"start up");}

! Auswahl des Temperatur Sensors
!
!HM-TC-IT-WM-W-EU (neues Wand Termostat)
var TemperaturIST=dom.GetObject(TempSensorSN+":2.ACTUAL_TEMPERATURE").Value();
var TemperaturSOLL=dom.GetObject(TempSensorSN+":2.SET_TEMPERATURE").Value();

! SystemDaten laden
var HeizungWartungDOM=dom.GetObject(HeizungWartungSN);
var HeizungModusDOM=dom.GetObject(HeizungModusSN);

var HeizungWartung=HeizungWartungDOM.State();
var HeizungModus=HeizungModusDOM.State();

! Auswahl Ventil Status
var istVentil=dom.GetObject(SchaltaktorSN+".STATE").Value();

! Prüfe ob Wartung läuft
if (HeizungWartung==1) {
  if (LOGGING==true){LOG.State(LOGNAME+"quit-> Wartung")};
  quit;
}

!Kühlen oder Heizen
var temp1=0;
var temp2=0;

if (HeizungModus==0){
    !!!!!Heizen
    if (LOGGING==true){ LOG.State(LOGNAME+"heizen");}
    temp2=TemperaturSOLL;
      temp1=TemperaturIST;
}else{
    !!!!!Kühlen
    LOG.State(LOGNAME+"kühlen");
    temp1=TemperaturSOLL;
      temp2=TemperaturIST;
}
if (LOGGING==true){LOG.State(LOGNAME+"SOLL "+TemperaturSOLL)};
if (LOGGING==true){LOG.State(LOGNAME+"IST  "+TemperaturIST)};


if ((temp1<temp2)){
    ! Ventiel öffnen
    if (LOGGING==true){LOG.State(LOGNAME+"Ventil muss geöffnet werden")};
    if (istVentil){
          !Ventil ist auf
        if (LOGGING==true){LOG.State(LOGNAME+"Ventil ist schon offen")};
      }else{
        !Ventil ist zu
        if (LOGGING==true){LOG.State(LOGNAME+"Ventil wird geöffnet")};
        dom.GetObject(SchaltaktorSN+".STATE").State(1);
        Ventilnzahl=Ventilnzahl+1;
        if (LOGGING==true){LOG.State(LOGNAME+"setzteVentil Anzahl auf "+Ventilnzahl)};
        VentilnzahlDOM.State(Ventilnzahl);
    }
 
}else{
  !Ventil schliessen
  if (LOGGING==true){LOG.State(LOGNAME+"Ventil muss geschlossen werden")};
  if (istVentil){
      !Ventil ist auf
    if (LOGGING==true){LOG.State(LOGNAME+"Ventil wird geschlossen")};
    dom.GetObject(SchaltaktorSN+".STATE").State(0);
    if (Ventilnzahl< 1){
       Ventilnzahl=0;
    }else{              
       Ventilnzahl=Ventilnzahl-1;
       if (LOGGING==true){LOG.State(LOGNAME+"setzteVentil Anzahl auf "+Ventilnzahl)};
       VentilnzahlDOM.State(Ventilnzahl);
    }

  }else{
      !Ventil ist zu
    if (LOGGING==true){LOG.State(LOGNAME+"Ventil ist schon geschlossen")};
  }

}

Script Variante 3

var TempSensorSN = "BidCos-RF.LEQ0000430";        !Temperatur Sensor
var SchaltaktorSN = "BidCos-Wired.JEQ0497783:14"; !Fussboden Aktor
var TemperaturAussenSN="CUxD.CUX3100001";
var HeizungWartungSN="Heizung_Wartung";
var HeizungModusSN="Heizung_Modus";
var Ventieloeffung=24;    ! bei x% Ventilöffnung Boden einschalaten

var LOG = dom.GetObject('Debug');
var LOGNAME="Wohnzimmer Heizung: ";
var LOGGING=false;

if (LOGGING==true){LOG.State(LOGNAME+"start up");}

! Auswahl des Temperatur Sensors
!
!HM-TC-IT-WM-W-EU (neues Wand Termostat)
var TemperaturIST=dom.GetObject(TempSensorSN+":2.ACTUAL_TEMPERATURE").Value();
var TemperaturSOLL=dom.GetObject(TempSensorSN+":2.SET_TEMPERATURE").Value();
var Ventiloeffnung=dom.GetObject(TempSensorSN+":4.VALVE_STATE").Value();
! SystemDaten laden
var HeizungWartungDOM=dom.GetObject(HeizungWartungSN);
var HeizungModusDOM=dom.GetObject(HeizungModusSN);

var HeizungWartung=HeizungWartungDOM.State();
var HeizungModus=HeizungModusDOM.State();

! Auswahl Ventil Status
var istVentil=dom.GetObject(SchaltaktorSN+".STATE").Value();

! Prüfe ob Wartung läuft
if (HeizungWartung==1) {
  if (LOGGING==true){LOG.State(LOGNAME+"quit-> Wartung")};
  quit;
}

!Kühlen oder Heizen
var temp1=0;
var temp2=0;

if (HeizungModus==0){
    !!!!!Heizen
    if (LOGGING==true){ LOG.State(LOGNAME+"heizen");}
    temp2=TemperaturSOLL;
      temp1=TemperaturIST;
}else{
    !!!!!Kühlen
    LOG.State(LOGNAME+"kühlen");
    temp1=TemperaturSOLL;
      temp2=TemperaturIST;
}
if (LOGGING==true){LOG.State(LOGNAME+"SOLL "+TemperaturSOLL)};
if (LOGGING==true){LOG.State(LOGNAME+"IST  "+TemperaturIST)};


if ((temp1<temp2)  | (Ventiloeffnung>Ventieloeffung)){
    ! Ventiel öffnen
    if (LOGGING==true){LOG.State(LOGNAME+"Ventil muss geöffnet werden")};
    if (istVentil){
          !Ventil ist auf
        if (LOGGING==true){LOG.State(LOGNAME+"Ventil ist schon offen")};
      }else{
        !Ventil ist zu
        if (LOGGING==true){LOG.State(LOGNAME+"Ventil wird geöffnet")};
        dom.GetObject(SchaltaktorSN+".STATE").State(1);
        Ventilnzahl=Ventilnzahl+1;
        if (LOGGING==true){LOG.State(LOGNAME+"setzteVentil Anzahl auf "+Ventilnzahl)};
        VentilnzahlDOM.State(Ventilnzahl);
    }
 
}else{
  !Ventil schliessen
  if (LOGGING==true){LOG.State(LOGNAME+"Ventil muss geschlossen werden")};
  if (istVentil){
      !Ventil ist auf
    if (LOGGING==true){LOG.State(LOGNAME+"Ventil wird geschlossen")};
    dom.GetObject(SchaltaktorSN+".STATE").State(0);
    if (Ventilnzahl< 1){
       Ventilnzahl=0;
    }else{              
       Ventilnzahl=Ventilnzahl-1;
       if (LOGGING==true){LOG.State(LOGNAME+"setzteVentil Anzahl auf "+Ventilnzahl)};
       VentilnzahlDOM.State(Ventilnzahl);
    }

  }else{
      !Ventil ist zu
    if (LOGGING==true){LOG.State(LOGNAME+"Ventil ist schon geschlossen")};
  }

}

5 Gedanken zu „Programmierung der Fußbodenheizung mit der Homematic CCU2“

  1. Hallo, vielen Dank für das Script der Fussbodenheizung.
    Ich habe es zum laufen bekommen und es macht genau was es soll. Nur musste ich folgende Zeile aus dem Sript entfernen:
    VentilnzahlDOM.State(Ventilnzahl);
    Damit lief das Script nicht. Muss man dafür noch eine bestimmte Variable anlegen?

    1. Hallo,
      das war ein alter Code Teil. Es war mal angedacht, das wenn die Variable Ventielanzahl >0 dann Pumpe ann. Jetzt habe ich das mit einem Programm das im Intervall läuft gelöst und prüft ob min ein Ventiel geöffnet ist.

Kommentar verfassen