openHAB und meine Heizkörper
Eine ganze Weile hatte ich nun ein Brett vorm Kopf: schon seit längerem besitze ich einige Heizkörperthermostate (HH-CC-RT-DN) und versuche nach und nach, hierfür ein Regelwerk zu erstellen. Doch nun ist endlich der Groschen gerutscht, und ich stelle euch hier das Grundgerüst meiner Heizungsschaltung vor. So ist es problemlos möglich, die Heizkörper im Nachtbetrieb herunter zu regeln; eine Regel im wahrsten Sinne des Wortes, da man die Einstellungen von Uhrzeiten abhängig machen kann. Kniffliger wird es schon, wenn die Heizkörper in Abhängigkeit von Anwesenheit geschaltet werden sollen. Oder die Badezimmerheizung, die über den Tag heruntergeregelt ist, im Falle verschmierter Kinder aber SOS-mäßig per Tastendruck aufgeheizt werden soll.
Ich habe das Grundgerüst am Beispiel meiner Badezimmerheizung durchexerziert und ein dickes großes Konfig-File erstellt (und ausführlich kommentiert), mit dessen Hilfe ich alle verfügbaren Werte abgreife und Aktionen in Form von Switches verfügbar mache; darüberhinaus lege ich mir hier der Übersichtlichkeit halber Gruppen an, in die ich meine Items sortiere.
Dann erstelle ich mir eine Sitemap und stelle meine Items im Webinterface dar. Ich kann die Temperatur entweder von Hand einstellen – über die kleinen Pfeiltasten in 0,5°C-Schritten – oder ich nutze die Presets Baden (entspricht Boost), Eco oder Comfort: über die CCU2 definierte ich, dass die Badezimmerheizung im Eco-Mode auf 17,0°C herunterreguliert wird, im Comfort-Mode hingegen auf 24,0°C herauf. Der Betriebsmodus des Heizkörperthermostats bleibt bei Umschaltung auf AUTO-MODE – was sich lediglich ändert, ist der Sollwert der Temperatur. Tatsächlich fand ich diesen Aspekt nicht gerade selbsterklärend und brauchte eine ganze Weile, bis ich hier durchgeblickt hatte. Für die Boost-Funktion habe ich festgelegt, dass die Ventilöffnung für 20 Minuten auf 99% gesetzt wird. Dieses Setup ist also unabhängig von der Umgebungstemperatur, von der gerade eingestellten Temperatur,… – es ist Geschmackssache und sehr abhängig von den Gegebenheiten, das ist klar. Nach Ablauf der 20 Minuten fällt der Thermostat wieder in den AUTO-MODE (ebenfalls mit den über die CCU2 eingestellten Werten).
Abschließend erstellte ich dann meine heizung.rules, die in der jetzigen Version wesentlich übersichtlicher ist als meine ersten Anläufe ;) Sie setzt alle Kontroll-Switches für den Heizkörper auf OFF (postUpdate ist openHAB-intern!) und wertet dann aus, welcher der vier Buttons gedrückt wurde – nur dieser Modus wird dann auf ON geschaltet (sendCommand wird an die CCU2 durchgereicht!). So vermeide ich es, dass mehrere Switches auf ON stehen und sich irgendwann gegenseitig verwirren.
Allerdings habe ich keine Möglichkeit gefunden, auf die Eco- und die Comfort-Temperatur wirklich zuzugreifen – die Thermostate stellen hierfür offenbar keine Datenpunkte zur Verfügung. Und noch ein Aspekt ist bei diesem Setup nicht berücksichtigt: stelle ich meinen Heizkörper per openHAB auf Boost und anschließend im Webfrontend der CCU2 auf Comfort, dann schaltet sich die Sollwert-Temperatur auf 24°C (was okay ist), der Modus schaltet sich auf AUTO-MODE und wird im Webinterface auch so dargestellt (was okay ist), der Switch ELW_Bad_STATE_BOOST bleibt jedoch auf ON stehen – was nicht okay ist.
osgi> openhab status ELW_Bad_STATE_BOOST
ON
Derzeit fällt mir nur eine Lösung ein, mit diesem Problem umzugehen: den Status eines jeden Heizkörpers als Variable innerhalb der CCU2 festzuhalten und mit dem ReloadTrigger zu arbeiten. Oder sehe ich gerade den Wald vor lauter Bäumen nicht? Mag mir wer auf die Sprünge helfen?
Umschalten auf Comfort
2015-04-13 14:05:43.221 [INFO ] [runtime.busevents ] - ELW_Bad_Scene_Heating received command 3
2015-04-13 14:05:43.721 [INFO ] [.model.script.Heating rules - ] - ELW_Bad_STATE_AUTO
2015-04-13 14:05:43.730 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_AUTO state updated to OFF
2015-04-13 14:05:43.735 [INFO ] [.model.script.Heating rules - ] - ELW_Bad_STATE_BOOST
2015-04-13 14:05:43.736 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_BOOST state updated to OFF
2015-04-13 14:05:43.736 [INFO ] [.model.script.Heating rules - ] - ELW_Bad_STATE_ECO
2015-04-13 14:05:43.737 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_ECO state updated to OFF
2015-04-13 14:05:43.737 [INFO ] [.model.script.Heating rules - ] - ELW_Bad_STATE_COMFORT
2015-04-13 14:05:43.741 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_COMFORT state updated to OFF
2015-04-13 14:05:43.771 [INFO ] [hab.model.script.Heating rules] - Entering comfort mode.
2015-04-13 14:05:43.803 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_COMFORT received command ON
2015-04-13 14:05:44.409 [INFO ] [runtime.busevents ] - ELW_Bad_Heizung_MODE state updated to AUTO-MODE
2015-04-13 14:05:44.422 [INFO ] [runtime.busevents ] - ELW_Bad_Heizung_FAULT_REPORTING state updated to NO_FAULT
2015-04-13 14:05:44.422 [INFO ] [runtime.busevents ] - ELW_Bad_Heizung_BOOST_STATE state updated to 0
2015-04-13 14:05:44.423 [INFO ] [runtime.busevents ] - ELW_Bad_Heizung_SET_TEMPERATURE state updated to 24.00
Umschalten auf Normal
2015-04-13 14:58:08.175 [INFO ] [runtime.busevents ] - ELW_Bad_Scene_Heating received command 0
2015-04-13 14:58:08.177 [INFO ] [.model.script.Heating rules - ] - ELW_Bad_STATE_AUTO
2015-04-13 14:58:08.178 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_AUTO state updated to OFF
2015-04-13 14:58:08.179 [INFO ] [.model.script.Heating rules - ] - ELW_Bad_STATE_BOOST
2015-04-13 14:58:08.180 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_BOOST state updated to OFF
2015-04-13 14:58:08.180 [INFO ] [.model.script.Heating rules - ] - ELW_Bad_STATE_ECO
2015-04-13 14:58:08.180 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_ECO state updated to OFF
2015-04-13 14:58:08.181 [INFO ] [.model.script.Heating rules - ] - ELW_Bad_STATE_COMFORT
2015-04-13 14:58:08.181 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_COMFORT state updated to OFF
2015-04-13 14:58:08.190 [INFO ] [hab.model.script.Heating rules] - Entering normal mode.
2015-04-13 14:58:08.208 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_AUTO received command ON
2015-04-13 14:58:08.797 [INFO ] [runtime.busevents ] - ELW_Bad_Heizung_MODE state updated to AUTO-MODE
2015-04-13 14:58:08.797 [INFO ] [runtime.busevents ] - ELW_Bad_Heizung_FAULT_REPORTING state updated to NO_FAULT
2015-04-13 14:58:08.798 [INFO ] [runtime.busevents ] - ELW_Bad_Heizung_BOOST_STATE state updated to 0
2015-04-13 14:58:08.798 [INFO ] [runtime.busevents ] - ELW_Bad_Heizung_SET_TEMPERATURE state updated to 17.00
Umschalten auf Baden
2015-04-13 15:39:08.461 [INFO ] [runtime.busevents ] - ELW_Bad_Scene_Heating received command 1
2015-04-13 15:39:08.520 [INFO ] [.model.script.Heating rules - ] - ELW_Bad_STATE_AUTO
2015-04-13 15:39:08.524 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_AUTO state updated to OFF
2015-04-13 15:39:08.527 [INFO ] [.model.script.Heating rules - ] - ELW_Bad_STATE_BOOST
2015-04-13 15:39:08.528 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_BOOST state updated to OFF
2015-04-13 15:39:08.528 [INFO ] [.model.script.Heating rules - ] - ELW_Bad_STATE_ECO
2015-04-13 15:39:08.529 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_ECO state updated to OFF
2015-04-13 15:39:08.529 [INFO ] [.model.script.Heating rules - ] - ELW_Bad_STATE_COMFORT
2015-04-13 15:39:08.530 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_COMFORT state updated to OFF
2015-04-13 15:39:08.539 [INFO ] [hab.model.script.Heating rules] - Entering bathing mode.
2015-04-13 15:39:08.550 [INFO ] [runtime.busevents ] - ELW_Bad_STATE_BOOST received command ON
2015-04-13 15:39:09.115 [INFO ] [runtime.busevents ] - ELW_Bad_Heizung_MODE state updated to BOOST-MODE
2015-04-13 15:39:09.115 [INFO ] [runtime.busevents ] - ELW_Bad_Heizung_FAULT_REPORTING state updated to NO_FAULT
2015-04-13 15:39:09.115 [INFO ] [runtime.busevents ] - ELW_Bad_Heizung_BOOST_STATE state updated to 19
2015-04-13 15:39:09.137 [INFO ] [runtime.busevents ] - ELW_Bad_Heizung_SET_TEMPERATURE state updated to 17.00
11 Kommentare
Von: Roland
2015-04-13 19:54:59 +0200
Die Idee, erstmal alle STATE_* auf OFF zu stellen, gefällt mir, das muss ich bei Gelegenheit auch mal ausprobieren.
Ansonsten gibt's ein ähnliches Setup unter https://groups.google.com/d/msg/openhab/2rgoC2h_lBs/Ef6-RHekP_MJ
Leider klappt letzteres bei mir auch nur teilweise, da ich das Heizkörperthermostat auch noch mit einem Wandthermostat in eine Gruppe geschmissen habe und da kommt es häufig vor, dass mein Wunsch nach "Comfort" nur bei einem der beiden Geräte ankommt und das andere das dann irgendwie kurz drauf wieder rückgängig macht :-(
Vielleicht muss ich ja alle Schreibzugriffe auf das virtuelle Device der Gruppe INT_* schicken, aber da hatte ich wohl auch noch nicht genug Musse, um das sauber durchzuprobieren.
Jetzt hat erstmal die Rolladen-Anti-Sonnen-Schaltung Priorität.
Von: Udo Hartmann
2015-04-16 02:33:33 +0200
Was den hängenbleibenden Boost-Mode betrifft: openHAB bekommt aber doch mit, dass die CCU2 den Heizkreis auf Auto-Mode gesetzt hat, oder? Dann müsstest Du doch nur in openHAB auf die Zustandsänderung z.B. ELW_Bad_STATE_AUTO changed to ON reagieren und ELW_Bad_STATE_BOOST.postUpdate(OFF) ausführen. Nicht schön, das extra einfügen zu müssen, aber wenn die CCU2 das Item nicht selbst zurücksetzt...
Von: Marianne M. Spiller
2015-04-18 12:09:50 +0200
Grundsätzlich hast du recht: für den Boost-Mode könnte ich es im Regelwerk von OpenHAB abfangen oder über die CCU2 einen ReloadTrigger veranlassen, der die geänderten Werte publiziert.
Vor dem selben Problem stehe ich allerdings, wenn ich den Heizkörper über die CCU2 auf Comfort- oder Eco-Temperatur stelle: dann bleibt der MODE nämlich auf AUTO-MODE, und ich wüsste nicht, wie ich das in einem Regelwerk abfangen könnte - weil ich halt von OpenHAB aus auf diese Werte der CCU2 nicht zugreifen kann (oder einfach noch nicht herausgefunden habe, wie das geht - kann ja auch sein).
*kopfkratz*
Von: Norbert
2015-08-14 17:15:09 +0200
Ich habe meine Heizungssteuerung noch mit der Temperaturvorhersage des aktuellen Tages gekoppelt.
Wenn es draussen warm ist (wobei das ja immer eine persönliche Sache ist), dann werden die Heizungen einfach auf eine Minimaltemperatur runtergeregelt.
Jetzt wo es so warm war, bin ich nämlich an einem kühlen Tag in die Situation gelaufen, dass die Heizung anging, obwohl ich über die Kälte mal froh war.
Wenn es Herbst und später Winter wird, dann darf OpenHab die Raum-Temperatur wieder auf "gemütlich warm" hochregeln.
Ansonsten: schöner Blog.
Von:
2016-06-18 07:38:33 +0200
Ich schalte alle HM Variablen einzeln, also Boost aus Auto an, dann bleibt nichts hängen.
Von: Marianne M. Spiller
2016-06-18 12:57:41 +0200
Ja, ich müsste den Artikel unbedingt mal überarbeiten - inzwischen löse ich da auch manches anders :-)
Von: Thomas
2016-08-31 23:14:47 +0200
Hallo,
auch wenn der Artikel wohl schon älter ist, finde ich ihn sehr interessant und die Anzeige sehr übersichtlich.
Wie machst du es denn z.B. im Sommer?
Aktuell stelle ich alle Thermostate von Hand auf Manuell und auf Aus.
Das müsste man doch auch über einen zusätzlichen Button in der Modus-Auswahl realisieren können, oder?
Ich stehe da leider im Moment etwas auf dem Schlauch...
Vielleicht hast du so etwas ja schon, oder hast eine spontane Idee, wie man so etwas lösen könnte.
Von: Malte
2016-10-12 17:02:42 +0200
Hallo Marianne,
was löst Du denn genau anders? Würde mich brennend interessieren, da ich meine Heizungssteuerung jetzt in OpenHab einbinden möchte.
Vielen Dank und viele Grüße
Malte
Von: Marianne M. Spiller
2016-10-13 15:06:58 +0200
Dem widme ich in den nächsten Tagen einen eigenen Artikel, der allerdings noch in Arbeit ist :)
Von: Malte
2016-10-21 16:26:35 +0200
Super, ich bin gespannt und freue mich drauf!
Danke!
Von: Carsten
2017-11-29 13:40:57 +0100
Gibt es schon ein Update bzgl. der Heizungssteuerung? :-)
Hinterlasse einen Kommentar
Ich freue mich über jeden Kommentar, es sei denn, er ist blöd.
Deshalb sind die Kommentare auf dieser Seite auch generell moderiert.