Wandlüfter für den Wäschekeller

Mit Berechnung der absoluten Luftfeuchtigkeit kann der Keller effektiv getrocknet werden

15517 Zeichen
Score aktualisiert
100%
Code: a5c61251c12e47938d55e97b51d71cc3
Token in Entwicklung nicht aktualisiert
img-Tag in Entwicklung deaktiviert

Über meine Luftentfeuchter im Keller und wie ich sie mit der HomeMatic ansteuere, hatte ich ja schon mal berichtet.

Im neuen alten Haus haben wir jetzt einen atmosphärischen Kessel (der die Luft für die Verbrennung aus der Raumluft zieht) statt einer raumluftunabhängigen Therme (die in unserem Fall per Lüfter die Frischluft über ein doppelwandiges Abgasrohr holte). Dafür haben wir ein paar hübsche Wanddurchbrüche im Wäsche-/Heizungskeller, die ich für eine aktive Belüftung nutzen kann.

Variablen in HomeMatic-Scripten

Die CCU hatte früher ein Limit von maximal 200 Variablen, das mit Firmware-Version 2.29.18 aufgehoben wurde. Dieses Limit bezog sich auf alle Variablen, die in allen Scripten verwendet werden. Gemeint sind Variablen, die direkt im Script definiert werden: object x; object y; var z;

Wenn Scripte nicht mehr funktionieren und bei der Prüfung unerklärliche Syntax-Fehler auftreten, sollte versuchsweise dieses Programm wieder gelöscht oder deaktiviert werden – oder, noch besser, auf die aktuelle Firmware-Version aktualisiert werden.

Benennung von Systemvariablen

Prinzipiell kann man Systemvariablen – so wie allen Objekten in der CCU – beliebige Namen geben, also z. B. auch Umlaute und Sonderzeichen verwenden. Ich empfehle jedoch, sich auf reguläre Buchstaben (a-z, A-Z) zu beschränken: Bei Umlauten und Sonderzeichen besteht die Gefahr, dass Systemvariablen in Scripten nicht überall gefunden werden.

Die Geschichte des Hauses

Im Keller sieht man ein bisschen die Geschichte unseres Hauses.

1978 wurde es zunächst mit einer Ölheizung ausgestattet. Dafür gab es einen abgetrennten Bereich im Heizungskeller, wo die Öltanks standen. In der Wand zwei Löcher  – eines unter der Decke als „Abluft“, eines auf Hüfthöhe als „Zuluft“ – sowie der Durchbruch für die Betankung. Die Belüftungsdurchbrüche sind mit einem groben Maschendraht verschlossen, der wohl nur die allergrößten Insekten abhält. Kellerasseln, Würmer, Spinnen – geht alles durch.

Einige Jahrzehnte später kam dann das blaue Monster und damit die Umstellung auf Gas. Das Öllager wurde entfernt, von der Abtrennung steht noch eine kleine Mauer. Der Durchbruch für die Betankung wurde verschlossen, die Lüftungsöffnungen blieben bestehen.

Wie erwähnt, handelt es sich bei der Gasheizung um einen atmosphärischen Kessel: Die Frischluft für die Verbrennung wird direkt aus der Raumluft gezogen. Deshalb ist auch der alte Wanddurchbruch von der Ölheizung weiterhin notwendig. Allerdings braucht es keine zwei großen Öffnungen – eine reicht, und die kann auch mal ein hübsches Gitter bekommen.

Der Vorteil, wenn die Luft durch den Raum in die Heizung gezogen wird: Damit wird auch gleichzeitig der Raum gelüftet. Wenn man das ehemalige Öllager jetzt zum Wäschetrocknen nutzt, dann zieht die Heizung im Betrieb die feuchte Luft aus dem Raum. Über die Lüftung strömt frische Luft von draußen nach. Das passiert natürlich nur, wenn die Heizung auch läuft.

Deshalb der Plan: Die Abluft-Öffnung bekommt einen Miefquirl, der die feuchte Luft absaugt, wenn die Heizung nicht läuft.

