Skip to content

SmartHome – humidity-dependent ventilation control

Reading time 3 minutes

Aktualisiert – January 8, 2025

Humidity-dependent ventilation control prevents the formation of condensation. The Niessmann-Bischof Flair models usually have a front window roller shutter. This keeps the cold out very well and ensures a temperature difference of around 14 °C (e.g. 4 °C between the roller shutter and the front window, 18 °C in the living room behind the roller shutter).

The advantage of this good insulation separation between the living area and the windshield area is that the heat in the living area remains effectively focused on the inside. The disadvantage, however, is that condensation forms on the windshield as a result of the large difference in temperature and the associated significantly higher humidity.

Minimizing or even preventing this is the purpose of the automated ventilation function presented here using the built-in vehicle fan (Fiat Ducato 244 variant).

Aber auch daheim lässt sich diese smarte Lösung zur Vermeidung von Schimmel, z.B. in Kellerräumen nutzen, entweder, um einen Lüfter oder / und eine Heizung zu aktivieren, um das Erreichen des Taupunktes zu unterbinden.

cabling

Parallel to the white-black cable of the fan connection on the selector switch in the vehicle's dashboard, a cable is pulled to one of the four potential-free relay contacts of the Homematic 4-way relay module. The associated second relay contact is connected to battery positive.

If the relay is activated programmatically when a critical humidity value is exceeded, the first stage of the vehicle fan switches on and switches off again when a non-critical value is reached.

Required hardware

The hardware to be installed is limited to two Homematic components:

programming

The program shown saves the currently measured air humidity and the temperature of the temperature-humidity sensor in the driver's cab in the variables F_FH and T_FH, as well as the temperature and humidity of the wall thermostat in the variables T_WT and F_WT. The values calculated from this ultimately result in the recommendation “air" or "don't ventilate“. which is stored in the variable Ventilation.

According to the result, for example: Channel 1 of the 4-fold relay module, or the fan motor at level 1, is switched on.

The program:

Program for ventilation recommendations / condensation avoidance

The code:

real T_WT = dom.GetObject("T_actual_WT").Value();
WriteLine("T_actual_WT / T_WT");WriteLine(T_WT);
real F_WT = dom.GetObject("F_actual_WT").Value();
WriteLine("F_actual_WT / F_WT");WriteLine(F_WT);

real T_FH = dom.GetObject("T_actual_FH").Value();
WriteLine("T_actual_FH / T_FH");WriteLine(T_FH);
real F_FH = dom.GetObject("F_actual_FH").Value();
WriteLine("F_actual_FH / F_FH");WriteLine(F_FH);

var Airing = dom.GetObject("Airing").Value();

integer rF_WT = F_WT; ! relative humidity in % inside
integer rF_FH = F_FH; ! relative humidity in % outside

real r = (17.62 * T_WT) / (243.12 + T_WT);WriteLine("r (WT)");WriteLine(r);
real e = r.Exp()*611.2;WriteLine("e (WT)");WriteLine(e);
real eSat = e * rF_WT;WriteLine("eSat (WT)");WriteLine(eSat);
real F_WT = ((eSat / 461.51 * (T_WT+273.15))10).ToString(2);WriteLine("F_WT");WriteLine(F_WT); WriteLine("abs. humidity inside e (WT): " + F_WT);

real r = (17.62 * T_FH) / (243.12 + T_FH);WriteLine("r (FH)");WriteLine(r);
real e = r.Exp()*611.2;WriteLine("e (FH)");WriteLine(e);
real eSat = e * rF_FH;WriteLine("eSat (FH)");WriteLine(eSat);
real F_FH = ((eSat / 461.51 * (T_FH+273.15))10).ToString(2);WriteLine("F_FH");WriteLine(F_FH); WriteLine("abs. humidity outside e: " + F_FH);

! Absolute humidity - inside
if (T_WT < 0.0) {T_WT = 0.0;}
if (T_WT < 10.0)
{ F_WT = (3.78 + (0.29 * T_WT) + (0.0046 * T_WT * T_WT) + (0.00051 * T_WT * T_WT * T_WT)) * 0.01 * rF_WT;
WriteLine("F_WT abs.F if T_WT < 10.0");WriteLine(F_WT);
}
else
{ F_WT = (7.62 + (0.51 * (T_WT-10.0)) + (0.0143 * (T_WT-10.0) * (T_WT-10.0)) + (0.00045 * (T_WT-10.0) * (T_WT-10.0) * (T_WT- 10.0))) * 0.01 * rF_WT;
WriteLine("F_WT abs.F else");WriteLine(F_WT);
}

! Absolute humidity - outside
if (T_FH < 0.0) {T_FH = 0.0;}
if (T_FH < 10.0)
{ F_FH = (3.78 + (0.29 * T_FH) + (0.0046 * T_FH * T_FH) + (0.00051 * T_FH * T_FH * T_FH)) * 0.01 * rF_FH;
WriteLine("F_FH abs.F if T_FH < 10.0");WriteLine(F_FH);
}
else
{ F_FH = (7.62 + (0.51 * (T_FH-10.0)) + (0.0143 * (T_FH-10.0) * (T_FH-10.0)) + (0.00045 * (T_FH-10.0) * (T_FH-10.0) * (T_FH- 10.0))) * 0.01 * rF_FH;
WriteLine("F_FH abs.F else");WriteLine(F_FH);
}
WriteLine(" ");
WriteLine("Temperature inside: (T_WT)" + T_WT);
WriteLine("rel. humidity inside (rF_WT)%: " + rF_WT);
WriteLine("abs. humidity inside: F_WT)" + F_WT);
WriteLine("Outside temperature: (T_FH)" + T_FH);
WriteLine("rel. humidity outside (rF_FH)%: " + rF_FH);
WriteLine("abs. humidity outside: (F_FH)" + F_FH);

! Saturation (0.5 g/kg at 0.7 K hysteresis)
if ((F_FH <= (F_WT - 0.8)) && (T_FH <= (T_WT - 1.0)) && (T_WT > 20.7))
{Lueften.State(true);}
else
{ if ((F_FH >= (F_WT - 0.3)) || (T_FH >= (T_WT - 0.3)) || (T_WT <= 20.0))
{Lueften.State(false);}
}

WriteLine(“Airing”);WriteLine(Airing);

The variables are read from the respective temperature/humidity sensors in an external program and are thus passed on to all other programs without having to query the sensor again (in order to minimize the DutyCyclesand used in this program to calculate the recommendation “ventilate” or “do not ventilate”.

As always: everyone WriteLine Instructions can be followed by a functional test with a leading “! “ can be commented out or deleted.

Anyone who would like to have the calculation basis explained in more detail will here found it.

Leave a Reply

Your email address will not be published. Required fields are marked *

en_USEnglish