Absolute Luftfeuchtigkeit und Taupunkt ermitteln

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

fyka
Beiträge: 3
Registriert: 25.05.2020, 21:37
System: CCU

Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln

Beitrag von fyka » 10.07.2021, 17:58

Hallo zusammen,

ich habe leider ein Problem bei der Berechnung der absoluten Feuchtigkeit. Bei mir schreibt der den Wert nicht in die Systemvariable.

Ich habe folgendes Skript in einem Programm eingebaut, welches jede Minute einmal läuft:

__________________
! Lokale Variablen
real t; ! Temperatur in °C
integer rf; ! relative Feuchte in %
real af; ! Feuchtegehalt in g/kg

! Werte einlesen
t = dom.GetObject("Aussen_Temperatur").DPByHssDP("TEMPERATURE").Value();
rf = dom.GetObject("Aussen_Feuchtigkeit").DPByHssDP("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("abs.Feuchte_aussen").State(af);
____________
Der Name des Kanals für die Temperatur ist "Aussen_Temperatur", für die Luftfeuchtigkeit "Aussen_Feuchtigkeit" und die Systemvariable heißt "abs.Feuchte_aussen". Habe auch noch mal Screenshots angehängt. Kann mir jemand Fehlen den Fehler zu finden?

Danke und Grüße
Dateianhänge
Bildschirmfoto 2021-07-10 um 17.58.32.png
Bildschirmfoto 2021-07-10 um 17.51.37.png
Bildschirmfoto 2021-07-10 um 17.51.09.png

Benutzeravatar
Baxxy
Beiträge: 10738
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 599 Mal
Danksagung erhalten: 2196 Mal

Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln

Beitrag von Baxxy » 10.07.2021, 19:26

Irgendwie scheint das Thema gerade in Mode zu sein... :mrgreen:
fyka hat geschrieben:
10.07.2021, 17:58
ich habe leider ein Problem
Bitte die Scripte zukünftig in Codetags posten.
fyka hat geschrieben:
10.07.2021, 17:58
! Werte einlesen
t = dom.GetObject("Aussen_Temperatur").DPByHssDP("TEMPERATURE").Value();
rf = dom.GetObject("Aussen_Feuchtigkeit").DPByHssDP("HUMIDITY").Value();
Das ist schon mal Quark... :wink:
Beim HmIP-SWO-PR liegen die Datenpunkte für Temperatur und Luftfeuchtigkeit in Kanal:1.

Den benennst du mal bitte sinnvoll um (Beispiel: "Wetterdaterdatenkanal")
und dann machen wir das schick.

Code: Alles auswählen

t = channels.Get ("Wetterdaterdatenkanal").DPByHssDP ("ACTUAL_TEMPERATURE").Value();
rf = channels.Get ("Wetterdaterdatenkanal").DPByHssDP ("HUMIDITY").Value();
fyka hat geschrieben:
10.07.2021, 17:58
Ich habe folgendes Skript in einem Programm eingebaut, welches jede Minute einmal läuft:
Davon rate ich ab. Es reicht wenn du das Script bei Aktualisierung der Temperatur ausführen lässt. Dann bekommst du bei jeder Sendung frische Werte.

fyka
Beiträge: 3
Registriert: 25.05.2020, 21:37
System: CCU

Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln

Beitrag von fyka » 10.07.2021, 20:05

Perfekt, vielen Dank. So funktioniert es :)

Stellen die Homematic (IP) Wandthermostate ebenfalls solche Daten zur Verfügung, so dass man sich die absolute Feuchte auch für innen ausrechnen lassen kann?

Ich habe die: HmIP-WTH-2 und die normalen Homematic HM-TC-IT-WM-W-EU

Grüße

Benutzeravatar
Baxxy
Beiträge: 10738
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 599 Mal
Danksagung erhalten: 2196 Mal

Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln

Beitrag von Baxxy » 10.07.2021, 20:19

fyka hat geschrieben:
10.07.2021, 20:05
HmIP-WTH-2
Genauso wie beim Wettersensor über Kanal:1
fyka hat geschrieben:
10.07.2021, 20:05
HM-TC-IT-WM-W-EU
Da hat man scheinbar 2 Möglichkeiten...
A - über Kanal:1

Code: Alles auswählen