Installateure werden übrigens die Nase rümpfen, wenn ich von meiner Wäscheleine neben dem atmosphärischen Kessel schwärme: Die Feuchtigkeit aus der Wäsche kann zu Korrosion führen und die Fusseln sammeln sich in der gesamten Anlage und verhindern eine saubere Verbrennung, wenn man die Anlage nicht regelmäßig reinigen lässt. Ich kann das aus einem Haushalt, der seit 15 Jahren keine Wartung hat machen lassen, bestätigen: Wenn da die (verrostete) Heizung zündet, hört man die kleine Explosion im ganzen Haus.

Lüfter statt Entfeuchter

Bisher verrichtete einer der Entfeuchter aus dem alten Haus im Keller seinen Dienst. Die Entfeuchtungsleistung ist immer noch akzeptabel, aber mittlerweile macht der Kompressor einen Höllenlärm und der Stromverbrauch ist abschreckend. Im Sommer kommt noch der Effekt hinzu, dass durch die Belüftungsschächte warme, feuchte Luft in den kalten Keller gelangt, die dann vom Entfeuchter wieder getrocknet werden muss – verstärkt durch die Heizung, die die feuchte Luft noch aktiv einsaugt, wenn sie im Sommer den Warmwasserspeicher aufheizt.

Der Plan ist daher ein Wandlüfter, der immer dann anspringt, wenn die Luftfeuchtigkeit draußen niedriger ist als drinnen – der also aktiv die feuchte Luft rausbläst, während trockenere Luft durch das Zuluft-Gitter nachströmt.

Erster Schritt: Eine Steckdose neben dem Abluft-Schacht, die über einen Kanal des HmIP-DRSI4 geschaltet wird.

Zweiter Schritt: Ein Badlüfter, bekannt aus gefangenen Waschräumen, umgangssprachlich auch Miefquirl genannt. Zur Befestigung braucht es noch eine Aluplatte, um den übergroßen Durchbruch zu verdecken.

Der Lüfter ist für meinen Geschmack etwas zu leistungsschwach – ein größeres Modell gab es im Baumarkt meines Vertrauens nicht. Ich hatte es noch mit einem China-Lüfter von Amazon versucht, allerdings kam der vollkommen verbeult an und ging wieder zurück.

Dennoch verrichtet der Kleine klaglos seinen Dienst und sorgt bei ersten Tests immerhin für ausreichenden Luftaustausch.

Pflichtenheft

Der Plan lautet ja, den Keller zu entfeuchten. Gleichzeitig handelt es sich um einen unbeheizten Heizungskeller, wo man mit aktiver Entlüftung schlimmstenfalls Abgase aus der Heizung in die Raumluft zieht und wo es im Winter auch mal etwas frischer wird. Dafür besteht im Sommer die Gefahr, dass er nicht trocknet, sondern sogar feuchte Luft zuführt. Die Programmierung muss daher einige Aspekte berücksichtigen.

Luftfeuchtigkeit

Der Lüfter soll feuchte Luft rausblasen, so dass trockene Luft von draußen durch den Zuluftschacht nachströmt. Deshalb soll er nur laufen, wenn es drinnen feuchter ist als draußen.

Dabei ist jedoch nicht die relative Luftfeuchtigkeit (rH) maßgeblich, die von den HomeMatic-Sensoren gemeldet wird, sondern die absolute Luftfeuchtgkeit, die die Menge Wasser in einer bestimmten Menge Luft angibt (g/m³).

Ich muss also aus den Daten des Kombisensors und des Raumthermostaten die absolute Luftfeuchtigkeit berechnen.

Heizungsbetrieb

Wenn der Brenner läuft, erzeugt er Abgase, die aufgrund ihrer Temperatur durch den Schornstein aus dem Raum entweichen. Frische Luft strömt nach.

Sollte aber der Lüfter laufen, kann es sein, dass er stärker ist als der Kamineffekt und dass er das maximale Volumen der Luftzufuhr übersteigt. Realistisch ist das bei meinem kleinen Miefquirl nicht, aber Schornsteinfeger sind in solchen Fragen relativ kompromisslos.

