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.
Die Definitionen rund um den Schalter für die Therme
Im Moment ist dieser 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ügt, 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 CUL_HM,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.
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.
# "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 $i=0;;\ 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);;\ $i++;;\ 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 gepperten 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 (welche 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.