Heizungskontrolle Einfach mit HomeMatic HM-CC-VD

Aus FHEMWiki
Version vom 8. November 2013, 11:51 Uhr von Rohan (Diskussion | Beiträge) (Code bereinigt und Typos)

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 (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.