Probleme Lüftersteuerung über die Absolute Luftfeuchte

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

kai_GRZI
Beiträge: 2
Registriert: 11.09.2021, 17:23
System: CCU

Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von kai_GRZI » 11.09.2021, 17:28

Hallo Zusammen,

ich habe aktuelle eine Herrausforderng mit der Lüftungssteuerung. Die Idee ist, die absolute Luftfeuchte zu ermitteln und damit einen Lüfter im Keller anzusteuern um optimalen Luftaustausch zu gewährleisten. Leider muss ich aber bei dem Skript um Hilfe fragen, da die Systemvariable nicht aktualisiert wird:
var rLfi = dom.GetObject("HmIP-STHD 000E9D898AD94A:1.HUMIDITY").Value();
var ti = dom.GetObject("HmIP-STHD 000E9D898AD94A:1.TEMPERATURE").Value();
var ri = (17.62 * t) / (243.12 + t);
var ei = r.Exp()*611.2;
var eSati = e * rLf;
var aLfi = ((eSat / 461.51 * (t+273.15))*10).ToString(2);

var rLfa = dom.GetObject("HmIP-STHO-A 0010DD8989855A:1.HUMIDITY").Value();
var ta = dom.GetObject("HmIP-STHO-A 0010DD8989855A:1.TEMPERATURE").Value();
var ra = (17.62 * t) / (243.12 + t);
var ea = r.Exp()*611.2;
var eSata = e * rLf;
var aLfa = ((eSat / 461.51 * (t+273.15))*10).ToString(2);

if(aLfa>=(aLfi))
{dom.GetObject("Keller").State(false);
}
else{dom.GetObject("Keller").State(true);
}

Vielen Dank für eure Hilfe
Zuletzt geändert von Roland M. am 11.09.2021, 17:39, insgesamt 1-mal geändert.
Grund: Thema verschoben

Tyfys
Beiträge: 544
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 123 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von Tyfys » 11.09.2021, 18:23

Hallo

Skript solltest du normalerweise in Code-Tags posten.

Aber mir ist aufgefallen, daß einige Variablen nicht definert sind z.B "t". oder "eSat"
Daher bricht die Abarbeitung schon mal an der Stelle ab.

Zum anderen werden auch Zwischenergebnisse nicht weiterverwendet, wie z.B. "ei". usw.

Zu letzt vergleichst du Zeichenketten (Strings) auf grösser.
Das wird nicht das gewünschte Ergebnis bringen.

Überprüfe aber noch mal deine Variablen-Benennungen.

Gruß
Harry
Gruß
Harry

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

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von MichaelN » 12.09.2021, 00:46

Und du bist sicher, dass es nur ein Objekt mit Namen "Keller" gibt und das dies eine Systemvariable ist?
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 +++

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

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von Baxxy » 12.09.2021, 11:43

Tyfys hat geschrieben:
11.09.2021, 18:23
Aber mir ist aufgefallen, daß einige Variablen nicht definert sind z.B "t". oder "eSat"
Daher bricht die Abarbeitung schon mal an der Stelle ab.

Zum anderen werden auch Zwischenergebnisse nicht weiterverwendet, wie z.B. "ei". usw.
Sehe ich nicht ganz so. Guckt man genauer hin sind alle Skriptvariablen korrekt deklariert, sogar getrennt für innen (mit "Suffix" i) und für außen (mit "Suffix" a). Nur werden in der weiteren Verarbeitung die Suffixe nicht mehr genutzt. Und das kann dann eben nicht funktionieren.

Grüße
Baxxy

Tyfys
Beiträge: 544
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 123 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von Tyfys » 12.09.2021, 12:13

Die Idee mit den Suffix hab ich schon gesehen.
Deshalb schrieb ich ja auch :
Tyfys hat geschrieben:
11.09.2021, 18:23
Überprüfe aber noch mal deine Variablen-Benennungen.
Der Compiler / Interpreter unterscheidet nicht zwischen nicht definiert und anders definiert

Gruß
Harry
Gruß
Harry

schlichi
Beiträge: 387
Registriert: 26.08.2016, 19:26
System: Alternative CCU (auf Basis OCCU)
Wohnort: Erding
Hat sich bedankt: 60 Mal
Danksagung erhalten: 28 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von schlichi » 12.09.2021, 13:17

