Ermitteln, ob es sinnvoll ist, ein Zimmer X zu lüften

Begonnen von kilderman, 19 November 2018, 20:45:18

Vorheriges Thema - Nächstes Thema

kilderman

Hallo zusammen,

da das Forum vom Mitmachen lebt und ich selbst schon viel vom hier Gesammelten profitiert habe, wollte ich mich auch einmal einbringen.

Ich habe mir vor geraumer Zeit eine Sub zusammengeschrieben, die mir für den Keller anhand der Temperaturen und Luftfeuchte innen (via Sensor) sowie außen (bei mir aus Proplanta) ermittelt, ob das Lüften des Kellers sinnvoll ist oder nicht. Insbesondere im Sommer gibt es ja Tage, an denen das Lüften vielleicht nicht die beste Idee ist. Nun lasse ich mich benachrichtigen, wenn das Fenster besser zubleiben soll (in meinem Fall ab 'Warnstufe' 2, d. h. wenn die Luftfeuchtigkeit im Zimmer nach Lüften 70 % überschreitet). Das Ganze steht in der myUtils und wird morgens via 'at' vor dem Aufstehen und möglichen Lüften aufgerufen. Vielleicht hilft es ja jemandem.


#######################################################
# Berechnen der relativen Luftfeuchte in einem Raum nach dem gelüftet wurde;
# Berechnung möglich für Temperaturbereich von -40 bis +60 °C           
#######################################################

sub relativefeuchte() {
   
    my @pressure = (
      12,14,16,18,20,22,25,27,30,34,37,42,46,51,57,63,69,77,85,93,
      103,114,125,137,150,165,181,198,217,237,260,284,310,337,
      368,401,437,476,517,562,611,657,705,759,813,872,935,1002,
      1073,1148,1228,1312,1403,1498,1599,1706,1818,1937,2065,
      2197,2340,2487,2645,2810,2985,3169,3362,3566,3781,4006,4244,
      4493,4755,5030,5320,5623,5942,6276,6627,6995,7381,7785,8208,8652,
      9116,9602,10110,10642,11198,11780,12388,13023,13687,14380,15103,
      15858,16646,17468,18326,19220,20152);
    my $anzahl = @pressure;
    my $psos = 0;  # Dampfsättigungsdruck außen bei aktueller Außentemperatur [Pa]
    my $psis = 0;  # Dampfsättigungsdruck innen bei aktueller Innentemperatur [Pa]
    my $ps = 0;  # Variable Subfunktion
    my $p = 0;  # Dampfdruck außen bei aktueller Luftfeuchte [Pa]
    my $dp = 0;  # Taupunkt [°C]
    my $tos = 0;  # Temperatur außen [°C]
    my $tis = 0;  # Temperatur innen [°C]
    my $rhos = 0;  # bestehende relative Luftfeuchte außen [%]
    my $rhis = 0;  # berechnete relative Luftfeuchte innen nach Lüften [%]
    my $rh =0;  # gemessene relative Luftfeuchtigkeit innen [%]
    my $sdos = 0;  # Wasserdampfdichte außen [g/m3]
    my $sdis = 0;  # Wasserdampfdichte innen [g/m3]
    my $sdosmax = 0;  # Wasserdampfdichte außen maximal [g/m3]
    my $sdismax = 0;  # Wasserdampfdichte innen maximal [g/m3]
    my $k = 0;  # Warnstufe Kondensation innen
                    # 0 - Lüften senkt die relative Luftfeuchte des Zimmers
                    # 1 - Lüften ist möglich, jedoch wird sich relative Luftfeuchtigkeit erhöhen, bleibt aber unter 70 %
                    # 2 -> 70 % Luftfeuchte nach Lüften; an kalten Wänden kann Wasser kondensieren und Schimmelpilze können sich vermehren
                    # 3 -> 80 % Luftfeuchte; es ist wahrscheinlich, dass es schimmelt
                    # 4 -> Wasser kondensiert nicht nur an kalten Wänden
    my $tint = 0;  # Hilfvariabe Temperatur Ganzzahl
    my $tfloat = 0;  # Hilfvariabe Temperatur Nachkommazahl
    my $ttemp = 0;  # Hilfvariabe Temperatur

### Wert für Temperatur außen
#--> hier für eigenen Sensor anpassen

    $tos = ReadingsVal("Proplanta","temperature",undef);
    if ($tos eq "undef") {
        exit 0;
    }
    if (($tos<-40) || ($tos>60)) {
        exit 0;
    }

### Wert für Luftfeuchte außen
#--> hier für eigenen Sensor/Seite/Anbieter anpassen

    $rhos = ReadingsVal("Proplanta","humidity",undef);
    if (($rhos<0) || ($rhos>100)) {
        exit 0;
    }

### Wert für Temperatur im Zimmer X
#--> hier für eigenen Sensor anpassen

    $tis = ReadingsVal("Temperatursensor","temperature",undef);
    if ($tis eq "undef") {
        exit 0;
    }
    if (($tis<-40) || ($tis>60)) {
        exit 0;
    }

### Wert für Luftfeuchte im Zimmer X
#--> hier eigenen Sensor eintragen

    $rh = ReadingsVal("Feuchtesensor","humidity",undef);
    $rh = sprintf "%.0f", ($rh);

###### Ab hier Berechnung
### Bestimmen des Dampfsättigungsdrucks für Temperatur außen

    if (($tos>=-40) && ($tos<60)) {
        my $ttemp = $tos+40;
        my ($tint, $tfloat) = ( split /\./, $ttemp );
        my $tint1 = $tint+1;
        if (defined $tfloat && $tfloat ne "0") {
            $tfloat = "0\.$tfloat";
        } else {
            $tfloat = 0;
        }
        $psos = ($pressure[$tint]+($pressure[$tint1]-$pressure[$tint])*$tfloat);
    }
    if ($tos==60) {
        $psos = $pressure[100];
    }

### Berechnen des Dampfdrucks außen

    $p = $psos*$rhos/100;

### Berechnen des Taupunkts für Dampfdruck außen

    for(my $i = 0; $i < $anzahl; $i++ ) {
        if (($p>$pressure[$i]) && ($p<=$pressure[$i+1])) {
            my $deltataupunkt = ( $p-$pressure[$i] )/( $pressure[$i+1]-$pressure[$i] );
            $dp = sprintf "%.2f", ( -40+$i+$deltataupunkt );
        };
    }

### Berechnen der (maximalen) Wasserdampfdichte außen

    $sdos = sprintf "%.1f", ($p/461.5/(273.15+$tos)*1000);
    $sdosmax = sprintf "%.1f", ($psos/461.5/(273.15+$tos)*1000);

### Bestimmen des Dampfsättigungsdrucks für Temperatur innen

    if (($tis>=-40) && ($tis<60)) {
        my $ttemp = $tis+40;
        my ($tint, $tfloat) = ( split /\./, $ttemp );
        my $tint1 = $tint+1;
        if (defined $tfloat && $tfloat ne "0") {
            $tfloat = "0\.$tfloat";
        } else {
            $tfloat = 0;
        }
        $psis = ($pressure[$tint]+($pressure[$tint1]-$pressure[$tint])*$tfloat);
    }
    if ($tis==60) {
        $psis = $pressure[100];
    }

### Berechnen der relativen Luftfeuchtigkeit innen, nachdem sich die Luft von außen auf Zimmertemperatur geändert hat

    $rhis = sprintf "%.0f", ($p/$psis*100);

### Vergleich mit aktueller relativer Luftfeuchtigkeit sowie Schwellenwerten für Luftfeuchtigkeit für Benachrichtigung;

    if ($rhis>$rh && $rhis<70) {
        $k = 1;
    }elsif ($rhis>=70 && $rhis<80) {
        $k = 2;
    }elsif ($rhis>=80 && $rhis<100) {
        $k = 3;
    }elsif ($rhis>=100) {
        $rhis = 100;
        $k = 4;
    }

### Nur der Vollständigkeit halber; ich brauche es nicht: Berechnen der (maximalen) Wasserdampfdichte innen

    $sdis = sprintf "%.1f", ($p/461.5/(273.15+$tis)*1000);
    $sdismax = sprintf "%.1f", ($psis/461.5/(273.15+$tis)*1000);

### Mögliche Ausgaben im LOG

    #Log 1, "Temp außen:".("$tos");
    #Log 1, "relative Luftfeuchte außen:".("$rhos");
    #Log 1, "Dampfsättigungsdruck außen:".("$psos");
    #Log 1, "Temp innen:".("$tis");
    #Log 1, "Dampfdruck außen:".("$p");
    #Log 1, "Taupunkt außen:".("$dp");
    #Log 1, "Dampfdichte außen:".("$sdos");
    #Log 1, "Dampfdichte außen maximal:".("$sdosmax");
    #Log 1, "Dampfsättigungsdruck innen:".("$psis");
    #Log 1, "relative Luftfeuchte innen vor Lüften:".("$rh");
    #Log 1, "relative Luftfeuchte innen nach Lüften:".("$rhis");
    #Log 1, "Kondensation innen:".("$k");
    #Log 1, "Dampfdichte innen:".("$sdis");
    #Log 1, "Dampfdichte innen maximal:".("$sdismax");

### Speichern der wichtigen Werte zur Anzeige und Benachrichtung, ob gelüftet werden kann

    fhem("set Luftfeuchte_Raum $k");
    fhem("setreading Luftfeuchte_Raum luftfeuchtevorlueften $rh");
    fhem("setreading Luftfeuchte_Raum luftfeuchtenachlueften $rhis");

}


