Wärmebedarfsrelais mit Regelung der Vorlauftemperatur

Lässt man die Vorlauftemperatur von der HomeMatic messen, kann in der Übergangszeit die Heizungsanlage noch effizienter betrieben werden

In meinem Haus habe ich das Problem, dass die Heizungsanlage nicht optimal abgestimmt ist: Einige Heizkörper sind zu klein, andere zu groß, manche Räume sind besser isoliert als andere, Tages- und Wochenprogramme sind nach jedem Stromausfall weg und zu allem Überfluss hat auch noch irgendein Witzbold den Außentemperaturfühler der Heizung in einem Kellerschacht installiert. Ich bin ja generell kein Fan davon, die Vorlauftemperatur über einen Außenfühler zu regeln, aber das geht mal gar nicht.

Darum habe ich die Temperaturkurve meiner Heizung auf Anschlag gestellt – sie heizt jetzt bei Wärmeanforderung stur bis 65°C – und die Umwälzpumpe auf Dauerbetrieb – sie schaltet nicht ab, wenn die eingestellte Vorlauftemperatur erreicht ist, sondern wird direkt vom Wärmebedarfsrelais geschaltet.

Die Vorlauftemperatur wird jetzt von der CCU geregelt, indem sie die Temperatur misst und mit dem Öffnungsgrad der Thermostatventile abgleicht. Ist eine Temperatur erreicht, die 50 % der Gesamtöffnung entspricht, schaltet die CCU ab.

Arbeiten an elektrischen Anlagen dürfen nur von Elektrofachkräften durchgeführt werden. Netzspannung ist kein Spielzeug! Bei fehlerhafter Ausführung drohen Sach- und Personenschäden durch Brand oder elektrischen Schlag!

Beauftragen Sie einen Elektriker oder Heizungsbauer mit Arbeiten an der Installation, wenn Sie selbst keine Fachkraft sind.

Variablen in HomeMatic-Scripten

Die CCU hatte früher ein Limit von maximal 200 Variablen, das mit Firmware-Version 2.29.18 aufgehoben wurde. Dieses Limit bezog sich auf alle Variablen, die in allen Scripten verwendet werden. Gemeint sind Variablen, die direkt im Script definiert werden: object x; object y; var z;

Wenn Scripte nicht mehr funktionieren und bei der Prüfung unerklärliche Syntax-Fehler auftreten, sollte versuchsweise dieses Programm wieder gelöscht oder deaktiviert werden – oder, noch besser, auf die aktuelle Firmware-Version aktualisiert werden.

Strings in HomeMatic-Scripten

Durch String-Verwendung in HomeMatic-Scripten kann die CCU fehlerhaft arbeiten, instabil werden oder sogar abstürzen. Grundsätzlich gilt: Je öfter mit Strings hantiert wird, desto eher führt dies zu Problemen.

Ich empfehle daher, nach Umsetzung dieser Anleitung die CCU unter Beobachtung zu halten.

Benennung von Systemvariablen

Prinzipiell kann man Systemvariablen – so wie allen Objekten in der CCU – beliebige Namen geben, also z. B. auch Umlaute und Sonderzeichen verwenden. Ich empfehle jedoch, sich auf reguläre Buchstaben (a-z, A-Z) zu beschränken: Bei Umlauten und Sonderzeichen besteht die Gefahr, dass Systemvariablen in Scripten nicht überall gefunden werden.

Installation

Hinweise zur Installation eines Wärmebedarfsrelais an der Heizung habe ich auf der Seite zum einfachen Wärmebedarfsrelais gegeben. Diese gelten natürlich auch für dieses Programm. Die Heizung wird weiterhin mit einem HM-LC-Sw1-FM geschaltet, der direkt am Eingang für die Zeitschaltuhr der Heizung angeschlossen ist.

Zusätzlich muss direkt am Vorlauf möglichst nahe bei der Heizung der Sensor des Temperaturfühlers installiert werden, der die Messwerte an die CCU liefert. Ich habe ihn mit selbstverschweißendem Isolierband befestigt – nicht schön, aber selten.

Diagramme

Zunächst drei Tagesdiagramme zur Veranschaulichung der Funktion.

Im Sommer sind die Ventile geschlossen, daher ist die grüne Linie auf „0“. Die rote Linie, die die Vorlauftemperatur darstellt, bleibt konstant auf Raumtemperatur – die Heizung heizt nicht.

Die roten waagerechten Linien sind übrigens die Hysterese meiner Heizung: Wenn man letztere im Dauerbetrieb sich selbst überlässt, schaltet der Brenner bei 40° ein und bei 65° wieder ab.

In der Übergangszeit öffnen sich Ventile etwas. Es ist gut zu erkennen, wie die Vorlauftemperatur zwischen 02:00 und 06:00 der Wärmeanforderung folgt und wie sie ab 07:00 für mehrere Stunden abfällt, weil die Heizung ausgeschaltet bleibt.

Im Winter schließlich ist zu sehen, wie meine Heizungsanlage an ihre Grenzen stößt. Ab 05:00 und ab 16:00 sind so viele Ventilantriebe geöffnet, dass die Vorlauftemperatur nur langsam ansteigt, weil die Wärme im ganzen Haus verteilt wird.

