EinführungLeider existieren viele Anleitungen zum Thema Raumklima und Schimmelvermeidung, die schlichtweg falsch sind und fundamentale Grundlagen und Zusammenhänge ignorieren oder aber aus Zeiten stammen, wo Berechnungen und Regelungen, die mit Systemen wie FHEM heute ganz einfach sind, unmöglich waren. Interessant ist, dass diese veralteten Hinweise sogar noch in aktuellen Normen und Richtlinien beschrieben werden. Mit FHEM und einigen Sensoren, die vermutlich zu jeder Grundausrüstung eines Smart-Homes gehören, kann Schimmel aber sehr viel effektiver verhindert werden.
Basics und BegriffeUm zu wissen, wie man in einem konkreten Raum vorgehen muss, ist ersteinmal etwas grundlegendes Wissen nötig. Daher hier zunächst ein paar wenige und aufs Wesentliche vereinfachte Infos zu Taupunkten, relativer Luftfeuchte und Schimmel:
- Absolute Luftfeuchtigkeit: Sagt aus, wieviel Masse an Wasser ist in einem bestimmten Volumen Luft enthalten ist. Dieser Wert ist nicht temperaturabhäng - was logisch ist: Heizt man einen luftdichten Raum auf, ist danach die gleiche Masse Wasser in der Luft wie vorher. Ändert man also nur die Lufttemperatur, bleibt die absolute Luftfeuchte gleich. Die absolute Luftfeuchte in einem Raum kann also nur durch Lüften oder Entfeuchten geändert werden.
- Relative Luftfeuchtigkeit: Man stelle sich die Luft als Schwamm vor. Die relative Luftfeuchtigkeit gibt in Prozent an, wie voll der Schwamm (die Luft) in Prozent mit Wasser vollgesogen ist. Bei 100% ist der Schwamm voll und tropft - im Fall der Luft bedeutet das: Das Wasser kondensiert. Die Fähigkeit der Luft, Wasser zu speichern, ist stark temperaturabhäng. Kalte Luft kann kaum Wasser aufnehmen (die 100% sind schnell erreicht), warme Luft viel mehr. Man kann die relative Luftfeuchtigkeit also - im Gegensatz zur absoluten - auch durch Heizen senken.
- Taupunkttemperatur: Das ist die hypothetische Temperatur, bei der die relative Luftfeuchte - ausgehend von einer aktuellen Temperatur und gleichzeitig gemessener Luftfeuchtigkeit - genau 100% betragen würde. Ist eine Stelle im Raum kälter, ist dort die Luftfeuchtigkeit bei über 100% und Wassertropfen kondensieren.
Temperaturänderungen und relative Luftfeuchte Erwärmt man Luft, bleibt die absolute Luftfeuchte gleich, während die relative Luftfeuchtigkeit sinkt. Kühlt man sie ab, steigt die relative Luftfeuchte. Aber um wieviel? Leider ist der Zusammenhang nicht linear, so dass man das ausrechnen muss. Da ich das nirgends fertig gefunden habe, habe ich hier http://www.wetterochs.de/wetter/feuchte.html die nötigen Formeln gefunden, umgestellt und in folgende Funktion für die
99_myUtils.pm gegossen:
sub shiftRelHumidity($$$)
# Uses a pair of relative humidity and temperature ($r1, $T1) to calculate the relative
# humidity on spots with same absolute humidity of the air but different temperature $T2.
#
# Useful to calculate the relative humidity near the surface of cold walls. Therefore, use the rel.
# humidity of the room ($r1 in percent), the room Temperature ($T2 in degrees of C) and the temperature
# of the surface of the wall ($T2 in degrees of C). Returns the rel. humidity on the surface in pct then.
{
my ($T1, $r1, $T2) = @_;
my $r2 = ($r1 * 10**((7.62*$T1)/(234.175+$T1))*(273.15+$T2)) / ( 10**((7.62*$T2)/(234.175+$T2))*(273.15+$T1));
return $r2;
}
Benutzungsbeispiel 1: Wir haben 20 Grad bei 50% rel. Luftfeuchte. Wir heizen die Luft auf 25°C - wie hoch ist dann die relative Luftfeuchte? Dazu in die FHEM-Kommandozeile eingeben:
{shiftRelHumidity(20,50,25)}
Ergebnis ist dann die relative Luftfeuchte bei 25 Grad - nur noch 37%!
Mit echten Messwerten geht es natürlich auch:
{shiftRelHumidity(ReadingsVal("Innenfuehler","temperature",""),ReadingsVal("Innenfuehler","humidity",""),25)}
Was passiert mit der Luftfeuchtigkeit beim Lüften?Beim Lüften kommt es im Idealfall zum vollständigen Luftaustausch mit der Außenluft. Die Luft von außen ersetzt die Luft im Raum und behält dabei ihre
absolute Feuchtigkeit. Allerdings ändert sich meistens ihre Temperatur und damit wie oben beschrieben ihre relative Luftfeuchtigkeit. Berechnen können wir diese Änderung der relativen Feuchte daher praktischerweise wieder über die Funktion
shiftRelHumidity - und zwar so, als ob wir die Außenluft auf Innentemperatur aufheizen bzw. abkühlen.
Beispiel: Draußen sind 21 Grad und es ist schwül bei 85% rel. Luftfeuchte. Wir wollen diese Außenluft in den 17 Grad warmen Keller lassen. Wie hoch wäre dann dort die Luftfeuchte? Dazu in die FHEM-Kommandozeile eingeben:
{shiftRelHumidity(21,85,17)}
Ergebnis 108% - oha! Schlechte Idee, da läufts quasi sofort von den Wänden, wir haben den Taupunkt dort unterschritten.
Klappt natürlich auch wieder mit echten Messwerten:
{shiftRelHumidity(ReadingsVal("Aussenfuehler","temperature",""),ReadingsVal("Aussenfuehler","humidity",""),ReadingsVal("Innenfuehler","temperature",""))}
Wann wächst Schimmel?Oder: warum die Taupunkttemperatur ungeeignet ist, dies zu beurteilen.Nach der Theorie zur Luftfeuchtigkeit nun aber zum Schimmel. Schimmel braucht Wasser, um wachsen zu können. Möchte man einschätzen, ob in einem Raum Schimmelgefahr besteht, könnte man auf die Idee kommen, das mit FHEM-Bordmitteln über das Taupunkt-Modul ,,dewpoint" zu machen. Wenn der Taupunkt der Raumluft über irgendeiner Oberflächentemperatur liegt, dann liegt dort die rel. Luftfeuchte bei über 100% und es kondensiert dort das Wasser, die Fläche wird nass und es schimmelt. Man müsste also nur die Taupunkttemperatur Td(Raumtemperatur, rel. Raumluftfeuchte) mit der Wandtemperatur vergleichen.
Diese Variante per Taupunkt ist aber bezüglich Schimmel leider nur die halbe Miete: Laut verschiedenen Quellen wächst Schimmel schon viel früher - ohne kondensierten, flüssigen Wasserfilm, allein durch eine hohe
relative Luftfeuchte von über 70-80%, und nicht erst 100% wie bei Taupunkttemperatur. Der genaue Wert der relativen Luftfeuchte, ab wann Schimmel wächst, wurde in Studien ermittelt und ist u.A. abhängig von der Sorte des Schimmels, dem Oberflächenmaterial - und der jeweiligen Oberflächentemperatur! Wir können diese kritische Luftfeuchte selbst ausrechnen (in die Datei
99_myUtils.pm einfügen):
sub schimmelfreiMaxHum($)
# Maximal erlaubte relative Luftfeuchte (in 0...100%) in Oberflächennähe, so dass kein Schimmel-Myzelwachstum
# Auftritt. Annahme: optimales Substrat und Myzelwachstum und Sporenwachstum für alle im
# Bau auftretenden Pilze unterbunden, d.h. keine biol. Aktivität.
# Parameter: Temp. der Oberfläche in Grad Celsius
#
{
my ($Temp) = @_;
if ($Temp <= 0) {return 100;}
my $rHmax = 70+20.1*(0.87**$Temp);
return $rHmax;
}
Beispiele für die FHEM-Kommandozeile:{schimmelfreiMaxHum(25)}
- Ergebnis 70%, d.h. bei 25 Grad Oberflächentemperatur wächst Schimmel dort ab 70% rel. Luftfeuchte.
{schimmelfreiMaxHum(10)}
- Ergebnis 75%, d.h. bei 10 Grad Oberflächentemperatur wächst Schimmel dort ab 75% rel. Luftfeuchte.
Für Räume, die keine besonders kalten Flächen / Wände haben, haben wir damit im Prinzip schon die Lösung: Es ist die relative Luftfeuchte im Raum unter dem folgendermaßen errechneten Wert zu halten:
{schimmelfreiMaxHum(ReadingsVal("Raumthermometer","temperature",15))}
Problem: Kalte Wände / Kältebrücken.Problematisch ist, wenn es im Raum kalte Oberflächen gibt - denn an diesen steigt ja wie oben beschrieben durch die Abkühlung der Luft die relative Luftfeuchtigkeit an. Je nach Bausubstanz und Außentemperatur kann eine Außenwand z.B. extrem kalt sein. In meinem Bad (Altbau, denkmalgeschützt, dicke Ziegelwände, ungedämmt) zeigt das Infrarotthermometer durchaus mal 15 Grad in den Fensterzargen - bei draußen gerade einmal 10 Grad. Sagen wir als Beispiel, wir haben:
- 22°C Raumtemperatur
- 55% rel. Luftfeuchtigkeit im Raum
- 15°C Wand-Oberflächentemperatur in der Fensterzarge (mit einem Infrarotthermometer gemessen)
Wir bemühen damit unserere Funktion von oben -
{shiftRelHumidity(21,55,15)} - und erhalten 79% rel. Luftfeuchte an der 15 Grad warmen Wand. Uups. Die Funktion
{schimmelfreiMaxHum(15)} sagt uns, dass es bei 15 Grad an der Wand aber schon bei 72% schimmelt. Was tun?
Ab welcher Temperatur schimmelt es? Der "Schimmelpoint".Wir können die kritische Temperatur, ab der es schimmelt, ausrechnen. Wie oben beschrieben, wächst der Schimmel schon bevor das Wasser von der Wand läuft, so dass uns da die Taupunkttemperatur nicht weiterhilft. In der Literatur findet man deshalb auch den Td(80), das ist der "Taupunkt" mit 80% statt 100% relativer Luftfeuchte. Aber wie oben ausgerechnet, sind 80% bei den meisten Temperaturen schon zu viel.
Hier ist deshalb eine weitere Funktion für die Datei
99_myUtils.pm, die auch einfach eine Temperatur ausrechnet - und zwar eine, unter der es wirklich schimmelt, sozusagen also der
"Schimmelpoint" unter Berücksichtigung des temperaturabhängigen Schimmelwachstums. Dazu werden die obige Funktionen genutzt (sind also auch in der
99_myUtils.pm nötig!):
sub schimmelfreiMinTemp($$$) {
# Liefert die minimale Temperatur, bei der es - ausgehend von der aktuellen Luftfeuchte im Raum - nicht schimmeln würde.
# Liegt die kälteste Stelle im Raum darüber, besteht keine Schimmelgefahr.
# Liegt die kälteste Stelle im Raum darunter, müsste diese auf die errechnete Temperatur erwärmt werden, so dass es nicht schimmelt.
# Parameter:
# $curTemp - Aktuelle Raumtemperatur in Grad C
# $curHum - Aktuelle rel. Luftfeuchte im Raum in %rH
# $tempLimit (optional) - max. Temperatur, die die Funktion zurückliefert (falls der Rückgabewert z.B. als Heiz-Solltemperatur dient)
my ($curTemp,$curHum,$tempLimit) = @_;
if (!$tempLimit) {$tempLimit = 100;}
my $testT=0;
my $schimmelFrei = 0;
while ($testT < $tempLimit && !$schimmelFrei) {
$schimmelFrei = (shiftRelHumidity($curTemp, $curHum, $testT) < schimmelfreiMaxHum($testT));
$testT+=0.1;
}
return $testT;
}
Das wenden wir jetzt einmal auf unser Beispiel von oben - 22°C Raumtemperatur, 55% rel. Luftfeuchtigkeit, 15°C Grad Wandtemperatur - an:
{schimmelfreiMinTemp(22,55,100)}
Ergibt 17,7°C, das heißt unsere 15 Grad kalte Wand ist 2,7 Grad zu kalt und würde schimmeln. Mit echten Messwerten geht's natürlich auch wieder:
{schimmelfreiMinTemp(ReadingsVal("Raumthermometer","temperature",15),ReadingsVal("Raumhygrometer","humidity",100),100)}
Kalte Wände - Wandtemperatur ermitteln - Variante 1: MessenWenn wir den Raum per Entfeuchter trocknen wollen, müssen wir noch mehr tun, denn wir wissen zwar bislang über die Funktion
schimmelfreiMinTemp, wie kalt die Wand sein darf - kennen aber die tatsächliche Wandtemperatur nicht.
Perfekt wäre nun natürlich, einen Oberflächentemperatursensor an der kältesten Stelle der Wand zu platzieren und den Wert direkt zu messen. Wer es ganz genau machen will und seinen Luftentfeuchter wirklich sparsam einsetzen will, der sollte das auch so tun - dann kann man aber dort idealerweise auch gleich kontinuierlich die Luftfeuchtigkeit messen und diese auf einen unkritischen Wert regeln - der Zielwert dieser Regelung wäre dann:
{schimmelfreiMaxHum(ReadingsVal("Wandthermometer","temperature",15))}
Das vergleicht man dann mit dem Messwert des Hygrometers an der Wand und schaltet den Entfeuchter an, wenn die gemessene Luftfeuchte darüber ist. Hat man nur ein Wandthermometer und ein Raumhygrometer mit Raumthermometer, kann man wieder die Funktion
shiftRelHumidity verwenden, um die tatsächliche Luftfeuchtigkeit in Wandnähe zu errechnen:
{shiftRelHumidity(ReadingsVal("Raumfuehler","temperature",""),ReadingsVal("Raumfuehler","humidity",""),ReadingsVal("Wandthermometer","temperature",15))}
Im Keller oder an Außenwänden, die durch eine dicke Schrankwand nicht richtig beheizt werden können und so schimmelgefährdet sind, kommt man um einen Wandtemperaturfühler nicht herum. Ich experimentiere hierzu gerade mit Funk-Heizkostenverteilern. Diese sind a) gebraucht extrem billig - 2-3 Euro, b) haben sehr genaue Temperatursensoren, c) die Batterien halten ewig, d) sie haben eine sehr große Funkreichweite und e) messen wirklich die Oberflächentemperatur und nicht die Raumtemperatur, wie es Standard-Raumsensoren tun.
Kalte Wände - Wandtemperatur ermitteln - Variante 2: Ohne Sensor kontinuierlich schätzenEs geht im Fall von "normalen" Außenwänden aber auch ganz gut ohne Wandtemperaturfühler. Was sich bei mir als ziemlich genau herausgestellt hat, ist die Wandtemperatur kontinuierlich zu schätzen - und zwar in Abhängigkeit von Innen- und Außentemperatur. Hierzu ist es nötig, eine kleine Messreihe mit einem Infrarotthermometer zu machen: Gemessen wird hiermit die Oberflächentemperatur der Wand an der kältesten Stelle, die sich im Raum finden lässt - also z.B. in der Fensterzarge. Zusätzlich benötigen wir die Innentemperatur des Raumes und die Außentemperatur, die FHEM zu dieser Zeit gemessen hat - die kann man ja nach der Messung im FileLog / DBlog nachschauen.
Aus diesen 3 Werten berechnen wir uns einen "Isolationsfaktor" K:
K = (Oberflächentemperatur - Außentemperatur) / (Innentemperatur - Außentemperatur)
Wichtig ist es, die Messung durchzuführen, wenn es draußen richtig schön kalt ist (schön spät Abends / nachts bei Minusgraden) und die Raumtemperatur längere Zeit konstant war - direkt nach dem Aufheizen des Bades bei 15 Grad Außentemperatur ergibt das ganze also eher keine genauen Werte. Die Außentemperatur sollte idealerweise auch konstant sein, aber das ist sie nunmal nicht, daher kann das ganze nicht perfekt funktionieren - aber für unsere Zwecke durchaus ausreichend. Die Messung solltet ihr aber auf jeden Fall ein paar mal wiederholen (6-7 mal zu verschiedenen Zeiten, am besten an mehreren Tagen), ggf. Ausreißer wegwerfen und dann K mitteln. Sollte K bei euch nicht sonderlich konstant sein - was je nach Bausubstanz / Beheizung durchaus möglich ist - nehmt tendentiell eher einen kleineren Wert, geht also von schlechterer Dämmung aus, wenn ihr sicher sein wollt, dass es nicht schimmelt. Bei mir ergaben sich für meine Altbauwohnung Werte zwischen 0,67 und 0,70 - Mittelwert ist 0,68, den verwende ich seitdem.
Über den Wert können wir nun mit folgender Funktion für die
99_myUtils.pm künftig die Wandtemperatur jederzeit aus Innen- und Außentemperatur schätzen:
sub wallSurfaceTemp($$$)
# Estimates the temperature of the inner wall surface given the outside Temperature in degrees of C as $Tinside,
# the outdoor-temperature $Toutside in degrees of C and an insulation Factor $Kinsulation with K = 1 (theoretical perfect insulation, e.g. vacuum) and
# K = 0 (no insulation at all, means: less than a sheet of paper). You have to calculate K on your own by measuring inside-, outside-, and wall-temperature,
# preferably by averaging multiple measurements on cold days with constant heating of the room.
{
my ($Tinside, $Toutside, $Kinsulation) = @_;
my $Tsurface = ($Tinside * $Kinsulation) + ($Toutside * (1 - $Kinsulation));
return $Tsurface;
}
Wirklich genau ist die Methode wie gesagt nicht und unterliegt gewissen Schwankungen. Sie ist inspiriert durch diesen Artikel hier (und auf das für uns nötigste weiter vereinfacht): http://www.u-wert.net/u-wert-messen/ - dort sind auch die prinzipiellen Nachteile dieser Schätzung diskutiert worden. Ich habe meine Messreihe vor knapp einem Jahr durchgeführt und immer mal wieder das Ergebnis mit der realen Wandtemperatur verglichen: Die Abweichung lag maximal bei 1,5 Grad, normalerweise stimmte sie aber auf +/- 0,5 Grad genau. Damit kann ich gut leben ;-) Möglicherweise funktioniert das bei euch nicht so gut - einfach testen.
Userreadings für unkritische RäumeDie neuen "Grenzwerte" können wir nun z.B. in die UserReadings unseres Wandthermostaten packen. Die Beispiele hier sind direkt zum Kopieren in das Feld für das UserReadings-Attribut:
Unterhalb welcher Temperatur irgendwo im Raum schimmelt es? Also, wie warm muss z.B. die Fensterzarge mindestens sein?
schimmelfreiMinTemp { sprintf("%.1f",schimmelfreiMinTemp(ReadingsVal("Raumthermometer","temperature",15),ReadingsVal("Raumhygrometer","humidity",100),100)) }
Wie hoch ist die max. zulässige rel. Luftfeuchte im Raum, ohne dass es schimmelt, wenn man davon ausgeht, dass alle Oberflächen mindestens etwa Raumtemperatur haben?
schimmelfreiMaxHumRoom { sprintf("%.1f",schimmelfreiMaxHum(ReadingsVal("Raumthermometer","temperature",15))) }
Würde Lüften jetzt gerade den Raum trockner machen?
lueftenMoeglich {(ReadingsVal("Raumhygromometer","humidity","N/A") >(shiftRelHumidity(ReadingsVal("Aussenthermometer","temperature","30"),ReadingsVal("Aussenthermometer","humidity","100"), ReadingsVal("Raumthermometer","temperature","N/A") )+3))?"ja":"nein" }
Erwärmt/Kühlt man die Luft außen auf Raumtemperatur, wie wäre dann ihre rel. Luftfeuchte innen?
aussenHumidityEqInnen {sprintf("%.1f",shiftRelHumidity(ReadingsVal("Aussenthermometer","temperature","30"),ReadingsVal("Aussenhygromometer","humidity","100"), ReadingsVal("Raumthermometer","temperature","N/A")))}
Userreadings speziell für kritische Räume mit geschätzter WandtemperaturDie nachfolgenden Beispiele gehen von problematischen Räumen aus, die eine Schätzung der Wandtemperatur erforderlich machen. Bitte aber den K-Faktor wie oben beschrieben immer anpassen! Ich habe darauf geachtet, dass die Readings nicht aufeinander aufbauen, dadurch sind die Definitionen leider recht lang:
Geschätzte Wandtemperatur:
wandTemp { sprintf("%.1f", wallSurfaceTemp(ReadingsVal("kuechenthermometer","temperature",15),ReadingsVal("aussenthermometer","temperature",0),0.68)) },
Geschätzte Luftfeuchtigkeit an der Wand:
wandHumidity { sprintf("%.1f", shiftRelHumidity( ReadingsVal("kuechenthermometer","temperature",17), ReadingsVal("kuechenthermometer","humidity",90), wallSurfaceTemp( ReadingsVal("kuechenthermometer","temperature",15), ReadingsVal("aussenthermometer","temperature",0), 0.68) ) ) }
Wie hoch ist die max. zulässige Luftfeuchte in Wandnähe, ohne dass es schimmelt?
schimmelfreiMaxHumWall { sprintf("%.1f",schimmelfreiMaxHum(wallSurfaceTemp(ReadingsVal("Raumthermometer","temperature",15),ReadingsVal("Aussenthermometer","temperature",0),0.68))) }
Das Whole-In-One-Reading: Kann die kalte Wand gerade schimmeln? (in Abhängigkeit von Innen/Außentemperatur, Isolationsfaktor und Luftfeuchte innen unter Berücksichtigung des Temperaturabhängigen Schimmelwachstums)?
schimmelGefahr {(shiftRelHumidity(ReadingsVal("Raumthermometer","temperature",17),ReadingsVal("Raumhygromometer","humidity",90), wallSurfaceTemp(ReadingsVal("Raumthermometer","temperature",15), ReadingsVal("Aussenthermometer","temperature",0),0.68))>schimmelfreiMaxHum(wallSurfaceTemp(ReadingsVal("Raumthermometer","temperature",15),ReadingsVal("Aussenthermometer","temperature",0),0.68))?"ja":"nein")}
GegenmaßnahmenZu wissen, wann es schimmelt, ist das eine. Doch wenn man festgestellt hat, dass die Luftfeuchtigkeit zu hoch ist, muss diese runter. Alle Maßnahmen haben Vor- und Nachteile - ein grober Überblick:
- Kompressor-Luftentfeuchter: Die wohl naheliegendste Variante. Sie hat den Nachteil, dass je nach Raumgröße mehrere 100 Watt Leistung zur Entfeuchtung benötigt werden, je nach Gerät ein Wassertank bzw. ein Luftfilter regelmäßig zu leeren und zu entkeimen ist, ein mitunter starker Luftzug im Betrieb herrscht und mehr oder minder viel Krach entsteht (Größenordnung: Kühlschrank und Standventilator gleichzeitig an). Außerdem funktionieren die Entfeuchter umso ineffizienter, je niedriger die Raumtemperatur und relative Luftfeuchtigkeit ist (unter 50% bzw. 20°C ist meist kein wirtschaftlicher Betrieb möglich)
- Luftentfeuchter mit Trocken-Granulat: Zieht zwar ein wenig Wasser aus der Luft, aber hauptsächlich Geld aus der Tasche. Eventuell mögliche Wiederaufbereitung des Granulates ist aufwendig und energieintensiv. Trockenleistung / Fassungsvermögen generell eher gering.
- Luftentfeuchter mit Peltier-Element: Sind sehr leise (nur Lüftergeräusch), haben aber nicht die Trockenleistung eines Kompressor-Geräts zum gleichen Preis.
- Stoßlüften: Sehr schnell und effektiv, aber je nach Wetterlage zeitweise nicht möglich (siehe Userreading lueftenMoeglich). Gerade in Feuchträumen mit nassen Handtüchern und anderen Feuchtigkeitsreservoiren muss u.U. wiederholt gelüftet werden. Fenster aber nicht dauerhaft anklappen, das ist kontraproduktiv. FHEM kann per Warnung/Anzeige oder einem elektrischen Fensteröffner helfen.
- Zwangsheizen: Die relative Luftfeuchte sinkt, allerdings steigt - in geringerem Maße - gleichzeitig die Wachstumsfähigkeit des Schimmels zusammen mit der Temperatur. Ist pauschal gesagt nur bei eher niedrigen Raumtemperaturen, wo Luftentfeuchter an ihre Grenzen kommen, zu empfehlen, da ansonsten zu energieintensiv. In einem eh schon warmen, feuchten Bad bei geringen Außentemperaturen und schlechter Dämmung ist z.B. ein Luftentfeuchter die bessere Wahl.
Beispiel DOIF: Entfeuchtersteuerung in kritischen RäumenNun könnt ihr die ganzen Userreadings in Plots einfügen, euch z.B. Warnungen bei wandHumidity > schimmelFreiMaxHum schicken lassen oder das ganze auch per DOIF z.B. zur Entfeuchterregelung benutzen:
define di_bad.luftentfeuchter DOIF ([bad.thermometer:wandHumidity] > ([bad.thermometer:schimmelfreiMaxHum] + 3)) (set bad.luftentfeuchter_Sw on) DOELSEIF ([bad.thermometer:wandHumidity] < [bad.thermometer:schimmelfreiMaxHum]) (set bad.luftentfeuchter_Sw off)
Hier regele ich einen Luftentfeuchter an einem Homematic Zwischenstecker mit Leistungsmessung genau so, dass die Wand immer unter der kritischen Luftfeuchte bleibt (mit 3% Hysterese). Ihr müsst dann nur noch einen Luftentfeuchter finden, der diese Art des Ein-/Ausschaltens per "Steckerziehen" mitmacht und ein wenig mit der Hysterese spielen, so dass es für euren Raum passt. Ich verwende übrigens einen comfee MDF2-16DEN3 - ein sehr preiswerter Luftentfeuchter, der nicht wie viele andere die Eigenart hat, nach Stromwiederkehr einfach auszubleiben. Er genehmigt seinem Kompressor danach zwar eine kurze Zwangspause, läuft dann aber wieder an.
Hi,
vielen Dank für das ausführliche HowTo. Ich habe ähnliche Gegebenheiten, bin aber zur Zeit eher dabei, eine Kombination aus Aufheizung und Zwangsbelüftung bei passender äußerer Luftfeuchtigkeit zu realisieren. Warum sind passende Wärmetauscher so teuer ...
Bis dann,
Thomas
Hi Tom,
Zur Belüftungssteuerung kannst du das natürlich genauso verwenden.
- Einschalten des Lüfters wäre dann eine logische "Und" Verknüpfung aus Lüftungsbedarf und Lüftungsmöglichkeit: Wenn beides gegeben, dann soll der Lüfter angeschaltet werden.
- Den Lüftungsbedarf in Hinblick auf Schimmelgefahr ermittelt man in meinem/deinem Szenario so wie oben beschrieben deutlich genauer als per reiner Taupunktberechnung.
- Die Lüftungsmöglichkeit kannst du problemlos über den Taupunktvergleich innen/außen mit FHEM-Bordmitteln ermitteln, dazu brauchst du meine Formeln nicht. Es geht aber natürlich auch mit meiner shiftRelHumidity-Funktion. Ich nutze letztere, um mir eine Benachrichtigung zu schicken, wenn das Fenster wieder zu kann, da die Luftfeuchte nicht weiter Absinken wird:
attr bad.fenster userReadings wandTemp { ... siehe Eingangsposting ... },
wandHumidity { ... siehe Eingangsposting ... }, lueftenMoeglich {(ReadingsVal("bad.thermometer","humidity","N/A") > (shiftRelHumidity(ReadingsVal("aussenthermometer","temperature","30"),ReadingsVal("aussenthermometer","humidity","100"), ReadingsVal("bad.thermometer","temperature","N/A") ) + 2))?"ja":"nein" }
define di_Bad DOIF ([bad.fenster] eq "offen" and [bad.thermometer:lueftenMoeglich] eq "nein") (set pushover msg 'Lüften fertig' 'Lüften bringt jetzt nichts mehr, Fenster zu!')
Ausgenutzt wird hierbei, dass zwischen Innen- und Außenluft der gleiche Effekt eintritt, wie beim abkühlen der Raumluft an den kalten Wandstellen: Die Luft von außen ändert die Temperatur wenn sie hereinkommt; ihre Wassermenge (das heißt, ihre absolute Luftfeuchte) bleibt aber konstant. Dadurch ändert die Außenluft im Raum ihre relative Luftfeuchte (wenn es im Raum wärmer ist, sinkt sie ab). Und genau das rechnet die Funktion shiftRelHumidity aus.
Ist wie gesagt äquivalent zur Taupunktmethode und sollte auch für einen Ventilator prima funktionieren als nötige Bedingung zum Einschalten.
- Das Bad zu heizen statt zu Lüften wäre dann nötig, wenn Lüftungsbedarf besteht, aber NICHT die so ermittelte Lüftungsmöglichkeit besteht.
Kleines Update: Die Berechnung der Funktion shiftRelHumidity() lag bei großen Temperaturdifferenzen ein paar Prozent daneben (der Effekt der Luftfeuchteänderung war durchgängig schwächer als ich es in Wirklichkeit beobachtet habe). Schuld waren die in einer meiner verwendeten Quellen aufgeführten Koeffizienten der Magnus-Formel; ich habe die im Eingangsposting jetzt in jene aus der Wikipedia korrigiert, nun passt es.
Sehr interessant! Ich war mal so frei: http://www.fhemwiki.de/wiki/Energiesparende_Schimmelbek%C3%A4mpfung_/_Luftentfeuchtung_in_kritischen_R%C3%A4umen
Hallo peterk_de,
DANKE, wirklich sehr sehr interessant - ich lasse das mal bei mir, parallel in einer leicht abgewandelten (inhaltlich gleich) Version, laufen....
Anbei ein paar infos....
Cool, freut mich dass das wer gebrauchen konnte :-) Bei mir läuft das Entfeuchten nach wie vor zuverlässig.
Nur das mit dem Warnen, wann genug gelüftet ist (bzw. sich eine Entlüftersteuerung ausschalten sollte) - da habe ich Probleme bei kalten Außentemperaturen. Liegt aber offensichtlich nicht an meinen Formeln: Ich habe festgestellt, dass mein verwendetes Homematic-Raumthermometer der "Flaschenhals" ist. Wenn es draußen sehr kalt und trocken ist und die Luftfeuchte im Raum dann beim Lüften entsprechend stark absinkt (z.B. auf berechnete und über ein anderes Hygrometer auch tatsächlich gemessene 30% rH), kommt das Teil einfach nicht hinterher und fällt nur so auf 40% ab und auch das nur seeeeeehr gemächlich. Dadurch zündet natürlich das Benachrichtigungs-DOIF nicht und denkt, "es ist im Raum noch zu feucht, bitte weiterlüften".
Ich bin also grad auf der Suche nach einem bissel schnelleren/über breiterem Messbereich genauerem FHEM-kompatiblen Hygrometer... Irgendwas, was mit dem Klassiker-Schimmel-Hygrometer von TFA Dostmann mithalten kann ...
@amunra passt das denn mit den Wandtemperaturen? Haste mal nachgemessen? :-)
Hallo peterk_de,
sorry für die Kurzfassung.
Laut der aktuellen Werte müsste ich hier nur noch lüften/heizen - bin aber im Moment noch recht entspannt, da ich mich noch in der Justier-phase befinde (warte auf konstante Bedingungen).
Bei mir im Haus (Bj. 1957 keine Dämmung) sind die errechneten Wandtemepratur-Werte besser als die gemessenen (mit (http://www.amazon.de/gp/product/B001FC0QYM?psc=1&redirect=true&ref_=oh_aui_detailpage_o02_s01) zum Teil -2 °C (und ungünstiger)).
Ich denke, dass diese aber noch nicht zu 100% valide sind - Gründe hierfür sind die aktuell schwankenden Aussentemperaturen (teilweise von -2 bis +7°C).
Im Schnitt komme ich "grob" auf deine ISO Werte von 0,65. (Ach ja, Fenster (Bj. ca.? 1990 Doppelverglast) sind nicht wirklich das Problem, zumindest nicht laut Tempmessung - Wände im Aussenbereich sind da problematischer...)
Ferner nutze ich mehrere HM-CC-TC's von Homematic, die mich nachhinein ein wenig geägert haben. Die (ja!, mehrere) scheinen ca. 10-12% mehr rel. Luftfeuchtigkeit anzuzeigen (messen) als tatsächlich IST - ein offset habe ich bisher nicht gefunden (dem wirke ich im Moment rechnerich entgegen). Verifiziert habe ich das ganze mit anderen Sensoren, zuverlässig und recht schnell erwies sich der neu erworbene Raumthermostat HM-TC-IT-WM-W-EU.
Den Sensor (Raumtehrmostat) habe ich testweise auch, über mehrere Stunden (Tage) in die nähe der Wand palziert mit dem Ergebniss, Abweichung: Temp ca. +!3-4°C und bis zu !-30% Luftfeuchtigkeit.
Interessant sind im Memoment die enormen Unterschieden zwischen Wohnraum (ca. 21°C ca. 45-50% Luftfeuchte) und Kellerräume (die eher Problematischen Räume mit ca. 14-16°C 70-90% Luftfeuchte). Im Keller darf ich offensichtlich im Moment nicht lüften....
VG
P.S: Ich melde mich wieder mit neuen Erkenntnissen....
Hallo peterk_de,
super Arbeit die Du da geleistet hast. Hut ab und vielen Dank!!
Ich habe mir deinen Post schon lange für später vorgemerkt.
Heute bin ich nun endlich soweit dazu gekommen. Gezwungener massen quasi.
Da ich im Keller gerade nen ziemlich hohen Feuchtigkeitswert habe und es draussen noch feuchter ist, wollte ich es genau wissen wie die verhältnisse sind. Und bisher habe ich es über den Taupunkt gemacht, was aber nicht immer so genau past...
Den Temperaturkoeffizienten habe ich schonmal im Februar ermittelt.
Nun ist es aber warm und laut den Formeln ist die Kellerwand wärmer als der Raum. Das mag bei den Aussenmauern so sein, aber sicher nicht bei den Mauern im Erdreich.
Meine frage ist nun wie ich das am besten mache? Einen neuen Temperaturkoeffizienten ermitteln, für den Sommer und im Winter auf einen anderen umschalten oder ganz anders? Wie würdest du das machen?
Grüsse
Markus
Hi daschauher,
ich glaube, du hast das Problem schon richtig erkannt, das ganze kann natürlich nur bei Außenmauern funktionieren, wenn du als Außentemperatur die der Umgebungsluft draußen nimmst. Das Erdreich kann ja signifikant andere Temperaturen aufweisen als die Luft außen - vor allem wenn es wie gerade sehr schnell warm geworden ist und der Keller sehr tief liegt.
Da wird dir auch ein anderer Koeffizient leider nicht helfen - die Wärmeleitung in der Kellerwand findet ja schließlich von Innenraum zu Erdreich statt. Du müsstest also irgendwo im Garten einen Temperaturfühler vergraben, und zwar so tief, dass er in Höhe des Kellerbodens liegt. Das wäre dann ne gute Näherung der Außentemperatur für die Formel. Aber da ist es in deinem Fall wirklich einfacher, die Wandtemperatur innen selbst zu messen und die Formel gar nicht zu verwenden. Dann hast du es ganz genau.
Mit der Formel kann es aber nicht klappen - die vernachlässigt sämtliche "Speicherung" von Wärme, sowohl in der Wand selbst als auch in deren Umgebung. Das ist bei Luft drumherum kein Problem, weil die eine sehr geringe Wärmespeicherfähigkeit hat, so dass das vernachlässigter ist - Erdreich hat aber leider eine ziemlich große...
Hallo peterk_de,
vielen dank für die umfangreiche Antwort. Auch wenn es nicht viel weiter hilft, aber zumindest weiß ich jetzt das ich in diese Richtung erst gar keine versuche Unternehmen brauche. Danke!
Vg
Vielleicht für den ein oder anderen interessant: http://www.elv.de/Perfektes-Klima-mit-dem-Arduino/x.aspx/cid_726/detail_51160
Hallo zusammen,
wundervolle Arbeit & Dokumentation hier! Danke!
(eine Alternative wäre natürlich den Funksensor direkt an die kälteste Stelle zu packen - aber dann weiß man halt die Raumtemperatur nicht mehr..)
und noch perfekter wirds, wenn man die Temperaturabhängigkeit des Schimmelwachstums mit berücksichtigt:
http://www.ibp.fraunhofer.de/content/dam/ibp/de/documents/Publikationen/Fachzeitschriften/gefaehrdungsklassenfuerschimmelpilzetcm45-34971.pdf
(Bild 1, relativ am Ende des pdfs - oder gleich Bild 2)
-> zB: Grenze des Schimmelpilzwachstums: Tapete bei 20°C: 76%rF ; Tapete bei 5°C: 85%rF
Wer hat Bock das einzubauen? Bei mir könnts ne Weile dauern..
Beste Grüße,
Simon
@SonnenSimon: Ist ja Hammergenial!!!
Dann sind die 70%rH, die ich bei mir angesetzt habe, ja definitiv auf der sicheren Seite, aber unter Umständen auch viel zu vorsichtig gewählt (insbesondere wenn die Wandtemperatur niedrig ist) ...
Ich will noch nix versprechen, aber ich finde das sehr spannend und schau es mir mal genauer an ... bei mir schimmelt seit ich das habe zwar nix mehr, aber ich finde es sehr verlockend, die Stromrechnung für den Entfeuchter so noch weiter zu drücken ^^
So, hier ist es - der kniffligste Teil war es, die Formeln herauszufinden, die in dem Paper ja leider nicht angegeben waren. Ich hab die aber recht genau aus den Kurven der Diagramme rekonstruieren können. Das hier kommt in die myUtils.pm:
sub schimmelfreiMaxHum($)
# Maximale Relative Luftfeuchte (in 0...100%) in Wandnähe, so dass kein Schimmel-Myzelwachstum
# Auftritt. Annahme: optimales Substrat und Myzelwachstum und Sporenwachstum für alle im
# Bau auftretenden Pilze unterbunden, d.h. keine biol. Aktivität.
# Parameter: Temp. in Grad Celsius
#
{
my ($Temp) = @_;
if ($Temp <= 0) {return 100;}
my $rHmax = 70+20.1*(0.87**$Temp);
return $rHmax;
}
Und das sollte dann recht einfach oben anzuknüppern sein: Statt in dem DOIF direkt eine feste Rel. Wand-Luftfeuchtigkeit als Grenzwert abzufragen, einfach schimmelfreiMaxHum($Wandtemp) verwenden. Kann ich bei Bedarf auch oben mal noch erweitern. Done.
P.S. Wen nur die laut dem Paper gesundheitsgefährlichen Schimmelarten (Annahme: optimales Substrat und kein Myzelwachstum) interessieren, der nimmt statt der genannten einfach die folgende Formel:
my $rHmax = 77+23*(0.90**$Temp);
Hallo peterk_de,
habe gerade angefangen mich damit zu beschäftigen, finde das Wiki sehr schlüssig und nachvollziehbar ... soweit ich bisher dazu in der Lage war.
Eine Frage: Ich habe vor (im Keller kommt es ja nicht überall auf Schönheit an) einen "Standard" Temperatur/Feuchte-Sensor (LaCrosse Typ) an der kühlsten Stelle an die Wand zu dübeln. Deshalb die Frage: Wie schätzt Du das ein, könnte es Deine k-Wert Ermittlung ersetzen? Oder sollte man evtl den Sensor raus "operieren" und dichter an die Wand setzen?
Danke,
Bernd
P.S. Habe ja noch den Traum, die feuchte Kellerluft ins Erdgeschoss zu blasen ... im Wohnzimmer läuft ein Raumluftbefeuchter ...
Hi Bernd,
kommt auf den Sensor an - bevor du ihn aufmachst, würde ich mal mit nem Infrarotthermometer gucken, ob er die Wandtemperatur genügend genau mitbekommt. Normalerweise sind die Dinger aber in Richtung Wand gut isoliert (sie sollen ja eben die Raumluft messen). Den nackten Sensor direkt aufs Mauerwerk zu packen ist daher sicher das Optimum und definitiv besser als das Schätzen per k-Wert (was bei Kellerwänden sowieso nicht klappt).
Die Kalte Luft aus dem Keller zu holen ... bringt nix. Vor allem im Sommer nicht. Vorausgesetzt, du hast da keine besonderen Feuchtigkeitsquellen drin (Wäscheständer oder so), ist die Luft da unten absolut genauso feucht, wie die bei dir im Wohnzimmer (kommt ja letzten endes beide Luft von außen) Bläst du die ins Warme Wohnzimmer, ist sie danach relativ genauso trocken wie die bisherige Luft im Wohnzimmer. Das ist ja grad der Witz mit der relativen Luftfeuchte ... Und außerdem, für jeden Kubikmeter, den du aus dem Keller herausbeförderst, kommt von irgendwoher ein anderer Kubikmeter her, der abkühlt und sich dann in der rel. Luftfeuchte bis zur auskondensation steigert ...also leider nur sinnvoll wenn das z.B. dein Wäschetrockenraum ist.
Zitat von: peterk_de am 09 Februar 2016, 22:45:48
...
Den nackten Sensor direkt aufs Mauerwerk zu packen ist daher sicher das Optimum und definitiv besser als das Schätzen per k-Wert (was bei Kellerwänden sowieso nicht klappt).
Ich werde mal auf der Bastelseite nachfragen ...
Zitat
...
Die Kalte Luft aus dem Keller zu holen ... bringt nix.
...
Danke, ich habe überhaupt kein Gefühl dafür. Lasse mir nun bei allen Sensoren auch die absolute Luftfeuchtigkeit anzeigen (Modul dewpoint), dann merkt man wo tatsächlich mehr Wasser ist.
Hatte mich gerade gefragt, wie ich das mit der Wandtemperatur verknüpfe und fand dann Dein Wiki... allerdings hatte ich mit perl noch nie was zu tun ...
Hätte übrigens nicht gedacht, dass jetzt, bei Regen die abs. Luftfeuchtigkeit im Keller grösser ist als draussen. Dieses Diagramm fand ich nicht schlecht, um sich die Verhältnisse vorzustellen, das hilft vielleicht manchem, wie mir, die Zusammenhänge zu verstehen:
http://www.ib-rauch.de/bautens/formel/feuchte-luft.gif (http://www.ib-rauch.de/bautens/formel/feuchte-luft.gif)
Falls ich erwas zu Wandtemperatur-Messung finde melde ich mich hier.
Gute Nacht,
Bernd
Zitat von: Berndd am 09 Februar 2016, 23:28:53
Hätte übrigens nicht gedacht, dass jetzt, bei Regen die abs. Luftfeuchtigkeit im Keller grösser ist als draussen.
In dem Fall bringt natürlich ein Ventilator, der es dir ins zu trockene Wohnzimmer bläst, etwas, also wenn du die absolute Feuchte vergleichst. Ich kenne nun dein Keller nicht, aber je nach Wandbeschaffenheit kann die Kellerwand ein super Feuchtigkeitsreservoir sein. Oder gar aus dem Erdreich Wasser nach innen diffundieren lassen, was dann schon in die Kategorie "Baumangel" fallen würde.
Technoline auseinander gebaut:
http://forum.fhem.de/index.php/topic,49067.0.html
Gruss,
Bernd
Vielen Dank für die tolle Vorarbeit! :)
Ich habe gerade sämtliche userReadings hinzugefügt und bekomme in sämtlichen Räumen Schimmelwarnungen. So sieht mein userReading aus:
wandTemp { sprintf("%.1f", wallSurfaceTemp(ReadingsVal("BZ.Klimasensor","temperature",15),ReadingsVal("UM.Klimasensor","temperature",0),0.68)) },
wandHumidity { sprintf("%.1f", shiftRelHumidity( ReadingsVal("BZ.Klimasensor","temperature",17), ReadingsVal("BZ.Klimasensor","humidity",90),
wallSurfaceTemp( ReadingsVal("BZ.Klimasensor","temperature",15), ReadingsVal("UM.Klimasensor","temperature",0), 0.68) ) ) }
lueftenMoeglich {(ReadingsVal("BZ.Klimasensor","humidity","N/A") >(shiftRelHumidity(ReadingsVal("UM.Klimasensor","temperature","30"),ReadingsVal("UM.Klimasensor","humidity","100"), ReadingsVal("BZ.Klimasensor","temperature","N/A") )+10))?"ja":"nein" }
aussenHumidityEqInnen {sprintf("%.1f",shiftRelHumidity(ReadingsVal("UM.Klimasensor","temperature","30"),ReadingsVal("UM.Klimasensor","humidity","100"), ReadingsVal("BZ.Klimasensor","temperature","N/A")))}
schimmelfreiMaxHum { sprintf("%.1f",schlimmelfreiMaxHum(wallSurfaceTemp(ReadingsVal("BZ.Klimasensor","temperature",15),ReadingsVal("UM.Klimasensor","temperature",0),0.68))) }
schimmelGefahr {(shiftRelHumidity(ReadingsVal("BZ.Klimasensor","temperature",17),ReadingsVal("BZ.Klimasensor","humidity",90), wallSurfaceTemp(ReadingsVal("BZ.Klimasensor","temperature",15), ReadingsVal("UM.Klimasensor","temperature",0),0.68))>schlimmelfreiMaxHum(wallSurfaceTemp(ReadingsVal("BZ.Klimasensor","temperature",15),ReadingsVal("UM.Klimasensor","temperature",0),0.68))?"ja":"nein")}
Den Koeffizienten habe ich noch nicht geändert, da ich diesen mangels Thermometer noch nicht messen konnte. Im Anhang findet sich ein Foto mit den Werten, die bei mir errechnet werden. Sind die Werte plausibel?
Die sehen sehr plausibel aus. Und danach, dass es draußen sehr kalt ist ;) Allerdings hast du jetzt dann wohl mit meinem Koeffizienten gearbeitet, also einem, der dem meiner Kältebrücken im Bad entspricht. Ich hoffe für dich, dass du bessere Bausubstanz hast ^^ .
Aber ja, bei mir läuft bei den aktuellen Minusgraden und 55% Luftfeuchte im Bad der Entfeuchter an, und das leider zu recht :(
Ohjaaa es ist kalt für Bonner Verhältnisse, -5 Grad. :D
Vollkommen richtig, ich habe deinen Koeffizienten genommen, aber zum Wochenende werde ich meinen eigenen messen/berechnen. Es graut mir ehrlich gesagt vor dem Ergebnis...
Könntest du dir noch mein DOIF angucken?
define BZ.Lueften.Automatik DOIF
([BZ.Klimasensor:schimmelGefahr] eq "ja" and [BZ.Klimasensor:lueftenMoeglich] eq "ja" and [BZ.Fenster:state] eq "closed") (set BZ.Lueften Lüften zwingend notwendig) (set Pushover msg 'Lüften im Bad notwendig!')
DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "ja" and [BZ.Klimasensor:lueftenMoeglich] eq "ja" and [BZ.Fenster:state] eq "open") (set BZ.Lueften wird gelüftet)
DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "closed") (set BZ.Lueften Lüften sollte vermieden werden)
DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "open") (set BZ.Lueften Fenster sollte geschlossen werden) (set Pushover msg 'Fenster im Bad schließen!')
DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "ja" and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "closed") (set BZ.Lueften Lüften nicht möglich heizen?)
DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "ja" and [BZ.Klimasensor:lueftenMoeglich] eq "nein" and [BZ.Fenster:state] eq "open") (set BZ.Lueften Fenster schließen Lüften bringt nichts mehr!) (set Pushover msg 'Fenster im Bad schließen! Lüften bringt nichts!')
DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "ja" and [BZ.Fenster:state] eq "closed") (set BZ.Lueften Lüften möglich aber nicht nötig!)
DOELSEIF ([BZ.Klimasensor:schimmelGefahr] eq "nein" and [BZ.Klimasensor:lueftenMoeglich] eq "ja" and [BZ.Fenster:state] eq "open") (set BZ.Lueften wird gelüftet ist aber nicht nötig!)
Es soll mich entsprechend der Gegebenheiten, darüber informieren, was zu tun ist. Was macht man eigentlich, wenn Schimmelgefahr besteht und man nicht lüften sollte, weil "lueftenMoeglich" nein ausgibt?
Könnte man noch einen Auskühlschutz einbauen? Gerade bei den aktuellen Temperaturen, will man ja nur solange lüften, wie es tatsächlich notwendig ist, ohne dass die Temperatur zu weit absinkt.
Zitat von: Spezialtrick am 18 Januar 2017, 14:32:11
Ohjaaa es ist kalt für Bonner Verhältnisse, -5 Grad. :D
Vollkommen richtig, ich habe deinen Koeffizienten genommen, aber zum Wochenende werde ich meinen eigenen messen/berechnen. Es graut mir ehrlich gesagt vor dem Ergebnis...
Könntest du dir noch mein DOIF angucken?
Das sieht soweit sehr vernünftig aus. Insbesondere die Fallunterscheidung mit allen Kombinationen aus Schimmelgefahr und "Lüften möglich" macht sehr viel Sinn und mache ich im Prinzip ganz ähnlich. Ich habe allerdings noch andere Variablen mit reingenommen (Entfeuchter, Präsenz, Luftqualität/VOC) - das ist eine übelst lange myUtils.pm-Funktion geworden, die ich hier lieber keinem zumuten will ;)
Zitat
Was macht man eigentlich, wenn Schimmelgefahr besteht und man nicht lüften sollte, weil "lueftenMoeglich" nein ausgibt?
Das ist genau der Punkt, wo man entweder Zwangsheizen oder per Luftentfeuchter entfeuchten sollte. Kommt vor, ist aber recht selten. Bei uns läuft der Entfeuchter eigentlich nur, weil wir zu faul sind, im Bad nach dem Duschen alle 1-2 Stunden das Fenster aufzureißen und wieder zu schließen. Denn du musst ja nicht denken, dass es mit 10 min Lüften nach dem Duschen getan ist. Da sind die Luftwerte zwar erstmal wieder super, aber die Handtücher und die Dusche noch nicht trocken, so dass du nach spätestens ner Stunde wieder die Schimmelwarnung bekommen wirst ;(
Zitat
Könnte man noch einen Auskühlschutz einbauen? Gerade bei den aktuellen Temperaturen, will man ja nur solange lüften, wie es tatsächlich notwendig ist, ohne dass die Temperatur zu weit absinkt.
Ja, aber kommt recht selten vor, dass du den brauchst. Grund ist derselbe wie oben: Je Kälter, desto trockener die Außenluft. Das würde also max. an nebligen Herbsttagen "greifen", im Winter kommt deine Meldung "Fenster schließen" ziemlich sicher vorher schon. Aber schaden kann es natürlich nicht, grad am Anfang in der Testphase.
Ich poste es doch mal. Es läuft seit über einem Jahr auch stabil - meine generische Funktion für die myUtils.pm , die diverse Readings zum Thema Lüften für alle Räume mit Homematic-Thermostaten generiert. Es wird auch automatisch berücksichtigt, ob der Raum nen CO2- und/oder VOC-Sensor hat und ob "Sommermodus" (=Wohnung möglichst kühlen) oder "Heizmodus" (=Normalbetrieb) herrscht, was ich 2x im jahr über einen Dummy einstelle.
Vielleicht kannst du da ja ggf. interessante Regeln draus ableiten. Ist eigentlich selbsterklärend benannt.
sub calcLueftungsStates($$) {
my ($NAME,$EVENT) = @_;
if (!($NAME =~ /.*floorplan.*/)) {
##### Daten sammeln
my $room;
my $badOben = ($NAME =~ /.*bad.oben.*/);
my $badUnten = ($NAME =~ /.*bad.unten.*/);
my $schlafzimmer = ($NAME =~ /.*schlafzimmer.*/);
my $wohnzimmer = ($NAME =~ /.*(wohnzimmer|stube).*/);
my $kueche = ($NAME =~ /.*(kueche).*/);
my $flur = ($NAME =~ /.*(flur|abstell).*/);
my $kinderzimmer = ($NAME =~ /.*(kinderzimmer).*/);
if ($badOben) {$room = 'bad.oben';}
if ($badUnten) {$room = 'bad.unten';}
if ($schlafzimmer) {$room = 'schlafzimmer';}
if ($wohnzimmer) {$room = 'stube';}
if ($kueche) {$room = 'kueche';}
if ($flur) {$room = 'flur';}
if ($kinderzimmer) {$room = 'kinderzimmer';}
my $thermostat = "$room.wandthermostat_Weather";
my $innenTemp=ReadingsVal($thermostat,"temperature",15);
my $innenHum =ReadingsVal($thermostat,"humidity",90);
my $aussenTemp=ReadingsVal("wohnung.aussenthermometer","temperature",0);
my $aussenHum =ReadingsVal("wohnung.aussenthermometer","humidity","100");
my $heizModus = ReadingsVal("wohnung.heizmodus","state","aus");
my $fenster1 = ReadingsVal("$room.fenster","state","none");
my $fenster2 = ReadingsVal("$room.fenster2","state","none");
my $co2 = ReadingsVal("$room.co2","co2",0);
my $voc = ReadingsVal("$room.raumluft","voc",0);
##### Neu berechnete Werte
my $etwasOffen = (($fenster1 eq "open") || ($fenster2 eq "open"));
my $wandTemp = wallSurfaceTemp($innenTemp,$aussenTemp,0.68);
my $wandHumidity = shiftRelHumidity($innenTemp, $innenHum, $wandTemp);
my $aussenHumidityEqInnen = shiftRelHumidity($aussenTemp, $aussenHum, $innenTemp);
my $schimmelfreiMaxHum = schimmelfreiMaxHum($wandTemp);
my $schimmelGefahr = ($wandHumidity > $schimmelfreiMaxHum);
my $luftZuTrocken = (!$schimmelGefahr && ($innenHum < 40));
my $lueftenSenktLuftfeuchte = ($innenHum > $aussenHumidityEqInnen);
my $entfeuchterAn = ($schimmelGefahr && ($innenHum > 51)) && !$etwasOffen;
my $entfeuchterAus = (($wandHumidity < ($schimmelfreiMaxHum - 3)) || ($innenHum < 50)) || $etwasOffen;
my $luftfeuchteOeffnenEmpfohlen = ($schimmelGefahr && $lueftenSenktLuftfeuchte) || ($luftZuTrocken && !$lueftenSenktLuftfeuchte);
my $luftfeuchteSchliessenEmpfohlen = ($schimmelGefahr && !$lueftenSenktLuftfeuchte) || ($luftZuTrocken && $lueftenSenktLuftfeuchte);
my $kuehlenUeberTemp = 23;
if ($badOben) {
$kuehlenUeberTemp = 25;
} elsif ($badUnten) {
$kuehlenUeberTemp = 25;
} elsif ($schlafzimmer) {
$kuehlenUeberTemp = 22.5;
} elsif ($wohnzimmer) {
$kuehlenUeberTemp = 23;
} elsif ($kueche) {
$kuehlenUeberTemp = 24;
} elsif ($kinderzimmer) {
$kuehlenUeberTemp = 23;
}
my $kuehlenAufTemp = 21;
if ($badOben) {
$kuehlenAufTemp = 22;
} elsif ($badUnten) {
$kuehlenAufTemp = 20;
} elsif ($schlafzimmer) {
$kuehlenAufTemp = 21.5;
} elsif ($wohnzimmer) {
$kuehlenAufTemp = 21.5;
} elsif ($kueche) {
$kuehlenAufTemp = 20;
} elsif ($kinderzimmer) {
$kuehlenAufTemp = 21;
}
my $tempOeffnenEmpfohlen = ( (($heizModus eq "Kühlen") && ($innenTemp > $aussenTemp) && ($innenTemp > $kuehlenUeberTemp))
|| (($heizModus eq "Heizen") && ($innenTemp < $aussenTemp))
) ;
my $tempSchliessenEmpfohlen = ( (($heizModus eq "Kühlen") && (
(($innenTemp < $aussenTemp) && ($innenTemp > $kuehlenUeberTemp))
|| (($innenTemp > $aussenTemp) && ($innenTemp < $kuehlenAufTemp))
)
)
|| (($heizModus eq "Heizen") && ($innenTemp > $aussenTemp))
);
my $luftgueteSensorVorhanden = (($co2 ne '0') || ($voc ne '0'));
my $luftgueteOeffnenEmpfohlen = ((($co2 > 1500) || ($voc > 2000)) && $luftgueteSensorVorhanden);
my $luftgueteSchliessenEmpfohlen = (($co2 < 600) && ($voc < 700) && $luftgueteSensorVorhanden);
my $schliessenEmpfohlen;
if ($luftgueteSchliessenEmpfohlen || !$luftgueteSensorVorhanden) {
if ($luftfeuchteSchliessenEmpfohlen && $tempSchliessenEmpfohlen) {
$schliessenEmpfohlen = true;
} elsif (!$luftfeuchteSchliessenEmpfohlen && !$tempSchliessenEmpfohlen) {
$schliessenEmpfohlen = false;
} else {
if (!$luftfeuchteOeffnenEmpfohlen && !$tempOeffnenEmpfohlen) {
$schliessenEmpfohlen = true;
} else {
if ( ($luftfeuchteSchliessenEmpfohlen && ($heizModus eq "Heizen"))
|| ($tempSchliessenEmpfohlen && ($heizModus eq "Kühlen"))
) {
$schliessenEmpfohlen = true;
} else {
$schliessenEmpfohlen = false;
}
}
}
} else {
$schliessenEmpfohlen = false;
}
my $oeffnenEmpfohlen = (($luftfeuchteOeffnenEmpfohlen || $luftgueteOeffnenEmpfohlen || $tempOeffnenEmpfohlen) && !$schliessenEmpfohlen) ;
my $fenster1richtig = (($fenster1 eq "closed") && $schliessenEmpfohlen) || ($etwasOffen && $oeffnenEmpfohlen) || (!$oeffnenEmpfohlen && !$schliessenEmpfohlen);
my $fenster2richtig = (($fenster2 eq "closed") && $schliessenEmpfohlen) || ($etwasOffen && $oeffnenEmpfohlen) || (!$oeffnenEmpfohlen && !$schliessenEmpfohlen);
##### Alle sinnvollen Werte als Readings setzen
fhem("setreading $thermostat wandTemp ".sprintf("%.1f", $wandTemp));
fhem("setreading $thermostat wandHumidity ".sprintf("%.0f", $wandHumidity));
fhem("setreading $thermostat aussenHumidityEqInnen ".sprintf("%.0f", $aussenHumidityEqInnen));
fhem("setreading $thermostat schimmelfreiMaxHum ".sprintf("%.0f", $schimmelfreiMaxHum));
fhem("setreading $thermostat schimmelGefahr ".($schimmelGefahr?"ja":"nein"));
fhem("setreading $thermostat oeffnenEmpfohlen ".($oeffnenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat schliessenEmpfohlen ".($schliessenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat luftfeuchteOeffnenEmpfohlen ".($luftfeuchteOeffnenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat luftfeuchteSchliessenEmpfohlen ".($luftfeuchteSchliessenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat luftgueteOeffnenEmpfohlen ".($luftgueteOeffnenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat luftgueteSchliessenEmpfohlen ".($luftgueteSchliessenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat tempOeffnenEmpfohlen ".($tempOeffnenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat tempSchliessenEmpfohlen ".($tempSchliessenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat fenster1richtig ".($fenster1richtig?"ja":"nein"));
if ($fenster2 ne "none") {
fhem("setreading $thermostat fenster2richtig ".($fenster2richtig?"ja":"nein"));
}
if ($entfeuchterAn) {
fhem("setreading $thermostat entfeuchter an");
} elsif ($entfeuchterAus) {
fhem("setreading $thermostat entfeuchter aus");
}
}
}
Zitat von: peterk_de am 18 Januar 2017, 15:19:52
Ja, aber kommt recht selten vor, dass du den brauchst. Grund ist derselbe wie oben: Je Kälter, desto trockener die Außenluft. Das würde also max. an nebligen Herbsttagen "greifen", im Winter kommt deine Meldung "Fenster schließen" ziemlich sicher vorher schon. Aber schaden kann es natürlich nicht, grad am Anfang in der Testphase.
Ich glaube wir meinen etwas anderes, denn aktuell würde ich den Auskühlschutz gut gebrauchen können. ^^
Ich teste das DOIF aktuell im Badezimmer. Gewisse Zeit nach der Fensteröffnung wird keine Schimmelgefahr mehr gemeldet. Da die Außenluft jedoch eiskalt und trocken ist, lohnt sich das Lüften trotzdem weiterhin. Allerdings fällt die Raumtemperatur immer weiter, weil "lueftenMoeglich" auf "Ja" steht. Würde es hier nicht Sinn machen eine Mindesttemperatur als Auskühlschutz zu definieren? "lueftenMoeglich" greift doch erst, wenn die Außenluft die Raumluft feuchter machen würde?
Hier ist etwas ähnliches beschrieben:
https://forum.fhem.de/index.php?topic=60114.0 (https://forum.fhem.de/index.php?topic=60114.0)
Ach so meinst du das! OK das erledigen meine Regeln (siehe Code im vorigen Post) implizit automatisch mit. Im Heizbetrieb kannst du die im Prinzip runterbrechen auf "wenn (keine Schimmelgefahr ODER Lüften nicht möglich) UND Fenster offen dann Meldung Fenster bitte schließen". Dann brauchst du eigentlich nicht zusätzlich nach der Temperatur schauen.
Ich melde mich auch mal nach fast zwei Jahren zurück und möchte meinen Dank aussprechend, weil wir die problematischen Räume seit zwei Jahren, mit der hier vorgestellten Methode, gut im Griff haben.
Danke insbesondere an peterk_de für's Teilen....
Auch von meiner Seite ganz herzlichen Dank an peterk_de für das Ausarbeiten der math und das Teilen hier !
Hintergrund: Bausubstanz relativ neu. Nun habe ich unser SZ umgestaltet und dabei eine dicke Schrankwand an die Außenmauer gestellt. Ein Bekannter hat mich dann aufmerksam gemacht das hier potentiell Probleme (hinter dem Schrank) entstehen können. Grob vereinfacht: ein voll gepackter Schrank isoliert die Wand so effektiv von der Heizung im Raum das auch gut gedämmte Mauern dahinter in den kritischen bereich auskühlen können.
Meiner Meinung nach ist der von peterk_de vorgestellt Ansatz wie das zu überwachen ist der einzig Richtige. Reine dewpoint Berechnungen greifen zu kurz. Im ersten Schritt installiere ich Temperaturfühler an der Wand dahinter plus Raumfühler (t+rh) und verwende die Formeln von peterk_de um das auszuwerten.
Nochmal: herzlichen Dank!.
vg
joerg
@peterk_de
Zitat von: peterk_de am 18 Januar 2017, 15:27:16
Ich poste es doch mal. Es läuft seit über einem Jahr auch stabil - meine generische Funktion für die myUtils.pm , die diverse Readings zum Thema Lüften für alle Räume mit Homematic-Thermostaten generiert. Es wird auch automatisch berücksichtigt, ob der Raum nen CO2- und/oder VOC-Sensor hat und ob "Sommermodus" (=Wohnung möglichst kühlen) oder "Heizmodus" (=Normalbetrieb) herrscht, was ich 2x im jahr über einen Dummy einstelle.
Vielleicht kannst du da ja ggf. interessante Regeln draus ableiten. Ist eigentlich selbsterklärend benannt.
sub calcLueftungsStates($$) {
my ($NAME,$EVENT) = @_;
if (!($NAME =~ /.*floorplan.*/)) {
##### Daten sammeln
my $room;
my $badOben = ($NAME =~ /.*bad.oben.*/);
my $badUnten = ($NAME =~ /.*bad.unten.*/);
my $schlafzimmer = ($NAME =~ /.*schlafzimmer.*/);
my $wohnzimmer = ($NAME =~ /.*(wohnzimmer|stube).*/);
my $kueche = ($NAME =~ /.*(kueche).*/);
my $flur = ($NAME =~ /.*(flur|abstell).*/);
my $kinderzimmer = ($NAME =~ /.*(kinderzimmer).*/);
if ($badOben) {$room = 'bad.oben';}
if ($badUnten) {$room = 'bad.unten';}
if ($schlafzimmer) {$room = 'schlafzimmer';}
if ($wohnzimmer) {$room = 'stube';}
if ($kueche) {$room = 'kueche';}
if ($flur) {$room = 'flur';}
if ($kinderzimmer) {$room = 'kinderzimmer';}
my $thermostat = "$room.wandthermostat_Weather";
my $innenTemp=ReadingsVal($thermostat,"temperature",15);
my $innenHum =ReadingsVal($thermostat,"humidity",90);
my $aussenTemp=ReadingsVal("wohnung.aussenthermometer","temperature",0);
my $aussenHum =ReadingsVal("wohnung.aussenthermometer","humidity","100");
my $heizModus = ReadingsVal("wohnung.heizmodus","state","aus");
my $fenster1 = ReadingsVal("$room.fenster","state","none");
my $fenster2 = ReadingsVal("$room.fenster2","state","none");
my $co2 = ReadingsVal("$room.co2","co2",0);
my $voc = ReadingsVal("$room.raumluft","voc",0);
##### Neu berechnete Werte
my $etwasOffen = (($fenster1 eq "open") || ($fenster2 eq "open"));
my $wandTemp = wallSurfaceTemp($innenTemp,$aussenTemp,0.68);
my $wandHumidity = shiftRelHumidity($innenTemp, $innenHum, $wandTemp);
my $aussenHumidityEqInnen = shiftRelHumidity($aussenTemp, $aussenHum, $innenTemp);
my $schimmelfreiMaxHum = schlimmelfreiMaxHum($wandTemp);
my $schimmelGefahr = ($wandHumidity > $schimmelfreiMaxHum);
my $luftZuTrocken = (!$schimmelGefahr && ($innenHum < 40));
my $lueftenSenktLuftfeuchte = ($innenHum > $aussenHumidityEqInnen);
my $entfeuchterAn = ($schimmelGefahr && ($innenHum > 51)) && !$etwasOffen;
my $entfeuchterAus = (($wandHumidity < ($schimmelfreiMaxHum - 3)) || ($innenHum < 50)) || $etwasOffen;
my $luftfeuchteOeffnenEmpfohlen = ($schimmelGefahr && $lueftenSenktLuftfeuchte) || ($luftZuTrocken && !$lueftenSenktLuftfeuchte);
my $luftfeuchteSchliessenEmpfohlen = ($schimmelGefahr && !$lueftenSenktLuftfeuchte) || ($luftZuTrocken && $lueftenSenktLuftfeuchte);
my $kuehlenUeberTemp = 23;
if ($badOben) {
$kuehlenUeberTemp = 25;
} elsif ($badUnten) {
$kuehlenUeberTemp = 25;
} elsif ($schlafzimmer) {
$kuehlenUeberTemp = 22.5;
} elsif ($wohnzimmer) {
$kuehlenUeberTemp = 23;
} elsif ($kueche) {
$kuehlenUeberTemp = 24;
} elsif ($kinderzimmer) {
$kuehlenUeberTemp = 23;
}
my $kuehlenAufTemp = 21;
if ($badOben) {
$kuehlenAufTemp = 22;
} elsif ($badUnten) {
$kuehlenAufTemp = 20;
} elsif ($schlafzimmer) {
$kuehlenAufTemp = 21.5;
} elsif ($wohnzimmer) {
$kuehlenAufTemp = 21.5;
} elsif ($kueche) {
$kuehlenAufTemp = 20;
} elsif ($kinderzimmer) {
$kuehlenAufTemp = 21;
}
my $tempOeffnenEmpfohlen = ( (($heizModus eq "Kühlen") && ($innenTemp > $aussenTemp) && ($innenTemp > $kuehlenUeberTemp))
|| (($heizModus eq "Heizen") && ($innenTemp < $aussenTemp))
) ;
my $tempSchliessenEmpfohlen = ( (($heizModus eq "Kühlen") && (
(($innenTemp < $aussenTemp) && ($innenTemp > $kuehlenUeberTemp))
|| (($innenTemp > $aussenTemp) && ($innenTemp < $kuehlenAufTemp))
)
)
|| (($heizModus eq "Heizen") && ($innenTemp > $aussenTemp))
);
my $luftgueteSensorVorhanden = (($co2 ne '0') || ($voc ne '0'));
my $luftgueteOeffnenEmpfohlen = ((($co2 > 1500) || ($voc > 2000)) && $luftgueteSensorVorhanden);
my $luftgueteSchliessenEmpfohlen = (($co2 < 600) && ($voc < 700) && $luftgueteSensorVorhanden);
my $schliessenEmpfohlen;
if ($luftgueteSchliessenEmpfohlen || !$luftgueteSensorVorhanden) {
if ($luftfeuchteSchliessenEmpfohlen && $tempSchliessenEmpfohlen) {
$schliessenEmpfohlen = true;
} elsif (!$luftfeuchteSchliessenEmpfohlen && !$tempSchliessenEmpfohlen) {
$schliessenEmpfohlen = false;
} else {
if (!$luftfeuchteOeffnenEmpfohlen && !$tempOeffnenEmpfohlen) {
$schliessenEmpfohlen = true;
} else {
if ( ($luftfeuchteSchliessenEmpfohlen && ($heizModus eq "Heizen"))
|| ($tempSchliessenEmpfohlen && ($heizModus eq "Kühlen"))
) {
$schliessenEmpfohlen = true;
} else {
$schliessenEmpfohlen = false;
}
}
}
} else {
$schliessenEmpfohlen = false;
}
my $oeffnenEmpfohlen = (($luftfeuchteOeffnenEmpfohlen || $luftgueteOeffnenEmpfohlen || $tempOeffnenEmpfohlen) && !$schliessenEmpfohlen) ;
my $fenster1richtig = (($fenster1 eq "closed") && $schliessenEmpfohlen) || ($etwasOffen && $oeffnenEmpfohlen) || (!$oeffnenEmpfohlen && !$schliessenEmpfohlen);
my $fenster2richtig = (($fenster2 eq "closed") && $schliessenEmpfohlen) || ($etwasOffen && $oeffnenEmpfohlen) || (!$oeffnenEmpfohlen && !$schliessenEmpfohlen);
##### Alle sinnvollen Werte als Readings setzen
fhem("setreading $thermostat wandTemp ".sprintf("%.1f", $wandTemp));
fhem("setreading $thermostat wandHumidity ".sprintf("%.0f", $wandHumidity));
fhem("setreading $thermostat aussenHumidityEqInnen ".sprintf("%.0f", $aussenHumidityEqInnen));
fhem("setreading $thermostat schimmelfreiMaxHum ".sprintf("%.0f", $schimmelfreiMaxHum));
fhem("setreading $thermostat schimmelGefahr ".($schimmelGefahr?"ja":"nein"));
fhem("setreading $thermostat oeffnenEmpfohlen ".($oeffnenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat schliessenEmpfohlen ".($schliessenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat luftfeuchteOeffnenEmpfohlen ".($luftfeuchteOeffnenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat luftfeuchteSchliessenEmpfohlen ".($luftfeuchteSchliessenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat luftgueteOeffnenEmpfohlen ".($luftgueteOeffnenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat luftgueteSchliessenEmpfohlen ".($luftgueteSchliessenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat tempOeffnenEmpfohlen ".($tempOeffnenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat tempSchliessenEmpfohlen ".($tempSchliessenEmpfohlen?"ja":"nein"));
fhem("setreading $thermostat fenster1richtig ".($fenster1richtig?"ja":"nein"));
if ($fenster2 ne "none") {
fhem("setreading $thermostat fenster2richtig ".($fenster2richtig?"ja":"nein"));
}
if ($entfeuchterAn) {
fhem("setreading $thermostat entfeuchter an");
} elsif ($entfeuchterAus) {
fhem("setreading $thermostat entfeuchter aus");
}
}
}
Ersetzt dieser Code Beitrag 1? Oder inwiefern ergänzt dieser diesen bzw. wie rufst du diese Funktion auf?
Hallo zusammen,
@herrmann, danke für das Lob, freut mich dass ich mich für deine unermüdliche Arbeit etwas revanchieren konnte :-)
@hauswart nein. das ist nur als Beispiel gedacht. Ich nutze das in der 99_myUtils, um mir alle für's Lüften interessanten Werte zu berechnen. Spannend sind dabei insb. vielleicht folgende Zeilen:
my $wandTemp = wallSurfaceTemp($innenTemp,$aussenTemp,0.68); # Wandtemperatur innen. K-faktor anpassen!
my $wandHumidity = shiftRelHumidity($innenTemp, $innenHum, $wandTemp); # Rel. Luftfeuchtigkeit in Wandnähe
my $aussenHumidityEqInnen = shiftRelHumidity($aussenTemp, $aussenHum, $innenTemp); # Welche Luftfeuchtigkeit Innen nach vollst. Durchlüften wäre
my $schimmelfreiMaxHum = schimmelfreiMaxHum($wandTemp); # Max. Rel. Luftfeuchte in Wandnähe, ab der es Schimmelt
my $schimmelGefahr = ($wandHumidity > $schimmelfreiMaxHum); #Wahrheitswert: True bei Schimmelgefahr, false wenn nicht.
my $luftZuTrocken = (!$schimmelGefahr && ($innenHum < 40)); #Wahrheitswert: True bei zu geringer Luftfeuchte
my $lueftenSenktLuftfeuchte = ($innenHum > $aussenHumidityEqInnen); #Wahrheitswert: True wenn Lüften zu trockenerer Luft führt
my $entfeuchterAn = ($schimmelGefahr && ($innenHum > 51)) && !$etwasOffen; #Wahrheitswert für Entfeuchtersteuerung: Anschalten (=true) wenn Schimmelgefahr und Entfeuchter wirtschaftl. arbeitet (min. 50% rH)
my $entfeuchterAus = (($wandHumidity < ($schimmelfreiMaxHum - 3)) || ($innenHum < 50)) || $etwasOffen; #Wahrheitswert für Entfeuchtersteuerung: Ausschalten (=true) mit Hysterese von 3% rH
my $luftfeuchteOeffnenEmpfohlen = ($schimmelGefahr && $lueftenSenktLuftfeuchte) || ($luftZuTrocken && !$lueftenSenktLuftfeuchte); # Wahrheitswert: Sollte bez. Luftfeuchte gelüftet werden?
my $luftfeuchteSchliessenEmpfohlen = ($schimmelGefahr && !$lueftenSenktLuftfeuchte) || ($luftZuTrocken && $lueftenSenktLuftfeuchte); # Wahrheitswert: Darf bez. Luftfeuchte NICHT gelüftet werden?
Wenn man die 5 Variablen
- $innenTemp
- $aussenTemp
- $innenHum
- $aussenHum und
- $etwasOffen (true oder false, je nachdem, ob ein fenster offen ist)
per ReadingsVal(...) befüllt, wie ich das weiter oben tue, bekommt man mit diesen Codezeilen so ziemlich alles, was man für's Lüften braucht an Variablen. Habs oben mal kommentiert, was die vielen aus erstaunlicherweise nur 5 Werten berechneten Variablen bedeuten. Man braucht dazu natürlich die im Eingangsposting aufgeschriebenen Funktionen.
Anlässlich des neuen Interesses habe ich oben mal aufgeräumt, nen Wiki-Account beantragt, womit ich den Artikel auch mal auf stand bringen werde, und auch noch eine neue Funktion gebastelt, die vielleicht auch nützlich ist:
schimmelfreiMinTemp - unter welcher Temperatur es im Raum schimmelt, gegeben Raumtemperatur und Luftfeuchte - also sozusagen nicht der Dewpoint, sondern der "Schimmelpoint" ;-) Das hab ich fix numerisch gelöst, weil ich zu faul war, die Formel umzustellen, aber wir haben ja 2017 und 1GHz-Raspberrys und so ;)
Hallo Peter,
wollte gerade die neue Funktion testen, bekomme jedoch einen Fehler beim speichern der myUtils:
Bareword "false" not allowed while "strict subs" in use at ./FHEM/99_myUtils.pm line 73.
Viele Grüße!
Argh, wie ich perl liebe. Hab ich oben korrigiert, probier mal nochmal, sorry.
Nun gehts! :)
Steht das neue Userreadings "schlimmelfreiMinTemp" in Abhängigkeit zu den anderen Userreadings oder reicht es wenn man "schlimmelfreiMinTemp" ergänzt und die anderen Userreadings auf dem alten Stand belässt?
Nein, für das brauchst du eigentlich nur die ganzen Funktionen in den myUtils sowie die rohe Raumluftfeuchte und Raumtemperatur. Kann man also auch "Stand alone" verwenden.
Nun erhalte ich noch einen weiteren Fehler für der Userreadings "schlimmelfreiMinTemp":
Error evaluating BZ.Klimasensor userReading schlimmelfreiMinTemp: syntax error at (eval 23333) line 1, at EOF
So siehts bei mir aus:
schlimmelfreiMinTemp { sprintf("%.1f",schlimmelfreiMinTemp(ReadingsVal("BZ.Klimasensor","temperature",15),ReadingsVal("BZ.Klimasensor","humidity",100),100) },
Da fehlte ne Klammer am Ende:
schimmelfreiMinTemp { sprintf("%.1f",schlimmelfreiMinTemp(ReadingsVal("BZ.Klimasensor","temperature",15),ReadingsVal("BZ.Klimasensor","humidity",100),100)) },
Ich hoffe jetzt haben wir alle Schusselfehler von mir gefunden :-D
Zitat von: peterk_de am 12 März 2017, 14:04:43
Ich hoffe jetzt haben wir alle Schusselfehler von mir gefunden :-D
Nun siehts sehr gut aus und das Reading meldet eine Temperatur.
Meinst du, dass es Sinn machen würde, den Vergleich von "schlimmelfreiMinTemp" und "wandTemp" in das All in One Reading "schimmelGefahr" einzubauen oder wäre es besser hierfür ein zusätzliches Reading vorzusehen? Letzteres hätte wohl den Vorteil, dass man unterscheiden könnte, ob zu Heizen oder zu Lüften ist. ???
Also das bisherige Reading "schimmelGefahr" ist vom Ergebnis her (ja/nein) mit dem Vergleich von "schimmelfreiMinTemp größer wandTemp" identisch (bis auf Rundungsfehler ;-). Nur der Rechenweg ist anders (es werden die rel. Feuchten verglichen und keine Temperaturen). Kannst du leicht prüfen und stimmt hoffentlich immer ^^.
Die Unterscheidung, ob Heizen oder Lüften kannst du damit allein nicht treffen. Dazu brauchst du noch das Reading "lueftenMoeglich". Z.B.: Wenn schimmelGefahr und LueftenMoeglich, dann Lueften, sonst Heizen (oder entfeuchten). Weil Heizen hilft bei Schimmelgefahr im Prinzip immer, Lüften aber nur, wenn die Luft draußen absolut trockener ist als drinnen.
Zitat von: peterk_de am 12 März 2017, 09:22:48
Anlässlich des neuen Interesses habe ich oben mal aufgeräumt, nen Wiki-Account beantragt, womit ich den Artikel auch mal auf stand bringen werde, und auch noch eine neue Funktion gebastelt, die vielleicht auch nützlich ist:
Daumen hoch. Freue mich schon auf die fertige Lösung.
So, ist jetzt oben alles fertig. Habe den Artikel ein wenig umstrukturiert - jetzt leistet er auch in "nicht kritischen" Räumen Hilfe :)
@herrmannj, du hast mich indirekt auf eine Idee gebracht ... die TechemHKV sind doch eigentlich DER perfekte Sensor für Oberflächentemperaturen.. Und der Preis .... ich hab grad 18 gebrauchte für 30 Euro (!) bei ebay bekommen ... ;D ;D ;D
Wenn sie da sind, werde ich mal berichten, wie sie sich als Wandtemperaturmesser schlagen ...
:)
Hallo!
Ich habe mir vom "Lüftungsbüro Berlin" ein Lüftungs-Konzept für meine Eigentumswohnung erstellen lassen.
Dieses Konzept sieht für das Badezimmer (~ 6m^2) nur ein feuchtegesteuerte Abluft vor.
Frage:
Wenn ich die Möglichkeiten der hier vorgestellten Lösung "Richtig Lüften und Entfeuchten" ausschöpfe, welches Gerät zum Be-/Entlüften sollte ich dann im Badezimmer verbauen?
THX
Hi c.monty,
das sind ein bisschen wenig Angaben, um das sagen zu können. Wie sieht denn grob das Lüftungskonzept aus? Hast du Kältebrücken im Bad? (Wärmebildkamera oder Infrarotthermometer leihen)?
Pauschal gilt: Ohne Kältebrücken (also insbes. z.B. bei innenliegenden Bädern) ist gegen eine alleinige Regelung per Raumluftfeuchtigkeit prinzipiell nichts einzuwenden. Zielwert < 70% (oder besser, anhand der Raumtemperatur ermittelt wie oben beschrieben) und fertig.
Zitat von: peterk_de am 24 März 2017, 13:31:54
Hi c.monty,
das sind ein bisschen wenig Angaben, um das sagen zu können. Wie sieht denn grob das Lüftungskonzept aus? Hast du Kältebrücken im Bad? (Wärmebildkamera oder Infrarotthermometer leihen)?
Pauschal gilt: Ohne Kältebrücken (also insbes. z.B. bei innenliegenden Bädern) ist gegen eine alleinige Regelung per Raumluftfeuchtigkeit prinzipiell nichts einzuwenden. Zielwert < 70% (oder besser, anhand der Raumtemperatur ermittelt wie oben beschrieben) und fertig.
Verstehe...
Ich habe keine Messungen zu Kältebrücken.
Aber das Bad ist ein innenliegendes Badezimmer mit 1 Aussenwand (ca. 2m Breit inkl. Fenster).
Im Anhang ein Bild des Grundrisses inkl. Belüftungskonzept.
THX
Hi Monty,
also eine komplett dezentrale Lüftungsanlage mit zentraler Steuerung. Da stellt sich mir in Zusammenhang mit FHEM zuerst die Frage, ob du da überhaupt eine Chance hättest, in die Regelung von extern einzugreifen (Schnittstelle) - hier kenne ich mich nicht aus, was es da an Systemen gibt. Was sicher immer geht, ist per FHEM das Bad zusätzlich zu überwachen (mit einem separaten Funk-Hygrometer) wie oben beschrieben und dann ggf. die Anlage nach einer Warnung manuell hochzudrehen.
Nur den Ablüfter im Bad losgelöst hochzufahren und ganz getrennt zu regeln, wenn du dort Schimmelgefahr detektierst, ist ungünstig, dann saugst du im schlimmsten Fall den Küchendunst einmal quer durch die Wohnung. Auch einen separaten Entfeuchter würde ich bei der Konzeption vermeiden, wenn der nötig wäre, wäre das eigentlich ein Armutszeugnis für die Lüftungsanlage. Generell traue ich so einer Firma aber zu, die Lüfter/Wärmetauscher etc. so zu dimensionieren, dass dein Bad in Abhängigkeit von Nutzung und Bausubstanz nicht schimmelt, denn das ist ja ihr Job.
Wie gesagt, ich würde auf jeden Fall aber noch schauen, ob du da kalte Wandstellen hast und wenn ja, die Planer darauf einmal gezielt ansprechen, denn dann müsste das entsprechend berücksichtigt werden und ist leider in aktuellen Normen etc. eher schlecht abgebildet. Eventuell kämen für dich dann aber auch auf jeden Fall zu bevorzugende (da auf Dauer günstigere) Bauliche Maßnahmen wie zusätzliche Dämmung in Frage.
LG!
Ist es Absicht das es "schlimmel" und nicht "schimmel" bei den Funktionen heißt?
Da muss mir am Anfang mal die Rechtschreibkorrektur nen Streich gespielt haben ... aber schön dass das nach so langer zeit mal jemand merkt, habe es versucht überall zu korrigieren ;D
Bis vor Kurzem hat alles sehr gut funktioniert. Allerdings erhalte ich seit Beginn des sehr warmen Wetter nun laufend Meldungen, dass ich die Fenster schließen soll.
Ich nehme an, dass es damit zusammenhängt, dass ich den K-Faktor noch nicht von Heiz- auf den Sommermodus umgestellt habe, den Peter hier beschrieben hat:
Zitat von: peterk_de am 18 Januar 2017, 15:27:16
Es wird auch automatisch berücksichtigt, ob der Raum nen CO2- und/oder VOC-Sensor hat und ob "Sommermodus" (=Wohnung möglichst kühlen) oder "Heizmodus" (=Normalbetrieb) herrscht, was ich 2x im jahr über einen Dummy einstelle.
Bei den aktuellen Temperaturen komme ich leider auch auf keine vernünftigen Werte. Teils liegen diese im negativen Bereich und teilweise großer 1.(s. Anhang)
Hat jemand eine Idee, wie ich aktuell an brauchbare K Wert komme? ???
Hi Spezialtrick,
mit meinem "Sommermodus" hat das nichts zu tun. Du bist stattdessen leider an die "natürliche Grenze" des Verfahrens gestoßen. In deinem Beispiel liegt die Wandtemperatur unter Außen- und Innentemperatur, mit anderen Worten, es hat sich noch kein thermisches Gleichgewicht zwischen Wand und Luft eingestellt. Das dauert je nach Dicke der Wand recht lange, und bei den aktuell geringen Temperaturdifferenzen hat dieser Speichereffekt der Wand einen nicht mehr zu vernachlässigenden Anteil.
Generell kannst du deshalb bei diesem Wetter keinen K-Wert ermitteln, bzw. kommt Mist raus. Der K-Wert hat sich aber gegenüber dem Winter nicht verändert (der repräsentiert ja die Isoliereigenschaft der Wand). Deshalb solltest du zur Berechnung definitiv auch im Sommer den aus dem Winter nehmen (der im Winter ermittelte ist tendentiell der genauere Wert und deine ermittelten Werte sehen sehr plausibel aus). Also für den Sommer keinen neuen ermitteln.
Und dass du zu Beginn des warmen Wetters zu oft eine Schimmelwarnung bekommen hast: Das ist vermutlich leider korrekt! Warme Sommerluft kann unglaublich viel Wasser enthalten. Deine Wohnung ist noch nicht aufgeheizt (Innentemperatur niedrig), die warme Außenluft kühlt ab und die relative Luftfeuchte steigt. Durch die verwendete Formel, die davon ausgeht, dass sich deine Wand sofort richtig miterwärmt, wird deine Wandtemperatur dann eher zu hoch geschätzt und du solltest de facto ZU SELTEN Schimmelwarnungen bekommen...
Was du noch tun kannst: Die (mit dem Winter-K-Wert) geschätzte Wandtemperatur mit der tatsächlich gemessenen vergleichen. Dann kannst du den Speichereffekt in eine Grad-Celsius-messungenauigkeit umrechnen. Ich würde aber wetten, die liegt schlimmstenfalls bei max 2-3 Grad.
Zitat von: peterk_de am 03 Juni 2017, 16:24:19
mit meinem "Sommermodus" hat das nichts zu tun.
Verstehe, mit dem Sommermodus unterscheidet du lediglich, ob die Wohnung gekühlt oder beheizt werden soll, korrekt?
Zitat von: peterk_de am 03 Juni 2017, 16:24:19
Du bist stattdessen leider an die "natürliche Grenze" des Verfahrens gestoßen. In deinem Beispiel liegt die Wandtemperatur unter Außen- und Innentemperatur, mit anderen Worten, es hat sich noch kein thermisches Gleichgewicht zwischen Wand und Luft eingestellt. Das dauert je nach Dicke der Wand recht lange, und bei den aktuell geringen Temperaturdifferenzen hat dieser Speichereffekt der Wand einen nicht mehr zu vernachlässigenden Anteil.
Generell kannst du deshalb bei diesem Wetter keinen K-Wert ermitteln, bzw. kommt Mist raus. Der K-Wert hat sich aber gegenüber dem Winter nicht verändert (der repräsentiert ja die Isoliereigenschaft der Wand). Deshalb solltest du zur Berechnung definitiv auch im Sommer den aus dem Winter nehmen (der im Winter ermittelte ist tendentiell der genauere Wert und deine ermittelten Werte sehen sehr plausibel aus). Also für den Sommer keinen neuen ermitteln.
Ok, dann belasse ich die K-Werte wie sie sind und versuche diese im kommenden Winter weiter zu verfeinern. Hatte im letzten Winter das Mittel aus nur drei Werte gebildet.
Zitat von: peterk_de am 03 Juni 2017, 16:24:19
Was du noch tun kannst: Die (mit dem Winter-K-Wert) geschätzte Wandtemperatur mit der tatsächlich gemessenen vergleichen. Dann kannst du den Speichereffekt in eine Grad-Celsius-messungenauigkeit umrechnen. Ich würde aber wetten, die liegt schlimmstenfalls bei max 2-3 Grad.
Ich weiß leider nicht genau wie ich das in FHEM berechnen könnte. Allerdings sind die Ungenauigkeiten größer:
Raum gemessen geschätzt
Wz 27.0 19.5
Ku 21.7 15.6
Bz 22.4 13,7
Liegt das noch an der "natürlichen Grenze des Verfahrens oder mache ich irgendetwas grundlegend falsch?
Ich habe mir deine oben gepostet Funktion angeguckt und wollte einige Dinge übernehmen. Dazu hätte ich noch eine Verständnisfrage. Der Teil "lueftenSenktLuftfeuchte" entspricht doch "lueftenMoeglich" oder?
Entsprechend dem Beitrag bestimmt sich "lueftenMoeglich" wie folgt:
lueftenMoeglich {(ReadingsVal("Raumhygromometer","humidity","N/A") >(shiftRelHumidity(ReadingsVal("Aussenthermometer","temperature","30"),ReadingsVal("Aussenthermometer","humidity","100"), ReadingsVal("Raumthermometer","temperature","N/A") )+3))?"ja":"nein" }
Du bestimmst ""lueftenSenktLuftfeuchte" in deiner Funktion so:
my $lueftenSenktLuftfeuchte = ($innenHum > $aussenHumidityEqInnen)
Könnte man "lueftenMoeglich" entsprechend auch so
lueftenMoeglich {(ReadingsVal("BZ.Klimasensor","humidity",0) > ReadingsVal("BZ.Klimasensor","aussenHumidityEqInnen",0))?"ja":"nein"}
bestimmen? Wie gesagt, als reine Verständnisfrage, um die anderen Teile deiner Funktion umzuschreiben. 8)
Zitat von: Spezialtrick am 04 Juni 2017, 18:13:23
Raum gemessen geschätzt
Wz 27.0 19.5
Ku 21.7 15.6
Bz 22.4 13,7
Liegt das noch an der "natürlichen Grenze des Verfahrens oder mache ich irgendetwas grundlegend falsch?
Oha. Ich glaube fast da ist grundlegend was falsch, soweit lag das bei mir selbst bei meinen 50cm-Ziegelwänden nie daneben. Hast du diese Wandtemperaturen tatsächlich mit den Winter-K-Werten (Größer 0, kleiner 1) berechnet? Wenn der K-Wert zwischen 0 und 1 liegt, muss übrigens immer eine Wandtemperatur herauskommen, die zwischen aktueller Innen- und Außentemperatur liegt (bei K=0.5 ist es genau der Mittelwert zwischen Innen und Außen). Das kann ich mir insbesondere bei den geschätzten 13,7 Grad und der aktuellen Wetterlage aber nicht vorstellen. Deshalb meine Vermutung, dass da bei dir irgendwas nicht stimmt. Aber um das sagen zu können: Kannst du noch die Innen- und Außentemperaturen während dieser 3 Messungen rekonstruieren und den verwendeten K-Wert?
ZitatIch habe mir deine oben gepostet Funktion angeguckt und wollte einige Dinge übernehmen. Dazu hätte ich noch eine Verständnisfrage. Der Teil "lueftenSenktLuftfeuchte" entspricht doch "lueftenMoeglich" oder?
Entsprechend dem Beitrag bestimmt sich "lueftenMoeglich" wie folgt:
lueftenMoeglich {(ReadingsVal("Raumhygromometer","humidity","N/A") >(shiftRelHumidity(ReadingsVal("Aussenthermometer","temperature","30"),ReadingsVal("Aussenthermometer","humidity","100"), ReadingsVal("Raumthermometer","temperature","N/A") )+3))?"ja":"nein" }
Du bestimmst ""lueftenSenktLuftfeuchte" in deiner Funktion so:
my $lueftenSenktLuftfeuchte = ($innenHum > $aussenHumidityEqInnen)
Könnte man "lueftenMoeglich" entsprechend auch so
lueftenMoeglich {(ReadingsVal("BZ.Klimasensor","humidity",0) > ReadingsVal("BZ.Klimasensor","aussenHumidityEqInnen",0))?"ja":"nein"}
bestimmen? Wie gesagt, als reine Verständnisfrage, um die anderen Teile deiner Funktion umzuschreiben. 8)
Japp, das ist korrekt geschlussfolgert, ich habe das nur so umständlich geschrieben, damit die Userreadings nicht voneinander abhängen, so dass man die auch einzeln verwenden kann.
Zitat von: peterk_de am 04 Juni 2017, 21:17:14
Oha. Ich glaube fast da ist grundlegend was falsch, soweit lag das bei mir selbst bei meinen 50cm-Ziegelwänden nie daneben. Hast du diese Wandtemperaturen tatsächlich mit den Winter-K-Werten (Größer 0, kleiner 1) berechnet? Wenn der K-Wert zwischen 0 und 1 liegt, muss übrigens immer eine Wandtemperatur herauskommen, die zwischen aktueller Innen- und Außentemperatur liegt (bei K=0.5 ist es genau der Mittelwert zwischen Innen und Außen). Das kann ich mir insbesondere bei den geschätzten 13,7 Grad und der aktuellen Wetterlage aber nicht vorstellen. Deshalb meine Vermutung, dass da bei dir irgendwas nicht stimmt. Aber um das sagen zu können: Kannst du noch die Innen- und Außentemperaturen während dieser 3 Messungen rekonstruieren und den verwendeten K-Wert?
Ja, bei allen Sensoren sind die Winter-K-Werte enthalten. Diese liegen zwischen 0,49 und 0,85. Ich habe sämtliche Daten in einem Excel Sheet. (s.Anhang) Ein K-Feld habe ich markiert, sodass du auch die Rechnung sehen kannst.
wandTemp habe ich so im userreadings stehen:
wandTemp { sprintf("%.1f", wallSurfaceTemp(ReadingsVal("BZ.Klimasensor","temperature",15),ReadingsVal("UM.Klimasensor","temperature_offset",0),0.54)) },
Vllt. haber ich ja irgendwas übersehen.
Zitat von: peterk_de am 04 Juni 2017, 21:17:14
Japp, das ist korrekt geschlussfolgert, ich habe das nur so umständlich geschrieben, damit die Userreadings nicht voneinander abhängen, so dass man die auch einzeln verwenden kann.
Ok. Perfekt. Muss man denn eine Reihenfolge bei den Readings einhalten?
Hallo spezialtrick,
ich meinte die Innen/Außentemperaturen zu diesen Werten, die du gepostet hast:
Raum gemessen geschätzt
Wz 27.0 19.5
Ku 21.7 15.6
Bz 22.4 13,7
Nehmen wir mal das Badezimmer mit 13,7 Grad Schätztemperatur: Das würde bei K=0,54 bedeuten, dass 13,7 Grad etwa der Mittelwert aus dem Reading deines Außensensosr und deinem Raumsensor sein müssten. Haut das hin?
Zur Reihenfolge der Userreadings: Keine Ahnung, vermutlich ist die ist die aber nicht klar definiert und zufällig (da Intern als hash gespeichert). Ich würde es immer vermeiden, dass Userreadings aufeinander aufbauen. Denn wenn du in der Berechnung eines Userreadings ein anderes auswertest, rechnet er manchmal (wahrscheinlich sogar immer, weiß grad nicht wie das genau implementiert ist) mit dessen alten Wert. Also wenn dein Userreading "Wandtemperatur" von 17 auf 18 Grad steigt, und du ein weiteres Userreading "SchimmelGefahr" hast, wo ReadingsVal(Wandtemperatur) benutzt wird, wird dann trotzdem mit 17 Grad gerechnet, und erst beim nächsten mal mit 18 Grad.
Zitat von: peterk_de am 06 Juni 2017, 19:50:37
Hallo spezialtrick,
ich meinte die Innen/Außentemperaturen zu diesen Werten, die du gepostet hast:
Raum gemessen geschätzt
Wz 27.0 19.5
Ku 21.7 15.6
Bz 22.4 13,7
Nehmen wir mal das Badezimmer mit 13,7 Grad Schätztemperatur: Das würde bei K=0,54 bedeuten, dass 13,7 Grad etwa der Mittelwert aus dem Reading deines Außensensosr und deinem Raumsensor sein müssten. Haut das hin?
Achso, nein die Werte habe ich leider nicht mehr, weil sie schon von der Datenbank gerundet worden sind. Der von dir errechnete K-Wert stimmt exakt und steht genau so in meinem Userreadings drin. Nur leider stimmten die gemessen Werte nicht mit den geschätzten überein. Das spricht doch dafür, dass der K-Wert nicht wirklich korrekt sein kann, oder? ???
Aktuelle Werte aus dem Badezimmer:
Außentemperatur: 22,4°
Innentemperatur: 25,1°
tatsächliche Wandtemperatur: 22,7°
geschätzte Wandtemperatur: 13,6°
K=0,54
OK, wie ich vermutet habe. Bei diesen Temperaturen und diesem K-Wert MUSS eine geschätzte Wandtemperatur zwischen 22,4 und 25,1 Grad rauskommen. Warum tut es das bei dir nicht ... ich tippe mal ins Blaue: Komma statt Punkt beim K-Wert? ;)
Punkt statt Komma wars schon mal nicht. :D
Ich habe aber einen Unterschied gefunden. Dein wandTemp Reading lautet:
wandTemp { sprintf("%.1f", wallSurfaceTemp(ReadingsVal("kuechenthermometer","temperature",15),ReadingsVal("aussenthermometer","temperature",0),0.68)) },
und meins komischerweise:
wandTemp { sprintf("%.1f", wallSurfaceTemp(ReadingsVal("BZ.Klimasensor","temperature",15),ReadingsVal("UM.Klimasensor","temperature_offset",0),0.54)) },
Nun komme ich auf folgende Werte:
Außentemperatur: 23,5°
Innentemperatur: 25,2°
tatsächliche Wandtemperatur: 24,4°
geschätzte Wandtemperatur: 24,3°
K=0,54
Sieht ziemlich gut aus. :) Frage mich aber trotzdem wo das "offset" herkommt. Selbst ausgedacht habe ich mir das sicher nicht. :D
Das war mir selbst schon aufgefallen, aber ich dachte es wäre ein Userreading von dir. Wo das herkommt wirdt wahrscheinlich wenn dann nur du selbst ergründen können ;-) Jedenfalls: Schön, dass es jetzt so genau klappt, Physik fetzt halt :-)
Zitat von: peterk_de am 09 Juni 2017, 17:19:44
Das war mir selbst schon aufgefallen, aber ich dachte es wäre ein Userreading von dir. Wo das herkommt wirdt wahrscheinlich wenn dann nur du selbst ergründen können ;-) Jedenfalls: Schön, dass es jetzt so genau klappt, Physik fetzt halt :-)
Ich kann mich ehrlich gesagt nicht entsinnen, ein offset für meinen Außensensor gesetzt zu haben. :o
Ich habe nun nochmal alle userreadings kontrolliert und sämtlich "schlimmel" Fehler beseitigt. Nun scheint es gut zu funktionieren und Fhem erlaubt mir das Lüften der Wohnung. ;D
Lediglich dieser Fehler verbleibt im Log:
2017.06.09 21:07:16 1: PERL WARNING: Argument "N/A" isn't numeric in numeric gt (>) at (eval 5541) line 1.
2017.06.09 21:07:16 3: eval: {(ReadingsVal("WZ.Klimasensor","humidity","N/A") >(shiftRelHumidity(ReadingsVal("UM.Klimasensor","temperature","30"),ReadingsVal("UM.Klimasensor","humidity","100"), ReadingsVal("WZ.Klimasensor","temperature","N/A") )+10))?"ja":"nein" }
Hast du dafür noch eine Lösung?
ZitatPhysik fetzt halt :-)
Ich glaube das können wir so festhalten. :D
Ja. Perl meckert, dass "N/A" keine Zahl ist und nicht verglichen werden kann. Es kommt hier her:
ReadingsVal("WZ.Klimasensor","humidity","N/A")
oder hier her:
ReadingsVal("WZ.Klimasensor","temperature","N/A")
In beiden Fällen ist es der "Fallback-Wert" für die Funktion ReadingsVal, falls diese ein Reading nicht findet.
Kurzgesagt: Deinem WZ.Klimasensor fehlt das Reading temperature oder humidity oder beides.
Hallo Peter,
ich leide seit Jahren auch enorm unter der Feuchtigkeit im Keller im Wochenendhaus.
Hier wurde wohl auch beim BAu geschlampt, aber die Tonnen Trockengranulat kosten enorme Summen Geld.
Der Keller ist sehr feucht und alles schimmelt (Auch die grünen Rigips Platten für den Feuchtbereich).
Ich würde es gerne einmal mit einer Lüftungssteuerung versuchen.
-> 1 kleines Fenster mit Lüfter versehen / auf der anderen Seite des Kellers eine Klappe zur Entlüftung.
Über FHEM und entsprechenden Feuchtesensor Innen & Aussen dann die Lüftung regeln.
FHEM habe ich schon lange bei mir in der Anwendung, z.B. auch mit dem ASH2200 Temp/Humidity Sensor am Balkon, damit ich bei Frost die automatische Rolladensteuerung abschalte, da mir die Motoren die mittlerweise ziemlich brüchigen Rolläden ggf. zerreissen wenn es festfriert.
Meine Planung wäre daher:
1 FHEM auf RasPi
2 ASH2200 (Innen an der Entlüftungsklappe und Aussen an der Ansaugung)
1 Badezimmerlüfter geschaltet über FS20
Entsprchende Verrohrung um die trockene Luft anzusaugen und nicht die feuchte Luft am Boden.
Dann wäre die Idee, Wenn Humidity aussen gering und innen hoch, wird die trockene Luft reingeblasen, bis die Differenz geringer geworden ist.
Ich werde mir dazu dann noch mal deine Algorithmen anschauen.
Siehst du bei meinem geplanten Aufbau aus deiner Erfahrung irgendwelche Denkfehler ? ?
Gruss
Holger
Hi Holger,
1. Problem: wenn du so massive Probleme hast, könnte es sein, dass du mit Lüften nicht hinkommst und einen Entfeuchter brauchst, insbesondere im Sommer.
2. Problem: Ich würde dir empfehlen, in deinem Keller mal mit einem (geborgten) Infrarothermometer die Schimmelstellen zu messen. Sind die deutlich kälter als die Raumluft (also schlecht gedämmt(
), brauchst du im Keller für gescheitete Lüftungs/Entfeuchtungsregelung noch einen dauerhaften Sensor zur Messung der Wandtemperatur. Mein Schätzverfahren klappt nicht bei Kellerwänden.
Zitat von: peterk_deSind die deutlich kälter als die Raumluft (also schlecht gedämmt(
), brauchst du im Keller für gescheitete Lüftungs/Entfeuchtungsregelung noch einen dauerhaften Sensor zur Messung der Wandtemperatur.
Darf ich mal naiv fragen warum? Klar ist die Wandtemperatur für die Beurteilung der Schimmelgefahr interessant - aber für die Entscheidung, ob Lüften sinnvoll ist, müsste doch der Vergleich von absoluter Feuchte innen und außen ausreichen, oder?
Hey Manuel, jain. Dieser Vergleich ist natürlich Voraussetzung, dass du den Keller lüften kannst. Aber wenn du wie Holger damit einen elektrischen Lüfter steuern willst, dann soll der ja nur angehen, wenn es auch wirklich nötig ist, sonst heizt du dich gerade im Winter ja tot (wo die Feuchte durch Lüften schnell im unkritischen Bereich ist und dann nur noch das Mauerwerk auskühlt). Bei einer reinen Entfeuchterregelung bringt dir der Vergleich ansonsten gar nix, weil da die Außenluft keine Rolle spielt.
LG!
Erst mal Danke für all die tollen Anregungen! Ich hätte 2 Fragen. ::)
1.) Schon mal drüber nachgedacht daraus ein Modul zu machen?
2.) Spricht was dagegen die Wandtemperatur mit einem Fieberthermometer für das Ohr zu messen? Ist das blöd wenn das nur eine Momentaufnahme ist? Wenn ich aber was an die Wand hänge das dort misst, dann ist diese Stelle teilweise von der Raumluft isoliert und die Messergebnisse wahrscheinlich zu kalt. Das Ohrthermometer ist auch sehr genau glaube ich, da kalibriert.
Hi Mumpitz,
1.) Ja habe ich, aber bastle gerade an einem anderen modul (das nicht so "einfach" per myUtils/Userreading zu machen ist), so dass ich das erstmal hinten angestellt habe. Irgendwann aber vielleicht wirklich mal :)
2.) Im Prinzip geht das, das Messprinzip ist das gleiche wie bei einem Universal-Infrarotthermometer aus dem Baumarkt. So genau sind die Fieberthermometer allerdings nur, weil sie meist a) nur einen sehr kleinen Temperaturbereich haben (25-45 Grad oder so), das reicht für Wände dann natürlich nicht. Und b) sind sie grob gesagt auf das Abstrahlungsverhalten von "Haut" voreingestellt, messen also Wände nicht unbedingt genauso genau. Bei Baumarkt-Infrarotthermometern findest du die Angabe, auf welche Oberflächen sie optimiert sind, manchmal in der Anleitung, bei hochwertigen Teilen kannst du den sogenannten "Epsilon"-Wert für verschiedene Materialien selbst nach einer Tabelle im Gerät einstellen - oder, wie bei meinem, sogar automatisch über ein herkömmlichen Temperaturfühler kalibrieren und speichern... da kommt dann ein Fieberthermometer nicht mehr mit ;)
Damit einmal eine "Momentaufnahme" messen ist ansonsten genau die Idee dieses Threads - im Eingangsposting sind die Formeln / Verfahrensweisen beschrieben, wie du aus dieser Momentaufnahme kontinuierlich die aktuelle Wandtemperatur berechnen kannst.
Vielen Dank! Ich werde es mal versuchen, bisher sahen die Ergebnisse ganz brauchbar aus. So ein Teil hat halt fast jeder zu Hause rum liegen, kostet also nichts extra.
Ich werde mich die nächsten Tage mal damit beschäftigen... Deshalb schon mal vorab herzlichen Dank für die ausführlichen und nachvollziehbaren Ausführungen.
Hallo Peter, Danke für die Antwort.
Ich habe ja jetzt schon mal das erste Testsystem mit Raspi NanoCul und 2 Ash2200 aufgebaut und eine entsprechende Routine für den Vergleich der Luftfeuchtigkeiten implementiert. Jetzt wird das mal im keller installiert um zu sehen ob meine Routine den Schaltvorgang des Lüftens Prinzipien startet.
Dann kann ich erst mal testen 👍👍
Im Anschluss würde ich dann mal den Lüfter mit Schaltaktoer verbauen etc.
Leider ist das ganze ca 30km von meinem Wohnort und da muss ich mir noch zusätzlich überlegen ob ich nicht auch noch eine Anbindung über einen GPRS Stick oder ein altes Handy hinbekomme um die Daten aus dem gartenhaus auch von zu Hause aus prüfen und korrigieren zu können. Da finde ich zur Zeit nur wenige Infos bzw. Erfahrungen und Tíos. Ich melde mich aber noch mal wie' läuft ....
Spannendes Projekt 😀😀😀
Frage mich gerade, ob man mit dieser Funktion ein Mini-Gehächshaus betreiben kann (Bei Schimmelgefahr per 5V-Lüfter oder 12V-Lüfter lüften)
https://www.amazon.de/74338-Zimmergew%C3%A4chshaus-38x25x19-l%C3%BCftbarer-Abdeckhaube/dp/B0001IP7EK/ref=pd_sim_86_4?_encoding=UTF8&psc=1&refRID=T8S1ZWZRH5QYWN1NJHQZ
(PS: Gibts bei OBI für 2,99€)
Gruß
Noxx, klar geht das! Nur geht dann nicht der Gewächshauseffekt verloren, wenn du das öfter lüftest? Also SOLL da die Luftfeuchte nicht gerade im "Gammelbereich" liegen? (Ich kenne mich da nicht wirklich aus ;) )
Hallo an alle,
die ersten Tests waren schon mal erfolgreich. Der Raspi kann in der trockenen Hütte hängen, und der ASH2200 im Keller und auch der draussen scheinen guten Empfang zu haben. Das sollte dann also auch für den FS20 Schalter für den Lüfter im Keller gelten.
So nun versuche ich mich gerade am Script für die Entscheidungsfindung Aussenluft reinblasen oder nix tun um Schimmelbildung zu vermeiden.
Nun habe ich im Keller vielleicht ein etwas anderes Problem wie andere:
Wie gesagt ist es nur ein Wochenend"häussle" mit der Toilette und anderen Dingen im Keller, aber man möchte ja auch mal auf den Topf gehen ohne den Schimmel einzuatmen.
Meine Erfahrung ist, dass praktisch alles (!) was sich im inneren des Kellers befindet umgehend Schimmel ansetzt. Auch die grünen Rigips Platten.
--> Es handelt sich also nicht um den Effekt von Wandschimmel aufgrund niedrigerer Wandtemperatur zur Kellerlufttemperatur.
Von daher würde ich erst einmal davon ausgehen, dass mir der simple Vergleich der "Absoluten Feuchtigkeiten" und der Temperaturdifferenz Innen/Aussen eine ausreichend gute Entscheidungshilfe gibt.
--> Vorschlag:
-> Wenn Absolute Luftfeuchtigkeit Aussen < als im Keller und Aussentemperatur mindestens gleich wie im Keller: Lüften.
-> Ansonsten: Nix tun.
Was meint ihr ?
--> Momentan scheitere ich mal wieder grandios an den Perl / FHEM gegebenheiten zum Syntax mit ;; / .... sobald ich was habe, poste ich es mal.
Zitat von: AnonymousHolger am 25 Juni 2017, 22:22:40
Von daher würde ich erst einmal davon ausgehen, dass mir der simple Vergleich der "Absoluten Feuchtigkeiten" und der Temperaturdifferenz Innen/Aussen eine ausreichend gute Entscheidungshilfe gibt.
--> Vorschlag:
-> Wenn Absolute Luftfeuchtigkeit Aussen < als im Keller und Aussentemperatur mindestens gleich wie im Keller: Lüften.
-> Ansonsten: Nix tun.
Würde ich genauso sehen und habe ich an anderer Stelle (noch vor meiner FHEM-Zeit) auch schon mal implementiert: http://www.forum-raspberrypi.de/Thread-haussteuerung-feuchtegesteuerte-kellerlueftung
Vielleicht kannst Du davon ja eine Anregung mitnehmen.
AnonymousHolger, das macht meine (fertige) Funktion shiftRelHumidity quasi in einem Rutsch:
Du rufst die Funktion auf mit: Temperatur Außen, Relative Luftfeuchte Außen, Temperatur Innen
Du erhältst als Ergebnis: Theoretische relative Luftfeuchte der Außenluft innen (Also wenn die Außenluft dann auf Kellertemperatur erwärmt / gekühlt wurde)
Das vergleichst du dann mit der tatsächlichen (gemessenen) Luftfeuchte Innen. Alles dazu ist eigentlich fertig (als Userreading) im ersten Posting. Brauchst dir nur raussuchen, was du möchtest.
LG!
Edit: Die Funktion / Formel geht übrigens auch davon aus, dass die absolute Luftfeuchte der einströmenden Luft gleich bleibt - das ist also physikalisch nichts anderes als der Vergleich der absoluten Luftfeuchtigkeiten innen und außen. Vorteil demgegenüber ist aber, dass man immer in "relevanten" Einheiten bleibt und nur mit relativen Luftfeuchtigkeiten rechnet bzw. gleich in einem Reading hat, wie die relative Luftfeuchte innen jetzt werden würde, wenn man vollständig lüftet. Entsprechend kann man auch Fehlertoleranzen der Sensoren einfacher berücksichtigen und Schwellwerte für 2-Punkt-Regelungen intuitiver setzen.
Und der Vergleich mit einem "Maximalwert" (also Relative Luftfeuchte, ab der es schimmelt) ist dann auch gleich seht einfach, wenn man den noch nachlegen möchte.
Hallo Peter,
ich hab (mal wieder) ein Problem. Ich bekomme immer eine Fehlermeldung und ich weiss nicht warum.
Ich habe in meiner fhem.cfg wie folgt
define ASH2200_Innen CUL_WS 3
define ASH2200_Aussen CUL_WS 5
define Keller.Lueften dummy
define KellerLuefterSchalter FS20 0909 00
Folgender Aufruf läuft Problemlos:
define LueftungsSkript at +*00:01:00 {calcLueftungsStates(34,50,15,70)}
Allerdings wundert mich, dass bei 34°C Aussentemperatur und 50% relH, folgende Werte gelogged werden.
2017-06-27_21:01:43 Keller.Lueften wandTemp 15.0
2017-06-27_21:01:43 Keller.Lueften wandHumidity 15
2017-06-27_21:01:43 Keller.Lueften aussenHumidityEqInnen 151
2017-06-27_21:01:43 Keller.Lueften schimmelfreiMaxHum 72
Darüberhinhaus bekomme ich mit dem Aufruf:
{calcLueftungsStates(ReadingsVal("ASH2200_Aussen","temperature",0),ReadingsVal("ASH2200_Aussen","humidity","100"),ReadingsVal(ASH2200_Innen,"temperature",15),ReadingsVal(ASH2200_Innen,"humidity",90))}
beschert mir immer die Fehlermeldung:
Bareword "ASH2200_Innen" not allowed while "strict subs" in use at (eval 2953) line 1
Das verstehe ich nicht ... der ASH2200_Innen ist doch identisch definiert wie der ASH2200_Aussen :-( ....
Ich habe deine Routinen in die 99_Myutils übernommen und das CalcLueftungsStates folgendermassen angepasst (noch nicht ganz fertig, aber scheint ein Problem zu haben z.b mit der korrekten Berechnung von wandHumidity.
sub calcLueftungsStates($$$$) {
sub calcLueftungsStates($$$$) {
my $aussenTemp = $_[0];
my $aussenHum = $_[1];
my $innenTemp = $_[2];
my $innenHum= $_[2];
##### Neu berechnete Werte
#my $wandTemp = wallSurfaceTemp($innenTemp,$aussenTemp,0.68);
my $wandTemp = $innenTemp;
my $wandHumidity = shiftRelHumidity($innenTemp, $innenHum, $wandTemp);
my $aussenHumidityEqInnen = shiftRelHumidity($aussenTemp, $aussenHum, $innenTemp);
my $schimmelfreiMaxHum = schimmelfreiMaxHum($wandTemp);
my $schimmelGefahr = ($wandHumidity > $schimmelfreiMaxHum);
my $luftZuTrocken = (!$schimmelGefahr && ($innenHum < 40));
my $lueftenSenktLuftfeuchte = ($innenHum > $aussenHumidityEqInnen);
my $entfeuchterAn = ($schimmelGefahr && ($innenHum > 51));
my $entfeuchterAus = (($wandHumidity < ($schimmelfreiMaxHum - 3)) || ($innenHum < 50));
my $KellerLueften = "Keller.Lueften";
##### Alle sinnvollen Werte als Readings setzen
fhem("set $KellerLueften wandTemp ".sprintf("%.1f", $wandTemp));
fhem("set $KellerLueften wandHumidity ".sprintf("%.0f", $wandHumidity));
fhem("set $KellerLueften aussenHumidityEqInnen ".sprintf("%.0f", $aussenHumidityEqInnen));
fhem("set $KellerLueften schimmelfreiMaxHum ".sprintf("%.0f", $schimmelfreiMaxHum));
fhem("setreading $KellerLueften schimmelGefahr ".($schimmelGefahr?"ja":"nein"));
if ($entfeuchterAn) {
fhem("setreading $KellerLueften entfeuchter an");
} elsif ($entfeuchterAus) {
fhem("setreading $KellerLueften entfeuchter aus");
}
}
Da fehlen die Hochkomma:
"ASH2200_Innen"
also
{calcLueftungsStates(ReadingsVal("ASH2200_Aussen","temperature",0),ReadingsVal("ASH2200_Aussen","humidity","100"),ReadingsVal("ASH2200_Innen","temperature",15),ReadingsVal("ASH2200_Innen","humidity",90))}
:o :o :o :o :o :o :o ... tausend mal gelesen und nicht gesehen ..... :P :P :P :P :P :P :P
Danke
Noch ein Fehler in myutils. Für innenTemp und innenHum nimmst du den selben Übergabewert. Für einen der beiden solltest du Index 3 verwenden.
... sooo blind ... danke .. jetzt geht alles und ich geh ans optimieren für meinen Keller :-),.
Ich habe die eine Funktion etwas erweitert, so das mein Raspi an der Stelle sehr viel weniger rechnen muss. Ich hatte das Gefühl, das ich dadurch irgendwie Probleme mit der Last bekomme. Mit der vorgelagerten while Schleife taste ich mich quasi mit größeren Schritten an das Ergebnis ran. Dadurch muss die Berechnung nur noch ~17-20 mal und nicht mehr ~170-200 mal gemacht werden.
sub schimmelfreiMinTemp($$$) {
# Liefert die minimale Temperatur, bei der es - ausgehend von der aktuellen Luftfeuchte im Raum - nicht schimmeln würde.
# Liegt die kälteste Stelle im Raum darüber, besteht keine Schimmelgefahr.
# Liegt die kälteste Stelle im Raum darunter, müsste diese auf die errechnete Temperatur erwärmt werden, so dass es nicht schimmelt.
# Parameter:
# $curTemp - Aktuelle Raumtemperatur in Grad C
# $curHum - Aktuelle rel. Luftfeuchte im Raum in %rH
# $tempLimit (optional) - max. Temperatur, die die Funktion zurückliefert (falls der Rückgabewert z.B. als Heiz-Solltemperatur dient)
my ($curTemp,$curHum,$tempLimit) = @_;
if (!$tempLimit) {$tempLimit = 100;}
my $testT=0;
my $schimmelFrei = 0;
while (($testT+1.0) < $tempLimit && (shiftRelHumidity($curTemp, $curHum, $testT+1.0) < schimmelfreiMaxHum($testT+1.0)))
{
$testT+=1.0;
}
while ($testT < $tempLimit && !$schimmelFrei)
{
$schimmelFrei = (shiftRelHumidity($curTemp, $curHum, $testT) < schimmelfreiMaxHum($testT));
$testT+=0.1;
}
return $testT;
}
Das sollte nicht wirklich zu performanceproblemen führen, denn da passiert quasi nix und das auch nicht sehr oft (im vergleich zur Power eines Raspis) ... aber ich sehe es ein, ich muss da wohl doch mal die formel umstellen und es anständig machen, dann brauchts gar keine schleife ... ;)
Ich hatte jetzt öfter kurze Disconnects meines hmlan gateways. Kann aber auch mit anderen Dingen zusammen hängen. Schaden kann es auf jeden Fall nicht.
Mal ne dumme Frage, aber laut der Anzeige darf ich seit Tagen nicht lüften. Ist das bei euch auch so oder hab ich da noch was falsch?
Warum wird eigentlich bei der Formel ob man lüften darf oder nicht noch eine Differenz von 3 dazugerechnet? Ich meine selbst wenn die Luftfeuchtigkeit "nur" gleich bleibt, sollte man doch aus anderen Aspekten wie z.B. Frischluft lüften können. Oder spricht irgendwas dagegen das ich überlesen/übersehen habe?
Die 3 ist als "Sicherheitsmarge" (in %rH) gedacht, die die Ungenauigkeit in dem ganzen System (Temperaturmessung, Temperaturschätzung, Luftfeuchtemessung) repräsentiert. Du stellst damit genau das ein, was du ansprichst:
- Wenn du noch mehr auf Nummer sicher gehen willst, dass du nicht zu feuchte Luft reinlässt dann positive Werte nehmen bzw. den Wert erhöhen.
- Sonst - für mehr Frischluft wie in deinem Fall - senken bzw. negative Werte nehmen.
Da ich einen Entfeuchter habe, hab ich in dem Userreading einen positiven Wert verwendet - da ich nur dann ne Lüftungsempfehlung möchte, wenn es auch sicher hilft (der Entfeuchter hilft nämlich garantiert, geht aber aus naheliegenden Gründen automatisch aus, wenn ich das Fenster offen habe, und dann sollte das Lüften auch bitte was bringen). Hast du keinen Entfeuchter und willst mehr Frischluft, würde ich den in der Tat vielleicht auf -3 senken.
Ob das bei dir jetzt / dann hinhaut oder ein anderes Problem vorliegt, dazu müsstest du mal mehr Werte posten, dass man mal nachrechnen kann (bzw. rechnest du selbst mal nach).
So, es ist vollbracht ;D ;D ;D ;D ;D
Mein System läuft.
Aktuell habe ich je eine Schaltsteckdose für Lüftung und Entfeuchtet installiert, aber bisher nur den Entfeuchtet angesteuert, Lüfter müsste ich noch besorgen und "verrohren".
Daher schaue ich mir das erst mal mit dem Entfeuchtet an. Aktuell habe ich den Eindruck, dass sich die Möglichkeiten für die Lüftung sehr in Grenzen halten, da die umgerechnete Luftfeuchtigkeit aussen->Keller meistens negativ auf die Raumfeuchte auswirkt.
Das Ganze seit Heute Abend auch noch mit einem UMTS Stick und einer kostenlosen SIM Karte jetzt auch von zu Hause aus zu kontrollieren !!!
Absolut Spitze !!! So kann der Sommerurlaub kommen :-) ....
Vielen Dank Peter für deine tolle Unterstützung !
Jemand einen tipp für einen kleinen 6m2 nassen Gewölbekeller?
Will die Tür zum Keller abdichen. Es gibt einen 30cmx30cm Schacht nach oben .
Soll ich die Luft lieber raus oder rein pusten?
Da musst du vergleichen, ob die Luft im Keller feuchter ist wie draußen. Dann raus pusten.
Gesendet von meinem E6653 mit Tapatalk
Okay Danke nur wenn dann die Tür zum Wohnraum abgedichtet ist woher soll er die Luft bekommen ? Brauche also eher eine zu und abluft?
Jepp. Solltest die Zuluft dann aus einem trockenen Raum ziehen.
Und ja kein Vakuum in den Keller ziehen. [emoji6]
Gesendet von meinem E6653 mit Tapatalk
hmm schwer da wenn ich reinpuste muss ja auch die Luft wieder raus hmmm
In mein Wohnraum soll es nicht da die Luft richtig Muffig stinkt
Du hast doch den Schacht. Puste da die Lust raus
Gesendet von meinem E6653 mit Tapatalk
ja klar aber woher kommt dann die Luft die ich da rauspuste ?
Das war ja auch meine Idee einfach die Suppe rauspusten :D Dann kann ich mir das abdichten auch sparen. Wobei meine Luftfeuchtigkeit hier im Raum auch noch nicht so TOP ist. Bin gerade erst eingezogen.
Aber sicher besser als im Keller.
Aus deinen feuchten Keller,oder?
Gesendet von meinem E6653 mit Tapatalk
@ChrisW
Wenn du die Luft über den Schacht nach aussen pumps oder drückst, dann kannst du doch die Luft aus dem Wohnraum nachströmen lassen.
Ich denke, diese Luft dürfte mit Sicherheit trockener sein, wie die aus dem Keller, oder?
@peterk_de
Bist du schon mit der Modulenwicklung weiter ???
Gruß
Sascha
ZitatWenn du die Luft über den Schacht nach aussen pumps oder drückst, dann kannst du doch die Luft aus dem Wohnraum nachströmen lassen.
was aber vermutlich nichts bringt, weil der Keller vermutlich viel kälter ist :(
In den nächsten 1-2 Jahren wird dort eine Luft-Wärmepumpe reinkommen. Ich denke ich werd auch erstmal die Wandtemperatur usw. erfassen und mal schauen was das script so ausspuckt und erstmal mit Tauspusten versuchen.
also Keller ist 20c bei 60% Luftfeuchte. Wand wird aber viel kälter sein. Kann es leider noch nicht messen. Im Wohnraum hinter der Tür hab ich 21c 62-66% derzeit. Also ob das so gut diese Luft da reizuziehen weiss ich auch nicht.
Andersrum drückt der Keller geruch durch die Tür in den Wohnraum hmmmmmmm
Dann einen Luftentfeuchter mit Kältemittelkompressor.
Gesendet von meinem SM-T560 mit Tapatalk
Ja der ist für die Wohnung gedacht ;) Ich schau mal was ich es dort in den Griff bekomme dann wäre es auch nicht so schlimm diese Lust in den Keller zu ziehen.
60% dürften meiner Erfahrung nach noch nicht riechen. Vielleicht wirklich die viel kälteren Wände ? Der Abluftschacht ist ja hoffentlich innenliegend, sonst würde dort ja schon die Luftfeuchte in Wasser übergehen, also auskondensieren :(
Die Luft im Wohnraum zu trocknen, dann in den Keller zu saugen und über den Schacht auszublasen, halte ich für eine schlechte Idee. Energie fürs Trocknen und Heizen in die Luft stecken und dann rauspusten ? Viel Umwelt- u. Geldbeutelbelastung zur Symptombekämpfung >:(
Ich würde mich daher erst einmal auf den Wohnraum konzentrieren. Wieso schaffst Du es nicht die Luftfeuchtigkeit durch einfaches Lüften zu senken ? Aufsteigende Feuchtigkeit im Mauerwerk ? Sonstige Bauschäden/-mängel ? Beachtest Du (möglichst) nur zu lüften, wenn draußen weniger Wasser in der Luft ist als drinnen(Vergleich von Taupunkttemperaturen) ?
Hi also der Schacht geht durch die außenwand nach draußen. Dort hängt auch viek Kondenzwasser. Auch an den Kabeln an der Decke. Den Keller bekommt man eh nicht trockken aber durch die Türe zieht der Kellermuff immer in dasHaus. Wenn Kamin oder Abzugshaube an ist. Will die Tür auch nicht ganz abdichten da sonst das Problem noch größer wird?
Wohne erst 1-2 Monate hier und hab Aufsteigende Feuchtigkeit im Mauerwerk... Wird erst nächtes Jahr angegangen das Thena. Heizung läuft auch erst nächste Woche. Daher ist unklar ob Heizen und Lüften klappt.
Hab die Formel und Prüfungen vom ersten Post. Die genaue Wandtemperatur beobachte ich noch. Da die Wände zu 1/4 im Erdreich sind ... derzeit grob Raum 20c Wand 15c.
Hallo,
ich würde nun auch gerne auf den Lüftungszug aufspringen. Dazu habe ich mir einen Winmatic und einen Luftentfeuchter gekauft Leider klappt da irgendwas noch nicht so, wie ich es gerne hätte. Könnte sich jemand mal meine userReadings ansehen und sagen, wo der Fehler ist? Ich hänge auch noch meine myutils an und ein Ergebnis der Readings.
lueftenMoeglich {(ReadingsVal("K2_TF","humidity","N/A") >(shiftRelHumidity(ReadingsVal("KS300","temperature","30"),ReadingsVal("KS300","humidity","100"), ReadingsVal("K2_TF","temperature","N/A") )+3))?"ja":"nein" }, \
wandTemp { sprintf("%.1f", wallSurfaceTemp(ReadingsVal("K2_TF","temperature",15),ReadingsVal("KS300","temperature",0),0.68)) }, \
wandHumidity { sprintf("%.1f", shiftRelHumidity( ReadingsVal("K2_TF","temperature",17), ReadingsVal("K2_TF","humidity",90), wallSurfaceTemp( ReadingsVal("K2_TF","temperature",15), ReadingsVal("KS300","temperature",0), 0.68) ) ) }, \
wallSurfaceTemp( ReadingsVal("K2_TF","temperature",15), ReadingsVal("KS300","temperature",0), 0.68) ) ) }, \
aussenHumidityEqInnen {sprintf("%.1f",shiftRelHumidity(ReadingsVal("KS300","temperature","30"),ReadingsVal("KS300","humidity","100"), ReadingsVal("K2_TF","temperature","N/A")))}, \
schimmelfreiMaxHum { sprintf("%.1f",schlimmelfreiMaxHum(wallSurfaceTemp(ReadingsVal("K2_TF","temperature",15),ReadingsVal("KS300","temperature",0),0.68))) }, \
schimmelGefahr {(shiftRelHumidity(ReadingsVal("K2_TF","temperature",17),ReadingsVal("K2_TF","humidity",90), wallSurfaceTemp(ReadingsVal("K2_TF","temperature",15), ReadingsVal("KS300","temperature",0),0.68))>schlimmelfreiMaxHum(wallSurfaceTemp(ReadingsVal("K2_TF","temperature",15),ReadingsVal("KS300","temperature",0),0.68))?"ja":"nein")}, \
Hier nun mal die myutils:
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
# Enter you functions below _this_ line.
sub shiftRelHumidity($$$)
# Uses a pair of relative humidity and temperature ($r1, $T1) to calculate the relative
# humidity on spots with same absolute humidity of the air but different temperature $T2.
#
# Useful to calculate the relative humidity near the surface of cold walls. Therefore, use the rel.
# humidity of the room ($r1 in percent), the room Temperature ($T2 in degrees of C) and the temperature
# of the surface of the wall ($T2 in degrees of C). Returns the rel. humidity on the surface in pct then.
{
my ($T1, $r1, $T2) = @_;
my $r2 = ($r1 * 10**((7.62*$T1)/(234.175+$T1))*(273.15+$T2)) / ( 10**((7.62*$T2)/(234.175+$T2))*(273.15+$T1));
return $r2;
}
sub schimmelfreiMaxHum($)
# Maximal erlaubte relative Luftfeuchte (in 0...100%) in Oberflächennähe, so dass kein Schimmel-Myzelwachstum
# Auftritt. Annahme: optimales Substrat und Myzelwachstum und Sporenwachstum für alle im
# Bau auftretenden Pilze unterbunden, d.h. keine biol. Aktivität.
# Parameter: Temp. der Oberfläche in Grad Celsius
#
{
my ($Temp) = @_;
if ($Temp <= 0) {return 100;}
my $rHmax = 70+20.1*(0.87**$Temp);
return $rHmax;
}
sub schimmelfreiMinTemp($$$) {
# Liefert die minimale Temperatur, bei der es - ausgehend von der aktuellen Luftfeuchte im Raum - nicht schimmeln würde.
# Liegt die kälteste Stelle im Raum darüber, besteht keine Schimmelgefahr.
# Liegt die kälteste Stelle im Raum darunter, müsste diese auf die errechnete Temperatur erwärmt werden, so dass es nicht schimmelt.
# Parameter:
# $curTemp - Aktuelle Raumtemperatur in Grad C
# $curHum - Aktuelle rel. Luftfeuchte im Raum in %rH
# $tempLimit (optional) - max. Temperatur, die die Funktion zurückliefert (falls der Rückgabewert z.B. als Heiz-Solltemperatur dient)
my ($curTemp,$curHum,$tempLimit) = @_;
if (!$tempLimit) {$tempLimit = 100;}
my $testT=0;
my $schimmelFrei = 0;
while ($testT < $tempLimit && !$schimmelFrei) {
$schimmelFrei = (shiftRelHumidity($curTemp, $curHum, $testT) < schimmelfreiMaxHum($testT));
$testT+=0.1;
}
return $testT;
}
sub wallSurfaceTemp($$$)
# Estimates the temperature of the inner wall surface given the outside Temperature in degrees of C as $Tinside,
# the outdoor-temperature $Toutside in degrees of C and an insulation Factor $Kinsulation with K = 1 (theoretical perfect insulation, e.g. vacuum) and
# K = 0 (no insulation at all, means: less than a sheet of paper). You have to calculate K on your own by measuring inside-, outside-, and wall-temperature,
# preferably by averaging multiple measurements on cold days with constant heating of the room.
{
my ($Tinside, $Toutside, $Kinsulation) = @_;
my $Tsurface = ($Tinside * $Kinsulation) + ($Toutside * (1 - $Kinsulation));
return $Tsurface;
}
Und das Problem ist, dass ich im Reading WandTemp nur ein Ergebnis bekomme, wenn es ganz allein im UserReading steht und bei wandhumidity folgende Fehlermeldung erhalte:
Error evaluating K2_TF userReading wandHumidity: syntax error at (eval 334984) line 2, near ") ) " Unmatched right curly bracket at (eval 334984) line 2, at end of line
Und irgendwie raffe ich das nicht. Vielleicht hat ja einer vn euch eine Idee
Das löst vielleicht nicht dein Problem, aber folgende Dinge sind mir auf die Schnelle aufgefallen. Deine Userreadings sollten vielleicht gefiltert werden, wenn in deinem Device mehrere Dinge geupdatet werden. Sonst wird jede der Funktionen mehrmals ausgeführt. Beispiel: dein Device hat Feuchtigkeit und Temperatur und beide werden geupdatet, dann werden auch deine userreading funktionen 2x aufgerufen. Ich habe das so behoben:
schimmelFreiMinTemperature:corrHumidity.*
Dann sind bei einigen der Funktionen (Zeile 1 und 5) der Defaultwert mit "N/A" oder "30" angegeben (3ter Wert bei ReadingsVal). Das wird dann als String behandelt und macht Probleme, insbesondere wenn du dann Operationen wie > verwendest. Ich habe N/A durch eine Zahl ersetzt und "" bei den Zahlen entfernt.
Ansonsten installier dir mal notepad++ auf deinem Rechner, kopiere die einzelnen Zeilen da rein und schau dir ganz genau die Klammerung an.
Falls sich noch jemand aus der Temperatur und der relativen Feuchtigkeit die absolute Feuchtigkeit ausrechnen möchte, dann wäre das eine der möglichen Formeln dazu.
sub absHumidity($$)
{
my ($curTemp,$curHum) = @_;
return (6.112 * exp(1)**((17.67 * $curTemp)/($curTemp + 243.5)) * $curHum * 18.02) / ((273.15 + $curTemp) * 100.0 * 0.08314);
}
Daraus ergibt sich dann:
Lüften möglich wenn absolute Feuchtigkeit innen größer ist als außen. Im anderen Fall sollte man die Fenster eher geschlossen halten.
@ChrisW:
Den Thread will ich eigentlich nicht missbrauchen, da schon OT aber hier meine Antwort zu deinem Keller.
Deinen 6m² Gewölbekeller musst Du belüften und um mit der Temperatur nicht ins Bodenlose zu fallen und dann erst Recht den Taupunkt zu unterschreiten, über einen Wärmetauscher die Wärme zurückgewinnen.
Die Ab- und Zuluft muss direkt von aussen kommen, da Du einen Schacht 30cm x 30cm hast, kannst Du da locker zwei DN 100 Rohre reinlegen und nach aussen führen.
Der Schacht muss aber zwingend von aussen Luftdicht sein, so das nur die Luft aus den Rohren raus/rein geht.
ZitatDen Keller bekommt man eh nicht trockken aber durch die Türe zieht der Kellermuff immer in dasHaus. Wenn Kamin oder Abzugshaube an ist.
Ein Kamin zieht richtig viel Luft wenn er bollert und eine Abzugshaube mit Aussenrohr auch einiges. Mindestens bei Neubauten macht mittlerweile der Schornsteinfeger Auflagen oder verlangt bestimmte Vorrichtungen.
Den Kamin an und dann noch die Abzugshaube auf Volldampf beim kochen zieht die ganzen Kamin Abgase IN das Haus, wenn es keine Zwangs Zuluft gibt! Viel Spass mit Kohlenmonoxid.
Ich habe ein 100 Jahre altes Haus mit einem 75m² Kalt-Keller mit schlechter und sehr dünner Bodenplatte (3 - 5 cm). Wenn es mal lange richtig ordentlich regnet gab es immer leichte Flecken auf dem Kellerfußboden.
Ich wollte sowieso mal meinen Selbstbau Wärmetauscher vorstellen, da sicher anderes auch soetwas brauchen und nicht alle Fehler selbst machen müssen.
Diese ganze Wärmetauscher Belüftungsanlage ist bei mir nur für den Keller und nicht wie im Neubau für's ganze Hause.
Ich habe mir einen kompletten Wärmetauscher selber gebaut. Das Gehäuse selber konstruiert und dann die Platten online als U Formen bestellt und vernietet, den Plattenwärmetauscher von der Firma Klingenburg gekauft und die Rohr Lüftungsventilatoren von Helios.
Je zwei Filtergehäuse an den Rohranfängen um zuerst mit einen Grobfilter und dann einen F7 Feinfilter die Luft zu reinigen bevor Sie durch die Rohre zum Wärmetauscher gehen
Viele Meter DN 100 HT Rohr und auch viele Meter Wärmeisolierung für die DN 100 Rohre die zwischen Aussen und dem Wärmetauscher verlaufen, weil sonst Kondenzwasser daran sein würde. Die innen liegenden Rohre nach dem Wärmetauscher brauchen keine Isolierung.
Nachträglich je einen 1 Meter Schalldämpfer vor die Rohrventilatoren gesetzt, da war sonst ein ständiges Turbinenbrummen selbt im Erdgeschoss zu hören.
Die 100 x 100 cm Wärmetauscher hatten das Stück 52,- EUR plus Versand gekostet (direkt vom Hersteller). Im nächsten Leben würde ich nicht 2 hintereinanderschalten, sondern einen großen 200 x 200 cm nehmen. Aber auch nur weil dann das Gehäuse leichter zu bauen ist. Ansonsten glaube ich noch heute, mit meiner "Serienschaltung" eine leicht bessere Effizienz zu erzielen.
Im Sommer muss ich aber mit einem Luftentfeuchter arbeiten, das geht leider nicht anders vom Feuchteeintrag her. Ich hoffe wenn in X Jahren der komplette Kellerfußboden neu gemacht wurde, ist der dicht und Ruhe im Keller.
Mittlerweile habe ich auch 2 Heizkörper im Keller, die zumindest eine Mindesttemperatur garantieren.
Der Wärmetauscher läuft ab Null Grad und niedriger auf sehr geringem Durchsatz und so komme ich über den Winter hinweg im kältesten Raum auf ca. 17°C mit ca 60% rel. LF (Ohne Heizkörper waren es vorher 15 °C).
Da kein Waschbecken in der Nähe steht, sammle ich das Wasser unter dem Wärmetauscher den Winter über in einem riesigen 30 Liter Tapetenkleister Eimer und sehe somit was auskondensiert und nicht rausgepustet wird. (Der Luftentfeuchter hatte vorher sein 3 Liter Gefäß in max. 2 Tagen voll gehabt und ist jetzt mit einem Ablaufschlauch verbunden.)
Falls Interesse besteht, kann ich das gesamte Projekt ja mal mit Bildern dokumentieren.
P.S.
Kellermuff ist nicht gleich Kellermuff.
Um hier noch mehr abzudriften, unser Kellermuff hat sich im Nachhinein als ganz leichte undichte Erdgasleitung entpuppt. Seit der Erneuerung ist der Kellermuff weg.
Es war nicht der trotzdem feuchte Keller.
Der Schornsteinfeger hatte es bei seiner jährlichen Messung nie bemerkt, obwohl in der Rechnung steht "Rohrleitung geprüft", erst die Gaswerke haben es gemessen. Das ist aber eine andere Story gewesen und bei diesem Haus gibt es viele Stories ..... ;D
Es gibt doch einen Projektthread, kannst du das da nicht hineinstellen? Gibt bestimmt Interessenten.
Cool wobei der Keller ruhig feucht sein kann ;) Da kann nicht mehr viel "kkaputt" gehen. Will halt nur den Geruch raus bekommen. Aber wenn ich die Tür dicht mache dann kann man den Keller fast gar nicht mehr betreten ;) Werd die Tür Dicht machen und je nach dem Rein/Raus Pusten bzw. 2 Rohre machen
@Patrick.S
ZitatFalls Interesse besteht, kann ich das gesamte Projekt ja mal mit Bildern dokumentieren.
Bitte, bitte, bitte..... Höchst interessant. Insbesondere Details zu den Lüftern u. Wärmetauschern(ich wollt immer mal welche aus ner alten Gastherme oder Autokühler für Luft-Wasser-Tauschung ausprobieren).
Done! https://forum.fhem.de/index.php/topic,77548.0.html (https://forum.fhem.de/index.php/topic,77548.0.html)
Hallo,
ich habe ein Problem mit dem all in one reading aus dem ersten Beitrag. Da steht folgendes:
schimmelGefahr {(shiftRelHumidity(ReadingsVal("Raumthermometer","temperature",17),ReadingsVal("Raumhygromometer","humidity",90), wallSurfaceTemp(ReadingsVal("Raumthermometer","temperature",15), ReadingsVal("Aussenthermometer","temperature",0),0.68))>schimmelfreiMaxHum(wallSurfaceTemp(ReadingsVal("Raumthermometer","temperature",15),ReadingsVal("Aussenthermometer","temperature",0),0.68))?"ja":"nein")}
Ich bekomme jedoch immer die Meldung:
Error evaluating K2_TF userReading schimmelGefahr: Undefined subroutine &main::schlimmelfreiMaxHum called at (eval 310623) line 1.
Kann mir da jemand helfen?
Danke Joe
Hast du die subroutinen in der myutils angelegt?
Gesendet von meinem E6653 mit Tapatalk
Also ich denke schon, dass ich das richtig eingetragen habe.
Oben habe ich ja nur die Zeile aus dem ersten Beitrag kopiert. Mein komplettes UserReading schaut so aus:
lueftenMoeglich {(ReadingsVal("K2_TF","humidity","N/A") >(shiftRelHumidity(ReadingsVal("KS300","temperature","30"),ReadingsVal("KS300","humidity","100"), ReadingsVal("K2_TF","temperature","N/A") )+3))?"ja":"nein" }, wandTemp { sprintf("%.1f", wallSurfaceTemp(ReadingsVal("K2_TF","temperature",15),ReadingsVal("KS300","temperature",0),0.68)) }, wandHumidity { sprintf("%.1f", shiftRelHumidity( ReadingsVal("K2_TF","temperature",17), ReadingsVal("K2_TF","humidity",90), wallSurfaceTemp( ReadingsVal("K2_TF","temperature",15), ReadingsVal("KS300","temperature",0), 0.68) ) ) }, schimmelGefahr {(shiftRelHumidity(ReadingsVal("K2_TF","temperature",17),ReadingsVal("K2_TF","humidity",90), wallSurfaceTemp(ReadingsVal("K2_TF","temperature",15), ReadingsVal("KS300","temperature",0),0.68))>schlimmelfreiMaxHum(wallSurfaceTemp(ReadingsVal("K2_TF","temperature",15),ReadingsVal("KS300","temperature",0),0.68))?"ja":"nein")}
Wobei eben alles geht, bis auf die Schimmelgefahr mit der oben genannten Fehlermeldung.
Hier nochmal nur das Reading für die Schimmelgefahr, damit es besser lesbar ist:
schimmelGefahr {(shiftRelHumidity(ReadingsVal("K2_TF","temperature",17),ReadingsVal("K2_TF","humidity",90), wallSurfaceTemp(ReadingsVal("K2_TF","temperature",15), ReadingsVal("KS300","temperature",0),0.68))>schlimmelfreiMaxHum(wallSurfaceTemp(ReadingsVal("K2_TF","temperature",15),ReadingsVal("KS300","temperature",0),0.68))?"ja":"nein")}
Hallo, siehe dir bitte noch einmal genau deine Fehlermeldung an!
ZitatError evaluating K2_TF userReading schimmelGefahr: Undefined subroutine &main::schlimmelfreiMaxHum called at (eval 310623) line 1.
laut Fehlermeldung lautet deine subroutine
schlimmelfreiMaxHumIn dem Beitrag #101 lautet die subroutine aber sub
schimmelfreiMaxHum($)
Also schlimmelfrei <> schimmelfrei.
Viele Grüße von Detlev
Hallo Detlev,
danke für die Hilfe nun geht es. Kann das vielleicht dann ein moderator in diesem beitrag ebenfalls ändern, um zukünftige Probleme zu vermeiden?
https://forum.fhem.de/index.php/topic,29773.msg563565.html#msg563565
Vielen vielen Dank
Jens
Argh, sorry für dieses blöde "L" - das war mein Fehler am Anfang, den mir irgendeine Autokorrektur eingebrockt hatte. In den Beiträgen von anderen, wo die alte, falsche Version zitiert wurde, kann ich es aber leider nicht korrigieren, also am besten aus dem ersten Post des Threads alles rauskopieren ;(
Moin,
ist ja soweit kein Problem. Die Lösung war ja zu finden und wer in diesen Tread schaut, findet nun ja auch alles was er braucht. Ich habe nun alles so eingebaunden, wie ich es mir für eine effiziente Lüftung vorstelle.
Hier mal meine Automatisierung. Als Hardware habe ich folgendes: Außenwetterstation KS300, Temperatur- Luftfeuchtesensor HMS100TF, Winmatic, Hmematic Zwischenstecker für einen Aktobis WDH-520HB Luftentfeuchter.
define K2.Lueften.Automatik DOIF ([K2_TF:schimmelGefahr] eq "ja" and [K2_TF:lueftenMoeglich] eq "ja") (set K2_Fenster_02 level 100 ignore 20, set K2_Entfeuchter off) DOELSEIF ([K2_TF:schimmelGefahr] eq "nein" and [K2_TF:lueftenMoeglich] eq "nein") (set K2_Fenster_02 level 0 0 20, set K2_Entfeuchter off) DOELSEIF ([K2_TF:schimmelGefahr] eq "ja" and [K2_TF:lueftenMoeglich] eq "nein") (set K2_Fenster_02 level 0 0 20, set K2_Entfeuchter on) DOELSEIF ([K2_TF:schimmelGefahr] eq "nein" and [K2_TF:lueftenMoeglich] eq "ja") (set K2_Fenster_02 level 0 0 20, set K2_Entfeuchter off)
attr K2.Lueften.Automatik room Kind_2
Klappt soweit ich das bis jetzt beurteilen kann sehr gut. Nun müsste man noch die Heizung verbrauchsoptimiert und sinnvoll in das ganze integrieren... Das wird dann wohl der nächste Schritt.
Danke schonmal für eure Hilfe.
Lieben Gruß
Hallo Peter,
vielen Dank für diese ausgezeichnete theoretische Einführung in das Thema "Richtiges Lüften".
Ich möchte die Theorie jetzt überführung in mein Praxis-Beispiel Bad mit ~5qm Fläche und ~12m^3 Raumvolumen.
In diesem Bad befindet sich 1 Fenster, 1 Lüfter (Abluftventilator) mit max. 118m^3/h, 1 Schalter mit Temperatur- und Feuchtigkeitssensor, 1 zusätzliche Sensor zur Ermittlung der Temperatur und Feuchtigkeit im Raum.
Meine Annahme ist, dass beide Sensoren die rel. Luftfeuchtigkeit messen.
Die Steuerung erhält die Werte der Aussentemperatur und rel. Luftfeuchtigkeit über Wetter-Services (z.B. OpenWeatherMap).
Die Steuerung soll jetzt folgende Aufgabe erfüllen:
1. Einschalten des Lüfters
2. Anzeige ob Lüften durch Fenster öffnen notwendig bzw. sinnvoll ist
Hier schließt sich die erste Frage an: Wann soll der Lüfter einschalten?
Soweit ich das verstanden habe ist es nicht ausreichend, die absolute Luftfeuchtigkeit von Raum mit Aussen zu vergleichen und den Abluftventilator einzuschalten, wenn die absolute Luftfeuchtigkeit Aussen kleiner ist.
Und muss hier berücksichtig werden, woher die Luft kommt, die im Bad ausgetauscht werden soll?
Im Bad kann diese Zuluft ja nur "passiv" über ein geöffnetes Fenster in einem anderen Raum oder, wenn kein Fenster geöffnet ist, aus der Luft der anderen (anliegenden) Räume erfolgen. Die Annahme hier ist, dass es nicht sinnvoll ist, das Badezimmer zu öffnen wenn gleichzeitig der Lüfter läuft.
Und dann stellt sich die Frage: Wie lang soll der Lüfter laufen?
Ist hier die Anwendung der einfache Gleichung Laufzeit = Raumvolumen / max. Abluftleistung sinnvoll?
THX
Thomas
Ich habe beides am Laufen. Sowohl die hier beschriebenen Formeln, als auch die absolute Luftfeuchte innen und außen. Für mein Empfinden läuft beides aufs selbe hinaus. Ich gucke z.b. auf die relative Feuchtigkeit im Raum und mache nichts solange sie unter 55% liegt. Wenn sie darüber liegt und die absolute Feuchtigkeit innen höher als außen ist (der Unterschied sollte signifikant sein, sonst lohnt es nicht) wird zyklisch eine Lüftungsempfehlung über Lautsprecher ausgegeben. Wenn jemand ein Fenster öffnet und die absolute Feuchte ist außen höher als innen und innen liegt die rel. Feuchte über 55% wird eine Warnung über Lautsprecher ausgegeben.
In meinem Bad läuft ein geschlossenes System. Der Abluftlüfter hat 2 Stufen. Stufe 1 läuft immer. Stufe 2 wird aktiv, wenn Das Licht für mind. 45s angeschaltet ist und der Lüfter läuft 20min nach auf der hohen Stufe. Darüber hinaus hat der Lüfter einen eigenen Feuchtigkeitssensor und schaltet automatisch auf Stufe 2, wenn diese 55% übersteigt. Damit fahre ich im Bad (das kein eigenes Fenster besitzt) seit Jahren gut.
Zitat von: cmonty14 am 23 Dezember 2020, 09:44:42
Hier schließt sich die erste Frage an: Wann soll der Lüfter einschalten?
Soweit ich das verstanden habe ist es nicht ausreichend, die absolute Luftfeuchtigkeit von Raum mit Aussen zu vergleichen und den Abluftventilator einzuschalten, wenn die absolute Luftfeuchtigkeit Aussen kleiner ist.
Und muss hier berücksichtig werden, woher die Luft kommt, die im Bad ausgetauscht werden soll?
Im Bad kann diese Zuluft ja nur "passiv" über ein geöffnetes Fenster in einem anderen Raum oder, wenn kein Fenster geöffnet ist, aus der Luft der anderen (anliegenden) Räume erfolgen. Die Annahme hier ist, dass es nicht sinnvoll ist, das Badezimmer zu öffnen wenn gleichzeitig der Lüfter läuft.
Ja, genau richtig beobachtet. Du musst natürlich davon ausgehen, dass der Lüfter kaum Außenluft, sondern eher die Luft aus dem Raum vor dem Bad ansaugt (es sei denn du hast sehr alte, undichte Fenster im Bad). Hier kann die Luft natürlich z.B. schon viel feuchter sein als die Außenluft. Das heißt, eine gute Näherung wäre zu prüfen ob die rel. Luftfeuchte vor dem Bad kleiner ist als im Bad - dann bringt der Lüfter etwas. Da das Bad aber meistens eine andere Temperatur hat als z.B. ein Flur davor, kannst du dir mit meiner Funktion auch ausrechnen, wie hoch die rel. Luftfeuchte der Flurluft im Bad wäre:
{shiftRelHumidity(ReadingsVal("ThermometerVorBad","temperature",""),ReadingsVal("ThemometerVorBad","humidity",""),ReadingsVal("ThermometerImBad","temperature",""))}
Natürlich kannst du auch die absolute Feuchte vor dem Bad mit der im Bad vergleichen. Wie mumpitzstuff richtig schrieb, ist das im Prinzip das gleiche, nur sind es andere Einheiten, mit denen man wie ich finde nicht so schön was anfangen kann (z.B. zeigt die kein Wandthermostat direkt an und das Schimmelwachstum hängt auch nicht direkt davon ab, sondern von der rel. Luftfeuchte).
Diesen Vergleich gilt es bei dir dann immer zu tun, wenn das Fenster zu ist. Es ergäbe sich also folgende Bedingung für den Lüfter:
IF (Fenster zu) UND (Schimmelgefahr, wie im Ausgangsposting beschrieben) UND (Badfeuchte > Flurfeuchte, wie oben beschrieben) --> Lüfter an
ELSE --> Lüfter aus
Bevorzugt sollte man natürlich Lüften, dann kommt die frische Luft direkt dorthin wo sie soll und nicht durch irgendwelche Ritzen im Haus quer durch alle Räume.. Die Bedingung für eine Meldung, bitte das Fenster zu öffnen, findest du auch im Ausgangsposting - die hängt ja bei dir auch nur von der Außenluft ab.
ZitatUnd dann stellt sich die Frage: Wie lang soll der Lüfter laufen?
Ist hier die Anwendung der einfache Gleichung Laufzeit = Raumvolumen / max. Abluftleistung sinnvoll?
Diese Formel ist gerade in Feuchträumen ziemlich unsinnig, denn sowohl z.B. an der Wand der Dusche/Badewanne als auch in Handtüchern bleibt nach der Benutzung massig Feuchtigkeit, die erstmal noch komplett verdunstet. Mach es über mein Schimmelgefahr-Reading aus dem Ausgangspost und steuere danach den Lüfter, ist viel genauer.
ZitatWenn jemand ein Fenster öffnet und die absolute Feuchte ist außen höher als innen und innen liegt die rel. Feuchte über 55% wird eine Warnung über Lautsprecher ausgegeben.
Die 55% sind aber gerade im Sommer manchmal nicht zu schaffen. Ich würde, bei entsprechend vorhandener Sensorik, das schon adaptiv und dadurch etwas sparsamer machen - siehe Ausgangsposting. Die 55% findet man in der Literatur oft, aber das ist n pauschaler Behelfswert der viele vereinfachende Annahmen macht, die ein FHEMler eigentlich nicht machen muss ;-)
Hallo,
zunächst vielen Dank für die Antworten.
Im initialen Posting finde ich dieses Coding:
lueftenMoeglich {(ReadingsVal("Raumhygromometer","humidity","N/A") >(shiftRelHumidity(ReadingsVal("Aussenthermometer","temperature","30"),ReadingsVal("Aussenthermometer","humidity","100"), ReadingsVal("Raumthermometer","temperature","N/A") )+3))?"ja":"nein" }
Könntest du bitte dieses Coding erläutern?
Ich kann es nicht richtig interpretieren und möchte es nicht einfach abtippen bevor ich es anwende.
THX
Hier wird die relative Luftfeuchte innen (Device Raumhygrometer, Reading humidity) mit der theoretischen Luftfeuchte verglichen, die die Außenluft drinnen jetzt gerade hätte (shiftRelHumidity(...)) - dabei wird berücksichtigt, dass die reingelassene Außenluft auf Raumtemperatur erwärmt oder abgekühlt wird (Device Raumthermometer, Reading temperature) und sich dabei ihre relative Luftfeuchte ändert.
Ist diese gedachte relative Luftfeuchte der Außenluft bei Raumtemperatur kleiner als die aktuelle Raumluftfeuchte, ergibt die umschließende Bedingung ,,Ja, Lüften ist möglich". Dabei wird eine Messungenauigkeit von 2*1,5% rH angenommen, was der typischer elektronischer Hygrometer entspricht (daher die + 3).
Das ist im Prinzip genau das gleiche wie der Vergleich der absoluten Luftfeuchte innen und außen, nur in anderen Einheiten.
Hallo!
Vielen Dank für die Aufarbeitung und die Formeln! Finde ich sehr hilfreich, auch wenn ich jetzt nicht so tief eingestiegen bin.
Ich habe das nun alles übernommen und möchte im Waschraum (Keller) eine Lüftungsempfehlung.
Ich habe gestern an der Wand etwas Schimmel entdeckt...und gelüftet wird dort immer wieder falsch.
Also reicht ja eigentlich ein simples DOIF:
( [MQTT2_zigbee_Temp_Waschraum:schimmelGefahr] eq "ja"
and [MQTT2_zigbee_Temp_Waschraum:lueftenMoeglich] eq "ja"
and [Fenster_Keller_Waschraum] eq "Zu"
)(Alarm("Fenster öffnen"))
DOELSEIF (
[MQTT2_zigbee_Temp_Waschraum:lueftenMoeglich] eq "nein"
and [Fenster_Keller_Waschraum] eq "Offen"
)
(
(Alarm("Fenster schließen"))
)
Oder habe ich das falsch verstanden?
Wo ist der Unterschied zwischen "lueftenMoeglich" und dem DOIF:
define di_bad.luftentfeuchter DOIF ([bad.thermometer:wandHumidity] > ([bad.thermometer:schimmelfreiMaxHum] + 3)) (set bad.luftentfeuchter_Sw on) DOELSEIF ([bad.thermometer:wandHumidity] < [bad.thermometer:schimmelfreiMaxHum]) (set bad.luftentfeuchter_Sw off)
lueftenMoeglich {(ReadingsVal("Raumhygromometer","humidity","N/A") >(shiftRelHumidity(ReadingsVal("Aussenthermometer","temperature","30"),ReadingsVal("Aussenthermometer","humidity","100"), ReadingsVal("Raumthermometer","temperature","N/A") )+3))?"ja":"nein" }
Wenn ich es richtig verstehe, wird ja beim "lueftenMoeglich" nicht die Wandtemperatur berücksichtigt?
Danke!
Gruß
Bismosa
Hi bismosa,
das Userreading lueftenMoeglich prüft nur, ob die Luft, die grad reinkommen würde, trockener ist als die, die schon im Raum ist. Es wird quasi ausgerechnet, welche relative Luftfeuchte die Außenluft bei deiner aktuellen Raumtemperatur haben würde - und wenn das niedriger ist als die tatsächlich im Raum gemessene relative Luftfeuchte, dann ist "Lüften möglich". Ist das gleiche wie der Vergleich der absoluten Luftfeuchtigkeit innen und außen, nur kann man so sehr nett Toleranzen / Messungenauigkeiten in der Einheit %rH (statt in g/qm oder so bei absoluter Luftfeuchte) einbauen.
Das DOIF di_bad.luftentfeuchter macht was ganz anderes, das ist unabhängig von der Außenluft und steuert einen Kompressor-Luftentfeuchter, der nur umwälzt und Wasser rauszieht. Der soll ausgehen, wenn die kälteste Stelle im Raum trocken genug ist - dafür brauchst du dann natürlich die Wandtemperatur.
Dein DOIF sieht soweit ich das überblicken kann gut aus!
LG Peter
Hallo!
Ich glaube ich habe es nun verstanden :) Danke für die Erklärung.
Dann werde ich mir jetzt Gedanken machen, ob ich einen Lüfter oder einen Fensteröffner einbaue um die Feuchtigkeit aus dem Raum zu bekommen :)
Gruß
Bismosa
Zumindest bei mir hilft vor allem im Frühjahr/Sommer oft nur noch ein Entfeuchter. Die Luftfeuchtigkeit ist draussen einfach so hoch, dass ich die Feuchtigkeit in der Wohnung nicht mehr nur durch Lüften auf ein unbedenkliches Niveau runter bekomme. Ein Lüfter oder Fensteröffner würde aber eine geringere äußere Luftfeuchtigkeit benötigen. Bevor du also große Investitionen tätigst, solltest du dir das Ganze mal im Sommer ansehen.
PS: Ich habe weiterhin festgestellt, das die absolute Luftfeuchtigkeit in Bodennähe höher ist als z.b. auf einem Sideboard in 1m Höhe (liegt auch vielleicht an der Deckenhöhe von über 3m bei mir). Zumindest bei mir ist deshalb auch die Höhe entscheidend, in der das Messgerät steht.
Hallo!
Danke für den Tipp. Ich sehe das aber eher unkritisch. Insgesamt ist alles trocken...außer in den Feuchträumen (Bad, Waschraum im Keller).
Gerade im Keller wird nicht gerne gelüftet...da es ja eh schon recht kühl ist. Dann läuft da auch noch ständig der Trockner und sorgt für zusätzliche Feuchtigkeit...
Da macht es dann schon Sinn, wenn man eine Automatik einbaut.
Viel investieren möchte ich da nicht...vermutlich reicht eine selbst gedruckte Variante schon aus:
https://pinshape.com/items/21306-3d-printed-window-opener
Da fehlt dann nur noch die Ansteuerung...könnte also ein größeres Projekt werden. :)
Gruß
Bismosa
bismosa, klingt nach einem betagten Kondenstrockner der ordentlich Wasser in den Raum leakt? Dann könnte es in deinem Raum langfristig wesentlich wirtschaftlicher sein, den gegen einen modernen mit Wärmepumpe zu tauschen, als in eine (im Winter auskühlende und im Sommer oft nutzlose) Zwangslüftung zu investieren. Feuchte, die gar nicht erst entsteht, musst du nicht energieaufwändig wieder rausbefördern. Und die nebenbei erheblichen gesparten Trockner-Energiekosten kannst du dann, falls überhaupt noch nötig, in den Betrieb eines Raumluftentfeuchters investieren. Einen kalten Keller zu lüften ist in D leider die meiste Zeit des Jahres nicht sonderlich hilfreich, da schließe ich mich mumpitzstuff an ;-(
Hallo!
Nein, wir haben schon einen Wärmepumpentrockner. Trotzdem wird es in dem Raum bei Benutzung immer "Feuch-Warm".
Ob die Feuchtigkeit aus dem Trockner (darf ja eigentlich nicht) oder aus der generell erwärmten Kellerluft kommt...keine Ahnung.
Ich vermute aber eher letzteres. Gelegentlich werden in dem Raum auch einzelne Wäschestücke an der Luft getrocknet.
Messergebnisse habe ich noch nicht (Sensor gerade erst in den Raum gehängt, damit ich die Lüftungsempfehlung bekomme)
Richtig lüften und Heizen...ja eine Wissenschaft :) Aber dank der Formeln und Ausarbeitung hier und die Lüftungsempfehlung die sich daraus ergibt wesentlich einfacher! Danke!
Gruß
Bismsoa
Hallo Peter,
vielen Dank für die ausführliche Beschreibung und die Skripte hier, echt super 8)
Ich hab mal eine Frage: Ich habe dein Skript calcLueftungsStates
für die Auswertung verwendet und für mich angepasst, da ich keine Luftgütesensoren habe habe ich den Teil entfernt. Habe nun aber das Problem das er das schliessenEmpfohlen
irgendwie zur Zeit nicht richtig setzt. Habe Hier mal einen Auszug aus meinem Skript:
my $schliessenEmpfohlen;
if ($luftfeuchteSchliessenEmpfohlen && $tempSchliessenEmpfohlen) {
$schliessenEmpfohlen = "true";
} elsif (!$luftfeuchteSchliessenEmpfohlen && !$tempSchliessenEmpfohlen) {
$schliessenEmpfohlen = "false";
} else {
if (!$luftfeuchteOeffnenEmpfohlen && !$tempOeffnenEmpfohlen) {
$schliessenEmpfohlen = "true";
} else {
if ( ($luftfeuchteSchliessenEmpfohlen && ($heizModus eq "Heizen"))
|| ($tempSchliessenEmpfohlen && ($heizModus eq "Kühlen"))
) {
$schliessenEmpfohlen = "true";
} else {
$schliessenEmpfohlen = "false";
}
}
}
my $oeffnenEmpfohlen = (($luftfeuchteOeffnenEmpfohlen || $tempOeffnenEmpfohlen) && !$schliessenEmpfohlen);
Wie gesagt ich habe lediglich die if-else Abfrage für die Luftgüte entfernt, der Rest ist unberührt geblieben.
Meine aktuellen Werte die für das Skript wichtig sind lauten:
luftfeuchteSchliessenEmpfohlen = nein
tempSchliessenEmpfohlen = ja
luftfeuchteOeffnenEmpfohlen = ja
tempOeffnenEmpfohlen = nein
heizModus = Heizen
Eigentlich gehe ich davon aus das die Variable schliessenEmpfohlen
"nein" sein sollte, ist sie aber leider nicht.
Hab ich da einen Denkfehler oder ist da was in der if-else Bedingung falsch?
Gruß
Markus
Hi Markus,
mach mal die Anführungszeichen um true und false überall weg, da hier am Ende in meinem Skript true bzw. false im Sinne von 0 und 1 benötigt wird und nicht der Text. Das sollte es dann schon gewesen sein :-)
Hallo Peter,
danke für die Antwort, hatte ich als erstes so (ist ja auch im Original so von dir), da bekomme ich aber die Fehlermeldung
ERROR:
Bareword "true" not allowed while "strict subs" in use at ./FHEM/99_myUtils.pm line 216. Bareword "false" not allowed while "strict subs" in use at ./FHEM/99_myUtils.pm line 216. Bareword "true" not allowed while "strict subs" in use at ./FHEM/99_myUtils.pm line 221. Bareword "true" not allowed while "strict subs" in use at ./FHEM/99_myUtils.pm line 224. Bareword "false" not allowed while "strict subs" in use at ./FHEM/99_myUtils.pm line 229.
Das sind genau diese 5 Zeilen des Skripts, deshalb habe ich das so probiert. Hast aber recht, wenn es in "" geschrieben ist zählt es ja als Text und nicht als Zahl. Hast du da ne Idee wo hier der Fehler liegt?
Zitat von: meier81 am 16 Januar 2021, 22:37:04
Hallo Peter,
danke für die Antwort, hatte ich als erstes so (ist ja auch im Original so von dir), da bekomme ich aber die Fehlermeldung
ERROR:
Bareword "true" not allowed while "strict subs" in use at ./FHEM/99_myUtils.pm line 216. Bareword "false" not allowed while "strict subs" in use at ./FHEM/99_myUtils.pm line 216. Bareword "true" not allowed while "strict subs" in use at ./FHEM/99_myUtils.pm line 221. Bareword "true" not allowed while "strict subs" in use at ./FHEM/99_myUtils.pm line 224. Bareword "false" not allowed while "strict subs" in use at ./FHEM/99_myUtils.pm line 229.
Das sind genau diese 5 Zeilen des Skripts, deshalb habe ich das so probiert. Hast aber recht, wenn es in "" geschrieben ist zählt es ja als Text und nicht als Zahl. Hast du da ne Idee wo hier der Fehler liegt?
Hab es eben rausgefunden, ich muss anstatt true und false einfach 1 und 0 verwenden, das geht einwandfrei ;)
Interessant, war mir bis eben nicht bekannt, dass true und false in Perl gar keine Standard-Bezeichner sind, da ich die schon seit jeher in der myUtils völlig selbstverständlich verwende ... In meiner historisch gewachsenen Haupt-FHEM-Installation scheint also irgendwas das als Konstante anzulegen, denn in einer anderen, quasi ungenutzten bekomme ich den gleichen Fehler wie du :-) Nun ja, man lernt immer dazu ^^
Dachte ich auch, hab wieder was gelernt :)
Mal ne andere Frage, wie hast du denn dein Skript aufgerufen, du übergibst ja bei dem Aufruf $NAME und $EVENT. Hab das bei mir mal zum testen auf $device umgebaut, bin da aber noch nicht ganz zufrieden.
Vielleicht könnte ich mir deinen Aufruf da mal zu Hilfe nehmen.
Hallo Peter,
hab nochmal ne Frage bezüglich deiner Wandtemperaturbestimmung. Habe zur Zeit auch die Schätzung mit dem K-Faktor in Betrieb (jetzt erstmal zum testen, das Infrarotthermometer kommt morgen). Meine Frage wäre jetzt du hast ja auch die Ausführung beschrieben mittels Wandtemperaturmessung ohne den K-Faktor, finde ich gut, ich wollte mir jedoch nicht in jeden Raum einen Wandsensor einbauen. Ich hatte jetzt die Idee mir einen Sensor mit 2 Fühlern zuzulegen, z.B. https://de.elv.com/elv-homematic-ip-komplettbausatz-temperatursensor-mit-externen-fuehlern-2-fach-hmip-ste2-pcb-155614?fs=2810340986&c=690 (https://de.elv.com/elv-homematic-ip-komplettbausatz-temperatursensor-mit-externen-fuehlern-2-fach-hmip-ste2-pcb-155614?fs=2810340986&c=690). Dann würde ich mit einem Sensor die Wandtemperatur messen, mit dem anderen die Raumtemperatur in der Nähe des Wandfühlers. Das ganze würde ich als Referenz nehmen für deine Formel
K = (Oberflächentemperatur - Außentemperatur) / (Innentemperatur - Außentemperatur)
Die Außentemperatur bekomme ich von meiner Wetterstation. Damit könnte ich mir den K-Faktor berechnen und diesen dann für alle anderen Räume benutzen.
Meinst du das würde von Prinzip so funktionieren, das Mauerwerk bei mir ist soweit an allen Stellen gleich dick, ich würde trotzdem nochmal nachmessen ob es evtl. Stellen gibt die kühler wären wie mein Wandsensor.
Bezüglich meiner Frage von gestern wegen dem Aufruf des Skriptes, da hatte mich interessiert was du in den Variablen übergibst, ich denke bei $NAME wahrscheinlich deine Raumnamen, z.B. Wohnzimmer, Küche, etc. Mir ist nur nicht klar für was $EVENT ist, wird soweit ich erkennen kann nicht verwendet im Skript.
Gruß Markus
Hallo Markus,
die Funktion ist für einen Aufruf aus einem Notify geschrieben und $EVENT wird nach näherer Betrachtung gar nicht benutzt, es müsste mit also mit $device statt $name auch in einem DOIF klappen. Die Idee ist, dass du ein Gerät hast - z.B. der Wandthemostat - das die Temperatur sendet, auf die du dann mit einem Notify reagierst. In diesem Notify wird calcLuefungsStates aufgerufen und schreibt dann zusätzliche Readings in den Wandthermostaten. Bei mir sieht das so aus:
define n_wandthermostat_Weather_fenster notify .*\.(wandthermostat_Weather|fenster2?):.*(temperature|offen|geschlossen|open|closed).* {
fhem("sleep 1;{calcLueftungsStates('$NAME','$EVENT')}");
return;
}
Das sleep 1 führt dazu, dass die geänderten Readings auch Events auslösen und wieder andere Notifies triggern können.
ZitatDamit könnte ich mir den K-Faktor berechnen und diesen dann für alle anderen Räume benutzen.
Ja, damit könnte das ganz gut klappen. Ganz genau ist das aber naürlich nie. Für die K-Wert Berechnung über die Formel würde ich aber ab und an mal IR-Thermometer mit deinem Wandfühler vergleichen, wenn du eh beides hast. Denn ne Oberflächentemperatur mit nem Kontaktfühler zu messen ist tricky ;-)
Ich persönlich mache es so: Ich habe für zwei kritische Räume einen Wandtemperatursensor - das sind Bad und Schlafzimmer. Für alle anderen Räume mit Außenwänden (Küche, Wohnzimmer und Arbeitszimmer) verwende ich den gleichen K-Wert, den ich mal im Wohnzimmer ermittelt habe, da diese Räume baulich recht ähnlich sind. Nur im Schlafzimmer steht ein dicker Schrank an der Außenwand und wir heizen da auch weniger, daher hab ich hier die genauere Methode gewählt und an die per IR-Kamera bestimmte kälteste Stelle nen Sensor gepappt - und wegen des hohen Wassereintrages wollte ich es im Bad auch genauer wissen. Aber für die normalen Wohnräume begnüge ich mich mit dem einen Pi-Mal-Daumen-K, da wir hier sowieso selten in die schimmelkritischen Bereiche kommen.
Hallo Peter,
vielen Dank für deine ausführliche Erklärung. Ich werde mich die Tage mal dransetzen, heute ist mein IR-Thermometer gekommen, da kann das große Messen jetzt losgehen ;).
Zudem werde ich mal den Sensor bestellen und das Skript anpassen, werde hier dann mal berichten.
Gruß Markus
Spannende Lösungen, die ihr habt! An unserem alten Wohnort hatten wir leider öfters Probleme mit dem Thema Schimmel, weshalb wir da jetzt in unserem Eigenheim natürlich drauf achten wollen. Die Unterstützung durch smarte Systeme ist da bestimmt hilfreich 8). Werde mich mal weiter einlesen und schauen, wie sich die Systeme bei uns am besten kombinieren lassen!
TOP!
Vielen vielen Dank für die Mühe! Genau nach sowas hab ich gesucht!
Mein Problem is, das meine Eingangstür zur Wohnung in einem Treppenaufgang ist der in den ersten Stock führt. Keine Heizung, keine Dämmung, heißt Schimmel ohne Ende!
Ich hab ein Homematic Wandthermostat neben der Tür hängen und einen Heizlüfter per FritzDect Steckdose geschalten. Das Blöde is, das kostete natürlich unheimlich viel.
Mein berechneter Faktor liegt bei 0.51, also verdammt schlecht. Die dadurch berechnete Wandtemperatur liegt ziemlich genau übereinander, ich glaub die maximale Differenz ist auch nicht größer als die 0.5°C!
Ich freu mich wirklich das ich dein Tutorial gefunden hab und hoffe das es mit richtiger Combo Lüften/Heizen in Zukunft keinen Schimmel mehr gibt!
Was meinst du, ist eine Luftheizung oder eine Infrarotheizung besser geeignet?
Gruß Daniel
Zitat von: DerBaer am 04 April 2021, 10:13:40
Mein Problem is, das meine Eingangstür zur Wohnung in einem Treppenaufgang ist der in den ersten Stock führt. Keine Heizung, keine Dämmung, heißt Schimmel ohne Ende!
Nur mal so als Tipp:
Sollte das Eigentum sein, Du also niemanden bzgl. Renovierung fragen musst, dann solltest Du Dir mal Kalziumsilikatplatten anschauen. Ich habe bei mir das CASIPLUS System verarbeitet und bin damit sehr zufrieden. Ich habe auch eine Aussenwand, die genau auf der Grundstücksgrenze steht und somit nicht von außen isolierbar ist. Da die Wand ewig kalt war und ich seinerzeit ohne darüber nachzudenken, die Oberfläche mit Latexfarbe quasi versiegelt hatte, lief mir das (Kondens-)Wasser regelrecht von der Wand.
Hatte mir dann einen "Baugutachter" gegönnt, der mit die Platten empfahl und für meine Zwecke eine Dicke von 4 cm ausgerechnet hat. Man muss aber auch an die Wärmebrücken (umgangssprachlich ,,Kältebrücken") denken. Dafür gibt es extra Keile.
Viel Erfolg!
Zitat
Nur mal so als Tipp:
Sollte das Eigentum sein, Du also niemanden bzgl. Renovierung fragen musst, dann solltest Du Dir mal Kalziumsilikatplatten anschauen. Ich habe bei mir das CASIPLUS System verarbeitet und bin damit sehr zufrieden. Ich habe auch eine Aussenwand, die genau auf der Grundstücksgrenze steht und somit nicht von außen isolierbar ist. Da die Wand ewig kalt war und ich seinerzeit ohne darüber nachzudenken, die Oberfläche mit Latexfarbe quasi versiegelt hatte, lief mir das (Kondens-)Wasser regelrecht von der Wand.
Hatte mir dann einen "Baugutachter" gegönnt, der mit die Platten empfahl und für meine Zwecke eine Dicke von 4 cm ausgerechnet hat. Man muss aber auch an die Wärmebrücken (umgangssprachlich ,,Kältebrücken") denken. Dafür gibt es extra Keile.
Viel Erfolg!
Danke für den Tipp!
Leider is das kein Eigentum, ich müsste aber auch ned fragen. Allerdings glaub ich das es bei mir zu eng wird wenn ich überall noch 4cm Platten drauf klebe. :-\
Gruß Daniel
Zitat von: DerBaer am 04 April 2021, 11:51:08
Allerdings glaub ich das es bei mir zu eng wird wenn ich überall noch 4cm Platten drauf klebe. :-\
Die 4 cm sind mein Maß. Es gibt die Platten auch dünner. Dies nur als ergänzende Info ;)
Hallo Peter,
an dieser Stelle Achtung für die geleistete Arbeit mit allen Formeln, Funktionen .... Super. Ich bin nun schon so lange im Forum unterwegs bin aber erst jetzt auf diesen Fred gestoßen worden. Allerdings muss ich zugeben, das ich nur einen Bruchteil verstanden habe. Bei mir geht es um ein keines Badezimmer mit einer elektrischen Dachluken Öffnung die ich über einen Taster ansteuere. Ich habe in jedem Raum im Haus ein TFA Thermometer Hygrometer welches mir Temperatur und Luftfeuchtigkeit ausgibt siehe Listing 01 sowie auch eins im Garten. In jedem Raum befindet sich auch noch ein Thermostat HM-CC-RT-DN siehe Listing 02 zur Temperatursteuerung. Über den Taster ITW_852 siehe Listing 03 wird das Dachfenster geöffnet und geschlossen.
Gibt es eine Möglichkeit Dein Modul entsprechend zu nutzen um mir a) ggf. eine drohende Schimmelgefahr in den Räumen im Dashboard anzeigen zu lassen oder anderweitig noch auszugeben und b) (eigentlich noch wichtiger) die Dachluke möglichst nach dem duschen für eine Zeit x oder bis die Lufteuchtigkeit wieder "normal ist zu öffnen" und dann aber auch wieder automatisch zu schliessen ? Bisher habe ich leider nur so ein DOIF wie im Listing 04 das alle mal im Haus erinnert das die Luke offen ist.
Gruß
Micha
Listing 01
Internals:
CODE 84
CUL433_MSGCNT 16
CUL433_RAWMSG TXAEA8660662
CUL433_RSSI -80.5
CUL433_TIME 2021-11-17 12:04:01
DEF 84
FUUID 5c500794-f33f-a44f-ac44-6e898ac7a55b2c10
LASTInputDev CUL433
MSGCNT 16
NAME TFA01
NR 48
STATE T: 18.8 H: 66.0
TYPE CUL_TX
corr 0
lastH 1637147041
lastT 1637147041
minsecs 0
READINGS:
2021-11-17 12:04:01 humidity 66.0
2021-11-17 12:04:01 state T: 18.8 H: 66.0
2021-11-17 12:04:01 temperature 18.8
Attributes:
group Temperatur
icon control_building_modern_s_2og_og2
room Bad_klein
Listing 02
Internals:
DEF 309DC6
FUUID 5c5007a0-f33f-a44f-ba1b-929607a553f2b16e
IODev hmusb
LASTInputDev hmusb
MSGCNT 21
NAME Heizung_Arbeitszimmer
NR 235
NTFY_ORDER 48-Heizung_Arbeitszimmer
STATE CMDs_done
TYPE CUL_HM
channel_01 Heizung_Arbeitszimmer_Weather
channel_02 Heizung_Arbeitszimmer_Climate
channel_03 Heizung_Arbeitszimmer_WindowRec
channel_04 Heizung_Arbeitszimmer_Clima
channel_05 Heizung_Arbeitszimmer_ClimaTeam
channel_06 Heizung_Arbeitszimmer_remote
disableNotifyFn 1
hmusb_MSGCNT 21
hmusb_RAWMSG E309DC6,0000,00259AED,FF,FFC8,918610309DC60000000AF0D80C5500
hmusb_RSSI -56
hmusb_TIME 2021-11-17 12:03:56
lastMsg No:91 - t:10 s:309DC6 d:000000 0AF0D80C5500
protLastRcv 2021-11-17 12:03:56
protRcv 20 last_at:2021-11-17 12:03:56
protSnd 2 last_at:2021-11-17 11:38:59
protState CMDs_done
rssi_at_hmusb cnt:21 min:-56 max:-56 avg:-56 lst:-56
rssi_hmusb cnt:2 min:-52 max:-52 avg:-52 lst:-52
READINGS:
2021-11-17 11:35:28 Activity alive
2021-11-17 11:38:59 CommandAccepted yes
from archivexx D-firmware 1.4
from archivexx D-serialNr LEQ1206082
2021-11-17 11:38:58 IODev hmusb
2020-10-23 11:48:43 PairedTo 0x240271
2021-11-17 11:25:56 R-backOnTime 10 s
2021-11-17 11:25:56 R-burstRx on
2021-11-17 11:25:56 R-cyclicInfoMsg on
2021-11-17 11:25:56 R-cyclicInfoMsgDis 0
2021-11-17 11:25:56 R-pairCentral 0x240271
2020-10-23 11:48:43 RegL_00. 00:00 01:01 02:01 09:01 0A:24 0B:02 0C:71 0E:0A 0F:00 11:00 12:15 16:00 18:00 19:00 1A:00
2021-03-22 20:26:12 RegL_07.
2021-11-17 12:03:56 actuator 85
2021-11-17 12:03:56 battery ok
2021-11-17 12:03:56 batteryLevel 2.7
2021-11-17 11:26:08 cfgState ok
2021-11-17 11:38:59 commState CMDs_done
2021-11-17 12:03:56 desired-temp 30.0
2021-11-17 12:03:56 measured-temp 21.6
2021-11-17 12:03:56 motorErr ok
2020-10-23 11:47:58 powerOn 2020-10-23 11:47:58
2020-10-23 11:47:58 recentStateType info
2020-10-23 11:49:05 sabotageAttackId_ErrIoId_100001 cnt:2
2020-10-23 11:49:05 sabotageAttack_ErrIoAttack_cnt 2
2021-11-17 11:38:59 state CMDs_done
2021-11-16 04:41:47 time-request -
helper:
HM_CMDNR 145
cSnd 11240271309DC686043C,11240271309DC686043C
cfgStateUpdt 0
lastMsgTm 1637147036.36099
mId 0095
peerFriend -
peerOpt -:thermostat
regLst 0
rxType 140
supp_Pair_Rep 0
tmplChg 0
cmds:
TmplKey :no:1637144758.53592
TmplTs 1637144758.53592
cmdKey 0:1:0::Heizung_Arbeitszimmer:0095:01:
cmdLst:
assignHmKey noArg
burstXmit noArg
clear [({msgErrors}|msgEvents|rssi|attack|trigger|register|oldRegs|readings|all)]
deviceRename -newName-
fwUpdate -filename- [-bootTime-]
getConfig noArg
getDevInfo noArg
getRegRaw (List0|List1|List2|List3|List4|List5|List6|List7) [-peerChn-]
inhibit [(on|{off})]
raw -data- [...]
regBulk -list-.-peerChn- -addr1:data1- [-addr2:data2-]...
regSet [(prep|{exec})] -regName- -value- [-peerChn-]
reset noArg
sysTime noArg
tplDel -tplDel-
tplSet_0 -tplChan-
unpair noArg
lst:
condition slider,0,1,255
peer
peerOpt
tplChan
tplDel
tplPeer
rtrvLst:
cmdList [({short}|long)]
deviceInfo [({short}|long)]
list [({normal}|full)]
param -param-
reg -addr- -list- [-peerChn-]
regList noArg
regTable noArg
regVal -addr- -list- [-peerChn-]
saveConfig [-filename-]
tplInfo noArg
expert:
def 1
det 0
raw 1
tpl 0
io:
flgs 0
newChn +309DC6,00,00,00
nextSend 1637147036.43122
rxt 2
vccu
p:
309DC6
00
00
00
prefIO:
mRssi:
mNo 91
io:
hmusb:
-50
-50
peerIDsH:
prt:
bErr 0
sProc 0
q:
qReqConf
qReqStat
role:
dev 1
prs 1
rssi:
at_hmusb:
avg -56
cnt 21
lst -56
max -56
min -56
hmusb:
avg -52
cnt 2
lst -52
max -52
min -52
shRegW:
07 04
tmpl:
Attributes:
IODev hmusb
actCycle 000:10
actStatus alive
autoReadReg 4_reqStatus
expert defReg,rawReg
firmware 1.4
model HM-CC-RT-DN
room Arbeitszimmer
serialNr LEQ1206082
subType thermostat
webCmd getConfig:clear msgEvents:burstXmit
Listing 03
Internals:
DEF 10000000011101011001101010 0 0000
FUUID 5ffc053d-f33f-a44f-3474-f7eb334e82536018
IODev CUL433
NAME ITW_852_Bad_klein_01
NR 616
STATE on
TYPE IT
XMIT 1000000001110101100110101000000
XMITdimdown 00
XMITdimup 00
XMIToff 0
XMITon 1
CODE:
1 1000000001110101100110101000000
READINGS:
2021-11-17 11:25:16 IODev CUL433
2021-01-11 09:40:23 group 0
2021-01-11 09:40:23 protocol V3
2021-11-17 10:47:46 state on
2021-01-11 09:40:23 unit 0000
Attributes:
IODev CUL433
cmdIcon on:black_down off:black_up:FS20.off
devStateIcon on:fts_light_dome off:fts_light_dome_open:FS20.off
room Bad_klein,Funkzentrale
Listing 04
Internals:
DEF ([TFA01:temperature] > [TFA08:temperature] and [Kontakt_Dachluke] eq "opened") (set Warnung_Dachluke on) (set gong_MP3 playTone 012) DOELSE (set Warnung_Dachluke off, set gong_MP3 playTone 013)
FUUID 5c5007a6-f33f-a44f-ff5b-778240baf9017edc
MODEL FHEM
NAME Warnung_Dachluke_doif
NOTIFYDEV TFA08,Kontakt_Dachluke,global,TFA01
NR 398
NTFY_ORDER 50-Warnung_Dachluke_doif
STATE cmd_1_1
TYPE DOIF
VERSION 24905 2021-09-01 18:35:54
READINGS:
2021-11-17 12:27:35 Device TFA08
2021-11-17 12:27:36 cmd 1.1
2021-11-17 12:27:35 cmd_count 2
2021-11-17 12:27:36 cmd_event TFA08
2021-11-17 12:27:36 cmd_nr 1
2021-11-17 12:27:36 cmd_seqnr 1
2021-11-17 12:26:31 e_Kontakt_Dachluke_STATE opened
2021-11-17 12:22:31 e_TFA01_temperature 18.7
2021-11-17 12:27:35 e_TFA08_temperature 6.8
2021-11-17 12:27:36 state cmd_1_1
2021-11-17 12:27:37 wait_timer 17.11.2021 12:28:37 cmd_1_2 TFA08
Regex:
accu:
collect:
cond:
Kontakt_Dachluke:
0:
&STATE ^Kontakt_Dachluke$
TFA01:
0:
temperature ^TFA01$:^temperature:
TFA08:
0:
temperature ^TFA08$:^temperature:
attr:
cmdState:
repeatsame:
3
0
wait:
0:
0
60
1:
0
waitdel:
condition:
0 ::ReadingValDoIf($hash,'TFA01','temperature') > ::ReadingValDoIf($hash,'TFA08','temperature') and ::InternalDoIf($hash,'Kontakt_Dachluke','STATE') eq "opened"
do:
0:
0 set Warnung_Dachluke on
1 set gong_MP3 playTone 012
1:
0 set Warnung_Dachluke off, set gong_MP3 playTone 013
helper:
DEVFILTER ^global$|^TFA08$|^Kontakt_Dachluke$|^TFA01$
NOTIFYDEV global|TFA08|Kontakt_Dachluke|TFA01
event T: 6.8 H: 86.0,temperature: 6.8
globalinit 1
last_timer 0
sleepdevice TFA08
sleepsubtimer 1
sleeptimer 0
timerdev TFA08
timerevent T: 6.8 H: 86.0,temperature: 6.8
triggerDev TFA08
timerevents:
T: 6.8 H: 86.0
temperature: 6.8
timereventsState:
state: T: 6.8 H: 86.0
temperature: 6.8
triggerEvents:
T: 6.8 H: 86.0
temperature: 6.8
triggerEventsState:
state: T: 6.8 H: 86.0
temperature: 6.8
internals:
all Kontakt_Dachluke:STATE
perlblock:
readings:
all TFA01:temperature TFA08:temperature
trigger:
uiState:
uiTable:
Attributes:
repeatsame 3:0
room Bad_klein
wait 0,60:0
Zitat von: mfeske am 17 November 2021, 12:13:22
Hallo Peter,
an dieser Stelle Achtung für die geleistete Arbeit mit allen Formeln, Funktionen .... Super. Ich bin nun schon so lange im Forum unterwegs bin aber erst jetzt auf diesen Fred gestoßen worden. Allerdings muss ich zugeben, das ich nur einen Bruchteil verstanden habe. Bei mir geht es um ein keines Badezimmer mit einer elektrischen Dachluken Öffnung die ich über einen Taster ansteuere. Ich habe in jedem Raum im Haus ein TFA Thermometer Hygrometer welches mir Temperatur und Luftfeuchtigkeit ausgibt siehe Listing 01 sowie auch eins im Garten. In jedem Raum befindet sich auch noch ein Thermostat HM-CC-RT-DN siehe Listing 02 zur Temperatursteuerung. Über den Taster ITW_852 siehe Listing 03 wird das Dachfenster geöffnet und geschlossen.
Gibt es eine Möglichkeit Dein Modul entsprechend zu nutzen um mir a) ggf. eine drohende Schimmelgefahr in den Räumen im Dashboard anzeigen zu lassen oder anderweitig noch auszugeben und b) (eigentlich noch wichtiger) die Dachluke möglichst nach dem duschen für eine Zeit x oder bis die Lufteuchtigkeit wieder "normal ist zu öffnen" und dann aber auch wieder automatisch zu schliessen ?
Hallo zurück,
Ja klar. Du müsstest dir erstmal in irgendeinem passenden FHEM-Device die im Ausgangspost beschriebenen userReadings erzeugen lassen (siehe Commandref + Copy&Paste aus dem Ausgangsposting). Du kannst die z.B. einfach in das Device deines Thermometers im Raum packen (dein TFA01 z.B.).
Dann hast du da drin dann zusätzliche Readings wie schimmelGefahr oder schimmelFreiMaxHum, um die du dein DOIF erweitern kannst oder ein neues nur für die Dachluke erzeugen kannst:
define dachLukeAufZu DOIF ([TFA01:wandHumidity] > ([TFA01:schimmelfreiMaxHum] + 3)) (set meineDachluke open) DOELSEIF ([bad.thermometer:wandHumidity] < [bad.thermometer:schimmelfreiMaxHum]) (set meineDachluke close)
Das nur als Ausgangspunkt. Ich schalte meinen elektrischen Entlüfter im Bad so z.B. nur aus, angeschaltet wird es stattdessen schon vorher, wenn sich die Tür der Duschkabine schließt über einen Reed-Kontakt ;)
Hallo Peter,
erstmal super Arbeit von dir. Funktioniert bei mir auch einwandfrei.
Jetzt ist mir bei der Hitze aber aufgefallen, dass meine Innenwerte sich nicht verändert haben, aber die Aussenwerte.
Bisher habe ich die Neuberechnung nur bei "event-on-change" gemacht.
Damit ich das Abfangen kann habe ich jetzt auf "event-on-update" umgestellt.
Wie hat du das gelöst? Bei jeden Update eine Neuberechung ist halt ein wenig übertrieben.