Probleme Lüftersteuerung über die Absolute Luftfeuchte
Moderator: Co-Administratoren
- 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
@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?
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?
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
- 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
Stimmt, da muss er jetzt wieder "Funk-Temperatur-/ Feuchtesensor außen Holzunterstand" einsetzen oder die Kanalnummer.
Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte
Hallo, ich habe fast alle Datenpunkte und Kanalnahmen probiert. Fehlermeldung beim Script ausführen: "Kanal innen falsch" oder "Datenpunkt innen falsch"Henke hat geschrieben: ↑28.10.2022, 21:40Teste 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 );
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 );
- 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
"Thermostat Hauswirtschaftsraum:1" mit "ACTUAL_TEMPERATURE" läuft nicht?
Wage ich zu bezweifeln.
Wage ich zu bezweifeln.
-
- 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
Hallo,
zeig doch mal Deine Geräte / Kanäle die Du verwenden willst, analog zu den drei Beispielen:
Innen Aussen Schalter Gruß
schlichi
Nachtrag:
... damit bekommst Du Deine Daten ggf. auch angezeigt.
zeig doch mal Deine Geräte / Kanäle die Du verwenden willst, analog zu den drei Beispielen:
Innen Aussen Schalter 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 = "";
}
}
}
... inzwischen autodidakter, fortgeschrittener Anfänger mit bestandener Einstiegsprüfung für den Expertenmodus Teil 3 (erfahrener Anwender)
Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte
Hallo, hier mal die gewünschten Daten. Die Datenpunkte hatte ich schon in meinem ersten Post mit reingeschrieben.schlichi hat geschrieben: ↑29.10.2022, 15:51Hallo,
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:... damit bekommst Du Deine Daten ggf. auch angezeigt.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 = ""; } } }
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
Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte
Hallo, nein läuft leider nicht. Meldung beim Script ausführen. "Datenpunkt innen falsch"
Gruß Ronny
- 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
Letzter Versuch. Ich denke du hast irgendwelche Leerzeichen drin gehabt.
Reduziert auf die Datenpunkte und Seriennummern:
Edit: Fehler innen/außen korrigiert
Edit2: afVau angepasst
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 );
Edit2: afVau angepasst
Zuletzt geändert von Henke am 30.01.2023, 06:20, insgesamt 2-mal geändert.
Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte
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!!!Henke hat geschrieben: ↑29.10.2022, 20:46Letzter 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 );
Gruß Ronny
Re: Probleme Lüftersteuerung über die Absolute Luftfeuchte
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?R.Thümer hat geschrieben: ↑29.10.2022, 21:49Hallo, 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!!!Henke hat geschrieben: ↑29.10.2022, 20:46Letzter 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 );
Gruß Ronny
Gruß Ronny