Seite 18 von 22

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 29.07.2019, 12:20
von schlichi
Hallo Zusammen,

ich möchte da mal Nachfragen:

Sind die Codezeilen

Code: Alles auswählen

    
object oHa   = oTHi.DPByHssDP("HUMIDITY");
integer rfau = oHi.Value(); ! relative Feuchte in % außen
so richtig? Müsste es nicht

Code: Alles auswählen

object oHa   = oTHa.DPByHssDP("HUMIDITY");
integer rfau = oHa.Value(); ! relative Feuchte in % außen

heissen?
Gruß
schlichi

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 29.07.2019, 13:01
von paul53
schlichi hat geschrieben:
29.07.2019, 12:20
Müsste es nicht

Code: Alles auswählen

    object oHa   = oTHa.DPByHssDP("HUMIDITY");
	
    integer rfau = oHa.Value(); ! relative Feuchte in % außen
heissen?
Ja.

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 03.11.2019, 17:23
von ueffchen
Ich habe ein paar Fragen.

Die Skriptprüfung im WebUI meldet keine Fehler, und die Aussage des Programms ist "ist falsch/keine Gefahr"
Allerdings weiss ich nicht, ob das Programm wirklich durchlüft, aus verschiedenen Gründen:


Mein RT hat Leerzeichen "RT Schlafzimmer unten"
Ich habe keinen Aussenfühler, sondern eine Variable "OpenWeather Luftfeuchte (rel.)", die als Zahl definiert ist.
Sollte das klappen?
Z.ZZZ habe ich mit 0.268 übernommen
Wie kann ich prüfen, ob das Programm irgendwas berechnet?

Danke, ueffchen

Code: Alles auswählen

