Die Heizungssteuerung ist der Kern dieser Hausautomatisierung: Funk-Heizkörperthermostate regeln jeden Raum einzeln, abhängig davon, ob ein Fenster geöffnet ist, ob jemand anwesend ist und zu welcher Tageszeit geheizt wird. Dadurch läuft die Heizung nur dann auf Komfort, wenn es wirklich sinnvoll ist – das spart spürbar Energie. Eingesetzt werden zwei Thermostat-Typen, die FHEM über zwei Funk-Empfänger (CUL) ansteuert. Alle Namen, Adressen und Seriennummern auf dieser Seite sind generische Platzhalter.
Funk-Empfänger (IO-Devices) einrichten
Die Thermostate funken in zwei unterschiedlichen Protokollen. Deshalb existieren zwei CUL-Sticks: einer im HomeMatic-Modus, einer im MAX!-Modus. Jeder Stick wird über seine eindeutige USB-Kennung eingebunden, damit die Zuordnung auch nach einem Neustart stabil bleibt.
define CUL_HomeMatic CUL /dev/serial/by-id/usb-XXXX-if00@38400 1232
attr CUL_HomeMatic rfmode HomeMatic
attr CUL_HomeMatic hmId AABBCC
define CUL_MAX CUL /dev/serial/by-id/usb-YYYY-if00@38400 4444
attr CUL_MAX rfmode MAXFür die MAX!-Geräte wird zusätzlich ein CUL_MAX-Gerät als Vermittler angelegt. Es übernimmt das Pairing und die Kommunikation mit den MAX!-Komponenten:
define cm CUL_MAX 123456
attr cm IODev CUL_MAXHomeMatic-Thermostat einbinden (HM-CC-RT-DN)
Nach dem Anlernen erzeugt FHEM für ein HomeMatic-Thermostat mehrere Kanäle (Channels). Wichtig sind das Hauptgerät und der Kanal _Clima, über den die Solltemperatur gesteuert wird. Die übrigen Kanäle (_Weather, _WindowRec, _ClimaTeam …) entstehen automatisch.
define HZ_Wohnzimmer CUL_HM 7132CB
attr HZ_Wohnzimmer IODev CUL_HomeMatic
attr HZ_Wohnzimmer model HM-CC-RT-DN
attr HZ_Wohnzimmer subType thermostat
attr HZ_Wohnzimmer autoReadReg 4_reqStatus
attr HZ_Wohnzimmer room WohnzimmerDie Solltemperatur wird über den Clima-Kanal gesetzt. Da batteriebetriebene HomeMatic-Thermostate nur in kurzen Funkfenstern empfangen, muss der Befehl mit burstXmit aktiv an das Gerät „geweckt" und übertragen werden:
set HZ_Wohnzimmer_Clima controlManu 21.0
set HZ_Wohnzimmer burstXmitSoll das Thermostat wieder seinem internen Wochenprogramm folgen, wird der Automatikmodus aktiviert:
set HZ_Wohnzimmer_Clima controlMode auto
set HZ_Wohnzimmer burstXmitZwei Thermostate in einem Raum koppeln
Große Räume haben oft zwei Heizkörper. Damit beide dieselbe gemessene Raumtemperatur verwenden und synchron regeln, lassen sie sich als Team verbinden. Dazu wird der _ClimaTeam-Kanal des einen Thermostats mit dem _Clima-Kanal des anderen verknüpft:
set HZ_Wohnzimmer_Klein_ClimaTeam peerChan 0 HZ_Wohnzimmer_Gross_Clima single
set HZ_Wohnzimmer_Gross_ClimaTeam peerChan 0 HZ_Wohnzimmer_Klein_Clima singleMAX!-Thermostat einbinden
MAX!-Thermostate sind einfacher aufgebaut – sie besitzen keine Unterkanäle. Die Solltemperatur wird direkt am Gerät gesetzt, ein burstXmit ist nicht nötig.
define HZ_Buero MAX HeatingThermostat 1b9ded
attr HZ_Buero IODev cm
attr HZ_Buero model HeatingThermostat
attr HZ_Buero room Bueroset HZ_Buero desiredTemperature 21.0
set HZ_Buero desiredTemperature autoAutomatik: Fenster, Anwesenheit und Uhrzeit
Die eigentliche Intelligenz steckt in einer DOIF-Regel pro Raum. Sie wertet drei Eingangsgrößen aus: den Fensterkontakt, einen aggregierten Anwesenheitsstatus aus der Anwesenheitserkennung (...StructureAnwesend) und die Uhrzeit. Daraus ergeben sich vier Stufen: Lüften, Komfort, Eco und Automatik.
define di_Heizung_Wohnzimmer DOIF ([Fensterkontakt_Wohnzimmer:state] =~ "opened")
(set HZ_Wohnzimmer_Clima controlManu 12.0)
(set HZ_Wohnzimmer burstXmit)
DOELSEIF ([06:30-22:00] and [Fensterkontakt_Wohnzimmer:state] =~ "closed" and [WohnzimmerStructureAnwesend:state] eq "present")
(set HZ_Wohnzimmer_Clima controlManu 21.0)
(set HZ_Wohnzimmer burstXmit)
DOELSEIF ([Fensterkontakt_Wohnzimmer:state] =~ "closed" and [WohnzimmerStructureAnwesend:state] eq "absent")
(set HZ_Wohnzimmer_Clima controlManu 17.0)
(set HZ_Wohnzimmer burstXmit)
DOELSE
(set HZ_Wohnzimmer_Clima controlMode auto)
(set HZ_Wohnzimmer burstXmit)
attr di_Heizung_Wohnzimmer checkall all
attr di_Heizung_Wohnzimmer wait 30,5:60,5:60,5:0,5
attr di_Heizung_Wohnzimmer room WohnzimmerDie Logik arbeitet von oben nach unten:
- Fenster offen → Absenkung auf 12 °C (Frostschutz beim Lüften).
- Fenster zu, anwesend, Komfortzeit → Wohlfühltemperatur 21 °C.
- Fenster zu, abwesend → Eco-Temperatur 17 °C.
- sonst → Rückgabe an das interne Wochenprogramm (
auto).
Zwei Attribute sind entscheidend: checkall all prüft bei jedem Ereignis alle Bedingungen erneut, und wait staffelt die Befehle zeitlich. Die Liste 30,5:60,5:60,5:0,5 bedeutet pro Zweig: erst x Sekunden warten (z. B. 30 s nach dem Fensteröffnen, um kurzes Stoßlüften zu ignorieren), dann 5 s vor dem burstXmit, damit der Sollwert sicher ankommt.
Heizverläufe protokollieren
Jedes Thermostat schreibt seine Werte in eine eigene Logdatei – einsortiert in einen Unterordner Heizung und wochenweise rotiert. Der Logtype tempN:Plot,text macht die Datei direkt als Temperatur-Diagramm auswertbar (siehe Sensorik & Auswertung).
define FileLog_HZ_Wohnzimmer FileLog ./log/Heizung/HZ_Wohnzimmer-%Y-KW%W.log HZ_Wohnzimmer
attr FileLog_HZ_Wohnzimmer logtype temp4:Plot,text
attr FileLog_HZ_Wohnzimmer nrarchive 3
attr FileLog_HZ_Wohnzimmer room hiddenKonfiguration prüfen und sichern
- Mit
list di_Heizung_Wohnzimmerprüfen, welcher Zweig gerade aktiv ist. - Ein Fenster öffnen und kontrollieren, ob das zugehörige Thermostat nach Ablauf der Wartezeit absenkt.
- Über
set HZ_Wohnzimmer_Clima controlMode autotesten, ob die Funkübertragung samtburstXmitgreift. - Konfiguration dauerhaft speichern:
saveDamit regelt jeder Raum eigenständig nach Fensterzustand, Anwesenheit und Uhrzeit – einheitlich aufgebaut, egal ob HomeMatic- oder MAX!-Thermostat.