Hallo Kai(?),

hier mal, da auch mir geholfen wurde, flugfähige, gebratene Tauben 8)

Code: Alles auswählen

! xxx Lüftung-Keller - 1.61 Berechnung der Parameter für Lüftung, incl. Schaltung xxxxxx
! mit direktem Schalten, "Dein Schaltaktor Kanal" (Umgehung der SysVar "Keller Lüften")
! Stand: 14.09.2021 / GS
!
! absolute Feuchte in g/m³ Luftvolumen
!
! https://homematic-forum.de/forum/viewtopic.php?p=71326#p71326
! by paul53
!
  object oTHi = (dom.GetObject(ID_CHANNELS)).Get("Dein Keller-Thermostat Kanal"); 	! xxx innen xxxx
  object oTi = oTHi.DPByHssDP("ACTUAL_TEMPERATURE");
  object oHi = oTHi.DPByHssDP("HUMIDITY");
!
  object oLueften = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("Keller lüften"); 		! xxx SysVar xxxx
!
  object oTHa = (dom.GetObject(ID_CHANNELS)).Get("Dein Aussen-Thermostat Kanal"); 	! xxx außen xxxx
  object oTa = oTHa.DPByHssDP("ACTUAL_TEMPERATURE");
  object oHa = oTHa.DPByHssDP("HUMIDITY");
!
! xxx Programmteil Lüftungsempfehlung
! Lokale Variablen
	real tin = oTi.Value(); 	! Temperatur in °C innen
	integer rfin = oHi.Value(); ! relative Feuchte in % innen
	real afVin; 				! absolute Feuchte in g/m³ LuftVolumen innen
!
	real tau = oTa.Value(); 	! Temperatur in °C außen
	integer rfau = oHa.Value(); ! relative Feuchte in % außen
	real afVau; 				! absolute Feuchte in g/m³ LuftVolumen außen
! xxx
!
! xxx Berechnung der absoluten Feuchte innen (in g/m³ Luftvolumen)
! https://homematic-forum.de/forum/viewtopic.php?f=26&t=69549&p=678384#p678382
!
    real afVin = (0.0 + (rfin * 13.245 * ((17.67 * tin)/(tin + 243.5)).Exp()) / (273.15 + tin));
! xxx
!
! xxx Berechnung der absoluten Feuchte außen (in g/m³ Luftvolumen)
!
	real afVau = (0.0 + (rfau * 13.245 * ((17.67 * tau)/(tau + 243.5)).Exp()) / (273.15 + tau));
! xxx
!
! xxx Berechnung der Lüftungsempfehlung in g/m³ Luftvolumen
! true Faktor; 0.8 bis 1.5; false Faktor; 0.3 bis 0.5; 	Hysterese mind 0.5
    if (afVau < afVin - 1.2) {oLueften.Variable(1);}
     else { 
        if (afVau >= afVin - 0.5) {oLueften.Variable(0);}
          }
! xxx
  dom.GetObject(ID_SYSTEM_VARIABLES).Get("Keller lüften").State(oLueften.Variable()); 					! xxx für Anzeige xxxxx
! xxx
!
! xxx Direktes ein-/ausschalten des Aktors/Kanal "Dein Schaltaktor Kanal" wegen Nachsteuerung
	if (oLueften.Variable() == 0 )
		{(dom.GetObject(ID_CHANNELS).Get("Dein Schaltaktor Kanal")).DPByHssDP("STATE").State(0.0);} 	! nicht lüften
	if (oLueften.Variable() == 1 )
		{(dom.GetObject(ID_CHANNELS).Get("Dein Schaltaktor Kanal")).DPByHssDP("STATE").State(1.0);} 	! lüften
