Also bei den Timern könnte evtl. Udo weiterhelfen. Ich müsste da auch erst rumprobieren und das kann dauern

Also bei den Timern könnte evtl. Udo weiterhelfen. Ich müsste da auch erst rumprobieren und das kann dauern
Welche Regel meinst du denn ? Das sind ja eine ganze Menge !!!
Code: Alles auswählen
rule "Init virtual Items"
when
System started or
Time cron "0 0/1 * * * ?" //alle 5min abfrage
then
/*if (Wassertemperatur_Soll_Setpoint.state == Uninitialized) {
Wassertemperatur_Soll_Setpoint.postUpdate(5.5) //postUpdate ist nur für Aktualisierungen innerhalb von openHAB (sendCommand gibt diese auch auf den Bus)
}
if (Feuchtegehalt_draussen.state == uninitialized) {
Feuchtegehalt_draussen.postUpdate(1)
}
*/
end
rule "Luftfeuchte Garage1 unten"
when
Time cron "0 0/5 * * * ?" //alle 5min
then
// Variablen
var Number temp_in = (TemperatureGarageRechtsTemperature.state as Number).floatValue //Innentemperatur in Grad Celsius
var Number temp_out = (TemperatureDraussenTemperature.state as Number).floatValue //Außentemperatur in Grad Celsius
var Number abs_hum_in = 0
var Number abs_hum_out = 0
var Number rel_hum_in = (TemperatureGarageRechtsHumidity.state as Number).floatValue //relative Feuchte Innen
var Number rel_hum_out = (TemperatureDraussenHumidity.state as Number).floatValue //relative Feuchte Außen
// Konstanten
val gas_const = 8314.3
val mol = 18.016
var Number ab = 0
var a_out = 0
var 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)
// absolute Innenfeuchte
ab = ((a_in * temp_in) / (b_in + temp_in)).doubleValue()
var Number sdd_in = 6.1078 * Math::pow(10, ab)
var Number dd_in = rel_hum_in / 100 * sdd_in
abs_hum_in = Math::pow(10, 5) * mol / gas_const * dd_in / (temp_in + 273.15)
// absolute Außenfeuchte
ab = ((a_out * temp_out) / (b_out + temp_out)).doubleValue()
var Number sdd_out = 6.1078 * Math::pow(10, ab)
var Number dd_out = rel_hum_out / 100 * sdd_out
abs_hum_out = Math::pow(10, 5) * mol / gas_const * dd_out / (temp_out + 273.15)
logInfo("Luftfeuchte Garage1", "Abs. Luftfeuchte - in: " + abs_hum_in + "g/m3, out: " + abs_hum_out + "g/m3")
if (abs_hum_in > abs_hum_out) { //wenn innen feuchter als außen, dann lüften
// lüften, Fenster öffnen
logInfo("Luftfeuchte", "Garage1 lüften")
} else {
// nicht lüften, Fenster schließen
logInfo("Luftfeuchte", "Garage1 nicht lüften")
}
//schreiben der werte in ITEM
//Feuchtegehalt_draussen.sendCommand(abs_hum_out)
Feuchtegehalt_garage1.sendCommand(abs_hum_in)
end
Code: Alles auswählen
rule "Luftfeuchte Garage1 unten"
when
Time cron "0 0/5 * * * ?" or //alle 5min
Item Dummy4 changed to ON
then
// Variablen
var Number temp_in = (Socket_Fritz_03_Temp.state as Number).floatValue //Innentemperatur in Grad Celsius
var Number temp_out = (Socket_Fritz_04_Temp.state as Number).floatValue //Außentemperatur in Grad Celsius
var Number abs_hum_in = 0
var Number abs_hum_out = 0
var Number rel_hum_in = (localHourlyForecastHumidity_02.state as Number).floatValue //relative Feuchte Innen
var Number rel_hum_out = (localHourlyForecastHumidity_03.state as Number).floatValue //relative Feuchte Außen
// Konstanten
val gas_const = 8314.3
val mol = 18.016
var ab = 0.0
var a_out = 0.0
var b_out = 0.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)
// absolute Innenfeuchte
ab = ((a_in * temp_in) / (b_in + temp_in))
var Number sdd_in = 6.1078 * Math::pow(10, ab)
var Number dd_in = rel_hum_in / 100 * sdd_in
abs_hum_in = Math::pow(10, 5) * mol / gas_const * dd_in / (temp_in + 273.15)
// absolute Außenfeuchte
ab = ((a_out * temp_out) / (b_out + temp_out))
var Number sdd_out = 6.1078 * Math::pow(10, ab)
var Number dd_out = rel_hum_out / 100 * sdd_out
abs_hum_out = Math::pow(10, 5) * mol / gas_const * dd_out / (temp_out + 273.15)
logInfo("Luftfeuchte Garage1", "Abs. Luftfeuchte - in: " + abs_hum_in + "g/m3, out: " + abs_hum_out + "g/m3")
if (abs_hum_in > abs_hum_out) { //wenn innen feuchter als außen, dann lüften
// lüften, Fenster öffnen
logInfo("Luftfeuchte", "Garage1 lüften")
} else {
// nicht lüften, Fenster schließen
logInfo("Luftfeuchte", "Garage1 nicht lüften")
}
//schreiben der werte in ITEM
//Feuchtegehalt_draussen.sendCommand(abs_hum_out)
// Feuchtegehalt_garage1.sendCommand(abs_hum_in)
logInfo("Luftfeuchte", "Bin am Ende")
end
Code: Alles auswählen
2020-09-04 22:10:00.091 [INFO ] [ome.model.script.Luftfeuchte Garage1] - Abs. Luftfeuchte - in: 19.919263078355254g/m3, out: 17.777378515751558g/m3
2020-09-04 22:10:00.094 [INFO ] [e.smarthome.model.script.Luftfeuchte] - Garage1 lüften
2020-09-04 22:10:00.102 [INFO ] [e.smarthome.model.script.Luftfeuchte] - Bin am Ende
Code: Alles auswählen
var Number Temp_aussen = 20
Code: Alles auswählen
var Temp_aussen = (20).floatValue
Code: Alles auswählen
if(Feuchtegehalt_draussen.state instanceof Number)
Code: Alles auswählen
//Konstanten
val gas_const = 8314.3
val mol = 18.016
val a_in = 7.5
val b_in = 237.3
// 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)
rule "Luftfeuchte Garage1 unten"
when
Item TemperatureGarageRechtsTemperature changed
//Time cron "0 0/5 * * * ?" //alle 5min
then
logInfo("abs feuchte", "Rule triggert")
// Variablen
var Number temp_in = (TemperatureGarageRechtsTemperature.state as Number).floatValue //Innentemperatur in Grad Celsius
var Number temp_out = (TemperatureDraussenTemperature.state as Number).floatValue //Außentemperatur in Grad Celsius
var Number abs_hum_in = 0
var Number abs_hum_out = 0
var Number rel_hum_in = (TemperatureGarageRechtsHumidity.state as Number).floatValue //relative Feuchte Innen
var Number rel_hum_out = (TemperatureDraussenHumidity.state as Number).floatValue //relative Feuchte Außen
// Konstanten
var double ab = 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)
{
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)
// absolute Innenfeuchte
ab = ((a_in * temp_in) / (b_in + temp_in))
var Number sdd_in = 6.1078 * Math::pow(10, ab)
var Number dd_in = rel_hum_in / 100 * sdd_in
abs_hum_in = Math::pow(10, 5) * mol / gas_const * dd_in / (temp_in + 273.15)
// absolute Außenfeuchte
ab = ((a_out * temp_out) / (b_out + temp_out)).doubleValue
var Number sdd_out = 6.1078 * Math::pow(10, ab)
var Number dd_out = rel_hum_out / 100 * sdd_out
abs_hum_out = Math::pow(10, 5) * mol / gas_const * dd_out / (temp_out + 273.15)
logInfo("Luftfeuchte Garage1", "Abs. Luftfeuchte - in: " + abs_hum_in + "g/m3, out: " + abs_hum_out + "g/m3")
if (abs_hum_in > abs_hum_out) { //wenn innen feuchter als außen, dann lüften
// lüften, Fenster öffnen
logInfo("Luftfeuchte", "Garage1 lüften")
} else {
// nicht lüften, Fenster schließen
logInfo("Luftfeuchte", "Garage1 nicht lüften")
}
//schreiben der werte in ITEM
Feuchtegehalt_garage1.sendCommand(abs_hum_in)
}
end