HowTo: Schimmelvermeidung - Richtig Lüften und Entfeuchten

Begonnen von peterk_de, 30 November 2014, 01:19:38

Vorheriges Thema - Nächstes Thema

Berndd

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 ...

Raspberry pi 1 rev. 2, Wheezy (Linux raspberrypi1 4.1.7+ #817 PREEMPT), FHEM 5.7, JeeLink clone thx Robin, nanoCUL433, Signalduino, BrennenstuhlSteckdosen, LaCrosse Sensoren. LÄUFT NICHT: Energiemessung - Revolt NC-5462, Bresser Erdfeuchtesensor

peterk_de

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.
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

Berndd

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

Falls ich erwas zu Wandtemperatur-Messung finde melde ich mich hier.

Gute Nacht,
Bernd


Raspberry pi 1 rev. 2, Wheezy (Linux raspberrypi1 4.1.7+ #817 PREEMPT), FHEM 5.7, JeeLink clone thx Robin, nanoCUL433, Signalduino, BrennenstuhlSteckdosen, LaCrosse Sensoren. LÄUFT NICHT: Energiemessung - Revolt NC-5462, Bresser Erdfeuchtesensor

peterk_de

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.
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

Berndd

Raspberry pi 1 rev. 2, Wheezy (Linux raspberrypi1 4.1.7+ #817 PREEMPT), FHEM 5.7, JeeLink clone thx Robin, nanoCUL433, Signalduino, BrennenstuhlSteckdosen, LaCrosse Sensoren. LÄUFT NICHT: Energiemessung - Revolt NC-5462, Bresser Erdfeuchtesensor

Spezialtrick

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?
FHEM - Debmatic - Zigbee2MQTT - Homekit

peterk_de

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 :(
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

Spezialtrick

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.
FHEM - Debmatic - Zigbee2MQTT - Homekit

peterk_de

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.
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

peterk_de

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");
      }
  }
}


FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

Spezialtrick

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
FHEM - Debmatic - Zigbee2MQTT - Homekit

peterk_de

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.
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

amunra

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....

herrmannj

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

Hauswart

@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?
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)