Anzeige des Taupunktes und der "Abs. Luftfeuchte" und bereitstellen in einer Variablen zur weiteren Nutzung.
Die Installation soll dabei möglichst automatisch und einfach sein.
Implementierung:
CCU-Programm anlegen, siehe: In diesem Beispiel habe ich 2 Sensoren angelegt. Mehr sind auch möglich. Für das CCU-Programm das folgende Script einfügen. Anpassungen sind nicht nötig!
Code: Alles auswählen
!Hinzufügen vom Taupunkt und Abs.Luftfeuchte zu Temperatursensoren und Wandthermostaten
!Copyleft M.Henke
!V 1.0
!Einzelne Systemvariablen können gelöscht werden. Werden alle gelöscht, so werden auch alle wieder angelegt
boolean debug = false;
!src für mich zum Testen 1524 Aussen Temp 14100 WW
integer srcId = ("$src$").ToInteger();
if (srcId > 0) {
object oSrc = dom.GetObject(srcId);
if ( !oSrc ) { quit; };
object oCh = channels.Get(oSrc.Channel());
}
else { quit; }
if (!oCh || (oSrc.Type() != OT_HSSDP)) {
quit;
}
object oDP = oCh.DPByHssDP(oSrc.HssType());
if ( debug ) {
WriteLine("run Kanal: "#oCh.ChnNumber()#", DP: \""#oSrc.HssType()#"\", Wert: "# "$val$");
WriteLine(oDP.Name() # " " # oDP.TypeName() # "-" # oDP.ValueName() # "-" # oDP.ID());
}
if (oSrc.HssType() != "ACTUAL_TEMPERATURE") {
if (oSrc.HssType() != "HUMIDITY") {
quit;
}
}
object dp = oCh.DPByHssDP("ACTUAL_TEMPERATURE");
if (!dp) { quit; }
real temp = dp.Value().ToFloat();
object dp = oCh.DPByHssDP("HUMIDITY");
if (!dp) { quit; }
real feuchte = dp.Value().ToFloat();
!WriteLine(temp # " " # feuchte);
!https://www.wetterochs.de/wetter/feuchte.html
real T = temp;
if (T < 0.0) { T = 0.0; }
real TK = T + 273.15; !Temperatur in Kelvin
real r = feuchte;
real a = 7.5;
real b = 237.3; !für T >= 0
real R = 8314.3; !J / (kmol * K)(universelle Gaskonstante)
real mw = 18.016; !kg / kmol(Molekulargewicht des Wasserdampfes)
real pp = (a * T) / (b + T);
real SDD = 6.1078 * (10.0).Pow(pp);
real DD = SDD * r / 100.0;
real v = (DD / 6.1078).Log10();
real TD = (b * v / (a - v));
real AF = (10.0).Pow(5.0) * (mw / R) * DD / TK;
string out = ""
# "\nTP: " # TD.Round(0).ToInteger() # " °C"
# "\nAF: " # AF.Round(0).ToInteger() # " g/m³";
WriteLine(out);
string praefix = "x_";
string sv_TP = "Taupunkt"; !Taupunkt
string sv_AbsF = "Abs.Luftfeuchte"; !Abs.Luftfeuchte
string sv_ref_TP = praefix # sv_TP # "_" # oCh.ID();
object svOj_TP = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sv_ref_TP);
string sv_ref_AbsF = praefix # sv_AbsF # "_" # oCh.ID();
object svOj_AbsF = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sv_ref_AbsF);
!Wenn noch keine Systemvariable vorhanden, diese anlegen
if ((!svOj_TP) && (!svOj_AbsF) ) {
if (!svOj_AbsF ) {
WriteLine("Erstelle: " # sv_ref_TP);
object svOj_list = dom.GetObject(ID_SYSTEM_VARIABLES);
svOj_TP = dom.CreateObject(OT_VARDP);
svOj_list.Add(svOj_TP.ID());
svOj_TP.Name(sv_ref_TP);
svOj_TP.ValueType(ivtFloat);
svOj_TP.ValueSubType(istGeneric);
svOj_TP.DPInfo('Taupunkt - ' # oCh.Name());
svOj_TP.ValueUnit('°C');
svOj_TP.State("0");
svOj_TP.ValueMin("0");
svOj_TP.ValueMax("50");
svOj_TP.Internal(false);
svOj_TP.Visible(true);
svOj_TP.Channel(oCh.ID());
oCh.DPs().Add(svOj_TP);
dom.RTUpdate(0);
}
if (!svOj_AbsF) {
WriteLine("Erstelle: " # sv_ref_AbsF);
object svOj_list = dom.GetObject(ID_SYSTEM_VARIABLES);
svOj_AbsF = dom.CreateObject(OT_VARDP);
svOj_list.Add(svOj_AbsF.ID());
svOj_AbsF.Name(sv_ref_AbsF);
svOj_AbsF.ValueType(ivtFloat);
svOj_AbsF.ValueSubType(istGeneric);
svOj_AbsF.DPInfo('Absolute Luftfeuchte - ' # oCh.Name());
svOj_AbsF.ValueUnit('g/m³');
svOj_AbsF.State("0");
svOj_AbsF.ValueMin("0");
svOj_AbsF.ValueMax("100");
svOj_AbsF.Internal(false);
svOj_AbsF.Visible(true);
svOj_AbsF.Channel(oCh.ID());
oCh.DPs().Add(svOj_AbsF);
dom.RTUpdate(0);
}
}
if ( svOj_TP ) {svOj_TP.State(TD)};
if ( svOj_AbsF ) {svOj_AbsF.State(AF)};

Erste wenn ein Sensor eine Aktualisierung (Temperatur oder Feuchte) schickt, erscheint die Anzeige.
Bei den Wandthermostaten reicht es sie zu bedienen. Bei mir kam durch umschalten auf Manuell und zurück auf Automatik die Anzeige sofort.
Ausblick:
Script zur Berechnung von Durchschnittswerten (Temperatur,Feuchte,Spannung,...), die einen Neustart der CCU überdauern. Stichwort: Tagesmitteltemperatur
Script zum Erzeugen von Differenzwerten berechnet auf 1 Stunde eines Datenpunktes, so das darüber z.B. der "Boost" der Wandheizung im Bad gesteuert werden kann. Die Dusche erhöht die Feuchte dramatisch -> Handtuch wärmen.
Siehe: viewtopic.php?f=26&t=75545
Script als Betriebsstundenzähler.
Siehe: viewtopic.php?f=60&t=75670&p=733990#p733990
Hoffe es kann einer gebrauchen.
G
Michael