Script zur Berechnung des Feuchtegehalts

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Benutzeravatar
hanan
Beiträge: 222
Registriert: 15.12.2012, 16:00
Danksagung erhalten: 1 Mal

Re: Script zur Berechnung des Feuchtegehalts

Beitrag von hanan » 12.10.2018, 11:13

Hallo zusammen
Die beiden vorhergehenden Anfragen sind erledigt.
Habe den Fehler gefunden...

Liebe Grüsse aus der Schweiz
Liebe Grüsse aus der Schweiz
Andy
_________________________________________________________________________________________________
Raspberrymatic auf NUC unter Proxmox mit RPI-RF-MOD Funkmodul und Antenne Aurel GP868, ca. 19x BidCos-RF und ca. 46x HmIP-RF, ioBroker auf NUC unter Proxmox, 4x Wiffi 3.0, Pulsecounter, Weatherman-Edition

Bernd80
Beiträge: 110
Registriert: 13.01.2016, 18:40

Re: Script zur Berechnung des Feuchtegehalts

Beitrag von Bernd80 » 12.07.2019, 10:24

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

alchy
Beiträge: 10744
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 671 Mal

Re: Script zur Berechnung des Feuchtegehalts

Beitrag von alchy » 12.07.2019, 17:36

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

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Bernd80
Beiträge: 110
Registriert: 13.01.2016, 18:40

Re: Script zur Berechnung des Feuchtegehalts

Beitrag von Bernd80 » 12.07.2019, 20:24

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?

alchy
Beiträge: 10744
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 671 Mal

Re: Script zur Berechnung des Feuchtegehalts

Beitrag von alchy » 12.07.2019, 21:30

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

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Bernd80
Beiträge: 110
Registriert: 13.01.2016, 18:40

Re: Script zur Berechnung des Feuchtegehalts

Beitrag von Bernd80 » 14.07.2019, 08:55

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

alchy
Beiträge: 10744
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 671 Mal

Re: Script zur Berechnung des Feuchtegehalts

Beitrag von alchy » 14.07.2019, 15:20

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

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Bernd80
Beiträge: 110
Registriert: 13.01.2016, 18:40

Re: Script zur Berechnung des Feuchtegehalts

Beitrag von Bernd80 » 14.07.2019, 17:07

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 :?:

paul53
Beiträge: 2554
Registriert: 26.04.2012, 20:42
Wohnort: Berlin
Danksagung erhalten: 15 Mal

Re: Script zur Berechnung des Feuchtegehalts

Beitrag von paul53 » 14.07.2019, 17:17

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);
Versionen: HM-CC-TC 2.1, HM-LC-Sw1 1.9, HM-CC-RT-DN 1.1, HM-MOD-RPI-PCB 1.2.1 (keine CCU)

Bernd80
Beiträge: 110
Registriert: 13.01.2016, 18:40

Re: Script zur Berechnung des Feuchtegehalts

Beitrag von Bernd80 » 15.07.2019, 08:53

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

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“