! xxx
! xxx Parameter für Testprogramm Keller xxxx
!WriteLine(" xxx Parameter für Testprogramm Keller xxxx ");
!WriteLine(" ");
!WriteLine("Temperatur innen: 	" # tin.ToString(2)   # " °C ");
!WriteLine("abs. Feuchte innen: 	" # afVin.ToString(2) # " g/m³ ");
!WriteLine("Temperatur außen: 	" # tau.ToString(2)   # " °C ");
!WriteLine("abs. Feuchte außen: 	" # afVau.ToString(2) # " g/m³");
!WriteLine("abs. Feuchte außen < innen - 1.2, lüften : 			" # afVau.ToString(2) # " g/m³ <  " # (afVin - 1.2).ToString(2));
!WriteLine("abs. Feuchte außen >= innen - 0.5, nicht lüften : 	" # afVau.ToString(2) # " g/m³ >= " # (afVin - 0.5).ToString(2));
!WriteLine(" ");
!WriteLine("Lüftungsempfehlung: 	" # oLueften.Variable());
... also entsprechend Deine Daten einsetzen, SysVar anlegen
SysVar Keller.JPG
(Umlaute kein Problem)

Falls Schaltaktor nicht gebraucht, oder anders gelöst, einfach auskommentieren "!"

.. das Essen steht auf dem Tisch! :wink:

Gruß
schlichi

edit: Formel bereits geändert, siehe Beitrag von Roland; und auch unsinnige Rundung in der Rechenformel entfernt
Zuletzt geändert von schlichi am 14.09.2021, 13:54, insgesamt 2-mal geändert.
... inzwischen autodidakter, fortgeschrittener Anfänger mit bestandener Einstiegsprüfung für den Expertenmodus Teil 3 (erfahrener Anwender) :roll:

Benutzeravatar
Roland M.
Beiträge: 9784
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 252 Mal
Danksagung erhalten: 1373 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von Roland M. » 12.09.2021, 14:26

Hallo!
schlichi hat geschrieben:
12.09.2021, 13:17
hier mal, da auch mir geholfen wurde, flugfähige, gebratene Tauben 8)
:D

Code: Alles auswählen

! xxx Berechnung der absoluten Feuchte innen (in g/m³ Luftvolumen)
! 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 afVin = ((eSat / 461.51 * (tin+273.15))*10).ToString(2);
...oder als "Einzeiler" der genäherte Wert (differiert meist nur in der zweiten Kommastelle):

Code: Alles auswählen

real temp = 30.0;
real rF = 30.0;

real aF = 0.0 + (rF * 13.245 * ((17.67 * temp)/(temp + 243.5)).Exp()) / (273.15 + temp);

WriteLine("Absolute Luftfeuchtigkeit: " # aF);
Formel stammt auch aus den Tiefen des Forums... ;)


Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

schlichi
Beiträge: 387
Registriert: 26.08.2016, 19:26
System: Alternative CCU (auf Basis OCCU)
Wohnort: Erding
Hat sich bedankt: 60 Mal
Danksagung erhalten: 28 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von schlichi » 12.09.2021, 14:32

Hallo Roland,
Formel stammt auch aus den Tiefen des Forums...
besten Dank. Ich habe schon tief gesucht, aber so tief .....
Die Formel werde ich übernehmen, Script wird übersichtlicher.

Gruß
schlichi
... inzwischen autodidakter, fortgeschrittener Anfänger mit bestandener Einstiegsprüfung für den Expertenmodus Teil 3 (erfahrener Anwender) :roll:

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

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von Baxxy » 12.09.2021, 19:33

Mir ist noch aufgefallen die Zugriffe ala...
kai_GRZI hat geschrieben:
11.09.2021, 17:28

Code: Alles auswählen

var rLfi = dom.GetObject("HmIP-STHD 000E9D898AD94A:1.HUMIDITY").Value();
sind auch falsch. Wenn dann müsste es so aussehen...

Code: Alles auswählen

var rLfi = dom.GetObject("HmIP-RF.000E9D898AD94A:1.HUMIDITY").Value();
Grüße
Baxxy

kai_GRZI
Beiträge: 2
Registriert: 11.09.2021, 17:23
System: CCU

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von kai_GRZI » 13.09.2021, 14:19

Mensch Wahnsinn, das Flattern mit die Taben halb roh in den Mund :lol:
Auch wenn ich ein völliger Leihe bin(war) habt Ihr mir mega geholfen, ich habe zwar ein paar sachen angepasst weil es nicht ganz geklappt hat, aber nun läuft es .

DANKE

Code: Alles auswählen

! xxx Lüftung-Keller - 1.6 Berechnung der Parameter für Lüftung, incl. Schaltung xxxxxx
! mit direktem Schalten, "Dein Schaltaktor Kanal" (Umgehung der SysVar "Keller Lüften")
! Stand: 12.09.2021 / GS
!
! absolute Feuchte in g/m³ Luftvolumen
!
! https://homematic-forum.de/forum/viewtopic.php?p=71326#p71326
! by paul53
!
  object oTi = dom.GetObject("HmIP-RF.000E9D898AD94A:1.ACTUAL_TEMPERATURE").Value();
  object oHi = dom.GetObject("HmIP-RF.000E9D898AD94A:1.HUMIDITY").Value();

!WriteLine(oTi);
!WriteLine(oHi);

  object oLueften = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("Keller lüften"); 		! xxx SysVar xxxx
!
  object oTa = dom.GetObject("HmIP-RF.0010DD8989855A:1.ACTUAL_TEMPERATURE").Value();
  object oHa = dom.GetObject("HmIP-RF.0010DD8989855A:1.HUMIDITY").Value();
!
!WriteLine(oTa);
!WriteLine(oHa);

! xxx Programmteil Lüftungsempfehlung
! Lokale Variablen
	real tin = oTi; 	! Temperatur in °C innen
	integer rfin = oHi; ! relative Feuchte in % innen
	real afVin; 				! absolute Feuchte in g/m³ LuftVolumen innen
!
	real tau = oTa; 	! Temperatur in °C außen
	integer rfau = oHa; ! relative Feuchte in % außen
	real afVau; 				! absolute Feuchte in g/m³ LuftVolumen außen

! xxx
!
! xxx Berechnung der absoluten Feuchte innen (in g/m³ Luftvolumen)
! https://homematic-forum.de/forum/viewtopic.php?f=26&t=69549&p=678384#p678382
!
    real afVin = (0.0 + (rfin * 13.245 * ((17.67 * tin)/(tin + 243.5)).Exp()) / (273.15 + tin)).ToString(2);
! xxx
!
! xxx Berechnung der absoluten Feuchte außen (in g/m³ Luftvolumen)
!
	real afVau = (0.0 + (rfau * 13.245 * ((17.67 * tau)/(tau + 243.5)).Exp()) / (273.15 + tau)).ToString(2);
! xxx
!
! xxx Berechnung der Lüftungsempfehlung in g/m³ Luftvolumen
! true Faktor; 0.8 bis 1.5; false Faktor; 0.3 bis 0.5; 	Hysterese mind 0.5
    if (afVau < afVin - 1.2) {oLueften.Variable(1);}
     else { 
        if (afVau >= afVin - 0.5) {oLueften.Variable(0);}
          }
! xxx
  dom.GetObject(ID_SYSTEM_VARIABLES).Get("Keller lüften").State(oLueften.Variable()); 					! xxx für Anzeige xxxxx
! xxx
!
! xxx Direktes ein-/ausschalten des Aktors/Kanal "Dein Schaltaktor Kanal" wegen Nachsteuerung
	if (oLueften.Variable() == 0 )
		{(dom.GetObject(ID_CHANNELS).Get("Dein Schaltaktor Kanal")).DPByHssDP("STATE").State(0.0);} 	! nicht lüften
	if (oLueften.Variable() == 1 )
		{(dom.GetObject(ID_CHANNELS).Get("Dein Schaltaktor Kanal")).DPByHssDP("STATE").State(1.0);} 	! lüften
! xxx
! xxx Parameter für Testprogramm Keller xxxx
WriteLine(" xxx Parameter für Testprogramm Keller xxxx ");
WriteLine(" ");
WriteLine("Temperatur innen: 	" # tin.ToString(2)   # " °C ");
WriteLine("abs. Feuchte innen: 	" # afVin.ToString(2) # " g/m³ ");
WriteLine("Temperatur außen: 	" # tau.ToString(2)   # " °C ");
WriteLine("abs. Feuchte außen: 	" # afVau.ToString(2) # " g/m³");
WriteLine("abs. Feuchte außen < innen - 1.2, lüften : 			" # afVau.ToString(2) # " g/m³ <  " # (afVin - 1.2).ToString(2));
WriteLine("abs. Feuchte außen >= innen - 0.5, nicht lüften : 	" # afVau.ToString(2) # " g/m³ >= " # (afVin - 0.5).ToString(2));
WriteLine(" ");
WriteLine("Lüftungsempfehlung: 	" # oLueften.Variable());

Antworten

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