LOADING...

Определение дня и ночи DayOrNight

< Все темы
Print

Определение дня и ночи DayOrNight

День или ночь в системе Mr.Butler может определяться двумя способами по уровню освещенности с датчика освещенности и по времени установленному в приложении

Код вставляется во вкладку настройки дейстсвующего Sitemap(за исключением первой и последней строчки) где:

Check_Night — текущее значение дня = OFF или ночи = ON

Mode_Check_Night — численная переменная типа number определяющая режим определения по времени = ‘1’ или по освещенности = ‘2’

LocalTime_Date — текущее время

Illuminancesensor_Illuminance — текущий уровень освещенности

Nightsettings — позволяет установить уровень освещенности, если текущее значение меньше установленного, то система считает, что сейчас ночь иначе день

Set_clock label — время с которого начинается ночь

Set_clock_night_end label — время окончания ночи

sitemap illuminates label="Illum" {
            Frame label="Параметры" {
                
                Switch item=Check_Night label="Время суток" icon="sun" mappings=[ON="Ночь"] visibility=[Check_Night==ON]
                Switch item=Check_Night label="Время суток" icon="sun" mappings=[OFF="День"] visibility=[Check_Night==OFF]
                Selection item=Mode_Check_Night label="Режим определения[]" icon="sun" mappings=[1='по времени',2='по освещенности']
			    Text icon="time" label="Текущее время[%1$tH:%1$tM]" item=LocalTime_Date visibility=[Mode_Check_Night==1]
                Text icon="moon" label="Освещенность [%.0f lux]" item=Illuminancesensor_Illuminance visibility=[Mode_Check_Night==2]
                Slider icon="settings" label="Ночной уровень [%.0f lux]" item=Nightsettings step=5 maxValue=100 visibility=[Mode_Check_Night==2]
                Setpoint item=Set_clock label="Ночное время с [JS(numberToClock.js):%s]" minValue=0 maxValue=1425 step=30 visibility=[Mode_Check_Night==1]
                Setpoint item=Set_clock_night_end label="до [JS(numberToClock.js):%s]" minValue=0 maxValue=1425 step=30 visibility=[Mode_Check_Night==1]
                
            } 

}

Создаем файл numberToClock.js в папке /etc/openhab/transform со следующим содержимым(данная функция трансформирует число минут в вид 15:45): 

(function(i) {
    var hours = Math.floor(i / 60);
    var minutes = i % 60;

    hours = (hours < 10) ? "0" + hours : hours;
    minutes = (minutes < 10) ? "0" + minutes : minutes;

    return hours + ":" + minutes;
})(input)

Создаем файл dayornight.rules в папке /etc/openhab/rules со следующим содержимым: 

rule "dayornight"
when
    Time cron "0 * * * * ? *"
then
    if(Mode_Check_Night.state==2){
	    if((Illuminancesensor_Illuminance.state as Number).intValue <= (Nightsettings.state as Number).intValue){
	        Check_Night.sendCommand(ON)
	    }else{
            Check_Night.sendCommand(OFF)
        }
	} else if (Mode_Check_Night.state==1){
        var minuteofhour = now.getMinute
        var hourofday = now.getHour
        var minuteofday = 60 * hourofday + minuteofhour
        logInfo("Minute of day",  minuteofday.toString)
        if(minuteofday > Set_clock.state as Number || minuteofday < Set_clock_night_end.state as Number){
            Check_Night.sendCommand(ON)
        }else{
            Check_Night.sendCommand(OFF)
        }
    }
end

В sitemap выбирается режим определения дня и ночи

Если выбран по уровню освещенности, то каждую минуту происходит сравнение текущего уровня освещенности с установленным уровнем, если текущий уровень освещенности ниже установленного то переключатель Check_Night становиться в ON

Если выбран по времени, то любое время(начала и конца ночи) введенное в sitemap переводится в количество минут с 00:00 и между нами называется “MinuteOfDay”. Каждую минуту берется ТЕКУЩЕЕ время и переводится в количество минут “MinuteOfDay” и сравнивается с установленными в SiteMap

Предыдущая Корректировка таймеров, на примере освещения по датчику движения
Следующая Поддержание температуры котла/контура в режиме термостата