Anfänger Frage zu Items schreiben in rules
Verfasst: 23. Mär 2019 21:51
Hallo Zusammen, ich habe schon wieder eine Anfängerfrage:
Zunächst die Hardware:
Raspberry Pi 3b+, Temperatursensoren 18B20, 4 fach Relais Modul https://www.amazon.de/Elegoo-Relaismodu ... 0FC11P0ZN4
Software: Openhab2
Bisher frage ich die Temperaturen von meiner Heizung und der Zimmer ab und visualisiere sie in Grafana.
Literatur: Smart Home mit openHAB2 von Marianne Spiller
Nun zum aktuellen Vorhaben:
Anhand der gemessenen innen und außen Temperaturen sowie Luftfeuchte berechne ich den absoluten Feuchtegehalt der Luft und will diesen in ein Item schreiben ohne Einheit und in Grafana visualisieren.
Nun das Problem:
Ich habe noch Probleme die Syntax zu verstehen trotz einiger gelesenen Beiträgen funktioniert es so nicht.
Das Item
Die Rule
Ich hoffe jemand kann mir weiterhelfen!
Zunächst die Hardware:
Raspberry Pi 3b+, Temperatursensoren 18B20, 4 fach Relais Modul https://www.amazon.de/Elegoo-Relaismodu ... 0FC11P0ZN4
Software: Openhab2
Bisher frage ich die Temperaturen von meiner Heizung und der Zimmer ab und visualisiere sie in Grafana.
Literatur: Smart Home mit openHAB2 von Marianne Spiller
Nun zum aktuellen Vorhaben:
Anhand der gemessenen innen und außen Temperaturen sowie Luftfeuchte berechne ich den absoluten Feuchtegehalt der Luft und will diesen in ein Item schreiben ohne Einheit und in Grafana visualisieren.
Nun das Problem:
Ich habe noch Probleme die Syntax zu verstehen trotz einiger gelesenen Beiträgen funktioniert es so nicht.
Das Item
Code: Alles auswählen
Number Feuchtegehalt_draussen
Number Feuchtegehalt_garage
Code: Alles auswählen
import org.openhab.core.library.types.*
import java.lang.Math
rule "Luftfeuchte Garage"
when
Time cron "0 0/5 * * * ?" //alle 5min
then
// Variablen
var Number temp_in = (TemperaturGarage_Temperature.state as Number).floatValue //Innentemperatur in Grad Celsius
var Number temp_out = (TemperatureDraussen_Temperature .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 = (TemperaturGarage_Humidity.state as Number).floatValue //relative Feuchte Innen
var Number rel_hum_out = (TemperatureDraussen_Humidity .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)
//schreiben der werte in ITEM
Feuchtegehalt_draussen.postUpdate(abs_hum_out)
//Feuchtegehalt_garage.postUpdate(abs_hum_in)
logInfo("Luftfeuchte Garage", "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", "Garage lüften")
} else {
// nicht lüften, Fenster schließen
logInfo("Luftfeuchte", "Garage nicht lüften")
}
end