Heizungskontrolle Einfach mit HomeMatic HM-CC-VD
Heizungskontrolle Einfach mit HomeMatic HM-CC-VD
Dieser Beitrag beruht auf Heizungskontrolle_Einfach. Für den Sinn und Zweck sowie die grundlegende Konfiguration (FHEM, Hardware usw.) wird auf eben diesen Beitrag verwiesen. Hier werden nur die reinen Skripte / Dateien sowie einige Erläuterungen dargelegt.
Definitionen rund um den Schalter für die Therme
Im Moment ist der Schalter noch ein Dummy-Device, da erst einige Vergleiche zum momentanen Schaltverhalten angestellt werden sollen.
Falls Ihre Therme auch der Brauchwassererwärmung dient, sollten Sie dieses Skript nicht für das An- und Ausschalten über einen Stromschalter nutzen (sonst funktioniert die Warmwasserzubereitung nicht mehr ganztägig).
Sollte Ihre Therme aber über einen Temperaturregler-Eingang (mit den Zuständen An/Aus) verfügen, ist die Steuerung bei Nutzung dieses Schalteingangs anwendbar.
# Dummy-Schalter fuer Heizungssteuerung im DG define DG.HeizungOnOff dummy attr DG.HeizungOnOff room DG.Flur attr DG.HeizungOnOff webCmd toggle:on:off:statusRequest define FileLog_DG.HeizungOnOff FileLog /opt/fhem/log/DG.HeizungOnOff-%Y-%m.log DG.HeizungOnOff attr FileLog_DG.HeizungOnOff logtype text attr FileLog_DG.HeizungOnOff room DG.Flur define SVG_FileLog_DG.HeizungOnOff SVG FileLog_DG.HeizungOnOff:GasthermeOnOff:CURRENT
Das Beispiel erzeugt Monats-Logdateien. Der Schalter wird in der Web-Oberfläche von FHEM angezeigt und kann dort auch geschaltet werden. Eine sofortige Boost-Funktion ist wegen der entstehenden zeitlichen Verzögerungen bei dieser Art der Heizungskontrolle nicht möglich.
Abfrage / Auswertung der Heizungsvertile (hier HM-CC-VD)
Hinweis: Dieses Beispiel funktioniert (noch) nicht mit den neueren HomeMatic-Thermostaten HM-CC-RT-DN.
Beachten Sie die Kommentare zu Beginn des Skripts.
Die Zeile
Log(3,"HKE - Ventilöffnung: " . $_ . " " . $ventil);;\
sollten Sie nach Überprüfung der Funktionalität löschen, da sonst die Logdatei mit Meldungen "geflutet" wird.
# "ValvePosition" auswerten, weil "state" auch nichtnumerische Werte
# wie z.B. "set_..." annehmen kann.
# Anders als bei FHT und im Wiki steht das %-Zeichen mit Blank getrennt
# vom Wert, also müssen 2 Zeichen am Ende abgeschnitten werden.
# Bei "model=HM-CC-TC" erhält man jeden Wert mehrfach. Deshalb HM-CC-VD.
# Erst bei "$ventil > 16" von Wärmebedarf ausgehen, da Errorposition 15 % ist.
define n_heizung notify n_heizung {\
my $brauche_waerme=0;;\
my $ventile_im_leerlauf=0;;\
my $ventile_mit_bedarf=0;;\
my $heizung_status=ReadingsVal("DG.HeizungOnOff","state","off");;\
my @thermostat = devspec2array("model=HM-CC-VD");;\
foreach(@thermostat) {\
my $ventil=ReadingsVal($_, "ValvePosition", "101 %");;\
$ventil=substr($ventil, 0, (length($ventil)-2));;\
Log(3,"HKE - Ventilöffnung: " . $_ . " " . $ventil);;\
if ($ventil > 16) {\
$brauche_waerme=1;;\
$ventile_mit_bedarf++;;\
}\
if ($ventil < 8) {\
$ventile_im_leerlauf++;;\
}\
}\
if ($brauche_waerme != 0) {\
Log(3,"HKE - Wärme benötigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
Log(3,"HKE - " . $ventile_mit_bedarf . " Heizkörper von " . @thermostat . " melden Bedarf (> 16 % Öffnung)");;\
fhem("set DG.HeizungOnOff on") if ($heizung_status ne "on")\
}\
else {\
if ($ventile_im_leerlauf == @thermostat) {\
Log(3,"HKE - Keine Wärme (mehr) benötigt. Vorheriger Heizungsstatus: " . $heizung_status);;\
fhem("set DG.HeizungOnOff off") if ($heizung_status eq "on")\
}\
else {\
Log(3,"HKE - Heizbedarf: " . $ventile_im_leerlauf . " von " . @thermostat . " Ventile stehen bei 0 %.");;\
}\
}\
}
Im obigen Skript werden ein paar Zeilen mehr ausgegeben als im Skript zu den FHT-Thermostaten. Sie können diese selbstverständlich löschen bzw. an Ihre eigenen Bedürfnisse anpassen. Zudem sollten Sie überprüfen, ob das Schaltverhalten bei > 16 % und < 8 % ihren Bedürfnissen entspricht und diese Werte ggfls. anpassen.
Zeitgesteuerter Aufruf der Auswertung
define a_heizung at +*00:05:00 trigger n_heizung
Im Beispielsszenario werden die HM-CC-TC im Modus Auto "gefahren". Das heißt, dass die Temperatursteuerung nicht über FHEM, sondern über im HM-CC-TC hinterlegte Temperaturlisten erfolgt. Sobald der HM-CC-TC erkennt, dass die gewünschte ("desired") Raumtemperatur (fast) erreicht ist, gibt er an seine mit ihm gepeerten HM-CC-VD den Befehl, das Ventil zu schließen oder die Ventilöffnung zu verkleinern. Da dies auch einige Minuten in Anspruch nehmen kann, wird der trigger alle 5 statt (wie im Ausgangsbeispiel zu den FHT) alle 10 Minuten durchgeführt.
Plot-Ausgabe
Im FHEM-Verzeichnis für die Plot-Dateien habe ich eine neue Datei namens GasthermeOnOff.gplot (die bereits im o.a. Skript so benannt ist) mit dem folgenden Inhalt erzeugt:
/*
Plot fuer die Gastherme - erstellt am 2013-11-07
*/
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Gastherme An / Aus'
set ytics ("Aus" 0, "An" 1)
set y2tics ("Aus" 0, "An" 1)
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]
set ylabel ""
set y2label ""
#FileLog 3:DG.HeizungOnOff:0:$fld[2]=~"on"?1:0
plot \
"< awk '/DG.HeizungOnOff/ {print $1, $3~/on/? 1 : 0; }' <IN>"\
using 1:2 title 'Gastherme' with steps
Diesen Plot können/sollten Sie selbstverständlich an Ihre Belange/Bedürfnisse anpassen.