Berechnung der absoluten Luftfeuchtigkeit zum optimalen Lüften

Begonnen von Aeroschmelz, 02 Oktober 2023, 08:28:08

Vorheriges Thema - Nächstes Thema

Aeroschmelz

Hallo,

ich bin kein Experte in Perl, aber folgende Funktion berechnet bei mir aus der Angabe der Temperatur und relativen Luftfeuchtigkeit in der 99_myUtils.pm die absolute Luftfeuchtigkeit in g/m3 für jeden Raum mit Innensensor. Zusätzlich wird ein Device vorausgesetzt, dass den Luftdruck in hPa bereitstellt. Der Luftdruck wird in der Funktion direkt aus dem Device abgefragt, das kann man natürlich auch noch als Parameter übergeben lassen.

sub abs_Hum($$$) {
my ($dname,$tname,$hname) = @_;

#Prüfen, ob überhaupt ein Device(-name) als Parameter übergeben wurde
if(!defined($dname)) {
Log3 undef,1,"Error: abs_Hum - No device specified!";
return 0;
}

#Prüfen, ob das angegebene Device überhaupt existiert
if(!$defs{$dname}) {
Log3 undef,1,"Error: abs_Hum - Device $dname is not defined!";
return 0;
}

#Wenn keine Readingsnamen für die Temperatur oder Luftfeuchtigkeit
#übergeben wurde wird per default temperature oder humidity verwendet
$tname='temperature' if(!defined($tname));
$hname='humidity' if(!defined($hname));

#Auslesen der Readingswerte für Temperatur und Luftfeuchtigkeit aus den
#entsprechenden Readings des Device
my $Temp = ReadingsVal($dname,$tname,0);
my $Hum = ReadingsVal($dname,$hname,0);

# Auslesen des Luftdrucks in hPa / mbar aus dem entsprechend vorhandenen Device
# kann auch über einen Parameter oben noch abgefragt werden.
my $pressure = ReadingsVal("Wohnzimmer","pressure",1013);

# druckabhängiger Korrekturfaktor für den Sättigungsdampfdruck
my $Korr = 1.0016 + ( 3.15 * $pressure / 1000000) - ( 0.074 / $pressure );

# Berechnung des Sättigungsdampfdrucks von Wasser entsprechend https://de.planetcalc.com/2167/
# aus der Magnus-Formel über Wasser - gültig für Temperaturen von -50 bis +100°C mit
# anschließender Multiplikation mit der relativen Luftfeuchtigkeit für die Bestimmung des Dampfdrucks
my $A = 17.62;
my $B = 243.12;
my $Dampfdr = $Korr * 6.112 * exp( $A * $Temp / ($Temp + $B) ) *$Hum /100;

# Berechnung der absoluten Luftfeuchtigkeit in g/m3 über die allgemeine Gasgleichung,
# dabei ist R die spezifische Gaskonstante für Wasserdampf
my $R = 461.5;
my $Hum_Abs = $Dampfdr * 100 * 1000 / ($R *(273.15 + $Temp));

return sprintf "%.3f", $Hum_Abs;
}

Die Seite hat mir dabei u.a. weitergeholfen: https://de.planetcalc.com/2167/

Zum Schluss lasse ich die absolute Luftfeuchtigkeit jeweils für einen Außensensor und für einen Innensensor über ein userreading berechnen. Im Innensensor wird dann zusätzlich noch über Differenzbildung aus der absoluten Luftfeuchtigkeit innen / außen geprüft, ob es Sinn macht zu Lüften, um die Luftfeuchtigkeit im Zimmer zu senken:

Humidity_Abs:humidity.* {abs_Hum("Schlafzimmer","temperature","humidity");}, Lueften:humidity.* {if(ReadingsVal("Schlafzimmer","Humidity_Abs","") > (0.2+ReadingsVal("Norden","Humidity_Abs",""))) {return "ja"} else {return "nein"}}

Das ganze lasse ich dann in einer readingsgroup darstellen:

defmod rg_Lueften readingsGroup <Raum>,<Lüften> TYPE=.*:Lueften
attr rg_Lueften DbLogExclude .*
attr rg_Lueften alias Empfehlung für Hauslüftung
attr rg_Lueften cellStyle { "r:1"=>'style="font-weight:bold;;;;font-size:16px;;;;color:yellow"' }
attr rg_Lueften mapping %ALIAS
attr rg_Lueften notime 1
attr rg_Lueften room Wohnung
attr rg_Lueften valueIcon {'Lueften.ja' => 'mdt-check-circle@green', 'Lueften.nein' => 'mdt-alert-circle@red'}






betateilchen

endlich noch eine Berechnung der Luftfeuchtigkeit... gefühlt die siebenhundertachtundzwanzigste...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Torxgewinde

@Aeroschmelz: Danke, dass du dir die Arbeit gemacht hast und deine Lösung aufbereitet und gepostet hast. Welche Vorteile bietet sie?

@Betateilchen: Warum so negativ?


Aeroschmelz

#3
Hi,

ich habe hier vorher zwar nach Luftfeuchtigkeit gesucht und da gibt es in der Tat so viel Einträge, dass man da nichts findet, aber wenn man nach Lüften sucht, dann findet man da schon einige relevante Infos mit etwas älterem Datum.

Der Vollständigkeit-halber hier mal folgende Links, damit der Eintrag auch etwas gebracht hat:
https://forum.fhem.de/index.php?topic=60114.0
https://forum.fhem.de/index.php?topic=29773.0
https://forum.fhem.de/index.php?topic=93444.0
https://forum.fhem.de/index.php?topic=47594.0

Es gibt auch einen WIKI Eintrag, aber da habe ich ehrlich gesagt nicht gesucht:
https://www.fhemwiki.de/wiki/Energiesparende_Schimmelbek%C3%A4mpfung_/_Luftentfeuchtung_in_kritischen_R%C3%A4umen

Ich verwende zwar auch das Dewpoint Modul, aber das es auch die absolute Luftfeuchtigkeit berechnet war mir nicht bewusst, dann hätte ich mir das oben gespart ;-) Beide liefern jedenfalls nahezu die gleichen Werte für die absolute Luftfeuchtigkeit. Ich verwende lediglich noch die Korrektur über den Luftdruck, aber wenn der um die 1013 mbar / hPa ist, gibt es vermutlich keine großen Abweichungen (?).

Das Userreading habe ich dementsprechend wie folgt angepasst, damit auch das Lüften im Winter bei niedriger Luftfeuchtigkeit durch die Heizung berücksichtigt wird:
Lueften:absoluteHumidity.* {
if ( ReadingsVal($name,"humidity","") > 50 && ReadingsVal($name,"absoluteHumidity","") > (1.075 * ReadingsVal("Norden","absoluteHumidity","")) ) {return "ja";}
elsif ( ReadingsVal($name,"humidity","") < 40 && ReadingsVal($name,"absoluteHumidity","") < (1.075 * ReadingsVal("Norden","absoluteHumidity","")) ) {return "ja";}
else {return "nein";}
}

Vielleicht hilfts ja doch jemandem ;-)

Es gibt auch hier: https://www.sarahandrobin.com/ingo/luftfeuchtigkeit.php auch noch eine Überschlagsformel für die durch das Lüften zu erwartende Luftfeuchtigkeit:

Außen-Luftfeuchtigkeit - 3 * (Innentemperatur - Außentemperatur) => Zu erwartende Innen-Luftfeuchtigkeit.

Die konnte ich allerdings noch nicht verifizieren.

VG
Marcus