! RT Schlafzimmer unten Berechnung der Schimmelwarnung und Lüftungsempfehlung 
    object oTHi = dom.GetObject("RT Schlafzimmer unten_Raumregler:1");
    object oTi = oTHi.DPByHssDP("TEMPERATURE");
    object oHi = oTHi.DPByHssDP("HUMIDITY");
    object oSchimmel = dom.GetObject("RT Schlafzimmer unten_Schimmel");
	object oLueften = dom.GetObject("RT Schlafzimmer unten_Lueften");
    object oTHa = dom.GetObject("OpenWeather Luftfeuchte (rel.)");
    object oTa = oTHa.DPByHssDP("TEMPERATURE");
    object oHa = oTHa.DPByHssDP("HUMIDITY");
	! Programmteil Lüftungsempfehlung
	! Lokale Variablen
    real tin = oTi.Value(); ! Temperatur in °C innen
    integer rfin = oHi.Value(); ! relative Feuchte in % innen
	real afin;  ! absolute feuchte in g/kg innen
	real tau = oTa.Value(); ! Temperatur in °C außen
    integer rfau = oHa.Value(); ! relative Feuchte in % außen
 	real afau; ! absolute feuchte in g/kg außen
	! Berechnung der absoluten Feuchte innen
    if (tin < 0.0) {tin = 0.0;}
    if (tin < 10.0)
    { afin = (3.78 + (0.29 * tin) + (0.0046 * tin * tin) + (0.00051 * tin * tin * tin)) * 0.01 * rfin;
    }
    else
    { afin = (7.62 + (0.51 * (tin-10.0)) + (0.0143 * (tin-10.0) * (tin-10.0)) + (0.00045 * (tin-10.0) * (tin-10.0) * (tin-10.0))) * 0.01 * rfin;
    }
	! Berechnung der absoluten Feuchte außen
	if (tau < 0.0) {tau = 0.0;}
    if (tau < 10.0)
    { afau = (3.78 + (0.29 * tau) + (0.0046 * tau * tau) + (0.00051 * tau * tau * tau)) * 0.01 * rfau;
    }
    else
    { afau = (7.62 + (0.51 * (tau-10.0)) + (0.0143 * (tau-10.0) * (tau-10.0)) + (0.00045 * (tau-10.0) * (tau-10.0) * (tau-10.0))) * 0.01 * rfau;
    }
	! Berechnung der Lüftungsempfehlung mit 0,5 g/kg und 0,7 K Hysterese
	if ((afau <= (afin - 0.8)) && (tau <= (tin - 1.0)) && (tin > 25.0))
	{oLueften.Variable(true);}
	else
	{ if ((afau >= (afin - 0.3)) || (tau >= (tin - 0.3)) || (tin <= 10.0))
	{oLueften.Variable(false);}
	}
	! Programmteil Schimmelwarnung
	! Berechnung der Oberflächentemperatur der Außenwandecke
    real tw; ! Oberfächentemperatur der Außenwandecke in °C
    real ta = oTa.Value(); ! Außentemperatur in °C
    real ti = oTi.Value(); ! Raumtemperatur in °C
    tw = ti + ((0.13 / 0.268) * (ta - ti)); ! Rges = 0.268 empirisch ermittelt
	! Lokale Variablen
    real    t;    ! Temperatur in °C
    integer rf; ! relative Feuchte in %
    real    afw;  ! Schimmelwarn-Grenzfeuchte in g/kg
    real    afa;  ! Schimmelalarm-Grenzfeuchte in g/kg
    t = tw;
    ! Berechnung Warn-Grenzfeuchte
    rf = 70;
    if (t < 0.0) {t = 0.0;}
    if (t < 10.0)
    { afw = (3.78 + (0.29 * t) + (0.0046 * t * t) + (0.00051 * t * t * t)) * 0.01 * rf;
    }
    else
    { afw = (7.62 + (0.51 * (t-10.0)) + (0.0143 * (t-10.0) * (t-10.0)) + (0.00045 * (t-10.0) * (t-10.0) * (t-10.0))) * 0.01 * rf;
    }
    ! Berechnung Alarm-Grenzfeuchte
    rf = 80;
    if (t < 0.0) {t = 0.0;}
    if (t < 10.0)
    { afa = (3.78 + (0.29 * t) + (0.0046 * t * t) + (0.00051 * t * t * t)) * 0.01 * rf;
    }
    else
    { afa = (7.62 + (0.51 * (t-10.0)) + (0.0143 * (t-10.0) * (t-10.0)) + (0.00045 * (t-10.0) * (t-10.0) * (t-10.0))) * 0.01 * rf;
    }
 	! Schimmelwarnung
	! 0 - keine Gefahr
	! 1 - Warnung
	! 2 - Alarm
	if (afin > afa) {oSchimmel.Variable(2);}
        else {
            if (afin > afw) {oSchimmel.Variable(1);}
            else {oSchimmel.Variable(0);}
        }

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 03.11.2019, 17:50
von JPS
ueffchen hat geschrieben:
03.11.2019, 17:23
Mein RT hat Leerzeichen "RT Schlafzimmer unten"
Dann muss der im Skript auch so benannt werden: RT Schlafzimmer unten:1
ueffchen hat geschrieben:
03.11.2019, 17:23
Ich habe keinen Aussenfühler, sondern eine Variable "OpenWeather Luftfeuchte (rel.)", die als Zahl definiert ist.
Sollte das klappen?
Programmtechnisch kannst du das schon machen, wenn die regionale Luftfeuchte aus dem Netz allerdings von der "echten" Luftfeuchte vor Ort abweicht, was wahrscheinlich ist, wirst du falsche Ergebnisse bekommen.
ueffchen hat geschrieben:
03.11.2019, 17:23
Z.ZZZ habe ich mit 0.268 übernommen
Auch hier gilt, wenn der Gesamtwärmedurchgangswiderstand Rges deiner Wand nicht zufällig diesen Wert hat, werden falsche Ergebnisse berechnet. Der Rges muss individuell ermittelt werden, sonst macht das Ganze keinen Sinn.
ueffchen hat geschrieben:
03.11.2019, 17:23
Wie kann ich prüfen, ob das Programm irgendwas berechnet?
Am besten im Skript an diversen Stellen "WriteLine" zum Auslesen der Variablen einbauen und das Skript im HomeMatic Script Executor (oder in der WebUI mit Skript testen) durchlaufen lassen, dann siehst du die Werte im Ausgabefenster und kannst auch ermitteln, wie weit das Skript durchläuft.

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 03.05.2020, 16:09
von mbhomie007
Hallo zusammen,

ich habe das Skript durchgearbeitet, aber es läuft nicht durch und die Systemvariablen werden auch nicht beschrieben.

Ich habe die Homematic IP Temperatursensoren HMIP-STHO, deswegen ACTUAL TEMPERATURE.
XX:X + YY.Y und Z.ZZZ habe ich eingetragen.

Am Ende des Skripts möchte ich die absolute Feuchte noch in Systemvariablen schreiben.

Code: Alles auswählen

! Berechnung der Schimmelwarnung und Lueftungsempfehlung
object oTHi = dom.GetObject("Temperatur- und Luftfeuchtigkeitssensor Garage innen"); ! Name des Temperatur-/Feuchtesensors im Innenraum
object oTi = oTHi.DPByHssDP("ACTUAL_TEMPERATURE");
object oHi = oTHi.DPByHssDP("HUMIDITY");
object oSchimmel = dom.GetObject("Garage Schimmelgefahr");! Name der Systemvariablen für die Schimmelgefahranalyse (Werteliste: keine Gefahr;Warnung;Alarm)
object oLueften = dom.GetObject("Garage Lüftungsempfehlung"); ! Name der Systemvariablen für die Lüftungsempfehlung (Logikwert: wahr = Ja, falsch = Nein)
object oTHa = dom.GetObject("Temperatur- und Luftfeuchtigkeitssensor Garten"); ! Name des Temperatur-/Feuchtesensors im Außenbereich
object oTa = oTHa.DPByHssDP("ACTUAL_TEMPERATURE");
object oHa = oTHa.DPByHssDP("HUMIDITY");
! Programmteil Lüftungsempfehlung
! Lokale Variablen
real tin = oTi.Value(); ! Temperatur in °C innen
integer rfin = oHi.Value(); ! relative Feuchte in % innen
real afin;  ! absolute feuchte in g/kg innen
real tau = oTa.Value(); ! Temperatur in °C außen
integer rfau = oHa.Value(); ! relative Feuchte in % außen
real    afau; ! absolute feuchte in g/kg außen
! Berechnung der absoluten Feuchte innen
if (tin < 0.0) {tin = 0.0;}
if (tin < 10.0)
{ afin = (3.78 + (0.285 * tin) + (0.0052 * tin * tin) + (0.0005 * tin * tin * tin));
}
else
{ afin = (7.62 + (0.524 * (tin-10.0)) + (0.0131 * (tin-10.0) * (tin-10.0)) + (0.00048 * (tin-10.0) * (tin-10.0) * (tin-10.0)));
}
afin = (afin * rfin) / (100.0 + afin * (100.0 - rfin) / 622);
! Berechnung der absoluten Feuchte außen
if (tau < 0.0) {tau = 0.0;}
if (tau < 10.0)
{ afau = (3.78 + (0.285 * tau) + (0.0052 * tau * tau) + (0.0005 * tau * tau * tau));
}
else
{ afau = (7.62 + (0.524 * (tau-10.0)) + (0.0131 * (tau-10.0) * (tau-10.0)) + (0.00048 * (tau-10.0) * (tau-10.0) * (tau-10.0)));
}
afau = (afau * rfau) / (100.0 + afau * (100.0 - rfau) / 622);
! Berechnung der Lüftungsempfehlung mit 0,5 g/kg und 0,7 K Hysterese
if ((afau <= (afin - 0.8)) && (tau <= (tin - 1.0)) && (tin > 25.0))
{oLueften.State(true);}
else
{ if ((afau >= (afin - 0.3)) || (tau >= (tin - 0.3)) || (tin <= 5.0))
{oLueften.State(false);}
}
! Programmteil Schimmelwarnung
! Berechnung der Oberflächentemperatur der Außenwandecke
real tw; ! Oberfächentemperatur der Außenwandecke in °C
real ta = oTa.Value(); ! Außentemperatur in °C
real ti = oTi.Value(); ! Raumtemperatur in °C
tw = ti + ((0.13 / 0.4) * (ta - ti)); ! Rges = 0.4 empirisch ermittelt
! Lokale Variablen
real    t;    ! Temperatur in °C
integer rf; ! relative Feuchte in %
real    afw;  ! Schimmelwarn-Grenzfeuchte in g/kg
real    afa;  ! Schimmelalarm-Grenzfeuchte in g/kg
t = tw;
! Berechnung Warn-Grenzfeuchte
rf = 70;
if (t < 0.0) {t = 0.0;}
if (t < 10.0)
{ afw = (3.78 + (0.285 * t) + (0.0052 * t * t) + (0.0005 * t * t * t));
}
else
{ afw = (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)));
}
afw = (afw * rf) / (100.0 + afw * (100.0 - rf) / 622);
! Berechnung Alarm-Grenzfeuchte
rf = 80;
if (t < 0.0) {t = 0.0;}
if (t < 10.0)
{ afa = (3.78 + (0.285 * t) + (0.0052 * t * t) + (0.0005 * t * t * t));
}
else
{ afa = (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)));
}
afa = (afa * rf) / (100.0 + afa * (100.0 - rf) / 622);
! Schimmelwarnung
! 0 - keine Gefahr
! 1 - Warnung
! 2 - Alarm
if ((afin > afa) && (rfin > 64 )) {oSchimmel.State(2);}
    else {
        if ((afin > afa) || (afin > afw)) {oSchimmel.State(1);}
        else {oSchimmel.State(0);}
}
!Die absolute Luftfeuchte drinnen und draußen in eine Variable schreiben
dom.GetObject("Temperatur- und Luftfeuchtigkeitssensor Garage innen absolute Luftfeuchte").State(afin); !Innen
dom.GetObject("Temperatur- und Luftfeuchtigkeitssensor Garten absolute Luftfeuchte").State(afau); !Außen
}
Kann sich jemand das Skript mal anschauen?

Viele Grüße
Marco

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 03.05.2020, 16:29
von Black
heisst so dein Kanal 1 des sensors ?

dom.GetObject("Temperatur- und Luftfeuchtigkeitssensor Garage innen");

Black

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 03.05.2020, 16:39
von mbhomie007
Black hat geschrieben:
03.05.2020, 16:29
heisst so dein Kanal 1 des sensors ?

dom.GetObject("Temperatur- und Luftfeuchtigkeitssensor Garage innen");

Black
Ja genau, ist richtig.

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 03.05.2020, 21:38
von Black
was sagt den das fehlerprotokoll ?

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 03.05.2020, 22:12
von mbhomie007

Code: Alles auswählen

May  3 21:10:58 Homematic-CCU local0.err ReGaHss: ERROR: ScriptRuntimeError: ! Berechnung der Schimmelwarnung und Lueftungsempfehlung object oTHi = dom.GetObject("Temperatur- und Luftfeuchtigkeitssensor Garage innen"); ! Name des Temperatur-/Feuchtesensors im Innenraum object oTi = oTHi.DPByHssDP("ACTUAL_TEMPERATURE"); object oHi = oTHi.DPByHssDP("HUMIDITY"); object oSchimmel = dom.GetObject("Garage Schimmelgefahr");! Name der Systemvariablen für die Schimmelgefahranalyse (Werteliste: keine Gefahr;Warnung;Alarm) object oLueften = dom.GetObject("Garage Lüftungsempfehlung"); ! Name der Systemvariablen für die Lüftungsempfehlung (Logikwert: wahr = Ja, falsch = Nein) object oTHa = dom.GetObject("Temperatur- und Luftfeuchtigkeitssensor Garten"); ! Name des Temperatur-/Feuchtesensors im Außenbereich object oTa = oTHa.DPByHssDP("ACTUAL_TEMPERATURE"); object oHa = oTHa.DPByHssDP("HUMIDITY"); ! Programmteil Lüftungsempfehlung ! Lokale Variablen real tin = oTi.Value(); ! Temperatur in °C innen integer rfin = oHi.Value(); ! relative Feuch

Code: Alles auswählen

May  3 21:23:49 Homematic-CCU local0.err ReGaHss: ERROR: ScriptRuntimeError: integer id = 1215; [ExecError():iseESPexec.cpp:12798]
May  3 21:23:50 Homematic-CCU local0.err ReGaHss: ERROR: ScriptRuntimeError: integer id = 1215; [ExecError():iseESPexec.cpp:12798]

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 03.05.2020, 22:33
von Black
nicht sehr grad vielsagend.

probier mal bitte das:

Code: Alles auswählen

! Berechnung der Schimmelwarnung und Lueftungsempfehlung
object oTHi = dom.GetObject("Temperatur- und Luftfeuchtigkeitssensor Garage innen"); ! Name des Temperatur-/Feuchtesensors im Innenraum
object oTi = oTHi.DPByHssDP("ACTUAL_TEMPERATURE");
object oHi = oTHi.DPByHssDP("HUMIDITY");
object oSchimmel = dom.GetObject("Garage Schimmelgefahr");! Name der Systemvariablen für die Schimmelgefahranalyse (Werteliste: keine Gefahr;Warnung;Alarm)
object oLueften = dom.GetObject("Garage Lüftungsempfehlung"); ! Name der Systemvariablen für die Lüftungsempfehlung (Logikwert: wahr = Ja, falsch = Nein)
object oTHa = dom.GetObject("Temperatur- und Luftfeuchtigkeitssensor Garten"); ! Name des Temperatur-/Feuchtesensors im Außenbereich
object oTa = oTHa.DPByHssDP("ACTUAL_TEMPERATURE");
object oHa = oTHa.DPByHssDP("HUMIDITY");

WriteLine (oTHi);
WriteLine (oTi);
WriteLine (oHi);

WriteLine (oTHa);
WriteLine (oTa);
WriteLine (oHa);

WriteLine (oSchimmel);
WriteLine (oLueften);

imer noch Scriptruntimeerror ?
ober irgendeine Ausgabe null ?

wenn ja, gibts eines dieser DPs nicht