import java.lang.Math var boolean autoChangeInProgress = false rule "Filterlaufzeit" when System started or Item Lueftung_Filterlaufzeit changed then if( Lueftung_Filterlaufzeit.state instanceof DecimalType ){ var Number laufzeit = Lueftung_Filterlaufzeit.state as DecimalType var Number weeks = Math::floor( (laufzeit/168).doubleValue ) var Number days = Math::floor( ((laufzeit-(weeks*168))/24).doubleValue) var String msg = "" if( weeks > 0 ){ if( weeks == 1 ) msg = weeks.intValue + " Woche" else msg = weeks.intValue + " Wochen" } if( days > 0 ){ if( msg.length > 0 ) msg = msg + ", " if( days == 1 ) msg = msg + days.intValue + " Tag" else msg = msg + days.intValue + " Tage" } postUpdate(Lueftung_Filterlaufzeit_Message,msg) } end rule "Predkosc wentylatora" when Item Lueftung_Auto_Mode changed or Time cron "0 0/1 * * * ?" then var Number day = now.getDayOfWeek var Number hour = now.getHourOfDay var Number minute = now.getMinuteOfHour var boolean isNight = false if( day == 5 ){ if( hour < 7 || (hour >= 23 && minute >=30) ) isNight = true } else if( day == 6 ){ if( hour < 9 || (hour >= 23 && minute >=30) ) isNight = true } else if( day == 7 ){ if( hour < 9 || (hour >= 22 && minute >=30) || hour >= 23 ) isNight = true } else{ if( hour < 7 || (hour >= 22 && minute >=30) || hour >= 23 ) isNight = true } var Number currentLevel = (Lueftung_Fan_Level.state as DecimalType) var Number newLevel = 2 if( !isNight ){ var Number raumTemperatur = (Lueftung_Ablufttemperatur.state as DecimalType) var Number aussenTemperatur = (Lueftung_Aussenlufttemperatur.state as DecimalType) var Number zielTemperatur = (Lueftung_Komfortemperatur.state as DecimalType) if( raumTemperatur >= zielTemperatur && aussenTemperatur >= raumTemperatur ){ newLevel = 1 } else if( raumTemperatur >= zielTemperatur - 1 && aussenTemperatur >= raumTemperatur - 1 && currentLevel == 1 ){ newLevel = 1 } } autoChangeInProgress=true sendCommand(Lueftung_Fan_Level,newLevel) end