Thomas Kortschack

Hobby- und Projekt-Website

Heizungssteuerung

Sicherlich ist der Begriff Heizungssteuerung sehr weit dehnbar, wobei es hier nicht darum geht die Raumtemperatur zu regeln.

Das Projekt ist aufgrund der Tatsache entstanden, dass in unserem Haus u.a. im Heizungsraum über Jahre ein Mischmasch aus Komponenten verschiedenster Hersteller verbaut wurde und die Kommunikation zwischeneinander teils bzw. gar nicht möglich ist.

Für das Brauchwasser gibt es eine Luftwärmepumpe/Boiler mit zusätzlichem Elektroheizstab.
Zu der Heizungsanlage zählt ein Ölkessel, ein Hackgutkessel (ersetzt alten Scheitholzkessel) und eine Solarthermieanlage, die gemeinsam einen Pufferspeicher/Schichtladespeicher erwärmen können.
Zudem gibt es eine Boilerladepumpe, die es ermöglicht das Brauchwasser im Boiler auch über einen Wärmetauscher im Pufferspeicher zu erwärmen.

Das folgende Bild zeigt ein vereinfachtes Heizungsschema.

Heizungsschema

Der Öl und der Hackgutkessel haben jeweils ihre eigene Kesselsteuerung, womit auch die jeweilige Pumpe und Rücklaufanhebung geregelt wird.

Ebenso steuert schon seit Jahren eine Steuerung des Schichtladespeichers die Pumpe der Solarthermieanlage, die natürlich nur dann läuft, wenn die Kollektoren warm genug sind und der Speicher noch Energie benötigt.

Zunächst kann man sich natürlich Gedanken machen, wie die Energiegewinnung im Winter bzw. Sommer aussieht.

  • Winterbetrieb

    Im Winter läuft i.d.R. der Hackgutkessel, der den Pufferspeicher aufheizt, damit letztendlich die Heizkörper über die Heizungsumwälzpumpe im Haus warm werden.

  • Sommerbetrieb

    Im Sommer benötigt man keine Wärme in den Heizkörpern, womit die Heizungsumwälzpumpe ausgeschaltet bleiben kann. Die Solarkollektoren erhitzen den Pufferspeicher.

Über die grün markierte Boilerladepumpe kann sich der Warmwasser-Boiler auch vom Pufferspeicher Wärme abgreifen, was natürlich besonders im Sommer Sinn macht, wenn die Energie nahezu kostenlos von der Sonne kommt. Aber auch im Winter kann Energie abgegriffen werden, wenn per Hackgutkessel der Puffer erwärmt wird (Unmengen an Borkenkäferholz vorhanden). Beides kommt kostengünstiger, als die Wärmepumpe (oder noch schlimmer den Elektroheizstab) lange laufen zu lassen, um das Brauchwasser zu erwärmen. Letztendlich wird die Wärmepumpe nur dann benötigt, wenn die Heizungskessel aus sind bzw. über mehrere Tage die Sonne kaum scheint.

Die Boilerladepumpe darf nur dann eingeschaltet werden, wenn im Warmwasser-Boiler Wärme benötigt wird und im Pufferspeicher auch genügend zur Verfügung steht.

Einige Zeit lang war provisorisch eine Zeitschaltuhr eingebaut, sodass nur zu bestimmten Uhrzeiten die Boilerladepumpe läuft. Zeitlich wurde versucht - besonders als wir noch eine alten Scheitholzkessel hatten - es so einzustellen, dass möglichst dann auch der Pufferspeicher schon aufgeheizt war (im Winter klappt das ganz gut). Anderenfalls würde man sonst nur kaltes Wasser im Kreis pumpen, oder im schlechtesten Fall sogar Wärme im Boiler verlieren. Besonders im Sommer, wenn es mal bewölkt ist und der Pufferspeicher noch zu kalt ist, gibt es mit einer einfachen Zeitschaltuhr solche Probleme, zumal keinerlei Temperatur überwacht wird.

Eigene Lösung

