Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. Die Sache mir der Luftfeuchtigkeit, dem Taupunkt und der Schimmelgefahr

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Die Sache mir der Luftfeuchtigkeit, dem Taupunkt und der Schimmelgefahr

    This topic has been deleted. Only users with topic management privileges can see it.
    • Chaot
      Chaot @darkiop last edited by

      @darkiop muss ich mal raussuchen. Ich habe die nur hier auf dem Rechner. Wie gesagt habe ich die nie mehr eingebaut nach dem Umzug auf den NUC.

      1 Reply Last reply Reply Quote 0
      • Chaot
        Chaot @darkiop last edited by

        @darkiop Ich habe mir das heute nochmal rausgekramt.
        Aber ich bringe das Script nicht mehr zum laufen.
        Keine Ahnung warum.

        // von paul53 übernommen und angepasst
        // http://forum.iobroker.net/viewtopic.php?f=20&t=2437&hilit=L%C3%BCftung%2A#p21476
        createState('0_userdata.0.Taupunkt.Aussen.Temperatur', 0);            // °C
        createState('0_userdata.0.Taupunkt.Aussen.rel_Feuchte', 0);           // %
        createState('0_userdata.0.Taupunkt.Aussen.Feuchtegehalt', 0);         // g/kg  (nicht g/m3 !)
        createState('0_userdata.0.Taupunkt.Aussen.Taupunkt', 0);              // °C
        createState('0_userdata.0.Taupunkt.Aussen.Enthalpie', 0);             // kJ/kg
        // Ordner Toilette/Aussen
        // Offsets
        var toffset = 0.0; // in K zur Korrektur, falls nötig
        var rhoffset = 0;  // in % zur Korrektur, falls nötig
        var tsid = "sonoff.0.BadSensor.BME280_Temperature";		// Sensor Aussen
        var hsid = "sonoff.0.BadSensor.BME280_Humidity";
        var tid = "0_userdata.0.Taupunkt.Aussen.Temperatur";
        var rhid = "0_userdata.0.Taupunkt.Aussen.rel_Feuchte";
        var xid = "0_userdata.0.Taupunkt.Aussen.Feuchtegehalt";
        var dpid = "0_userdata.0.Taupunkt.Aussen.Taupunkt";
        var enth = "0_userdata.0.Taupunkt.Aussen.Enthalpie";
        var t = getState(tsid).val + toffset; // Temperatur, korrigiert in °C
        var rh = getState(hsid).val + rhoffset; // rel. Feuchte, korrigiert in %
        var x;  // Feuchtegehalt in g/kg
        var dp; // Taupunkt in °C
        var  DP = require('dewpoint');
        // 70 m über NN
        var xdp = new DP(36); 
        function calc() {
          var y = xdp.Calc(t, rh);
          x = y.x;
          dp = y.dp;
          setState(xid, x);
          setState(dpid, dp);
        }
        function anzeige() {
         // Enthalpie berechnen
          var h = (1.00545 * t + (2.500827 + 0.00185894 * t) * x).toFixed(1);
          var tanz = t.toFixed(1);
          dp = dp.toFixed(1);
          var rhanz = rh.toFixed(0);
         x = x.toFixed(2);
           setState(tid, t);
          setState(rhid, rh);
          setState(xid, x);
          setState(dpid, dp);
          setState(enth, h);
        }
        function klima() {
         calc();
         anzeige();
        }
        klima(); // Script start
        on(tsid, function (dp) {
          t = dp.state.val + toffset; 
          setState(tid, t);
         klima();
        });
        on(hsid, function (dp) {
          rh = dp.state.val + rhoffset; 
          setState(rhid, rh); 
         klima();
        });
        


        // von paul53 übernommen und angepasst
        // http://forum.iobroker.net/viewtopic.php?f=20&t=2437&hilit=L%C3%BCftung%2A#p21476
        createState('0_userdata.0.Taupunkt.Toilette.Temperatur', 0);            // °C
        createState('0_userdata.0.Taupunkt.Toilette.rel_Feuchte', 0);           // %
        createState('0_userdata.0.Taupunkt.Toilette.Feuchtegehalt', 0);         // g/kg  (nicht g/m3 !)
        createState('0_userdata.0.Taupunkt.Toilette.Taupunkt', 0);              // °C
        createState('0_userdata.0.Taupunkt.Toilette.Enthalpie', 0);             // kJ/kg
        // Ordner Toilette/Toilette
        // Offsets
        var toffset = 0.0; // in K zur Korrektur, falls nötig
        var rhoffset = 0;  // in % zur Korrektur, falls nötig
        var tsid = "sonoff.0.BadSensor.SI7021_Temperature"; // Toilette Temperatur
        var hsid = "sonoff.0.BadSensor.SI7021_Humidity";    // Toilette relative Feuchtigkeit
        var tid = "0_userdata.0.Taupunkt.Toilette.Temperatur";
        var rhid = "0_userdata.0.Taupunkt.Toilette.rel_Feuchte";
        var xid = "0_userdata.0.Taupunkt.Toilette.Feuchtegehalt";
        var dpid = "0_userdata.0.Taupunkt.Toilette.Taupunkt";
        var enth = "0_userdata.0.Taupunkt.Toilette.Enthalpie";
        var t = getState(tsid).val + toffset;           // Temperatur, korrigiert in °C
        var rh = getState(hsid).val + rhoffset;         // rel. Feuchte, korrigiert in %
        var x;  // Feuchtegehalt in g/kg
        var dp; // Taupunkt in °C
        var  DP = require('dewpoint');
        // 275 m über NN (Meter über dem Meeresspiegel)
        var xdp = new DP(275); 
        function calc() {
          var y = xdp.Calc(t, rh);
          x = y.x;
          dp = y.dp;
          setState(xid, x);
          setState(dpid, dp);
        }
        function anzeige() {
         // Enthalpie berechnen
          var h = (1.00545 * t + (2.500827 + 0.00185894 * t) * x).toFixed(1);
          dp = dp.toFixed(1);
          x = x.toFixed(2);
           setState(tid, t);
          setState(rhid, rh);
          setState(xid, x);
          setState(dpid, dp);
          setState(enth, h);
        }
        function klima() {
         calc();
         anzeige();
        }
        klima(); // Script start
        on(tsid, function (dp) {
          t = dp.state.val + toffset; 
          setState(tid, t);
         klima();
        });
        on(hsid, function (dp) {
          rh = dp.state.val + rhoffset; 
          setState(rhid, rh); 
         klima();
        });
        


        // Ordner Toilette/Fenstersteuerung
        createState('0_userdata.0.Taupunkt.Fenstersteuerung.Mindesttemperatur');              // 12   => in Objekte oder vis festlegen
        createState('0_userdata.0.Taupunkt.Fenstersteuerung.Fenstersteuerung.Maximaltemperatur');              // 25
        createState('0_userdata.0.Taupunkt.Fenstersteuerung.Fenstersteuerung.Mindestfeuchte');                  // 55
        createState('0_userdata.0.Taupunkt.Fenstersteuerung.Fenstersteuerung.Maximalfeuchte');                 // 63
        var mintid = getIdByName("0_userdata.0.Taupunkt.Fenstersteuerung.Fenstersteuerung.Mindesttemperatur"); // Holt sich State
        var maxtid = getIdByName("0_userdata.0.Taupunkt.Fenstersteuerung.Fenstersteuerung.Maximaltemperatur");
        var minfid = getIdByName("0_userdata.0.Taupunkt.Fenstersteuerung.Fenstersteuerung.Mindestfeuchte");
        var maxfid = getIdByName("0_userdata.0.Taupunkt.Fenstersteuerung.Fenstersteuerung.Maximalfeuchte");
        var mint = getState(mintid).val;                                // zieht Wert aus State
        var maxt = getState(maxtid).val;
        var minf = getState(minfid).val;
        var maxf = getState(maxfid).val;
        var aktfid = "sonoff.0.BadSensor.SI7021_Humidity";      // Aktuelle Kellerfeuchte relativ
        var akttid = "sonoff.0.BadSensor.SI7021_Temperature";   // Aktuelle Kellertemperatur 
        var levelwa = "hm-rpc.0.MEQ051xxxx.1.LEVEL";        // HM Jalousieaktor Waschraum Level:      0 % = zu; 100 % auf
        var levelsi = "hm-rpc.0.MEQ039xxxx.1.LEVEL";        // HM Jalousieaktor Sicherungsraum Level: 0 % = zu; 100 % auf
        var aktf = getState(aktfid).val;
        var aktt = getState(akttid).val;
        var lueft = getState('Lueften.Lueften').val;        // Lüften möglich? Aus Script Toilette/Lueften
        //var mint = 12;       // Mindesttemperatur in °C für Toilette
        //var maxt = 25;      // Maximaltemperatur in °C für Toilette
        //var minf = 57;       // Schliessfeuchte in % (relativ)
        //var maxf = 63;       // Öffnungsfeuchte in % (relativ)
        // Fenster Waschraum
        function fensterwasch() {
          if (lueft === false || aktt <= mint || aktt >= maxt || aktf <= minf) setState(levelwa, 0); 
          else if (lueft === true && aktf >= maxf) setState(levelwa, 100);
        }
        // Fenster Sicherungsraum
        function fenstersich() {
          if (lueft === false || aktt <= mint || aktt >= maxt || aktf <= minf) setState(levelsi, 0);
          else if (lueft === true && aktf >= maxf) setState(levelsi, 100);
        }
        // Script Start und Auslöser
        fensterwasch();     
        fenstersich();
        on(aktfid, function (dp) {
          aktf = dp.state.val;
         fensterwasch();
         fenstersich();
        });
        on(akttid, function (dp) {
          aktt = dp.state.val;
         fensterwasch();
         fenstersich();
        });
        // Pushovernachricht über einen Fenstersensor
        // on({id: "hm-rpc.0.MEQ028xxxx.1.STATE"/*Fenstersensor Keller Waschraum.STATE*/, val: true, change: "ne"}, function() {     //Bei Änderung auf TRUE
          sendTo("pushover", "Fenster wurden geöffnet");                                                          // Sende Pushover Nachricht
        });
        // on({id: "hm-rpc.0.MEQ028xxxx.1.STATE"/*Fenstersensor Keller Waschraum.STATE*/, val: false, change: "ne"}, function() {
          sendTo("pushover", "Fenster wurden geschlossen");
        });
        


        // Ordner Toilette/Lueften
        // Prüft ob Lüften möglich ist
        // von paul53 übernommen und angepasst
        //http://forum.iobroker.net/viewtopic.php?f=20&t=2437&hilit=L%C3%BCftung%2A&start=20#p21506
        createState('Lueften.Lueften');      
        var tiid = getIdByName("0_userdata.0.Taupunkt.Toilette.Temperatur");
        var taid = getIdByName("0_userdata.0.Taupunkt.Aussen.Temperatur");
        var xiid = getIdByName("0_userdata.0.Taupunkt.Toilette.Feuchtegehalt");
        var xaid = getIdByName("0_userdata.0.Taupunkt.Aussen.Feuchtegehalt");
        var lid  = getIdByName("Lueften.Lueften");
        var ti = getState(tiid).val;  // Raumtemperatur in °C
        var ta = getState(taid).val;  // Aussentemperatur in °C
        var xi = getState(xiid).val;  // Raumfeuchtegehalt in g/kg
        var xa = getState(xaid).val;  // Aussenfeuchtegehalt in g/kg
        // Lüftung steuern mit 0,3 g/kg und 0,5 K Hysterese
        function lueften() {
         if (xa <= (xi - 0.4) && ta <= (ti - 0.6) && ti >= 10.0) setState(lid, true);
         else if (xa >= (xi - 0.1) || ta >= (ti - 0.1) || ti <= 9.5) setState(lid, false);
        
        }
        lueften();  // Script start
        on(xiid, function (dp) {
          xi = dp.state.val;
         lueften();
        });
        on(xaid, function (dp) {
          xa = dp.state.val;
         lueften();
        });
        on(tiid, function (dp) {
          ti = dp.state.val;
         lueften();
        });
        on(taid, function (dp) {
          ta = dp.state.val;
         lueften();
        });
        

        Wobei ich die Fenstersteuerung nicht im Einsatz hatte.

        Chaot 1 Reply Last reply Reply Quote 0
        • Chaot
          Chaot @Chaot last edited by

          @Chaot Ok,
          habe den letzten Fehler gefunden.
          War im Script "Lueften" versteckt.

          // Ordner Toilette/Lueften
          // Prüft ob Lüften möglich ist
          // von paul53 übernommen und angepasst
          //http://forum.iobroker.net/viewtopic.php?f=20&t=2437&hilit=L%C3%BCftung%2A&start=20#p21506
          createState('0_userdata.0.Taupunkt.Lueften.Lueften');      
          var tiid = getIdByName("0_userdata.0.Taupunkt.Toilette.Temperatur");
          var taid = getIdByName("0_userdata.0.Taupunkt.Aussen.Temperatur");
          var xiid = getIdByName("0_userdata.0.Taupunkt.Toilette.Feuchtegehalt");
          var xaid = getIdByName("0_userdata.0.Taupunkt.Aussen.Feuchtegehalt");
          var lid  = getIdByName("0_userdata.0.Taupunkt.Lueften.Lueften");
          var ti = getState(tiid).val;  // Raumtemperatur in °C
          var ta = getState(taid).val;  // Aussentemperatur in °C
          var xi = getState(xiid).val;  // Raumfeuchtegehalt in g/kg
          var xa = getState(xaid).val;  // Aussenfeuchtegehalt in g/kg
          // Lüftung steuern mit 0,3 g/kg und 0,5 K Hysterese
          function lueften() {
           if (xa <= (xi - 0.4) && ta <= (ti - 0.6) && ti >= 10.0) setState(lid, true);
           else if (xa >= (xi - 0.1) || ta >= (ti - 0.1) || ti <= 9.5) setState(lid, false);
          
          }
          lueften();  // Script start
          on(xiid, function (dp) {
            xi = dp.state.val;
           lueften();
          });
          on(xaid, function (dp) {
            xa = dp.state.val;
           lueften();
          });
          on(tiid, function (dp) {
            ti = dp.state.val;
           lueften();
          });
          on(taid, function (dp) {
            ta = dp.state.val;
           lueften();
          });
          

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Chaot last edited by paul53

            @Chaot
            Wenn direkt die ID angegeben wird, darf nicht die Funktion getIdByName() verwendet werden.
            Mit createState() kann kein Datenpunkt unter 0_userdata.0 erzeugt werden.

            Chaot 1 Reply Last reply Reply Quote 0
            • Chaot
              Chaot @paul53 last edited by

              @paul53 Das habe ich mir schon fast gedacht.
              Ok, die Datenpunkte habe ich per Hand angelegt, weil ich schnell mal testen wollte ob der Rest vom Script fehlerfrei läuft.
              So wie es scheint scheint abber alles zu funktionieren.
              Ich hatte das damals nur als Lüftungsempfehlung im Einsatz und wollte dann noch einen automatischen Lüfter drüber steuern.
              Aber das habe ich dann wieder verworfen (warum weiß ich nicht mehr).
              Aktuell denke ich das ich das aber wieder in Angriff nehmen werde.

              1 Reply Last reply Reply Quote 0
              • W
                Walkinlarge2010 @klaus88 last edited by

                @klaus88 said in Die Sache mir der Luftfeuchtigkeit, dem Taupunkt und der Schimmelgefahr:

                @coffee-junk : Erstmal Danke für die wirklich tolle Erklärung, aber eher eine allgemeine Frage an dich: Welchen Luftenetfeuchter verwendest du, denn ich bekomme keinen, den ich per (z.B. WLAN Steckdose oder HomematicIP) aus und einschalten kann. Jeder Entfeuchter braucht prinzipiell Strom, aber muss dann extra noch am Bedienfeld "speziell" eingestellt werden, damit er auch dann läuft. Kannst du mir hier einen Tipp geben, bzw. kann mir wer vom Forum einen Tipp geben? Danke Klaus

                Den habe ich genommen: Comfee MDDF-16DEN3 Luftentfeuchter, Bautrockner, 16L in 24h, Raumgröße ca. 80m³ https://www.amazon.de/dp/B01A6SV4ZA/ref=cm_sw_r_cp_tai_p78bEbQ3BKYJ0

                Wird bei mir mit einer Steckdose geschalten und kann so aktiviert werden, da er einen always on modus hat 🙂

                K 1 Reply Last reply Reply Quote 1
                • K
                  klaus88 @Walkinlarge2010 last edited by

                  @Walkinlarge2010 DANKE und schon bestellt 👍

                  siggi85 1 Reply Last reply Reply Quote 0
                  • siggi85
                    siggi85 @klaus88 last edited by

                    Ist nun schon jemand an einem Adapter dran um diese Berechnungen komfortabel über eine Instanz zu erstellen. 🙂

                    W 1 Reply Last reply Reply Quote 4
                    • W
                      William4008 @siggi85 last edited by

                      @siggi85 said in Die Sache mir der Luftfeuchtigkeit, dem Taupunkt und der Schimmelgefahr:

                      Ist nun schon jemand an einem Adapter dran um diese Berechnungen komfortabel über eine Instanz zu erstellen. 🙂

                      Hätte ebenfalls Interesse an dem Adapter 🙂

                      Endurance 1 Reply Last reply Reply Quote 0
                      • Endurance
                        Endurance @William4008 last edited by

                        @william4008

                        Gute Frage, hätte auch interesse....

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        502
                        Online

                        31.6k
                        Users

                        79.6k
                        Topics

                        1.3m
                        Posts

                        16
                        25
                        9261
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo