Interessnt, was hast denn für schwellenwerte genommen? Kannst mal deine config posten? Danke
Ankündigung
Einklappen
Keine Ankündigung bisher.
Lüftungsmanagement (lohnt sich Lüften)
Einklappen
X
-
Also, der Aussensensor ist bei mir ein IPWE von ELV:
Code:/* DOTALL is active for Regex => . is also a wild char for line feeds (\n) */ Number IPWETemp "Temperatur: [%.1f °C]" <temperature> (IPWE) { http="<[ipweCache:300000:REGEX(.*?Kombi.*?<td.*td>.*?<td.*td>.*?<td.*>\\s*?(-?\\d.*) .C.*)]" } Number IPWEDewPoint "Taupunkt: [%.1f °C]" <temperature> (IPWE) Number IPWEHumidity "Luftfeuchtigkeit: [%s %%]" <humidity_rel> (IPWE) { http="<[ipweCache:300000:REGEX(.*?Kombi.*?<td.*td>.*?<td.*td>.*?<td.*td>.*?<td.*>\\s*?(\\d.*) %.*)]" } Number IPWEHumidityAbs "Luftfeuchtigkeit Abs: [%.1f g/m³]" <humidity_rel> (IPWE) Number IPWEWind "Windstärke: [%.1f km\\h]" <wind> (IPWE) { http="<[ipweCache:120000:REGEX(.*?Kombi.*?<td.*td>.*?<td.*td>.*?<td.*td>.*?<td.*td>.*?<td.*>\\s*?(\\d.*) km.*)]" }
Code:Number EO_01811E6C_Temperature "01811E6C Temperatur [%.1f °C]" <temperature> (Enocean) {aleoncean="REMOTEID=01:81:1E:6C,TYPE=RD_A5-04-01,PARAMETER=TEMPERATURE_CELSIUS"} Number EO_01811E6C_DewPoint "01811E6C Taupunkt [%.1f °C]" <temperature> (Enocean) Number EO_01811E6C_Humidity "01811E6C Humidity [%.1f %%]" <humidity_rel> (Enocean) {aleoncean="REMOTEID=01:81:1E:6C,TYPE=RD_A5-04-01,PARAMETER=HUMIDITY_PERCENT"} Number EO_01811E6C_HumidityAbs "01811E6C Humidity Abs [%.1f g/m³]" <humidity_rel> (Enocean) DateTime EO_01811E6C_LastUpdate "01811E6C [%1$ta %1$tR]" <clock> (Enocean) String EO_01811E6C_Lueftungseff "0180FE98 Lüftungseffektivität [%s]" <contact> (Enocean)
Code:rule "Calculate absolute humidity and dew point for 01811E6C" when Item EO_01811E6C_Temperature changed or Item EO_01811E6C_Humidity changed then // Absolute Humidity // dv = 216.7*(RH/100.0*6.112*exp(17.62*t/(243.12+t))/ (273.15+t)); // Dew Point // H = (log10(RH)-2.0)/0.4343+(17.62*t)/(243.12+t); // td = 243.12*H/(17.62-H); var Number t = EO_01811E6C_Temperature.state as DecimalType var Number RH = EO_01811E6C_Humidity.state as DecimalType var Number dv = 0 dv = 216.7 * (RH / 100.0 * 6.112 * Math::exp((17.62 * t / (243.12+t)).doubleValue) / (273.15 + t )) postUpdate(EO_01811E6C_HumidityAbs, (dv)) var Number H = 0 var Number td = 0 H = (Math::log10(RH.doubleValue) - 2.0) / 0.4343 + (17.62 * t) / (243.12 + t) td = 243.12 * H / (17.62 - H) postUpdate(EO_01811E6C_DewPoint, (td)) // Last Update: postUpdate(EO_01811E6C_LastUpdate, new DateTimeType()) // Lueftungseffektivität ermitteln var String effectivity = "keine" if (dv > IPWEHumidityAbs.state && dv <= 1.3 * IPWEHumidityAbs.state) { effectivity = "mäßig" } else if (dv > 1.3 * IPWEHumidityAbs.state && dv <= 1.5 * IPWEHumidityAbs.state) { effectivity = "mittel" } else { effectivity = "hoch" } postUpdate(EO_01811E6C_Lueftungseff, effectivity) end
Schöne Grüße,
thoern
Kommentar
-
Hi Thomas,
gut Idee, werde ich auch so einführen, allerdings mit dem Taupunkt, da aktuell noch keine Feuchtemessung bei mir im Keller möglich ist ...
Wahrscheinlich hast Du es schon selbst gesehen:
Code:if (dv > IPWEHumidityAbs.state && dv <= 1.3 * IPWEHumidityAbs.state) { effectivity = "mäßig") } else if (dv > 1.3 * IPWEHumidityAbs.state && dv <= 1.5 * IPWEHumidityAbs.state) { effectivity = "mittel") } else { effectivity = "hoch") }
Gruß Staehler
Kommentar
-
Zitat von staehler Beitrag anzeigenDu hast da schließende Klammern an mäßig/mittel/hoch. Vermutlich sind die zuviel, oder?
Gruß Staehler
Update: Habe gleich den Post 17 mit dem korrigierten Code aktualisiert
Danke nochmals und Gruß,
Thomas
Kommentar
-
Hi zusammen,
mittlerweile funktioniert mein Lüftungsmanagement richtig gut und ich habe auf einen Blick eine Übersicht. Optimal wäre nun noch via Notifymyandroid oder email mit mitzuteilen wenn sich die "Lüftungssituation" ändert.
Ich hatte probiert mit einer Rule das zu machen die immer aufgerufen wird wenn sich die "Lüften-günstig-Variable" ändert, das funktioniert auch, allerdings wird in der Berechnung die Variable immer wieder neu gesetzt was openhab als änderung interpretiert und die Rule ausführt (mit entsprechender Benachrichtigung) - also etwas viel des guten.
Ich möchte nun vergleichen ob sich seit dem letzten mal tatsächlich eine Änderung ergeben hat. Ich habe mit dazu eine Hilfsvariable angelegt aber irgendwie bekomme ich das nicht hin, dass der Vergleich des "Lüften-Günstig-Schalters" mit der Hilfsvariable klappt.
Code:var org.openhab.core.types.State Schlafzimmer_lueften_alt if (Schlafzimmer_lueften.state == Schlafzimmer_lueften_alt)
Gibt es da noch eine elegantere Lösung!?
Danke schon mal!
Gruß
MM
Kommentar
-
Versuchs mal damit:
Code:var String effectivity if (td_in <= td_out && Lueftungseffektivitaet.state != "keine") { effectivity = "keine" sendNotification("emailadresse", "Kellerfenster schließen, Lüftungseffizienz ist schlecht.") if (TVWohnzimmerSchalten.state==ON) sendXbmcNotification("ipadresse",3005,"Hinweis","Kellerfenster schließen, Lüftungseffizienz ist schlecht.") postUpdate(Lueftungseffektivitaet, effectivity) } else if (td_in > td_out && td_in-1 <= td_out && Lueftungseffektivitaet.state != "mäßig") { effectivity = "mäßig" postUpdate(Lueftungseffektivitaet, effectivity) } else if (td_in-1 > td_out && td_in-2 <= td_out && Lueftungseffektivitaet.state != "mittel") { effectivity = "mittel" sendNotification("emailadresse", "Keller Lüftungseffektivität: mittel") if (TVWohnzimmerSchalten.state==ON) sendXbmcNotification("ipadresse",3005,"Hinweis","Keller lüften, Lüftungseffizienz ist mittel.") postUpdate(Lueftungseffektivitaet, effectivity) } else if (td_in-3 > td_out && Lueftungseffektivitaet.state != "hoch") { effectivity = "hoch" sendNotification("emailadresse", "Keller Lüftungseffektivität: hoch") if (TVWohnzimmerSchalten.state==ON) sendXbmcNotification("ipadresse",3005,"Hinweis","Keller lüften, Lüftungseffizienz ist hoch.") postUpdate(Lueftungseffektivitaet, effectivity) }
Kommentar
-
Lüftungsmanagement mit EibPort
Hallo und einen guten Start ins neue Jahr !
ich stehe gerade vor der gleichen Aufgabe "Lüftungsmanagement für den Keller".
Die aufgezeigte Lösung mit der Berechnung und dem Vergleich der absoluten Luftfeuchtigkeit für innen und außen sollte auch bei mir sehr gut passen.
Hat jemand dies schon auf einem Eibport umgesetzt ? Ist der 'Mathe-Job' hierfür geeignet ?
Danke und Gruß
Burkhard
Kommentar
-
Hi Burkhard,
Zitat von bwknx Beitrag anzeigenHat jemand dies schon auf einem Eibport umgesetzt ? Ist der 'Mathe-Job' hierfür geeignet ?
Gruß,
Thomas E.-E.Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)
Kommentar
-
ist ja auch kein Problem … wollte nur die Erwartungshaltung "justieren" ;-)Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)
Kommentar
-
Vielen Dank für dieses Beispiel, ich konnte es gut übernehmen. Aber wie schaffe ich, dass ein Item, das ich dann auf Openhab darstellen kann je nach Feuchtigkeitsstatus einen Wert zugewiesen bekommt? Da Item bleibt bei mir immer nur ein - Bindestrich.
Rule:Code:import org.openhab.core.persistence.* import org.openhab.core.library.* import org.openhab.core.items.* import org.openhab.core.library.types.* import org.openhab.model.script.actions.* import org.joda.time.* import java.lang.Math.* rule "Luftfeuchte" when Item KG_Temp changed or Item KG_Feuchte changed or Item Netatmo_Outdoor_Temperature changed or Item Netatmo_Outdoor_Humidity changed or System started then // Variablen var Number temp_in = KG_Temp.state as DecimalType //Innentemperatur in Grad Celsius var Number temp_out = Netatmo_Outdoor_Temperature.state as DecimalType //Außentemperatur in Grad Celsius var Number abs_hum_in = 0 var Number abs_hum_out = 0 var Number td_in = 0 var Number td_out = 0 var Number rel_hum_in = KG_Feuchte.state as DecimalType //relative Feuchte Innen var Number rel_hum_out = Netatmo_Outdoor_Humidity.state as DecimalType //relative Feuchte Außen // Konstanten val gas_const = 8314.3 val mol = 18.016 var Number ab = 0 var Number sdd = 0 var Number dd = 0 var Number v = 0 var Number a_out = 0 var Number b_out = 0 // Parameter a, b // wenn T>=0: a = 7.5, b = 237.3 (dies wird wohl immer von den Innenraum zutreffen) // wenn T<0: a = 7.6, b = 240.7 (dies kann für die Außerntemperatur zutreffen) val a_in=7.5 val b_in=237.3 if (temp_out >= 0) { a_out=7.5 b_out=237.3 } else { a_out=7.6 b_out=240.7 } // Formeln // Sättingungsdampfdruck: SDD = 6.1078 * 10^((a*temp)/(b+temp)) // Dampfdruck: DD = rel_hum * 100 / SDD // Absolute Feuchte: AF = 10^5 * mol / gas_const * DD / (temp + 273.15) // Taupunkt: TD = b*v/(a-v) mit v = log10(DD / 6.1078) // absolute Innenfeuchte ab = ((a_in * temp_in) / (b_in + temp_in)).doubleValue() sdd = 6.1078 * Math::pow(10, ((a_in * temp_in) / (b_in + temp_in)).doubleValue()) dd = rel_hum_in / 100 * sdd v = Math::log10((dd/6.1078).doubleValue()) abs_hum_in = Math::pow(10, 5) * mol / gas_const * dd / (temp_in + 273.15) // absolute Außenfeuchte ab = ((a_out * temp_out) / (b_out + temp_out)).doubleValue() sdd = 6.1078 * Math::pow(10, ((a_out * temp_out) / (b_out + temp_out)).doubleValue()) dd = rel_hum_out / 100 * sdd v = Math::log10((dd/6.1078).doubleValue()) abs_hum_out = Math::pow(10, 5) * mol / gas_const * dd / (temp_out + 273.15) logInfo("Luftfeuchte", "Abs. Luftfeuchte - in: " + abs_hum_in + " g/m3, out: " + abs_hum_out + " g/m3") if (abs_hum_in > abs_hum_out) // && (Kellerlueftung.state == OPEN) //wenn innen feuchter als außen, dann lüften { // lüften, Fenster öffnen logInfo("Luftfeuchte", "Keller lüften") //sendCommand(Kellerlueftung, CLOSED) postUpdate(Kellerlueftung,"CLOSED") } else if ((abs_hum_in <= abs_hum_out) // && (Kellerlueftung.state == CLOSED) { // nicht lüften, Fenster schließen logInfo("Luftfeuchte", "Kellerfenster schließen") // sendCommand(Kellerlueftung, OPEN) postUpdate(Kellerlueftung,"OPEN") } end
Item:
Code://Lüftung String Kellerlueftung "Lüftungseffektivität [%s]" <contact>
Kommentar
-
Nein, die korrekte Zuweisung muss so aussehen:Code:postUpdate (Kellerlueftung, OPEN)
Code:Kellerlueftung.postUpdate(OPEN)
Der eigentlich springende Punkt ist aber, dass in diesem Fall kein "String" zugewiesen werden darf, sondern zwingend ein STATE, der auch zwingend ohne Anführungszeichen angegeben werden muss!Zuletzt geändert von udo1toni; 29.01.2016, 19:35.
- Likes 1
Kommentar
Kommentar