Mittlerweile habe ich unsere Heizungsanlage mit Temperatursensoren ausgestattet, wobei ich hierfür die DS18B20 Sensoren einsetze, die mittels 1-Wire (Eindraht-Bus) ausgelesen werden können. Da manchmal keine Tauchhülsen für die Temperaturfühler vorhanden oder frei waren, habe ich diese mittels folgender Methoden befestigt.

  • Um Heizungs- bzw. Brauchwasserrohre habe ich eine Schlauchschelle gelegt und damit den DS18B20 eingeklemmt, wobei ich etwas Wärmeleitpaste zwischen Rohr und Sensor angebracht habe.
  • Im Pufferspeicher gab es leider gar keine Möglichkeit 3 Sensoren zu befestigen und so habe ich auf dem DS18B20 ebenfalls auf einer Seite Wärmeleitpaste angebracht, diesen an den Speicher gedrückt und seitlich etwas Zwei-Komponenten-Kleber gestrichen. Mit Klebeband habe alles fixiert, bis der Kleber fest war.

Hier folgt meine Liste der aktuell verbauten Temperatursensoren, die jeweils eine eindeutige Kennung (ID) haben. Die gezeigten Temperaturwerte sind an einem sonnigen Tag um ca. 12 Uhr Mittag entstanden. Die Heizungskessel sind aus, die Solaranlage ist in Betrieb und heizt den Schichtladespeicher auf.

Kennung Name Temperatur
28-0114541d93aa Außentemperatur Sensor 22,375 °C
28-0417c467e2ff Schichtladespeicher Sensor 1 (oben) 65,562 °C
28-0417c44fbbff Schichtladespeicher Sensor 2 (mitte) 60,937 °C
28-0417c451b7ff Schichtladespeicher Sensor 3 (unten) 53,125 °C
28-011453cc94aa Wärmepumpe Sensor 46,250 °C
28-011453e13eaa Heizung Sensor 1 (Vorlauf) 18,187 °C
28-011453ca6faa Heizung Sensor 2 (Rücklauf) 18,687 °C
28-011453cfd1aa Hackgutkessel Sensor 1 (Vorlauf) 18,062 °C
28-011453cfd9aa Hackgutkessel Sensor 2 (Rücklauf) 17,000 °C
28-011453e62aaa Ölkessel Sensor 1 (Vorlauf) 17,187 °C
28-011453e74faa Ölkessel Sensor 2 (Rücklauf) 17,687 °C
28-011453e70baa Solaranlage Sensor 1 (Vorlauf) 77,812 °C
28-0517c46012ff Solaranlage Sensor 2 (Rücklauf) 62,125 °C

Um u.a. die Temperaturwerte auch über das lokale Netzwerk an allen PCs verfolgen zu können, nutze ich eine Raspberry Pi 3, den ich zusammen mit einigen anderen Komponenten in einem Schaltgehäuse mit Hutschienen montiert habe.

Schaltkasten der Heizungssteuerung

Doch kommen wir zum Innenleben, denn das dürfte für die Meisten interessanter sein. Übrigens ist dies bereits der zweite Schaltkasten. Der erste Kasten war relativ klapprig und wesentlich kleiner, sodass schon nichts mehr hineinpasste. Ich entschied mich deshalb einen Schaltkasten mit mehr Platz zu verwenden, um eventuell später noch Erweiterungen einbauen zu können.

