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.
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.
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.
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.
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:
gesamtes Script markieren / kopieren
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.
gesamtes Script markieren / kopieren
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:
- wenn Heizung Brennerstatus auf an wechselt, damit der Lüfter sofort
ausgeschaltet wird, wenn der Brenner startet
- bei Aktualisierung der Werte für die absolute Luftfeuchtigkeit draußen und drinnen
Das Script kümmert sich dann um den Rest.
gesamtes Script markieren / kopieren
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:
- Brenner darf nicht an sein – Nachlauf ist aber OK
- Raumtemperatur muss größer als 12° sein
- 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.