Seite 17 von 22

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 12.10.2018, 11:13
von hanan
Hallo zusammen
Die beiden vorhergehenden Anfragen sind erledigt.
Habe den Fehler gefunden...

Liebe Grüsse aus der Schweiz

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 12.07.2019, 10:24
von Bernd80
Hallo.....

nachdem ich auch Probleme mit Schimmel im Keller habe, hätte ich auch gerne eine Lüftungssteuerung. Nun bin ich auch nicht so der Profi in diesem Gebiet :oops:
Leider werden meine Systemvariablen nicht geschrieben. Folgendes wurde übernommen:

Code: Alles auswählen

    ! Garage Berechnung der Schimmelwarnung und Lüftungsempfehlung 
    object oTHi = dom.GetObject("Thermostat_Keller:1");
    object oTi   = oTHi.DPByHssDP("TEMPERATURE");
    object oHi   = oTHi.DPByHssDP("HUMIDITY");
    object oSchimmel = dom.GetObject("Keller_Schimmel");
	object oLueften = dom.GetObject("Keller_Lueften");
    object oTHa = dom.GetObject("Außentemperatursensor:1");
    object oTa = oTHa.DPByHssDP("TEMPERATURE");
    object oHa   = oTHi.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 = oHi.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
    if (afau < afin - 0.8) {oLueften.Variable(true);}
    else
    { if (afau >= afin - 0.3) {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);}
        }
Bildschirmfoto 2019-07-12 um 10.20.47.png
Wenn ich das Script manuel laufen lasse sollte doch eigentlich was geschrieben werden oder? Der Außensensor ist ein Homematic IP Sensor und innen ein normales Homematic Wandthermostat

Lg

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 12.07.2019, 17:36
von alchy
Für den Anfang würde ich erstmal die ersten paar Zeilen klären.
Die Objektnamen werden da schon mit ziemlicher Sicherheit nicht stimmen.

Thermostat_Keller:1 ist der Kanalname von welcher KanalNr. eines welchen Gerätes?
Der Name suggeriert Kanal 1 - Welcher Art ist also das Thermostat?

Wenn dein Kellerthermostat ein HM-TC-IT-WM-W-EU ist sollte der Teil funktionieren.
Handelt es ich z.B. dagegen z.B. um ein HmIP-WTH-2 wird es so nicht funktionieren, da der Datenpunkt dann ACTUAL_TEMPERATURE statt TEMPERATURE heißen muss.

Ist das gelöst geht es mit Außentemperatursensor:1 weiter, die Fragen sind dieselben.
Siehe auch hier:
viewtopic.php?f=31&t=30127#p273730

Alchy

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 12.07.2019, 20:24
von Bernd80
Hallo.... das Gerät im Keller ist ein HM-TC-IT-WM-W-EU . Ist es so wie ich es eingetragen habe dann ok ?

Der Außentemperaturfühler ist folgender
Bildschirmfoto 2019-07-12 um 20.17.21.png
was genau muss ich da ändern?

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 12.07.2019, 21:30
von alchy
Bernd80 hat geschrieben:
12.07.2019, 20:24
Ist es so wie ich es eingetragen habe dann ok ?


Ja, hatte ich ja geschrieben, die ersten 3 Zeilen deines Scriptes sollten also passen.
Bernd80 hat geschrieben:
12.07.2019, 20:24
Der Außentemperaturfühler ist folgender
Da musst du schon selber nachschauen, ich habe so ein Teil nicht.
lt. Doku sollte der den Datenpunkt ACTUAL_TEMPERATURE besitzen.

Was dann theoretisch zu den ersten Zeilen führen sollte:

Code: Alles auswählen

! Garage Berechnung der Schimmelwarnung und Lüftungsempfehlung 
    object oTHi = dom.GetObject("Thermostat_Keller:1");
    object oTi   = oTHi.DPByHssDP("TEMPERATURE");
    object oHi   = oTHi.DPByHssDP("HUMIDITY");
    object oSchimmel = dom.GetObject("Keller_Schimmel");
	object oLueften = dom.GetObject("Keller_Lueften");
    object oTHa = dom.GetObject("Außentemperatursensor:1");
    object oTa = oTHa.DPByHssDP("ACTUAL_TEMPERATURE");
    object oHa   = oTHi.DPByHssDP("HUMIDITY");
wobei natürlich Keller_Schimmel & Keller_Lueften der korrekte Objektname sein muss , im besten Fall für die Systemvariablen, welche du im weiteren Verlauf benutzen willst. Das >> Fehlerprotokoll << sollte im Zweifelsfall helfen.


Stellt sich nun die Frage, warum ich dir den Link gepostet habe?
Da ist am Ende ein Script, wo du nur die Seriennummer deines Gerätes eingeben brauchst und nach Ausführen z.B. unter script testen werden dir die Datenpunkte des Gerätes angezeigt.

Alchy

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 14.07.2019, 08:55
von Bernd80
Hey Alchy.....

durch dein Script hab ich die Datenpunkte auslesen können....
Bildschirmfoto 2019-07-14 um 08.43.36.png
daraus ergibt sich dann folgendes Script

Code: Alles auswählen

    ! Garage Berechnung der Schimmelwarnung und Lüftungsempfehlung 
    object oTHi = dom.GetObject("Thermostat_Keller:1");
    object oTi   = oTHi.DPByHssDP("TEMPERATURE");
    object oHi   = oTHi.DPByHssDP("HUMIDITY");
    object oSchimmel = dom.GetObject("Keller_Schimmel");
	object oLueften = dom.GetObject("Keller_Lueften");
    object oTHa = dom.GetObject("Außentemperatursensor:1");
    object oTa = oTHa.DPByHssDP("ACTUAL_TEMPERATURE");
    object oHa   = oTHi.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 = oHi.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
    if (afau < afin - 0.8) {oLueften.Variable(true);}
    else
    { if (afau >= afin - 0.3) {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);}
        }
Die Systemvariablen sind auch genau wie im Script angelegt
Bildschirmfoto 2019-07-14 um 08.53.43.png
leider wird in den Variablen nichts geschrieben beim durchlaufen des Scripts... Fehleranalyse im Script zeigt keine Fehler an

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 14.07.2019, 15:20
von alchy
Bernd80 hat geschrieben:
14.07.2019, 08:55
Fehleranalyse im Script zeigt keine Fehler an
Wenn du damit den Button Fehlerprüfung meinst, der ist kaum relevant. Ich habe etwas anderes verlinkt.


Es ist weder mein Script noch habe ich es getestet. Mein Ansinnen war die die wahrscheinlichsten Fehler aufzuzeigen was wohl auch erstmal gelungen ist.

Wenn ich mir den Code so anschaue, wirst du nur denken, es wird nix geschrieben, da der Zeitstempel der Variablen sich nicht ändert.
Mal die Variablen auf andere Werte gesetzt ud dann das Script ausgeführt?
Im Script wird die "falsche" Methode benutzt um Werte in die Systemvariablen zu schreiben.
Statt .Variable() sollte besser .State() verwendet werden.

Hier mal dein gepostetes Script entsprechend korrigiert:

Code: Alles auswählen

! Garage Berechnung der Schimmelwarnung und Lüftungsempfehlung 
    object oTHi = dom.GetObject("Thermostat_Keller:1");
    object oTi   = oTHi.DPByHssDP("TEMPERATURE");
    object oHi   = oTHi.DPByHssDP("HUMIDITY");
    object oSchimmel = dom.GetObject("Keller_Schimmel");
	object oLueften = dom.GetObject("Keller_Lueften");
    object oTHa = dom.GetObject("Außentemperatursensor:1");
    object oTa = oTHa.DPByHssDP("ACTUAL_TEMPERATURE");
    object oHa   = oTHi.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 = oHi.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
    if (afau < afin - 0.8) {oLueften.State(true);}
    else
    { if (afau >= afin - 0.3) {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.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.State(2);}
        else {
            if (afin > afw) {oSchimmel.State(1);}
            else {oSchimmel.State(0);}
        }
Alchy

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 14.07.2019, 17:07
von Bernd80
Also jetzt wird auf alle Fälle die Variable aktualisiert und es scheint zu laufen :D :D :D

Jetzt wäre natürlich noch perfekt wenn ich die absolute Luftfeuchte drinnen und draußen in eine Variable schreiben könnte. Wäre das möglich :?:

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 14.07.2019, 17:17
von paul53
Bernd80 hat geschrieben:
14.07.2019, 17:07
die absolute Luftfeuchte drinnen und draußen in eine Variable schreiben

Code: Alles auswählen

dom.GetObject("Name_der_SV_Keller").State(afin);
dom.GetObject("Name_der_SV_Außen").State(afau);

Re: Script zur Berechnung des Feuchtegehalts

Verfasst: 15.07.2019, 08:53
von Bernd80
Vielen Dank euch.... scheinbar läuft jetzt alles so wie es soll :D
Jetzt kann ich den Lüfter steuern und sicher sein das es auch was bringt. Danke!!!! :D