Re: Fehler in Rule "cannot convert from float to int"
Verfasst: 4. Sep 2020 19:19
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