Probleme Lüftersteuerung über die Absolute Luftfeuchte

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

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

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von Baxxy » 28.10.2022, 21:56

@Micha:
Das kannst du doch besser!

string sInnenKanal = "000A9569A3A102:1";
object oTHi = (dom.GetObject(ID_CHANNELS)).Get(sInnenKanal);

Was soll da rauskommen außer "null" wenn der Kanal "Thermostat Hauswirtschaftsraum:1" benannt wurde?

Benutzeravatar
Henke
Beiträge: 1524
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von Henke » 28.10.2022, 22:30

Stimmt, da muss er jetzt wieder "Funk-Temperatur-/ Feuchtesensor außen Holzunterstand" einsetzen oder die Kanalnummer.

R.Thümer
Beiträge: 33
Registriert: 16.02.2020, 13:40
System: CCU
Hat sich bedankt: 9 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von R.Thümer » 29.10.2022, 11:33

Henke hat geschrieben:
28.10.2022, 21:40
Teste das mal...
Achtung, Script optimiert.

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
!
! Anderungen - M. Henke
! Fehlerkontrolle
! Variablen an den Anfang gesetzt
! Systemvariable entfernt - Ziel kann Kanal oder Systemvariable sein
! Formel optimiert
! Mindestluftfeuchte hinzugefügt

! Hier anpassen
var sInnenKanal = "HmIP-WTH-2 U-Büro:1";  ! anpassen
string sInnenDP = "TEMPERATURE";   ! oder "ACTUAL_TEMPERATURE"

var sAussenKanal = "Funk-Temperatur-/ Feuchtesensor außen Holzunterstand"; ! ?
string sAussenDP = "TEMPERATURE";   ! oder "ACTUAL_TEMPERATURE"

var sZielKanal = "Lüfter HWR";   ! evtl. FALSCH
real rMinimumLuftfeuchte = 10.0; ! Darunter lohnt es nicht

! AB hier nichts mehr ändern

  object oTHi = (dom.GetObject(ID_CHANNELS)).Get(sInnenKanal); 	! xxx innen xxxx
  if (  !oTHi ) { WriteLine ( "Kanal Innen falsch!" ); quit; };
  object oTi = oTHi.DPByHssDP(sInnenDP);
  if (  !oTi ) { WriteLine ( "Datenpunkt Innen falsch!" ); quit; };
  object oHi = oTHi.DPByHssDP("HUMIDITY");

!
!  object oLueften = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("HWR lüften"); 		! xxx SysVar xxxx
!
  object oTHa = (dom.GetObject(ID_CHANNELS)).Get(sAussenKanal); 	! xxx außen xxxx
  if (  !oTHa ) { WriteLine ( "Kanal Außen falsch!" ); quit; };
  object oTa = oTHa.DPByHssDP(sAussenDP);
  if (  !oTa ) { WriteLine ( "Datenpunkt Außen falsch!" ); quit; };
  object oHa = oTHa.DPByHssDP("HUMIDITY");

  object oZiel = dom.GetObject(sZielKanal); 	! Zielkanal
  if (  !oZiel ) { WriteLine ( "Kanal Ziel falsch!" ); quit; };

!
! 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 + (13.245 * rfin * ((17.67 * tin)/(tin + 243.5)).Exp()) / (273.15 + tin));
! Einzeiler ok, aber es geht genauer - Topic nicht gelsen :-)
    real afVin = ((6112.0 / 461.51) * rfin * ((17.62 * tin)/(tin + 243.12)).Exp()) / (273.15 + tin);