Hier kann man auch die Hysterese erahnen, die nachmittags zu einer schwankenden Linie führt.

Programm

Das Programm in der WebUI sieht sehr übersichtlich aus.

Der Temperaturfühler liefert regelmäßig die aktuelle Temperatur, so dass das Programm alle 2-3 Minuten ausgeführt wird. Die Bedingung >= 0°C ist immer erfüllt, also wird auch jedes Mal das Script ausgeführt, in dem sich die gesamte Logik verbirgt.

Um das folgende Script einzufügen, bitte komplett markieren, in der WebUI auf den den Button „Script“ klicken und den gesamten Text einfügen. An den angegebenen Stellen muss das Script an den eigenen Bedarf angepasst werden.

! HomeMatic-Script
! WäRMEBEDARFSRELAIS MIT REGELUNG DER VORLAUFTEMPERATUR
! http://www.christian-luetgens.de/homematic/programmierung/klima/vorlaufregelung/Vorlaufregelung.htm

! DER NAME DES AKTORS, DER DIE HEIZUNG SCHALTET, MUSS ANGEPASST WERDEN
object o_heizung_state = dom.GetObject ("Haushaltskeller.Heizung.Waermeanforderung").DPByHssDP ("STATE");
object o_heizung_time = dom.GetObject ("Haushaltskeller.Heizung.Waermeanforderung").DPByHssDP ("ON_TIME");

! DER NAME DES TEMPERATURFÜHLERS MUSS ANGEPASST WERDEN
object o_vorlauftemp = dom.GetObject ("Haushaltskeller.Heizung.Vorlauftemperatur").DPByHssDP ("TEMPERATURE");

integer i_summe = 0;

! DER NAME DES GEWERKS MUSS ANGEPASST WERDEN
string lst_heizung = dom.GetObject("Heizung").EnumUsedIDs();
string idx_heizung;
object o_heizung;
object o_dp_err;

foreach (idx_heizung, lst_heizung) {
  o_heizung = dom.GetObject(idx_heizung);
  if (o_heizung.HssType() == "CLIMATECONTROL_VENT_DRIVE") {
    o_dp_err = o_heizung.DPByHssDP ("ERROR");
	if (!o_dp_err) {
	  o_dp_err = o_heizung.DPByHssDP ("FAULT_REPORTING");
	}
    if (o_dp_err.Value() == 0) {
      i_summe = i_summe + o_heizung.DPByHssDP ("VALVE_STATE").Value();
    }
  }
}

! JE NACH GROESSE DER ANLAGE KANN DER QUOTIENT ANGEPASST WERDEN
i_summe = i_summe / 2;

if (i_summe > o_vorlauftemp.Value()) {
  o_heizung_time.State (300);
  o_heizung_state.State (true);
} else {
  if (o_heizung_state.Value()) {
    o_heizung_state.State (false);
  }
}

! DIE NAMEN DER BEIDEN SYSTEMVARIABLEN MÜSSEN ANGEPASST ODER DIE 
! ZEILEN GELÖSCHT WERDEN
dom.GetObject ("Wärmeanforderung").State (i_summe);
dom.GetObject ("Vorlauftemperatur").State (o_vorlauftemp.Value());

!  Ende des Scripts

Programmablauf

Als erstes werden die benötigten Geräte gesucht. Die Namen für den Schaltaktor und den Sensor müssen auf jeden Fall angepasst werden.

Anschließend geht das Script alle Geräte im Gewerk „Heizung“ durch und sucht nach Werten für die Ventilöffnung. Auch der Name des Gewerks muss natürlich ggf. angepasst werden. Die Werte aller Ventile, die keinen Fehler melden, werden addiert.

Danach wird die Summe noch einmal halbiert: Wenn ich direkt die Summe zur Regelung der Vorlauftemperatur verwende, springt die Heizung schon bei minimalen Öffnungswinkeln an. Das funktioniert bei meiner Anlage nicht so gut. Darum teile ich den Wert durch 2. Auch dieser Wert kann natürlich angepasst werden: Wenn die Heizung gegen geschlossene Ventile heizt, muss man ihn vergrößern, schaltet sie sich zu spät ein, muss er verringert werden.

Schließlich wird die Heizungsanlage geschaltet. Ist die Summe der Ventilöffnungen nach Korrektur größer als die aktuelle Vorlauftemperatur, wird eine Einschaltdauer von 5 Minuten eingestellt und der Aktor eingeschaltet. Damit ist sichergestellt, dass die Heizung nicht unkontrolliert läuft, auch wenn die Funkverbindung zum Aktor gestört ist, die CCU ausfällt oder ähnliches. Wenn es nicht zu einer Störung kommt, wird das Script vor Ablauf der 5 Minuten wieder gestartet und der Einschaltbefehl erneuert, so dass die Heizung durchläuft.

Ist die Vorlauftemperatur erreicht, wird die Heizung abgeschaltet.

Die letzten Zeilen setzen zwei Systemvariablen zur Kontrolle, die man sich zum Beispiel auf der Startseite der CCU anzeigen lassen kann. Auch hier sind die Namen ggf. anzupassen. Werden diese nicht benötigt, kann man die Zeilen natürlich löschen

Navigation