t = channels.Get ("Klima BX Thermostat: HM-TC-IT-WM:1 - Wetterdaten").DPByHssDP ("TEMPERATURE").Value();
rf = channels.Get ("Klima BX Thermostat: HM-TC-IT-WM:1 - Wetterdaten").DPByHssDP ("HUMIDITY").Value(); 
B - über Kanal:2

Code: Alles auswählen

t = channels.Get ("Klima BX Thermostat: HM-TC-IT-WM:2 - Bedienung").DPByHssDP ("ACTUAL_TEMPERATURE").Value();
rf = channels.Get ("Klima BX Thermostat: HM-TC-IT-WM:2 - Bedienung").DPByHssDP ("ACTUAL_HUMIDITY").Value();
Den einzigen Unterschied den ich erkenne gibt es bei der Luftfeuchtigkeit. A gibt einen integer und B einen float-Wert aus.
In den Optionen des Thermostates gibt es die Option "Sende Temperatur- und Feuchtigkeitswert" die habe ich an.
Musst du testen was besser passt.

Grüße
Baxxy

fyka
Beiträge: 3
Registriert: 25.05.2020, 21:37
System: CCU

Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln

Beitrag von fyka » 11.07.2021, 08:07

Hallo,
hat wunderbar funktioniert. Vielen Dank

Organist
Beiträge: 124
Registriert: 31.08.2018, 15:21
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wülfrath
Hat sich bedankt: 39 Mal
Danksagung erhalten: 5 Mal

Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln

Beitrag von Organist » 11.07.2021, 16:08

Ich verstehe gerade nicht, warum mein Skript zwar im Testlauf funktioniert und mir auch meine Variablen (Absolute Innenfeuchte) schreibt, aber nicht im Programm läuft.
Habe mich schon im Debugging sehr bemüht und verschiedenste Programme geschrieben, wo ich das Skript mit eingefügt habe. Wenn ich das Programm per Mausklick starte, wird mir die Systemvariable mit der absoluten Luftfeuchtigkeit geschrieben.

Bedingung: Raumthermostat:1 bei relativer Luftfeuchte im Wertbereich größer 1%: Bei Änderung auslösen
Aktivität: Dann:
Skript...(hier mein Skript drin) sofort

Da dürfte doch nichts falsch gehen. Das Programm wird auch immer wieder ausgeführt, aber die Variable wird nicht neu beschrieben (obwohl sie sich ändert). Habe es auch mit anderen Triggern ausprobiert: Zeit oder Temperaturveränderung - Programm war aktiv, aber keine Systemvariable wird geschrieben.
Zuletzt geändert von Organist am 11.07.2021, 16:26, insgesamt 1-mal geändert.

Benutzeravatar
Baxxy
Beiträge: 10738
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 599 Mal
Danksagung erhalten: 2196 Mal

Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln

Beitrag von Baxxy » 11.07.2021, 16:14

Organist hat geschrieben:
11.07.2021, 16:08
Da dürfte doch nichts falsch gehen.
Deine menschliche Logik funktioniert anders wie die CCU-Logik. Tipps für Anfänger lesen!
Dein Programm wird nur dann ausgeführt wenn die Luftfeuchtigkeit <1% ist und dann auf über 1% ansteigt.
Stell auf "bei Aktualisierung" um.
Grüße
Baxxy

MichaelN
Beiträge: 9635
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1614 Mal

Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln

Beitrag von MichaelN » 11.07.2021, 16:15

Organist hat geschrieben:
11.07.2021, 16:08
Bedingung: Raumthermostat:1 bei relativer Luftfeuchte im Wertbereich größer 1%: Bei Änderung Aktualisierung auslösen
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Organist
Beiträge: 124
Registriert: 31.08.2018, 15:21
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wülfrath
Hat sich bedankt: 39 Mal
Danksagung erhalten: 5 Mal

Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln

Beitrag von Organist » 11.07.2021, 16:35

Vielen Dank, so läufts nun

Organist
Beiträge: 124
Registriert: 31.08.2018, 15:21
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wülfrath
Hat sich bedankt: 39 Mal
Danksagung erhalten: 5 Mal

Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln

Beitrag von Organist » 02.08.2021, 20:24