Der Heizungsbetrieb muss also erkannt und der Lüfter entsprechend abgeschaltet werden.

Winter

Selbst ohne aktive Lüftung wurden es im Heizungskeller schon mal 12° im Winter. Da ich die Wäsche nicht gefriertrocknen will, darf der Lüfter daher nicht laufen, wenn die Raumtemperatur zu niedrig ist.

Sommer

Wenn es im Keller kühl und draußen warm ist, dann ist sehr wahrscheinlich die absolute Luftfeuchtigkeit ohnehin draußen größer als drinnen, so dass der Lüfter nicht läuft.

Durch den offenen Zuluftschacht wird aber trotzdem warme Luft in den Keller kommen und die relative Luftfeuchtigkeit erhöhen. Außerdem soll die Wäsche ja nicht nur einfach rumhängen, sondern trocknen.

Für den Sommer oder wenn aus anderen Gründen sehr viel Feuchtigkeit im Keller ist, bleibt dann am Ende doch noch der Entfeuchter im Spiel.

Nachdem der Plan also feststeht, geht es an die Implementierung.

Absolute Luftfeuchtigkeit berechnen

Die Sensoren liefern Temperatur und relative Luftfeuchtigkeit, aus denen sich mit einer komplizierten Formel die absolute Luftfeuchtigkeit berechnen lässt. Strenggenommen gehört auch noch der Luftdruck in den Mix, aber der Einfluss ist minimal und letztlich geringer als die Messungenauigkeit der Sensoren.

Ich lege zwei Systemvariablen für den Kombisensor und den Raumthermostaten an und weise sie den jeweiligen Kanälen zu. Zunächst den Kombisensor.

Durch die Kanalzuordnung wird der Wert in der WebUI beim Kanal angezeigt.

Jetzt kann ich für den Kombisensor das passende WebUI-Programm erstellen.

Sobald der Kombisensor einen Wert für die relative Luftfeuchtigkeit meldet, wird ein Script ausgeführt. Wichtig ist bei Aktualisierung auslösen, damit das Script wirklich bei jedem neuen Wert ausgeführt wird – weniger als 0% rH wird es nicht geben.

Das Script ist relativ kurz, aber hässlich:

object o_ks = dom.GetObject ("AB Garten Kombisensor");
real r_ks_t = o_ks.DPByHssDP ("ACTUAL_TEMPERATURE").Value();
real r_ks_rh = o_ks.DPByHssDP ("HUMIDITY").Value();
real r_ks_ah = ((((17.62 * r_ks_t) / (243.12 + r_ks_t)).Exp() * 611.2 * r_ks_rh) / (461.51 * (r_ks_t + 273.15))) * 10.0;
dom.GetObject ("Abs. Luftfeuchte Garten").State (r_ks_ah);

Zunächst wird der Kombisensor gesucht, der bei mir AB Garten Kombisensor heißt. Bitte darauf achten, den korrekten Kanal zu wählen – bei HomeMatic IP ist das gerne etwas umfangreicher. Von diesem Gerät werden aktuelle Temperatur und Feuchtigkeit abgefragt. Dann kommt die Formel, mit der die absolute Luftfeuchtigkeit berechnet wird.

Wer mag, kann im Internet recherchieren, wie sich diese Formel zusammensetzt. Das ist durchaus interessant, aber an dieser Stelle etwas zu viel Theorie. Es reicht, wenn die funktionierende Formel hier zum Einsatz kommt.

Schließlich wird die Systemvariable mit dem Wert für die absolute Luftfeuchtigkeit gefüllt.

Das gleiche Spiel dann noch für den Raumthermostaten. Dabei handelt es sich noch um einen uralten HM-CC-TC, der aus dem alten Haus übriggeblieben ist. Für die Lüftung immerhin ausreichend. An dieser Stelle hat er noch den Vorteil, dass ich neben HomeMatic IP auch noch das Script für HomeMatic-Komponenten hinzufügen kann.

Beim Anlegen der Systemvariable macht es erstmal keinen Unterschied.

Auch das WebUI-Programm ist nahezu identisch.