! xxx
!
! xxx Berechnung der absoluten Feuchte außen (in g/m³ Luftvolumen)
!
	real afVau = ((6112.0 / 461.51) * rfau * ((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
	boolean bLueften = false;
    if ( rMinimumLuftfeuchte <= afVin ) {
    if (afVau < (afVin - 1.2)) {bLueften = true;}
     else {
        if (afVau >= (afVin - 0.5)) {bLueften = false;}
          }
          }
! xxx
!  dom.GetObject(ID_SYSTEM_VARIABLES).Get("HWR lüften").State(oLueften.Variable()); 					! xxx für Anzeige xxxxx
! xxx
!
! xxx Direktes ein-/ausschalten des Aktors/Kanal "Dein Schaltaktor Kanal" wegen Nachsteuerung
if ( oZiel.State() != bLueften)  { oZiel.State(bLueften); }

! xxx
! xxx Parameter für Testprogramm Keller xxxx
WriteLine(" xxx Parameter xxxx ");
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 Minimum <= innen lüften : 			" # rMinimumLuftfeuchte.ToString(2) # " g/m³ <  " # afVin.ToString(2));
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("Lüftungsempfehlung: 	" # bLueften );
Hallo, ich habe fast alle Datenpunkte und Kanalnahmen probiert. Fehlermeldung beim Script ausführen: "Kanal innen falsch" oder "Datenpunkt innen falsch"

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
!
! Anderungen - M. Henke
! Fehlerkontrolle
! Variablen an den Anfang gesetzt
! Systemvariable entfernt - Ziel kann Kanal oder Systemvariable sein
! Formel optimiert
! Mindestluftfeuchte hinzugefügt

! Hier anpassen
var sInnenKanal = "Thermostat Hauswirtschaftsraum:1";  ! anpassen
string sInnenDP = "TEMPERATURE";   ! oder "ACTUAL_TEMPERATURE"

var sAussenKanal = "Funk-Temperatur-/ Feuchtesensor außen Holzunterstand"; ! ?
string sAussenDP = "TEMPERATURE";   ! oder "ACTUAL_TEMPERATURE"

var sZielKanal = "Lüfter HWR";   ! evtl. FALSCH
real rMinimumLuftfeuchte = 10.0; ! Darunter lohnt es nicht

! AB hier nichts mehr ändern

  object oTHi = (dom.GetObject(ID_CHANNELS)).Get(sInnenKanal); 	! xxx innen xxxx
  if (  !oTHi ) { WriteLine ( "Kanal Innen falsch!" ); quit; };
  object oTi = oTHi.DPByHssDP(sInnenDP);
  if (  !oTi ) { WriteLine ( "Datenpunkt Innen falsch!" ); quit; };
  object oHi = oTHi.DPByHssDP("HUMIDITY");

!
!  object oLueften = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("HWR lüften"); 		! xxx SysVar xxxx
!
  object oTHa = (dom.GetObject(ID_CHANNELS)).Get(sAussenKanal); 	! xxx außen xxxx
  if (  !oTHa ) { WriteLine ( "Kanal Außen falsch!" ); quit; };
  object oTa = oTHa.DPByHssDP(sAussenDP);
  if (  !oTa ) { WriteLine ( "Datenpunkt Außen falsch!" ); quit; };
  object oHa = oTHa.DPByHssDP("HUMIDITY");

  object oZiel = dom.GetObject(sZielKanal); 	! Zielkanal
  if (  !oZiel ) { WriteLine ( "Kanal Ziel falsch!" ); quit; };

!
! 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 + (13.245 * rfin * ((17.67 * tin)/(tin + 243.5)).Exp()) / (273.15 + tin));
! Einzeiler ok, aber es geht genauer - Topic nicht gelsen :-)
    real afVin = ((6112.0 / 461.51) * rfin * ((17.62 * tin)/(tin + 243.12)).Exp()) / (273.15 + tin);
! xxx
!
! xxx Berechnung der absoluten Feuchte außen (in g/m³ Luftvolumen)
!
	real afVau = ((6112.0 / 461.51) * rfau * ((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
	boolean bLueften = false;
    if ( rMinimumLuftfeuchte <= afVin ) {
    if (afVau < (afVin - 1.2)) {bLueften = true;}
     else {
        if (afVau >= (afVin - 0.5)) {bLueften = false;}
          }
          }
! xxx
!  dom.GetObject(ID_SYSTEM_VARIABLES).Get("HWR lüften").State(oLueften.Variable()); 					! xxx für Anzeige xxxxx
! xxx
!
! xxx Direktes ein-/ausschalten des Aktors/Kanal "Dein Schaltaktor Kanal" wegen Nachsteuerung
if ( oZiel.State() != bLueften)  { oZiel.State(bLueften); }

! xxx
! xxx Parameter für Testprogramm Keller xxxx
WriteLine(" xxx Parameter xxxx ");
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 Minimum <= innen lüften : 			" # rMinimumLuftfeuchte.ToString(2) # " g/m³ <  " # afVin.ToString(2));
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("Lüftungsempfehlung: 	" # bLueften );

Benutzeravatar
Henke
Beiträge: 1524
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von Henke » 29.10.2022, 15:44

"Thermostat Hauswirtschaftsraum:1" mit "ACTUAL_TEMPERATURE" läuft nicht?
Wage ich zu bezweifeln.

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

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von schlichi » 29.10.2022, 15:51

Hallo,

zeig doch mal Deine Geräte / Kanäle die Du verwenden willst, analog zu den drei Beispielen:

Innen
Th-Bad.PNG
Aussen
Sensor.PNG
Schalter
S-Bad.PNG
Gruß
schlichi

Nachtrag:

Code: Alles auswählen

!Gibt alle Datenpunkte der angelernten Geräte aus
!
!https://ch.elv.com/forum/hmip-fdt-dimmwert-beim-einschalten-18485
! (c) by Hangover
!
string s_device;
object o_device;
integer i_devices = 0;
string s_channel;
object o_channel;
integer i_channels = 0;
string s_typelist = "";
string s_temp;
var dps = "";
string id;
foreach(s_device, dom.GetObject(ID_DEVICES).EnumUsedIDs()) {
var o_device = dom.GetObject(s_device);
if ((o_device.Address() != "BidCoS-Wir") && (o_device.Address() != "BidCoS-RF")) {
i_devices = i_devices + 1;
s_temp = i_devices.ToString();
if (i_devices < 10) { s_temp = " " # s_temp; }
if (i_devices < 100) { s_temp = " " # s_temp; }
WriteLine (s_temp # " " # o_device.Address () # " " # o_device.HssType () # " (" # o_device.Name() # ")");
s_typelist = s_typelist # o_device.HssType () # "\t";
foreach(s_channel, o_device.Channels().EnumUsedIDs()) {
i_channels = i_channels + 1;
o_channel = dom.GetObject(s_channel);
! s_temp = o_channel.Address().StrValueByIndex(":",1);
WriteLine(o_channel.Name() );
! Alle Datenpunkte DPs durchlaufen
foreach(id, o_channel.DPs())
{
! Einzelnen Datenpunkt definieren
var dp = dom.GetObject(id);
! Namen der DPs und Werte als String definieren
dps = dps # dp.Name() # "\t   Wert:\t" # dp.Value() # "\n";
}
! Ausgabe der Namen aller Datenpunkte des Kanals
WriteLine(dps);
dps = "";
}
}
} 
... damit bekommst Du Deine Daten ggf. auch angezeigt.
... inzwischen autodidakter, fortgeschrittener Anfänger mit bestandener Einstiegsprüfung für den Expertenmodus Teil 3 (erfahrener Anwender) :roll:

R.Thümer
Beiträge: 33
Registriert: 16.02.2020, 13:40
System: CCU
Hat sich bedankt: 9 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von R.Thümer » 29.10.2022, 19:51

schlichi hat geschrieben:
29.10.2022, 15:51
Hallo,

zeig doch mal Deine Geräte / Kanäle die Du verwenden willst, analog zu den drei Beispielen:

Innen
Th-Bad.PNG

Aussen
Sensor.PNG

Schalter
S-Bad.PNG

Gruß
schlichi

Nachtrag:

Code: Alles auswählen

!Gibt alle Datenpunkte der angelernten Geräte aus
!
!https://ch.elv.com/forum/hmip-fdt-dimmwert-beim-einschalten-18485
! (c) by Hangover
!
string s_device;
object o_device;
integer i_devices = 0;
string s_channel;
object o_channel;
integer i_channels = 0;
string s_typelist = "";
string s_temp;
var dps = "";
string id;
foreach(s_device, dom.GetObject(ID_DEVICES).EnumUsedIDs()) {
var o_device = dom.GetObject(s_device);
if ((o_device.Address() != "BidCoS-Wir") && (o_device.Address() != "BidCoS-RF")) {
i_devices = i_devices + 1;
s_temp = i_devices.ToString();
if (i_devices < 10) { s_temp = " " # s_temp; }
if (i_devices < 100) { s_temp = " " # s_temp; }
WriteLine (s_temp # " " # o_device.Address () # " " # o_device.HssType () # " (" # o_device.Name() # ")");
s_typelist = s_typelist # o_device.HssType () # "\t";
foreach(s_channel, o_device.Channels().EnumUsedIDs()) {
i_channels = i_channels + 1;
o_channel = dom.GetObject(s_channel);
! s_temp = o_channel.Address().StrValueByIndex(":",1);
WriteLine(o_channel.Name() );
! Alle Datenpunkte DPs durchlaufen
foreach(id, o_channel.DPs())
{
! Einzelnen Datenpunkt definieren
var dp = dom.GetObject(id);
! Namen der DPs und Werte als String definieren
dps = dps # dp.Name() # "\t   Wert:\t" # dp.Value() # "\n";
}
! Ausgabe der Namen aller Datenpunkte des Kanals
WriteLine(dps);
dps = "";
}
}
} 
... damit bekommst Du Deine Daten ggf. auch angezeigt.
Hallo, hier mal die gewünschten Daten. Die Datenpunkte hatte ich schon in meinem ersten Post mit reingeschrieben.
Hier nochmal die vom o.g. Script ausgegebenen:

34 MEQ0833325 HM-WDS10-TH-O (Funk-Temperatur-/ Feuchtesensor außen)
Funk-Temperatur-/ Feuchtesensor außen Holzunterstand
BidCos-RF.MEQ0833325:1.TEMPERATURE Wert: 17.400000
BidCos-RF.MEQ0833325:1.HUMIDITY Wert: 71

45 LEQ0264630 HM-LC-Sw1-FM (Lüfter HWR)
Lüfter HWR:1
BidCos-RF.LEQ0264630:1.STATE Wert: false
BidCos-RF.LEQ0264630:1.ON_TIME Wert:
BidCos-RF.LEQ0264630:1.INHIBIT Wert: false
BidCos-RF.LEQ0264630:1.INSTALL_TEST Wert:
BidCos-RF.LEQ0264630:1.WORKING Wert: false

64 000A9569A3A102 HmIP-WTH-2 (Thermostat Hauswirtschaftsraum)
Thermostat Hauswirtschaftsraum 0
HmIP-RF.000A9569A3A102:0.CONFIG_PENDING Wert: false
HmIP-RF.000A9569A3A102:0.DUTY_CYCLE Wert: false
HmIP-RF.000A9569A3A102:0.INSTALL_TEST Wert: true
HmIP-RF.000A9569A3A102:0.LOW_BAT Wert: false
HmIP-RF.000A9569A3A102:0.OPERATING_VOLTAGE Wert: 2.400000
HmIP-RF.000A9569A3A102:0.OPERATING_VOLTAGE_STATUS Wert: 0
HmIP-RF.000A9569A3A102:0.RSSI_DEVICE Wert: 173
HmIP-RF.000A9569A3A102:0.RSSI_PEER Wert: 172
HmIP-RF.000A9569A3A102:0.UNREACH Wert: false
HmIP-RF.000A9569A3A102:0.UPDATE_PENDING Wert: false

Thermostat Hauswirtschaftsraum:1
HmIP-RF.000A9569A3A102:1.ACTIVE_PROFILE Wert: 6
HmIP-RF.000A9569A3A102:1.ACTUAL_TEMPERATURE Wert: 18.000000
HmIP-RF.000A9569A3A102:1.ACTUAL_TEMPERATURE_STATUS Wert: 0
HmIP-RF.000A9569A3A102:1.BOOST_MODE Wert: false
HmIP-RF.000A9569A3A102:1.BOOST_TIME Wert: 0
HmIP-RF.000A9569A3A102:1.CONTROL_DIFFERENTIAL_TEMPERATURE Wert:
HmIP-RF.000A9569A3A102:1.CONTROL_MODE Wert:
HmIP-RF.000A9569A3A102:1.DURATION_UNIT Wert:
HmIP-RF.000A9569A3A102:1.DURATION_VALUE Wert:
HmIP-RF.000A9569A3A102:1.FROST_PROTECTION Wert: false
HmIP-RF.000A9569A3A102:1.HEATING_COOLING Wert: 0
HmIP-RF.000A9569A3A102:1.HUMIDITY Wert: 81
HmIP-RF.000A9569A3A102:1.HUMIDITY_STATUS Wert: 0
HmIP-RF.000A9569A3A102:1.PARTY_MODE Wert: false
HmIP-RF.000A9569A3A102:1.PARTY_SET_POINT_TEMPERATURE Wert: 0.000000
HmIP-RF.000A9569A3A102:1.PARTY_TIME_END Wert:
HmIP-RF.000A9569A3A102:1.PARTY_TIME_START Wert:
HmIP-RF.000A9569A3A102:1.SET_POINT_MODE Wert: 0
HmIP-RF.000A9569A3A102:1.SET_POINT_TEMPERATURE Wert: 5.000000
HmIP-RF.000A9569A3A102:1.SWITCH_POINT_OCCURED Wert: false
HmIP-RF.000A9569A3A102:1.WINDOW_STATE Wert: 1
HmIP-RF.000A9569A3A102:1.QUICK_VETO_TIME Wert: 0

HmIP-WTH-2 000A9569A3A102:2

HmIP-WTH-2 000A9569A3A102:3

Thermostat Hauswirtschaftsraum:4

Thermostat Hauswirtschaftsraum:5

HmIP-WTH-2 000A9569A3A102:6

HmIP-WTH-2 000A9569A3A102:7

Gruß Ronny

R.Thümer
Beiträge: 33
Registriert: 16.02.2020, 13:40
System: CCU
Hat sich bedankt: 9 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von R.Thümer » 29.10.2022, 19:56

Henke hat geschrieben:
29.10.2022, 15:44
"Thermostat Hauswirtschaftsraum:1" mit "ACTUAL_TEMPERATURE" läuft nicht?
Wage ich zu bezweifeln.
Hallo, nein läuft leider nicht. Meldung beim Script ausführen. "Datenpunkt innen falsch"

Gruß Ronny

Benutzeravatar
Henke
Beiträge: 1524
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von Henke » 29.10.2022, 20:46

Letzter Versuch. Ich denke du hast irgendwelche Leerzeichen drin gehabt.
Reduziert auf die Datenpunkte und Seriennummern:

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
!
! Änderungen - M. Henke - V1.61-5
! Fehlerkontrolle
! Variablen an den Anfang gesetzt
! Systemvariable entfernt - Ziel kann Kanal oder Systemvariable sein
! Formel optimiert
! Mindestluftfeuchte hinzugefügt
!Fehler innen/außen korrigiert
! Hier anpassen
real rMinimumLuftfeuchte = 10.0; ! Darunter lohnt es nicht

object oAussenDpTemperatur = dom.GetObject ( "BidCos-RF.MEQ0833325:1.TEMPERATURE");
object oInnenDpTemperatur = dom.GetObject ( "HmIP-RF.000A9569A3A102:1.ACTUAL_TEMPERATURE");
object sZielKanal = dom.GetObject ( "BidCos-RF.LEQ0264630:1.STATE");

!- object oAussenDpTemperatur = dom.GetObject ( "HmIP-RF.0010DD899E5483:1.ACTUAL_TEMPERATURE");
!- object oInnenDpTemperatur = dom.GetObject ( "HmIP-RF.000A9D89B6606E:1.ACTUAL_TEMPERATURE");
!- object sZielKanal = dom.GetObject ( "A-L-Test");

! AB hier nichts mehr ändern

  if (  !oInnenDpTemperatur ) { WriteLine ( "Datenpunkt Innen falsch!" ); quit; };
  object oTHi = dom.GetObject ( oInnenDpTemperatur.Channel() );
  object oHi = oTHi.DPByHssDP("HUMIDITY");

!
!  object oLueften = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("HWR lüften"); 		! xxx SysVar xxxx
!
  if (  !oAussenDpTemperatur ) { WriteLine ( "Datenpunkt Außen falsch!" ); quit; };
  object oTHa = dom.GetObject ( oAussenDpTemperatur.Channel() );
  object oHa = oTHa.DPByHssDP("HUMIDITY");
!  WriteLine ( oHa.Name() );

  object oZiel = dom.GetObject(sZielKanal); 	! Zielkanal
  if (  !oZiel ) { WriteLine ( "Kanal Ziel falsch!" ); quit; };

!
! xxx Programmteil Lüftungsempfehlung
! Lokale Variablen
	real tin = oInnenDpTemperatur.Value(); 	! Temperatur in °C innen
	integer rfin = oHi.Value(); ! relative Feuchte in % innen
	real afVin; 				! absolute Feuchte in g/m³ LuftVolumen innen
!
	real tau = oAussenDpTemperatur .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 + (13.245 * rfin * ((17.67 * tin)/(tin + 243.5)).Exp()) / (273.15 + tin));
! Einzeiler ok, aber es geht genauer - Topic nicht gelesen :-)
    real afVin = ((6112.0 / 461.51) * rfin * ((17.62 * tin)/(tin + 243.12)).Exp()) / (273.15 + tin);
! xxx
!
! xxx Berechnung der absoluten Feuchte außen (in g/m³ Luftvolumen)
! Einzeiler ok, aber es geht genauer - Topic nicht gelesen :-)
	real afVau = ((6112.0 / 461.51) * rfau * ((17.62 * tau)/(tau + 243.12)).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
	boolean bLueften = false;
    if ( rMinimumLuftfeuchte <= afVin ) {
    if (afVau < (afVin - 1.2)) {bLueften = true;}
     else {
        if (afVau >= (afVin - 0.5)) {bLueften = false;}
          }
          }
! xxx
!  dom.GetObject(ID_SYSTEM_VARIABLES).Get("HWR lüften").State(oLueften.Variable()); 					! xxx für Anzeige xxxxx
! xxx
!
! xxx Direktes ein-/ausschalten des Aktors/Kanal "Dein Schaltaktor Kanal" wegen Nachsteuerung
if ( oZiel.State() != bLueften)  { oZiel.State(bLueften); }

! xxx
! xxx Parameter für Testprogramm Keller xxxx
WriteLine(" xxx Parameter xxxx ");
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 Minimum <= innen lüften : 			" # rMinimumLuftfeuchte.ToString(2) # " g/m³ <  " # afVin.ToString(2));
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("Lüftungsempfehlung: 	" # bLueften );
Edit: Fehler innen/außen korrigiert
Edit2: afVau angepasst
Zuletzt geändert von Henke am 30.01.2023, 06:20, insgesamt 2-mal geändert.

R.Thümer
Beiträge: 33
Registriert: 16.02.2020, 13:40
System: CCU
Hat sich bedankt: 9 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von R.Thümer » 29.10.2022, 21:49

Henke hat geschrieben:
29.10.2022, 20:46
Letzter Versuch. Ich denke du hast irgendwelche Leerzeichen drin gehabt.
Reduziert auf die Datenpunkte und Seriennummern:

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
!
! Anderungen - M. Henke
! Fehlerkontrolle
! Variablen an den Anfang gesetzt
! Systemvariable entfernt - Ziel kann Kanal oder Systemvariable sein
! Formel optimiert
! Mindestluftfeuchte hinzugefügt

! Hier anpassen
real rMinimumLuftfeuchte = 10.0; ! Darunter lohnt es nicht

object oAussenDpTemperatur = dom.GetObject ( "BidCos-RF.MEQ0833325:1.TEMPERATURE");
object oInnenDpTemperatur = dom.GetObject ( "HmIP-RF.000A9569A3A102:1.ACTUAL_TEMPERATURE");
object sZielKanal = dom.GetObject ( "BidCos-RF.LEQ0264630:1.STATE");

!- object oAussenDpTemperatur = dom.GetObject ( "HmIP-RF.0010DD899E5483:1.ACTUAL_TEMPERATURE");
!- object oInnenDpTemperatur = dom.GetObject ( "HmIP-RF.000A9D89B6606E:1.ACTUAL_TEMPERATURE");
!- object sZielKanal = dom.GetObject ( "A-L-Test");

! AB hier nichts mehr ändern

  if (  !oInnenDpTemperatur ) { WriteLine ( "Datenpunkt Innen falsch!" ); quit; };
  object oTHi = dom.GetObject ( oInnenDpTemperatur.Channel() );
  object oHi = oTHi.DPByHssDP("HUMIDITY");

!
!  object oLueften = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("HWR lüften"); 		! xxx SysVar xxxx
!
  if (  !oAussenDpTemperatur ) { WriteLine ( "Datenpunkt Außen falsch!" ); quit; };
  object oTHa = dom.GetObject ( oAussenDpTemperatur.Channel() );
  object oHa = oTHa.DPByHssDP("HUMIDITY");
!  WriteLine ( oHa.Name() );

  object oZiel = dom.GetObject(sZielKanal); 	! Zielkanal
  if (  !oZiel ) { WriteLine ( "Kanal Ziel falsch!" ); quit; };

!
! xxx Programmteil Lüftungsempfehlung
! Lokale Variablen
	real tin = oInnenDpTemperatur.Value(); 	! Temperatur in °C innen
	integer rfin = oHi.Value(); ! relative Feuchte in % innen
	real afVin; 				! absolute Feuchte in g/m³ LuftVolumen innen
!
	real tau = oInnenDpTemperatur.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 + (13.245 * rfin * ((17.67 * tin)/(tin + 243.5)).Exp()) / (273.15 + tin));
! Einzeiler ok, aber es geht genauer - Topic nicht gelsen :-)
    real afVin = ((6112.0 / 461.51) * rfin * ((17.62 * tin)/(tin + 243.12)).Exp()) / (273.15 + tin);
! xxx
!
! xxx Berechnung der absoluten Feuchte außen (in g/m³ Luftvolumen)
!
	real afVau = ((6112.0 / 461.51) * rfau * ((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
	boolean bLueften = false;
    if ( rMinimumLuftfeuchte <= afVin ) {
    if (afVau < (afVin - 1.2)) {bLueften = true;}
     else {
        if (afVau >= (afVin - 0.5)) {bLueften = false;}
          }
          }
! xxx
!  dom.GetObject(ID_SYSTEM_VARIABLES).Get("HWR lüften").State(oLueften.Variable()); 					! xxx für Anzeige xxxxx
! xxx
!
! xxx Direktes ein-/ausschalten des Aktors/Kanal "Dein Schaltaktor Kanal" wegen Nachsteuerung
if ( oZiel.State() != bLueften)  { oZiel.State(bLueften); }

! xxx
! xxx Parameter für Testprogramm Keller xxxx
WriteLine(" xxx Parameter xxxx ");
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 Minimum <= innen lüften : 			" # rMinimumLuftfeuchte.ToString(2) # " g/m³ <  " # afVin.ToString(2));
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("Lüftungsempfehlung: 	" # bLueften );
Hallo, es scheint zu laufen!! Das Script spuckt Daten aus und der Lüfter wird angesteuert. Jetzt muss es nur noch in Verbindung mit meinem Programm laufen. Ich denke das bekomme ich hin. Wenn ich das richtig verstehe kann ich statt das Kanals des Lüfters einfach dort die Systenvariable eintragen und dann wird diese getriggert? Vielen vielen Dank für die schnelle Hilfe. Ich versuche dann mal das Script für andere Räume anzupassen. Sollte ich scheitern würde ich nochmal nachfragen. Also nochmals vielen Dank für deine Arbeit!!!

Gruß Ronny

R.Thümer
Beiträge: 33
Registriert: 16.02.2020, 13:40
System: CCU
Hat sich bedankt: 9 Mal

Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte

Beitrag von R.Thümer » 30.10.2022, 12:05

R.Thümer hat geschrieben:
29.10.2022, 21:49
Henke hat geschrieben:
29.10.2022, 20:46
Letzter Versuch. Ich denke du hast irgendwelche Leerzeichen drin gehabt.
Reduziert auf die Datenpunkte und Seriennummern:

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
!
! Anderungen - M. Henke
! Fehlerkontrolle
! Variablen an den Anfang gesetzt
! Systemvariable entfernt - Ziel kann Kanal oder Systemvariable sein
! Formel optimiert
! Mindestluftfeuchte hinzugefügt

! Hier anpassen
real rMinimumLuftfeuchte = 10.0; ! Darunter lohnt es nicht

object oAussenDpTemperatur = dom.GetObject ( "BidCos-RF.MEQ0833325:1.TEMPERATURE");
object oInnenDpTemperatur = dom.GetObject ( "HmIP-RF.000A9569A3A102:1.ACTUAL_TEMPERATURE");
object sZielKanal = dom.GetObject ( "BidCos-RF.LEQ0264630:1.STATE");

!- object oAussenDpTemperatur = dom.GetObject ( "HmIP-RF.0010DD899E5483:1.ACTUAL_TEMPERATURE");
!- object oInnenDpTemperatur = dom.GetObject ( "HmIP-RF.000A9D89B6606E:1.ACTUAL_TEMPERATURE");
!- object sZielKanal = dom.GetObject ( "A-L-Test");

! AB hier nichts mehr ändern

  if (  !oInnenDpTemperatur ) { WriteLine ( "Datenpunkt Innen falsch!" ); quit; };
  object oTHi = dom.GetObject ( oInnenDpTemperatur.Channel() );
  object oHi = oTHi.DPByHssDP("HUMIDITY");

!
!  object oLueften = (dom.GetObject(ID_SYSTEM_VARIABLES)).Get("HWR lüften"); 		! xxx SysVar xxxx
!
  if (  !oAussenDpTemperatur ) { WriteLine ( "Datenpunkt Außen falsch!" ); quit; };
  object oTHa = dom.GetObject ( oAussenDpTemperatur.Channel() );
  object oHa = oTHa.DPByHssDP("HUMIDITY");
!  WriteLine ( oHa.Name() );

  object oZiel = dom.GetObject(sZielKanal); 	! Zielkanal
  if (  !oZiel ) { WriteLine ( "Kanal Ziel falsch!" ); quit; };

!
! xxx Programmteil Lüftungsempfehlung
! Lokale Variablen
	real tin = oInnenDpTemperatur.Value(); 	! Temperatur in °C innen
	integer rfin = oHi.Value(); ! relative Feuchte in % innen
	real afVin; 				! absolute Feuchte in g/m³ LuftVolumen innen
!
	real tau = oInnenDpTemperatur.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 + (13.245 * rfin * ((17.67 * tin)/(tin + 243.5)).Exp()) / (273.15 + tin));
! Einzeiler ok, aber es geht genauer - Topic nicht gelsen :-)
    real afVin = ((6112.0 / 461.51) * rfin * ((17.62 * tin)/(tin + 243.12)).Exp()) / (273.15 + tin);
! xxx
!
! xxx Berechnung der absoluten Feuchte außen (in g/m³ Luftvolumen)
!
	real afVau = ((6112.0 / 461.51) * rfau * ((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
	boolean bLueften = false;
    if ( rMinimumLuftfeuchte <= afVin ) {
    if (afVau < (afVin - 1.2)) {bLueften = true;}
     else {
        if (afVau >= (afVin - 0.5)) {bLueften = false;}
          }
          }
! xxx
!  dom.GetObject(ID_SYSTEM_VARIABLES).Get("HWR lüften").State(oLueften.Variable()); 					! xxx für Anzeige xxxxx
! xxx
!
! xxx Direktes ein-/ausschalten des Aktors/Kanal "Dein Schaltaktor Kanal" wegen Nachsteuerung
if ( oZiel.State() != bLueften)  { oZiel.State(bLueften); }

! xxx
! xxx Parameter für Testprogramm Keller xxxx
WriteLine(" xxx Parameter xxxx ");
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 Minimum <= innen lüften : 			" # rMinimumLuftfeuchte.ToString(2) # " g/m³ <  " # afVin.ToString(2));
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("Lüftungsempfehlung: 	" # bLueften );
Hallo, es scheint zu laufen!! Das Script spuckt Daten aus und der Lüfter wird angesteuert. Jetzt muss es nur noch in Verbindung mit meinem Programm laufen. Ich denke das bekomme ich hin. Wenn ich das richtig verstehe kann ich statt das Kanals des Lüfters einfach dort die Systenvariable eintragen und dann wird diese getriggert? Vielen vielen Dank für die schnelle Hilfe. Ich versuche dann mal das Script für andere Räume anzupassen. Sollte ich scheitern würde ich nochmal nachfragen. Also nochmals vielen Dank für deine Arbeit!!!

Gruß Ronny
Hallo, ich habe festgestellt das beim Ausführen des Scripts unten die Außentemperatur gleich der Innentemperatur ist. Siehe Sceenshot. Liegt da ein Fehler vor?

Gruß Ronny
Screenshot (32).png

Antworten

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