Ich stehe auf dem Schlauch.
Ich verwende das Script, welches mir mittlerweile auch zuverlässig meinen Innen- & Außenfeuchte berechnet, vergleicht und die Lüftungsempfehlung in eine Systemvariable schreibt.
Was ich aber absolut nicht verstehe: Ich kann mit der Veränderung der Systemvariable keine Programme triggern. Wenn die von true auf false wechselt, passiert nichts. Ändere ich true/false per Hand, werden die entsprechenden Programme ausgelöst.
Im Historian sehe ich, dass die Variable schaltet.
Wenn ich in der WebUI die Systemvariable anschaue, steht sie wie in der Historian angezeigt, aber der letzte Änderung stimmt nicht mit der Historian überein. Dort steht das Datum, als ich die per gewechselt habe.

Code: Alles auswählen

! Luftfeuchtigkeit innen und aussen berechnen und vergleichen
! Berechnung mit e-funktion testen
!https://smart-wohnen.org/homematic-raumklimaueberwachung-und-entfeuchtung/
!by paul53
! Berechnung der Lüftungsempfehlung 01.06.2020 / schlichi
!
WriteLine("8");
object oTHi = (dom.GetObject(ID_CHANNELS)).Get("Raumthermostat:1"); ! Name des Innenthermometer eingeben
WriteLine("10");
object oTi = oTHi.DPByHssDP("TEMPERATURE"); ! Kanal HM = TEMPERATURE  - HMIP = ACTUAL_TEMPERATURE
WriteLine("12");
object oHi = oTHi.DPByHssDP("HUMIDITY");
object oLueften = dom.GetObject("Keller_Lueften"); ! Name der Systemvariablen für die Lüftungsempfehlung (Logikwert: wahr = ist wahr, falsch = ist falsch)
object oLuftfeuchte = dom.GetObject("Keller_Innenfeuchte"); ! Name der Systemvariablen für die Absolute Luftfeuchtigkeit
!
WriteLine("13?");
!
object oTa = dom.GetObject("w_temperatur"); ! Systemvariable der Wetterstation
object oHa = dom.GetObject("w_feuchte_rel"); ! Systemvariable der Wetterstation
WriteLine(oTa)
WriteLine(oHa)
! object oTHa = (dom.GetObject(ID_CHANNELS)).Get("OEQ1571953:1"); ! Name des Aussenthermometer eingeben (Falls nicht oben Variable der Wetterstation)
! object oTa = oTHa.DPByHssDP("ACTUAL_TEMPERATURE");
! object oHa = oTHa.DPByHssDP("HUMIDITY");
WriteLine("22");
!
! 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
! xxx
! https://homematic-forum.de/forum/viewtopic.php?p=528541#p528541
!
real r = (17.62 * tin) / (243.12 + tin);
real e = r.Exp()*611.2;
real eSat = e * rfin;
real afin = ((eSat / 461.51 * (tin+273.15))*10).ToString(2);
WriteLine("abs. Feuchte innen e*: " + afin);
oLuftfeuchte.State(afin); ! Errechnete absolute Innenfeuchte in Systemvariable schreiben


! xxx
! xxx
! https://homematic-forum.de/forum/viewtopic.php?p=528541#p528541
!
real r = (17.62 * tau) / (243.12 + tau);
real e = r.Exp()*611.2;
real eSat = e * rfau;
real afau = ((eSat / 461.51 * (tau+273.15))*10).ToString(2);
WriteLine("abs. Feuchte aussen e*: " + afau);
! xxx
WriteLine(afau)
!
! 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;
    }
!
WriteLine(" ");
WriteLine("Parameter für Test");
WriteLine("Temperatur innen: " + tin);
WriteLine("rel. Feuchte innen %: " + rfin);
WriteLine("abs. Feuchte innen: " + afin);
WriteLine("Temperatur aussen: " + tau);
WriteLine("rel. Feuchte aussen %: " + rfau);
WriteLine("abs. Feuchte aussen: " + afau);

! Berechnung der Lüftungsempfehlung mit 0,5 g/kg und 0,7 K Hysterese
! Lüften = abs Feuchtigkeit außen kleiner als innen-0.8g/m³ und Außentemperatur kleiner als innen-1°C und Innentemperatur größer als 20,7°C (geändert auf 15,7°)
! NICHT Lüften = abs Feuchte außen größer als innen-0,3g/m³ oder Außentemperatur größer als Innnen -0,3°C oder Innentemperatur kleiner als 20° (geändet auf 15°)
if ((afau <= (afin - 0.8)) && (tau <= (tin - 1.0)) && (tin > 15.7))
{oLueften.Variable(true);}
else
{ if ((afau >= (afin - 0.3)) || (tau >= (tin - 0.3)) || (tin <= 15.0))
{oLueften.Variable(false);}
}

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“