Im Script sieht man schließlich, dass bei der HomeMatic ein anderer Datenpunktname für die Temperatur zum Einsatz kommt.

object o_t = dom.GetObject ("KE Wäsche Heizung Messwerte");
real r_t_t = o_t.DPByHssDP ("TEMPERATURE").Value();
real r_t_rh = o_t.DPByHssDP ("HUMIDITY").Value();
real r_t_ah = ((((17.62 * r_t_t) / (243.12 + r_t_t)).Exp() * 611.2 * r_t_rh) / (461.51 * (r_t_t + 273.15))) * 10.0;
dom.GetObject ("Abs. Luftfeuchte Keller").State (r_t_ah);

Der Rest entspricht dem vorherigen Script.

Die hier angegebenen Scripte sollten für alle HomeMatic-/HomeMatic-IP-Geräte stimmen, also zum Beispiel auch für den Außentemperaturfühler HM-WDS10-TH-O oder für einen Raumthermostaten HmIP-WTH-2. Falls nicht, kann man in der Script-Dokumentation von eQ-3 für jedes Gerät die korrekten Datenpunkte finden.

Wenn alles korrekt ist, wird innerhalb von Minuten der Wert für die absolute Luftfeuchtigkeit befüllt.

Heizungsbetrieb erkennen

Ich habe schon seit sehr langer Zeit einen Sensor für die Protokollierung meines Gasverbrauchs am Zähler.

Den Kontakt für den Gaszähler hat mir damals ein freundlicher Techniker geschenkt, nachdem ich mal höflich bei den Stadtwerken gefragt habe, ob sie sowas beschaffen können. Techniker kam vorbei, weil der Kundenservice wohl einen etwas rätselhaften Auftrag geschrieben hat, um sich die Sache mal vor Ort anzusehen. Das war damals so neu, dass er den Kontakt besorgt hat, nur um zu sehen, ob das Gebastel funktioniert.

Es funktionierte jahrelang und zog sogar noch ins neue alte Haus um.

Mittlerweile gibt es den HmIP-ESI-GAS als fertige Lösung, so dass man nicht mehr wie ich damals einen Tür-/Fensterkontakt HM-Sec-SC aufbrechen muss. Dieser hat bei mir inzwischen auch den Geist aufgegeben. Ich habe allerdings dann einfach eine Kontaktschnittstelle HmIP-SCI als Ersatz genommen – Kontakt hatte ich ja schon. So habe ich ein paar Euro gespart. Allerdings ist der Batterieverbrauch vergleichsweise hoch, weil die Schnittstelle bei jedem Impuls senden muss. Aber mit Akkus ist auch das erträglich.

Für die Verwendung in Programmen habe ich mir wieder eine Systemvariable angelegt.

Die möglichen Werte von Heizung Brennerstatus sind aus, wenn der Brenner nicht läuft, an, wenn er aktiv ist, sowie Nachlauf für eine kurze Zeit nach dem Ausschalten.

Das WebUI-Programm ist relativ einfach:

Wenn der Aktor am Gaszähler eine Aktualisierung sendet, bedeutet das, dass der Kontakt am Zähler einmal ausgelöst wurde, die letzte Stelle des Zählwerks also bewegt wurde. Da an unserem Gasanschluss nichts hängt außer der Heizung, folgere ich messerscharf: Heizung läuft.

Während des Brennerbetriebs dreht sich das Rad für die letzte Stelle etwa alle 20 Sekunden einmal, der Aktor wird also etwa alle 20 Sekunden eine Aktualisierung senden – deshalb bei Aktualisierung auslösen. Wenn das passiert, wird der Status an der Systemvariablen bestätigt.

Wenn 45 Sekunden lang kein Impuls gesendet wurde, dann steht der Zähler offensichtlich und die Variable springt auf Nachlauf. So können meine Programme zum Beispiel auch beachten, dass der Brenner nicht sofort nach dem Ausschalten wieder eingeschaltet wird. Nach insgesamt fünf Minuten geht die Variable dann auf aus.

