Absolute Luftfeuchtigkeit und Taupunkt ermitteln
Moderator: Co-Administratoren
Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln
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
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
- Baxxy
- Beiträge: 10833
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 608 Mal
- Danksagung erhalten: 2227 Mal
Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln
Irgendwie scheint das Thema gerade in Mode zu sein...
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.
Bitte die Scripte zukünftig in Codetags posten.
Das ist schon mal Quark...
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();
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.
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln
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
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
- Baxxy
- Beiträge: 10833
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 608 Mal
- Danksagung erhalten: 2227 Mal
Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln
Genauso wie beim Wettersensor über Kanal:1
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();
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();
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
-
- 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
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.
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.
- Baxxy
- Beiträge: 10833
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 608 Mal
- Danksagung erhalten: 2227 Mal
Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln
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
-
- Beiträge: 9679
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Absolute Luftfeuchtigkeit und Taupunkt ermitteln
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 +++
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 +++
-
- 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
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.
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);}
}