Mein Szenario:
Ich habe große Fensterfronten und bei zu hoher Luftfeuchtigkeit habe ich im Winter je nach Taupunkt relativ schnell Schwitzwasser an meinen Fenstern.
Abhilfe schafft derzeit manuelles Stoßlüften - daher das ganze auch eher bei sehr kühlem Wetter auftritt bin ich natürlich nicht scharf drauf "auf Gefühl" hin lange zu lüften sondern möchte es genau wissen um danach nicht unnötig zu heizen.
Bisher habe ich ganz stumpf den Luftfeuchtigkeitswert vom Wandthermostat genommen und ab 65% eine Pushnachricht gesendet um dann das Fenster aufzumachen...
Nun habe ich hier aber gelesen dass der Wert so nicht korrekt ist und man anstatt des (relativen) Wertes vom Thermostat den absoluten Wert berechnen und nehmen soll daher Feuchtigkeit an Wand / Fenster abhängig von Taupunkt & tatsächlicher Luftfeuchte ist.
Und auf dem Weg von Berechnung zu Berechnung und Script zu Script habe ich irgendwie den Faden verloren...
Meine Ausrüstung:
- pivCCU3
- Wandthermostat (HmIP-WTH-2)
- Außenthermostat (HmIP-STHO)
- Fensterkontakte (HMIP-SWDO)
Ich gehe derzeit folgendermaßen vor
Taupunkte innen und außen berechnen und als Systemvariable ablegen (Beispiel für außen):
Code: Alles auswählen
var t = dom.GetObject("HmIP-RF.#####:1.ACTUAL_TEMPERATURE").Value();
WriteLine(t);
var rf = dom.GetObject("HmIP-RF.#####:1.HUMIDITY").Value();
WriteLine(rf);
var rf1 = 0.01*rf;
var k1 = 0.124688;
var k2 = 109.8;
var s = rf1.Pow(k1);
var Td = (s*(k2 + t)) - k2;
dom.GetObject("Taupunkt").State(Td);
Luftfeuchte berechnen und als Systemvariable ablegen (Beispiel für außen):
Code: Alles auswählen
! Absolute Luftfeuchte berechnen und in Systemvariable schreiben
! Raumname ist Bestandteil des Kanalnamens (Raum.Sensor)
! und des Namens der Systemvariable (Raum:Feuchtegehalt)
string raum = "Wohnung";
! Lokale Variablen
real t; ! Temperatur in °C
integer rf; ! relative Feuchte in %
real af; ! Feuchtegehalt in g/kg
! Werte einlesen
t = dom.GetObject("HmIP-RF.#####:1.ACTUAL_TEMPERATURE").Value();
rf = dom.GetObject("HmIP-RF.#####:1.HUMIDITY").Value();
! Berechnung Sättigungsfeuchtegehalt
if (t < 0.0) {t = 0.0;}
if (t < 10.0)
{ af = (3.78 + (0.285 * t) + (0.0052 * t * t) + (0.0005 * t * t * t));
}
else
{ af = (7.62 + (0.524 * (t-10.0)) + (0.0131 * (t-10.0) * (t-10.0)) + (0.00048 * (t-10.0) * (t-10.0) * (t-10.0)));
}
! Feuchtegehalt
af = (af * rf) / (100.0 + af * (100.0 - rf) / 622);
!In Systemvariable schreiben
dom.GetObject("Wohung:Feuchtegehalt").State(af);
Code: Alles auswählen
! Berechnung des Taupunktes und der Schimmelwarnung
string stdout;
string stderr;
object oTi = dom.GetObject("HmIP-RF.#####:1.ACTUAL_TEMPERATURE");
object oHi = dom.GetObject("HmIP-RF.#####:1.HUMIDITY");
object oTaupunkt = dom.GetObject("Taupunkt innen");
object oSchimmel = dom.GetObject("Schimmelgefahr");
object oTa = dom.GetObject("HmIP-RF.#####:1.ACTUAL_TEMPERATURE");
var Ta = oTa.Value(); ! Temperatur aussen
var Ti = oTi.Value(); ! Temperatur innen
var Hi = oHi.Value(); ! Humidity (Feuchtigkeit) innen
var WT = Ta + (Ti - Ta) * 0.588; ! Berechnung der Wandtemperatur. Isolationsfaktor ist anzupassen
string url="http://127.0.0.1/addons/visu/Taupunkt.cgi?Temperatur=" # Ti # "&Feuchte=" # Hi;
system.Exec("wget -O - " # url, &stdout, &stderr);
if (stdout.Length() > 0)
{
if ( stdout.StrValueByIndex(";", 0) == "OK")
{
var Taupunkt = stdout.StrValueByIndex(";", 3).ToFloat();
oTaupunkt.Variable(Taupunkt);
}
}
! Schimmelwarnung
! 0 - keine Gefahr
! 1 - Warnung
! 2 - Alarm
if (WT > (Taupunkt + 2.0)) { oSchimmel.Variable(0);}
else {
if ((Taupunkt + 1.0) > WT) { oSchimmel.Variable(2);}
else { oSchimmel.Variable(1);}
}
Bisher habe ich aber, trotz Wasser an den Fenster, niemals einen Wechsel der Schimmelwarnung erlebt. Ich hab irgendwie das Gefühl zwischendurch einfach einen Gedankenfehler beim Sammeln der Scripte und Werte zu haben.
Hat jemand einen Tipp?
Schöne Grüße
Manuel