Nach recherchen im Internet habe ich dann angefangen diese zu schreiben und zu testen, leider komme ich aber nie zu dem erhofften Ergebnis. Ich vergleiche die Ist Temperatur eines Wandthermostaten mit einem von mir angelegten Sollwert, wird dieser überschritten, soll ein Ventilator angehen. Allerding liefert der Vergleich immer das falsche Ergebnis. Ich habe daraufhin diverse Möglichkeiten getestet, immer mit dem selben Ergebnis das der If-Zweig mit Temperatur grösser als Sollwert ausgelöst wird, obwohl die Ist Temperaur niedriger ist.
Mittlerweile sehe ich den Wald vor lauter Bäumen nicht mehr und hoffe jemand im Forum kann mir die Augen öffnen was ich falsch mache.
x.items
Code: Alles auswählen
Number itemVar_SetP_Ventilator
Code: Alles auswählen
rule "Test Ventilator"
when
Time cron "0 0/1 * * * ?" // jede min. prüfen
then
var Number SetP_Ventilator = 30 // initialisieren
if (itemVar_SetP_Ventilator.state == NULL){ // Nur zuweisen wenn kein gültiger Wert vorliegt
itemVar_SetP_Ventilator.postUpdate(23.0)
logInfo("Rule Info","Setpoint Variable Ventilator zugewiesen")
}
if(HMIP_WT_01_Actual_Temperatur.state instanceof Number && itemVar_SetP_Ventilator.state instanceof Number){
temp_Thermostat = HMIP_WT_01_Actual_Temperatur.state as Number
SetP_Ventilator = itemVar_SetP_Ventilator.state as Number
logInfo("Rule Info","Temperatur: " + temp_Thermostat + "")
if(temp_Thermostat > SetP_Ventilator){ //Funktioniert nicht
logInfo("Rule Info","Ventilator Automatik Ein, Temperatur > "+ SetP_Ventilator + "°C")
}
else{
logInfo("Rule Info","Ventilator Automatik Aus, Temperatur < "+ SetP_Ventilator + "°C")
}
}
end
Code: Alles auswählen
if((HMIP_WT_01_Actual_Temperatur.state as Number) > (itemVar_SetP_Ventilator.state as Number)){
if(temp_Thermostat > (itemVar_SetP_Ventilator.state as Number)){
if(temp_Thermostat > 25.0){
if((HMIP_WT_01_Actual_Temperatur.state as Number) > 25.0){
Jens