Aufbau der Heizungssteuerung
  • Obere Hutschiene

    In der obersten Hutschiene befinden sich zwei Platinen mit jeweils 4 Relais, die ich nutze, um Pumpen (z.B. Boilerladepumpe) bzw. den 3-Wege-Mischer der Heizung anzusteuern. Die Relais werden über die GPIOs vom Raspberry Pi geschaltet. Für die beiden Relais-Platinen habe ich mir mit dem 3D-Drucker Hutschienen-Halterungen gedruckt.

    Da ich an dieser Stelle mit 230 V hantiere und sicherstellen wollte, dass ich keine gewischt bekomme, falls ich mal eine Pumpe oder ähnliches auswechseln muss, habe ich einen Leitungsschutzschalter neben den Relaisplatinen vorgesehen. Egal wie die Relais per Raspberry Pi angesteuert werden, hiermit kann ich alles hinter den Relaisplatinen stromlos schalten.

  • Mittlere Hutschiene

    In der mittleren Hutschiene befindet sich das Netzteil, welches für den Raspberry Pi die 5 V erzeugt, wobei ich diese 5 V auch als Versorgungsspannung für die Temperatursensoren nutze.

    Auch hier habe ich einen Leitungsschutzschalter verbaut, um das Netzteil und somit den Raspberry Pi stromlos schalten zu können.

    Hier gibt es noch durchaus Platz für ein weiteres Netzteil (z.B. 12 V), was ich evt. mal für externe Schaltungen benötigen könnte.

  • Untere Hutschiene

    Neben dem Raspberry Pi habe ich auf der unteren Hutschiene auf einer Lochrasterplatine eine Schmelzsicherung angebracht, wobei darüber die Versorgungsspannung (5 V) für die DS18B20 läuft. Dies dient mir nur zur Sicherheit, damit in einem hoffentlich nie auftretenden Kurzschlussfall nicht der volle Strom des Netzteils durchs Buskabel fließt. Auf der Platine habe ich auf Lötstiften zudem einen Pull-up-Widerstand angebracht, der den 1-Wire-Bus auf 3,3 V zieht (High-Pegel vom Raspberry Pi). Zunächst hatte ich einen 4,7 kOhm Widerstand im Einsatz, womit der Bus mit den oben aufgelistet Sensoren aber relativ instabil war und teils nur wenige Stunden bzw. Tage funktionierte. Mittlerweile habe ich diesen gegen einen 2,2 kOhm Pull-up-Widerstand ersetzt und seither keine Probleme mehr.

    Für meine 1-Wire-Lochrasterplatine habe ich mir ebenfalls eine Hutschienen-Halterung gedruckt, wobei ich die so konstruiert habe, dass sie möglichst weit nach oben ragt und die USB-Anschlüsse vom Raspberry Pi nicht verdeckt.

Raspberry Pi Konfiguration

Glücklicherweise hat der Raspberry Pi eine 1-Wire-Schnittstelle integriert, die man im Raspberry Pi OS (ehemals Raspbian) lediglich aktivieren muss. Dies kann über die grafische Benutzeroberfläche in der "Raspberry Pi Configuration" erfolgen. Natürlich ist es auch möglich das per Console in der /boot/config.txt zu machen. Dazu habe ich folgende Zeile am Ende eingefügt.

dtoverlay=w1-gpio

Nach einem Neustart kann man dann bereits angeschlossene und erkannte Sensoren über die Console auflisten lassen.

ls /sys/bus/w1/devices

In meinem Fall sieht die Ausgabe wie folgt aus.

28-011453ca6faa  28-011453cfd9aa  28-011453e70baa  28-0417c44fbbff  28-0517c46012ff
28-011453cc94aa  28-011453e13eaa  28-011453e74faa  28-0417c451b7ff  w1_bus_master1
28-011453cfd1aa  28-011453e62aaa  28-0114541d93aa  28-0417c467e2ff

Von jedem einzelnen Sensor kann man auch die Temperatur betrachten, wobei ich hier als Beispiel den Außentemperatursensor 28-0114541d93aa nutze.

cat /sys/bus/w1/devices/28-0114541d93aa/w1_slave

Damit erhält man folgende Daten.

48 01 4b 46 7f ff 0c 10 96 : crc=96 YES
48 01 4b 46 7f ff 0c 10 96 t=20500

Die Angabe t=20500 steht hier für 20,5 °C.

Bezüglich der Relais ist mir nach dem Start vom Rasperry Pi aufgefallen, dass teils schon Relais angezogen sind, was ich nicht gut fand. Zwar initialisiert meine eigene Software sämtliche Akteure und schaltet z.B. Pumpen ab, aber käme es beim Systemstart (z.B. nach Stromausfall) zu einem Fehler, dass meine Software nicht gestartet werden kann, könnten diese undefinierten Zustände möglicherweise zu Problemen führen (Überhitzung Boiler).

