// Lüftungslogik
// -------------
// Lüftungsempfehlung steuern mit 0,3 g/kg und 0,5 K Hysterese
// Bedigungen fürs lüften
var b1lp = (xa <= (xi - (hysEntfeuchten + 0.1))) ? true : false; // Bedingnung 1 lüften positv (Außenluft ist mind. 0,4 trockener als Innen)
var b2lp = (ta <= (ti - 0.6)) ? true : false; // Bedingnung 2 lüften positv (Außentemperatur ist mindestens 0,6 Grad kühler als innen)
var b3lp = (ti >= mih) ? true : false; // Bedingnung 3 lüften positv (Innentemperatur ist höher als die Minimumtemperatur + Hysterese)
var b4lp = (rh >= xh) ? true : false; // Bedingnung 4 lüften positv (Relative Raumfeuchte ist höher als die Maximalfeuchtewert)
var b1lpText = "Entfeuchten: Außenluft ist mind. 0,4 trockener als Innen";
var b2lpText = "Kühlen: Außentemperatur ist mindestens 0,6 Grad kühler als innen";
var b3lpText = "Auskühlschutz: Innentemperatur ist höher als die Mindesttemperatur";
var b4lpText = "Raumfeuchte: Raumfeuchte ist höher als der Maximalfeuchte";
setState(idLueftenB1,b1lp);
setState(idLueftenB2,b2lp);
setState(idLueftenB3,b3lp);
setState(idLueftenB4,b4lp);
// Bedingungen gegen das Lüften
var b1ln = (xa >= (xi - 0.1)) ? true : false; // Bedingnung 1 lüften negativ (Außenluft ist zu feucht)
var b2ln = (ta >= (ti - 0.1)) ? true : false; // Bedingnung 2 lüften negativ (Außentemperatur zu warm)
var b3ln = (ti <= mit) ? true : false; // Bedingnung 3 lüften negativ (Innentemperatur niedriger als Mindesttemperatur)
var b4ln = (rh <= xt) ? true : false; // Bedingnung 4 lüften negativ (Relative Raumfeuchte ist niedriger als die Mindestfeuchte)
var b1lnText = "Entfeuchten: Außenluft ist zu feucht";
var b2lnText = "Kühlen: Außentemperatur zu warm";
var b3lnText = "Auskühlschutz: Innentemperatur niedriger als Mindestraumtemperatur";
var b4lnText = "Raumfeuchte: Raumfeuchte ist niedriger als der Mindestfeuchte";
// Logik:
//--------------------------------------------------------------------------
if (b1lp && b2lp && b3lp && b4lp) {
// Lüftungsempfehlung, alle bedingungenen erfüllt
lueftenText = "Bedingungen für Entfeuchten, Kühlen und Auskühlschutz erfüllt.";
setState(idLueften, true);
setState(idLueftenHys,false);
if (debug) log(raum + ': <span style="color:limegreen;"><b>Lüftungsempfehlung</b></span>');
} else if (b1ln || b2ln || b3ln || b4ln) {
// Fenster zu. Ein Ausschlusskriterium reicht für die Empfehlung "Fenster zu".
lueftenText = "Fenster zu:<br>";
if (b1ln) lueftenText += b1lnText + "<br>";
if (b2ln) lueftenText += b2lnText + "<br>";
if (b3ln) lueftenText += b3lnText + "<br>";
if (b4ln) lueftenText += b4lnText + "<br>";
setState(idLueften, false);
setState(idLueftenHys,false);
if (debug) log(raum + ': <span style="color:red;"><b>Empfehlung Fenster zu</b></span>');
} else {
// Hysterese. Keine Änderung der bisherigen Empfehlung.
if (debug) log(raum + ': <span style="color:orange;"><b>im Bereich der Hysterese</b></span> (keine Änderung der Lüftungsempfehlung');
if (getState(idLueften).val === null) setState(idLueften,false); // noch keine Empfehlung vorhanden, "Fenster zu" empfehlen
lueftenText = "Hysterese, keine Änderung der Lüftungsempfehlung";
setState(idLueftenHys,true);
}
setState(idLueftenText, lueftenText);
/* Erklärung Lüftungslogik (von Paul53)
Ergänzung #4 (von Andy3268)
Lüften:
wenn abs. Aussenfeuchte < abs. Innenfeuchte - Hysterese (Entfeuchten)
UND Aussentemperatur < Innentemperatur - Hysterese (Kühlen)
UND Innentemperatur >= Raumtemperaturminimum + Hysterese (Auskühlschutz)
UND Innenfeuchte >= Raummaximalfechte
*/
// lüften (und - Alle Bedingungen müssen erfüllt sein):
// #1 - Entfeuchten: Außenluft ist mind. (hysEntfeuchten + 0,1) trockener als Innen
// #2 - Kühlen: Außentemperatur ist mindestens 0,6 Grad kühler als innen TODO: im Winter auch?
// #3 - Auskühlschutz: Innentemperatur ist höher als die Mindesttemperatur
// #4 - Raumfeuchte: Innenfeuchte ist höher als die Maximalfeuchte
// nicht lüften (oder):
// #1 - Außenluft ist zu feucht
// #2 - Außentemperatur zu warm
// #3 - Innentemperatur niedriger als Mindestraumtemperatur
// #4 - Innenfeuchte niedriger als Mindestfeuchte
if (debug) log(raum + ":" + cob(b4ln) + " Raumluft ist trocken genug (b4ln): ");
if (debug) log(raum + ":" + cob(b3ln) + " Außenluft ist zu feucht (b3ln): ");
if (debug) log(raum + ":" + cob(b2ln) + " Außentemperatur zu warm (b2ln): ");
if (debug) log(raum + ":" + cob(b1ln) + " Außenluft ist zu feucht (b1ln): " + ": xa: " + xa + " >= (xi - 0.1) " + (xi - 0.1));
if (debug) log(raum + ": Fenster zu (ein true reicht):");
//if (debug) log(raum + ": b1lp: " + b1lp+ ", b2lp: " + b2lp+ ", b3lp: " + b3lp, b4lp: " + b4lp);
if (debug) log(raum + ":" + cob(b4lp) + " Raumfeuchte ist niedriger als der Mindstwert (b4lp): ");
if (debug) log(raum + ":" + cob(b3lp) + " Innentemperatur ist höher als die Mindesttemperatur (b3lp): ");
if (debug) log(raum + ":" + cob(b2lp) + " Außentemperatur ist mindestens 0,6 Grad kühler als innen (b2lp): ");
if (debug) log(raum + ":" + cob(b1lp) + " Außenluft ist mind. 0,4° trockener als Innen (b1lp): xa: " + xa + " <= (xi - 0.4) " + (xi - 0.4));
if (debug) log(raum + ": Lüftungsempfehlung (alle Bedingungen auf true):");
if (debug) log(raum + ", ti:"+ti+", ta: "+ta+", xi:"+xi+", xa: "+xa+", mih:"+mih+", mit:"+mit,"info");
if (debug) log("<b>------ " + raum + " ------- Aussensensor: " + aussen + " -----------</b>");
}