Wichtig ist hier der Haken Vor dem Ausführenden alle laufenden Verzögerungen für diese Aktivitäten beenden. Wenn der fehlt, springt die Variable bei laufendem Betrieb trotzdem immer wieder auf Nachlauf und später aus.

Die zusätzliche Bedingung Heizung Brenner bezieht sich auf den Aktor, der durch meine Heizungsscripte den Brenner steuert. Wenn der Brenner nicht freigeschaltet ist, kann auch kein Gas verbraucht werden. Ein Impuls der Kontaktschnittstelle muss in diesem Fall eine Fehlauslösung sein und wird ignoriert.

Das hier vorgestellte Setup ist nur ein Beispiel für eine Erkennung des Heizungsbetriebs. Ob der Betrieb überhaupt erkannt werden muss, zum Beispiel bei raumluftunabhängiger Heizung oder bei Kaminöfen, und wie man das am besten realisiert, hängt vom Einzelfall ab.

Finale: Das Lüftungsscript

Nach all diesen Vorarbeiten bin ich gerüstet, das Programm zur Lüftersteuerung anzulegen.

Die gesamte Programmlogik liegt im Script. Im WebUI-Programm muss nur sichergestellt werden, dass dieses auch ausgeführt wird:

Das Script kümmert sich dann um den Rest.

real r_ks_ah = dom.GetObject ("Abs. Luftfeuchte Garten").Value();
real r_t_t = dom.GetObject ("KE Wäsche Heizung Messwerte").DPByHssDP ("TEMPERATURE").Value();
real r_t_ah = dom.GetObject ("Abs. Luftfeuchte Keller").Value();
boolean b_brenner = dom.GetObject ("Heizung Brennerstatus").Value() == 1;

boolean b_lueften = (!b_brenner) && (r_t_t >= 12.0) && (r_ks_ah < r_t_ah);

object o_luefter = dom.GetObject ("KE Wäsche Lüfter").DPByHssDP ("STATE");
if (o_luefter.Value() != b_lueften) {
  o_luefter.State (b_lueften);
}

Am Anfang sammelt das Script die nötigen Daten aus den Systemvariablen und vom Raumthermostat im Keller. Dann wird ermittelt, ob der Lüfter laufen soll:

  1. Brenner darf nicht an sein – Nachlauf ist aber OK
  2. Raumtemperatur muss größer als 12° sein
  3. absolute Luftfeuchtigkeit muss draußen geringer sein als drinnen.

Dann noch den Kanal KE Wäsche Lüfter heraussuchen, an dem der Lüfter angeschlossen ist, und wenn der Ist-Status vom Soll-Status abweicht, wird geschaltet.

Bei diesem Script habe ich mich übrigens bei der Entwicklung schwarzgeärgert, dass ich mich nicht an meine eigene Empfehlung gehalten habe, bei der Benennung von Objekten auf Umlaute zu verzichten. Deshalb hier der Hinweis: Machen Sie es nicht, was ich mache, sondern machen Sie, was ich schreibe. Eltern kennen diesen Ratschlag.

Epilog: Zusätzliche Entfeuchtung

Im Sommer wird der Lüfter den Keller nicht trocknen können: Warme Luft kann mehr Feuchtigkeit aufnehmen als kalte; 65% Luftfeuchtigkeit im kalten Keller sind zwar zu viel zum Wäschetrocknen, aber immer noch weniger als 60% relative Luftfeuchtigkeit im warmen Garten.

Deshalb lasse ich am Ende trotzdem noch den Entfeuchter laufen, wenn die relative Luftfeuchtigkeit über 60% ist. Auf den Lüfterlauf achte ich dabei nicht, denn der läuft ja ohnehin nur, wenn er den Entfeuchter mit trockener Außenluft unterstützen würde.

60% sind zwar nicht mehr optimal zum Wäschetrocknen, aber ausreichend gegen Feuchtigkeitsschäden. Im Idealfall läuft zumindest nachts der Lüfter und sorgt für Austausch mit kühler Nachtluft.

Im Sommer ist eh die Wäschespinne für das Trocknen der Wäsche zuständig.

Navigation