Meine 8 Relais hängen an den GPIO Pins 17,27,22,5,6,13,19,26. Die gekauften Relais-Platinen sind so aufgebaut, dass die monostabilen Relais bei einem LOW-Pegel angezogen werden (es leuchten dann auch die LEDs auf den Relaisplatinen). Bei einem HIGH-Pegel sind die Relais hingegen nicht angezogen.

Um sicherzustellen, dass nach einem Systemstart die von mir festgelegten Zustände eingehalten werden, habe ich am Ende der config.txt folgende Zeile ergänzt.

gpio=17,27,22,5,6,13,19,26=op,dh

Das op steht hier für Output. D.h. all diese GPIOs sind somit als Ausgang konfiguriert. Mittels dh wird angegeben, dass standardmäßig der HIGH-Pegel anliegen soll, was dann auch der Fall ist, falls meine Software nicht startet. Somit sind nach Systemstart erstmal alle LEDs auf der Relaisplatine aus.

Software für Heizungssteuerung

Zunächst hatte ich mich dafür entschlossen eine schnelle Lösung für die Boilerladepumpe zu implementieren, sodass das Brauchwasser warm wird und wir keine Zeitschaltuhr mehr brauchen.

Da meine Modellbahnsteuerungssoftware auf .NET/C# aufsetzt, habe ich mich aus Interesse kurz mit .NET Core 3 beschäftigt und bin dort u.a. auf die sogenannten Server-side Blazor Apps gestoßen, die ich für die Heizungssteuerung mittels Weboberfläche recht interessant finde.

Die App übertrage ich mittels SSH (WinSCP) auf den Raspberry Pi. Dort habe ich das dotnet-Umfeld soweit eingerichtet, sodass man eine Blazor-App mittels folgendem Befehl starten kann.

dotnet MyBlazorApp.dll --urls=http://0.0.0.0:8080

Im lokalen Netzwerk kann somit jeder per Browser auf die Weboberfläche zugreifen, wobei ich dort derzeit die bereits gezeigten Temperaturwerte ausgebe, sowie den aktuellen Status der Relais/Pumpen, wobei ich für die Relais auch eine Checkbox eingebaut habe, um diese manuell schalten zu können. Das geht somit auch mittels Smartphone per WLAN, wenn man neben der Pumpe oder beispielweise dem 3-Wege-Mischer steht.

Während die App gestartet ist, läuft in einem Task ein Endlosschleife, die die aktuellen Temperaturwerte ausliest und mit einer Logik die Boilerladepumpe entsprechend ein- und ausschaltet. Alle Aktionen werden zudem geloggt, sodass ich jederzeit nachschauen kann, wann/was/warum die Steuerung etwas geschaltet hat.

Um das Steuerungsprogramm automatisch beim Systemstart zu starten, habe ich einen Service angelegt, der mittels systemd und dem Kommandozeilenwerkzeug systemctl aktiviert bzw. deaktiviert werden kann. Eine Anleitung zum Einrichten eines Service findet man in der Raspberry Pi Dokumentation.

Einige Zeit später habe ich das Ganze um die bereits o.g. Übersicht erweitert, in der man nun auch die Temperaturwerte und Pumpenzustände direkt einsehen kann.

Blazor App

Zudem steuere ich neben der Boilerladepumpe nun auch die Heizungsumwälzpumpe an, wobei ich dafür eine Zeitsteuerung implementiert habe, die es ermöglicht die Pumpe nach gewissen Wochentagen bzw. Uhrzeiten ein- bzw. auszuschalten. Ebenso habe ich den 3-Wege-Mischer angebunden, um die Temperatur anhand einer Heizungskurve abhängig zur Außentemperatur zu regeln.

Zukunftsmusik

Bzgl. der Regelung des 3-Wege-Mischers bin ich noch etwas am optimieren, sodass möglichst wenig Schaltvorgänge nötig sind, um die Solltemperatur zu erreichen.

Ich könnte mir durchaus vorstellen das Thema aufzubohren, zumal ein editierbares grafisches Schema komfortabel wäre, ähnlich wie es teils Visualisierungslösungen für Automatisierungs- und Prozessleittechnik bieten. Interessant wären sicherlich auch weitere Themen, wie etwa die Überwachung des Wasserstands bei einer Regenwassernutzungsanlage uvm.