In den vorangegangenen zwei Artikeln haben wir zum einen die Basis Infrastruktur für die Heimsteuerung mit FHEM und zum anderen die Steuerung einer Funksteckdose betrachtet. In diesem Artikel werden wir nun auch die Heizkörper in diese Steuerung aufnehmen und damit die Basis für ein gutes Hausklima legen, die auch noch den Geldbeutel schont. Mit etwas Erfahrung kann man diese Steuerung auch erweitern um z. B. die Anwesenheit von Personen in den Wohnräumen festzustellen und entsprechend die Heizleistung anpassen.
Seiteninhalte
Anlernen der Thermostate an FHEM
In meinem Beispiel werde ich einen HomeMatic 105155 Funk-Stellantrieb (HM-CC-RT-DN) verwenden. Diesen sollte man nun auspacken und die Batterien einsetzen. Bitte das Gerät noch nicht montieren – es sei denn Sie stehen darauf durch die Wohnung zu sprinten… Nun setzen wir erst FHEM in den Anlernmodus indem wir folgenden Befehl in die Kommandozeile eingeben:
set HMLAN01 hmPairForSec 60
Wir haben nun 60 Sekunden Zeit die Boost-Taste unseres Funk-Stellantriebs für ca. 3 – 5 Sekunden zu drücken. Auf dem Display sollte nun ein Count Down angezeigt werden, der von 30 abwärts zählt. Erfahrungsgemäß läuft dieser nur wenige Sekunden bis er sich mit unserem HMLan bzw. FHEM verbunden hat. Dies können Sie mit einem Klick auf CUL_HM prüfen. Hier sollte nun ein Thermostat auftauchen. Den Namen dieses Gerätes (startet mit CUL_HM) können Sie schon mal in die zwischenablage kopieren.
Hat dies funktioniert, so ist jetzt ein guter Zeitpunkt links oben auf Save config zu klicken (das sollte man sich angewöhnen – es nicht zu machen führt z. T. zu längerem Fehlersuchen…).
[adrotate group=“2″]
Umbenennen der Channels
Unser Gerät hat derzeit noch einen recht kryptischen Namen mit dem man nur eingeschränkt etwas anfangen kann. Ich habe mir daher angewöhnt die relevanten Namen direkt umzubenennen. Durch einen Klick auf den Namen des Gerätes (in meinem Beispiel oben CUL_HM_HM_CC_RT_DN_2E866E) kommt man in die Detailansicht der man auch die derzeit vorhandenen Channels entnehmen kann. Durch Eingabe folgender zwei Befehle in die Kommandozeile werden die Einträge mit vernünftigen Namen versehen (beide Befehle müssen nacheinander eingegeben werden und müssen jeweils mit Enter bestätigt werden):
rename CUL_HM_HM_CC_RT_DN_2E866E LR_Heizung rename CUL_HM_HM_CC_RT_DN_2E866E_Clima LR_Heizung_Clima
Nach Ausführung der Befehle sollte die Übersicht so aussehen (Save config nicht vergessen ;-)):
Zuordnen zu einem (neuen) Raum
Möchte man den Heizkörper einem bestimmten Raum zuordnen (dieser wird auch im Menü auf der Linken Seite angezeigt), so sind folgende Schritte notwendig: Edit files – fhem.cfg in der Datei sucht man den Bereich indem in unserem Beispiel die LR_Heizung_Clima aufgelistet ist und fügt als Attribut einen Raum hinzu:
attr LR_Heizung_Clima room LivingRoom
Der Raum wird automatisch erstellt, wenn er noch nicht vorhanden ist. Man muss diesen also nicht zuerst anlegen.
Zeitgesteuerte Temperatursteuerung
Durch einen Klick auf den Raum hat man nun über eine DropBox bereits die Möglichkeit die Temperatur in dem Raum zu steuern. Gleichzeitig kann man natürlich das Gerät weiterhin von Hand steuern bzw. parametrisieren. Da wir eine FHEM Installation besitzen und das Thermostat auch schon verbunden haben, wählen wir natürlich den komfortablen und auch flexibleren Weg. Hierzu müssen wir zuerst eine neue Konfigurationsdatei anlegen. Klicken Sie dafür bitte auf Edit files und wählen Sie 99_Utils.pm aus. Löschen Sie alles aus der Datei bis auf:
package main; use strict; use warnings; use POSIX; sub myUtils_Initialize($$) { my ($hash) = @_; }
Ändern Sie nun den Namen der Datei in 99_myUtils.pm und klicken Sie auf Save as.
Damit haben wir das Grundgerüst geschaffen. Nun müssen wir die Heizung noch so einstellen, dass Sie zu den gewünschten Zeiten an geht und den Raum auf die vorgesehene Temperatur bring. Dies erfolgt mit einer Zeile wie dieser (nur exemplarisch):
{ fhem ("set TEST_Heizung_Clima tempListMon prep 06:30 0.0 08:00 22.5 24:00 0.0")};
Hier würde nun für Montags von 00:00 bis 06:30 eine Temperatur von 0 (also off) angestrebt und von 06:30 bis 08:00 eine Temperatur von 22.5 C und danach wieder 0 (also off). Die angegebenen Temperaturen hinter einer Uhrzeit geben also an bis wann diese Temperatur eingestellt sein soll nicht ab wann! Es ist zudem wichtig, dass jede Zeile mit 24:00 endet!
In meinem Beispiel habe ich mich für folgende Konfiguration entschieden:
# LR_Heizung Temperatur setzen sub SetTempList_LR_Heizung() { { fhem ("set LR_Heizung_Clima tempListMon prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListTue prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListWed prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListThu prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListFri prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListSat prep 10:00 0.0 12:00 22.0 23:00 22.0 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListSun exec 10:00 0.0 12:00 22.0 23:00 22.0 24:00 0.0")}; } 1;
Die eins am Ende muss man bei weiteren vorhandenen Profilen entsprechend hoch zählen. Man aktiviert dieses Profil durch Eingabe des nachfolgenden Befehls in der Kommandozeile (der Name ist aus dem Funktionsnamen oben abgeleitet!):
{SetTempList_LR_Heizung()}
Die Konfiguration wird bei Thermostaten nicht umgehend übertragen – es kann zwei drei Minuten dauern bis diese auf dem Gerät ankommt und wirkt.
Ich habe mir aktuell vier Profile für meine zwei Test-Thermostate gebaut. Jeweils ein Profil ist für den Normalbetrieb und das zweite für den Sommer- bzw. Urlaubsbetrieb:
# LR_Heizung Temperatur setzen sub SetTempList_LR_Heizung() { { fhem ("set LR_Heizung_Clima tempListMon prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListTue prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListWed prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListThu prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListFri prep 17:00 0.0 18:00 21.0 19:00 22.0 23:00 22.5 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListSat prep 10:00 0.0 12:00 22.0 23:00 22.0 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListSun exec 10:00 0.0 12:00 22.0 23:00 22.0 24:00 0.0")}; } 1; # BR_Heizung Temperatur setzen sub SetTempList_BR_Heizung() { { fhem ("set BR_Heizung_Clima tempListMon prep 06:30 0.0 08:00 22.5 24:00 0.0")}; { fhem ("set BR_Heizung_Clima tempListTue prep 06:30 0.0 08:00 22.5 24:00 0.0")}; { fhem ("set BR_Heizung_Clima tempListWed prep 06:30 0.0 08:00 22.5 24:00 0.0")}; { fhem ("set BR_Heizung_Clima tempListThu prep 06:30 0.0 08:00 22.5 24:00 0.0")}; { fhem ("set BR_Heizung_Clima tempListFri prep 06:30 0.0 08:00 22.5 24:00 0.0")}; { fhem ("set BR_Heizung_Clima tempListSat prep 24:00 0.0")}; { fhem ("set BR_Heizung_Clima tempListSun exec 24:00 0.0")}; } 2; # LR_Heizung aus schalten sub SetTempList_LR_Heizung_off() { { fhem ("set LR_Heizung_Clima tempListMon prep 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListTue prep 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListWed prep 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListThu prep 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListFri prep 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListSat prep 24:00 0.0")}; { fhem ("set LR_Heizung_Clima tempListSun exec 24:00 0.0")}; } 3; # BR_Heizung aus schalten sub SetTempList_BR_Heizung_off() { { fhem ("set BR_Heizung_Clima tempListMon prep 24:00 0.0")}; { fhem ("set BR_Heizung_Clima tempListTue prep 24:00 0.0")}; { fhem ("set BR_Heizung_Clima tempListWed prep 24:00 0.0")}; { fhem ("set BR_Heizung_Clima tempListThu prep 24:00 0.0")}; { fhem ("set BR_Heizung_Clima tempListFri prep 24:00 0.0")}; { fhem ("set BR_Heizung_Clima tempListSat prep 24:00 0.0")}; { fhem ("set BR_Heizung_Clima tempListSun exec 24:00 0.0")}; } 4;
Kleiner Hinweis: Wenn man die Datei ein 2. mal anpasst und die Funktion erneut lädt mit „{SetTempList_LR_Heizung()}“ passiert erstmal nichts bzw. die „alten“ Daten werden wieder geladen, da das Modul 99_myUtils schon geladen ist. Es muss erst das Module neugeladen werden. Ich mach es über telnet mit „reload 99_myUtils“ erst dann kann man durch erneutes aufrufen von „{SetTempList_LR_Heizung()}“ die neuen Daten laden.