8391 Zeichen
Score aktualisiert
100%
Code: 708cebb9567c409da216358279df79f6
Token in Entwicklung nicht aktualisiert
img-Tag in Entwicklung deaktiviert
Für das alte FS20-System gibt es einen speziellen Aktor als Wärmebedarfsrelais. Das
Teil wertet die Stellantriebe aus und schaltet die Umwälzpumpe ein, sobald ein Wert
überschritten ist. Mit der HomeMatic und der CCU braucht man das eigentlich nicht, da
reicht ein normaler Aktor.
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.
Ansteuerung der Heizung
Es ist nicht immer sinnvoll, die Umwälzpumpe direkt anzusteuern. Oft bietet die
Heizung einen Schalteingang, über den sie komplett geschaltet werden kann. Ein guter
Kandidat ist zum Beispiel der Schalteingang für einen mechanischen Raumthermostat: Wenn
man da einen Aktor anschließt, schaltet er die Anlage genau so, wie vom Hersteller
vorgesehen. Wenn man dagegen nur die Umwälzpumpe schaltet, springt die Heizung unter
Umständen immer wieder kurz an, weil sie gar nicht weiß, dass keine Wärme gebraucht
wird.
Als Aktor bietet sich der HM-LC-Sw1-FM an, wenn das zu schaltende Element dauernd unter
Strom steht und ein 230V-Eingang geschaltet werden soll. Beispiel mechanischer
Raumthermostat: Da gehen normalerweise Neutralleiter und Phase ins Wohnzimmer, dort hängt
ein Klotz mit Relais, der bei passender Temperatur die Phase auf eine dritte Leitung
schaltet. Statt Raumthermostat kommt der Aktor dran, fertig.
Wenn andere Spannungen geschaltet werden sollen oder die zu schaltende Leitung nicht
dauerhaft unter Strom ist, kann z. B. der HM-LC-Sw1-SM benutzt werden, der ein
potentialfreies Relais hat. Beispiel: Der Aktor ist dauerhaft an 230V angeschlossen. Die
Zuleitung zur Umwälzpumpe wird aufgetrennt und durch den Aktor geleitet: Wenn er
geschaltet wird, kann die Heizung die Umwälzpumpe ganz normal einschalten. Wenn nicht,
bleibt die Pumpe aus.
Programmlogik
Die Logik, wann die Pumpe laufen soll, steckt bei diesem Wärmebedarfsrelais in der
CCU. Bewährt hat sich eine Steuerung anhand der Stellantriebe: Wenn der Antrieb offen
ist, wird offenbar Wärme benötigt, also schaltet die Heizung ein. Sind die Antriebe zu,
braucht auch die Heizung nichts zu tun.
Das Script macht im Detail folgendes:
- alle Stellantriebe werden addiert
- wenn insgesamt mehr als 30 % offen sind, wird die Heizung eingeschaltet; bei weniger als
20 % wird ausgeschaltet
- Stellantriebe, die einen Fehler melden (z. B. schwergängig oder Batterie leer), werden
nicht mitberechnet
- nach dem Ausschalten wird mindestens 10 Minuten gewartet, bis die Heizung wieder
einschaltet
Programm in der WebUI:
Es werden alle Stellantriebe im Programm aufgenommen, das Programm wird bei allen
Stellantrieben bei „Ventilstellung >= 0 bei Aktualisierung“ ausgeführt. Das
bedeutet effektiv: Immer, wenn ein Stellantrieb seine neue Stellung meldet, wird das
folgende Script ausgeführt.
Wichtig ist auch, dass die Antriebe in der WebUI alle zusammen im allerersten
„Wenn … “-Block des WebUI-Programms stehen – sonst findet das Script sie
später nicht.
Das Script sollte auch mit den neuen Heizkörperthermostaten funktionieren, zumindest
sind die Datenpunkte laut Dokumentation angepasst. Ich habe jedoch nur die alten
Ventilantriebe und kann es daher nicht testen.
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.
gesamtes Script markieren / kopieren
! HomeMatic-Script
! EINFACHES WäRMEBEDARFSRELAIS
! http://www.christian-luetgens.de/homematic/programmierung/klima/waermebedarf/Waermebedarf.htm
! BEZEICHNUNG DES AKTORS MUSS AN DIESER STELLE ANGEPASST WERDEN
object d_heizung = dom.GetObject("Heizungsrelais");
! Stellantriebe aus dem WebUI-Programm abfragen
object o_prg=dom.GetObject("$this$");
integer i_count=0;
integer i_summe=0;
object o_dp_err;
object o_chn;
object o_dp = dom.GetObject(o_prg.Rule().RuleCondition(0).CndSingleCondition(i_count).LeftVal());
while (o_dp) {
o_chn = dom.GetObject(o_dp.Channel());
o_dp_err=o_chn.DPByHssDP ("ERROR");
if (!o_dp_err) {
o_dp_err=o_chn.DPByHssDP ("FAULT_REPORTING");
}
if (o_dp_err) {
if (o_dp_err.Value() == 0) {
i_summe = i_summe + o_dp.Value();
}
} else {
i_summe = i_summe + o_dp.Value();
}
i_count = i_count + 1;
o_dp = dom.GetObject(o_prg.Rule().RuleCondition(0).CndSingleCondition(i_count).LeftVal());
}
! Heizung bei Bedarf schalten
object d_heizung_state = d_heizung.DPByHssDP ("STATE");
time t_timestamp = d_heizung_state.Timestamp();
time t_now = system.Date("%Y-%m-%d %H:%M:%S").ToTime();
integer i_diff = t_now.ToInteger() - t_timestamp.ToInteger();
! VENTILÖFFNUNG, BEI DER DER AKTOR ABSCHALTET, MUSS AN DIESER STELLE
! ANGEPASST WERDEN
if ((i_summe <= 20) && (d_heizung_state.Value())) {
d_heizung_state.State (false);
}
! VENTILÖFFNUNG, BEI DER DER AKTOR EINSCHALTET, MUSS AN DIESER STELLE
! ANGEPASST WERDEN; ZEIT KANN EBENFALLS GEÄNDERT WERDEN (600 SEKUNDEN =
! 10 MINUTEN)
if ((i_summe >= 30) && (i_diff > 600) && (!d_heizung_state.Value())) {
d_heizung_state.State (true);
}
! Ende des Scripts
Programmablauf
Zunächst wird Gerät „Heizungsrelais“ gesucht. Das ist ein einfacher Schaltaktor,
der die Heizung schaltet. Die Bezeichnung muss an dieser Stelle ggf. angepasst werden,
wenn das Gerät anders heißt. Anschließend geht das Script alle Stellantriebe durch, die
im Programm angegeben sind. Zunächst wird auf Vorliegen einer Fehlermeldung geprüft,
danach – wenn alles OK ist – die Werte addiert.
Zum Schluss wird die Heizung eingeschaltet, wenn insgesamt mindestens 30 % offen sind
und die Heizung seit mindestens 10 Minuten ausgeschaltet war. Sie wird wieder
ausgeschaltet, wenn nur noch weniger als 20 % offen sind. Auch diese Werte können
natürlich angepasst werden.
Noch ein paar Hinweise zu Dingen, die sich nicht bewährt haben:
Raumtemperatur in die Logik einbeziehen
Erscheint auf den ersten Blick verlockend, ist es aber nicht, weil die Raumthermostate
immer ihre eigene Regelung dagegensetzen.
Bei „nur heizen, wenn es auch wirklich kalt im Haus ist“ passiert folgendes:
Die Raumthermostate stellen den Stellantrieb ein und erwarten eine Reaktion. Kommt die
nicht – weil es in Wirklichkeit noch gar nicht so kalt ist, dass man heizen müßte –
drehen sie weiter auf. So schaukeln sie sich hoch, bis irgendwann der Stellantrieb voll
aufgedreht ist und der Raum gnadenlos überheizt, wenn dann die Heizung wirklich
anspringt.
Bei „heizen, wenn die Temperatur zu niedrig ist, auch wenn der Stellantrieb noch
gar nicht als offen gemeldet wird“ passiert folgendes: Beim ersten Kälteeinbruch
wird der Raumthermostat noch nicht damit rechnen, dass das Haus nicht „von
selbst“ warm wird wie in den Wochen zuvor. Er wird also – trotz niedriger Temperatur
– den Antrieb nicht öffnen. Die Umwälzpumpe drückt dadurch gegen die geschlossenen
Ventile – unnötiger Verschleiß und Stromverbrauch, genau das, was wir verhindern wollen.
Heizung nicht dauerhaft einschalten, sondern je nach Öffnungswinkel nur für einige
Zeit laufen lassen
Theoretisch könnte man mit so einem Programm die Restwärme der Heizkörper besser
ausnutzen. Praktisch – siehe oben: wenn der Raumthermostat heizen will, dann will er
heizen, und wenn dann nicht genug kommt, dreht er auf. Am Ende stehen alle Antriebe beim
kleinsten Wärmebedarf auf 98 %, die Batterien sind aufgrund der langen Stellwege nach
zwei Wochen leer und warm wird es trotzdem nicht.
Heizen, sobald ein Stellantrieb einen bestimmten Wert erreicht hat
Geht als Provisorium, ist aber nicht optimal.
Wenn ein einzelner Stellantrieb auf 15 % steht, dann ist das Ventil noch fast zu –
unnötige Quälerei für die Umwälzpumpe. Notfalls dreht der Raumthermostat den
Stellantrieb irgendwann weiter auf, so dass auch wirklich was durchfließt. Andererseits:
Selbst wenn 10 Stellantriebe auf 5 % stehen, würde die Heizung nicht anspringen, obwohl
da schon ordentlich Wärme abgefordert wird.
Evolution: Verbessertes Wärmebedarfsrelais
Die beiden verbesserten Scripte auf den Folgeseiten basieren darauf, die
Vorlauftemperatur mit in die Steuerung der Heizung einzubeziehen.
Einen anderen Weg, der vor allem mit den Heizkörperthermostaten hervorragend
funktioniert und keine weiteren Sensoren braucht, habe ich in unserer Zweitwohnung beschritten.