Viele Grüße
Marco

Wuppi68

hmmmm ....

dewpoint Innen mit dewpoint Aussen vergleichen und dann entscheiden lüften oder heizen ;-)
sollte deutlich schlanker sein ....

aber trotzdem

Coole Lösung
Jetzt auf nem I3 und primär Homematic - kein Support für cfg Editierer

Support heißt nicht wenn die Frau zu Ihrem Mann sagt: Geh mal bitte zum Frauenarzt, ich habe Bauchschmerzen

Deckoffizier

Hallo,

ebenfalls hmmm.

Mache bei mir für den Keller mit einem DOIF den Vergleich der abs. Feuchte drinnen/draußen bei Unterschied von größer 2 kann ich entscheiden ob auf oder zu.

Vermute stark kilderman sein Code ist wesentlich ausgefeilter ! Danke für die Mühe.

Mir war so, es gab hier schon mal einen längeren Thread zum Thema lüften und ein wesentlicher Aspekt ist auch die Wandtemperatur mit ein fließen
zu lassen?

Mein Ziel für später ist eigentlich das Lüften automatisch per Lüfter eventuell 2 für Zu und Abluft zu regeln und werde das Thema im Auge behalten.

Gruß
Hans-Jürgen

FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

enno

Zitat von: Deckoffizier am 27 November 2018, 15:45:25
Mir war so, es gab hier schon mal einen längeren Thread zum Thema lüften und ein wesentlicher Aspekt ist auch die Wandtemperatur mit ein fließen
zu lassen?

Ich nehme an du meinst diesen:

https://forum.fhem.de/index.php/topic,29773.0.html

Damit "beobachte" ich meinen Keller schon seit längeren...

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC