
Есть время рассвета ow_fact_2.sunrise и время заката ow_fact_2.sunset
Если XiOpenable01.level=0, то шторы закрываются.
Если XiOpenable01.level=100, то шторы открываются.
Подскажите код для открытия и закрытия штор на рассвете и закате для сценария.
Модератор: immortal
Код: Выделить всё
if (timeIs(getGlobal('ThisComputer.SunSetTime'))) { // проверка что сейчас закат
SetTimeOut("lightOnTimer","callMethod('Relay09.turnOn');", 60);
// закрываем штору, устанавливаем таймер через одну минуту после заката
}
if (timeIs(getGlobal('ThisComputer.SunRiseTime'))) { // проверка что сейчас расcвет
SetTimeOut("lightOnTimer","callMethod('Relay09.turnOff');",1500);
// открываем штору , устанавливаем таймер через 90 минут после рассвета
}
можно немного съэкономить - не проверять закат/рассвет каждую минуту, а при обновлении в системе заката/восхода сразу и запускатьNail писал(а): ↑Вс май 23, 2021 1:16 pmПРИМЕР (сценарий в onNewMinute)Код: Выделить всё
if (timeIs(getGlobal('ThisComputer.SunSetTime'))) { // проверка что сейчас закат SetTimeOut("lightOnTimer","callMethod('Relay09.turnOn');", 60); // закрываем штору, устанавливаем таймер через одну минуту после заката } if (timeIs(getGlobal('ThisComputer.SunRiseTime'))) { // проверка что сейчас расcвет SetTimeOut("lightOnTimer","callMethod('Relay09.turnOff');",1500); // открываем штору , устанавливаем таймер через 90 минут после рассвета }
Код: Выделить всё
//сегодня вычислили рассвет
$datetime = timeconvert(getGlobal('ThisComputer.SunRiseTime')) + 1500;
addScheduledJob("blinds_on","callMethod('Relay09.turnOn');",$datetime);
//сегодня вычислили рассвет для завтра
$datetime = timeconvert(getGlobal('ThisComputer.SunRiseTime')) + 1500 + 24*60*60; //timeconvert возвращает время только сегодняшним числом, добавим сутки
addScheduledJob("blinds_on","callMethod('Relay09.turnOn');",$datetime);
У меня такой стоит на данный момент.
Код: Выделить всё
if (timeIs(date("H:i",date_sun_info(time(),53.181683, 50.282005)['sunset']-60*60))) {
//определение заката по координатам опережение на 60 мин
callMethod('Relay09.turnOn');
//say("Закрываю шторы через час закат",2);
}
это же в ежеминутном цикле? в чём тогда выгода?Nail писал(а): ↑Пн май 24, 2021 11:10 amУ меня такой стоит на данный момент.Он лучше, вроде тоже не дергает?Код: Выделить всё
if (timeIs(date("H:i",date_sun_info(time(),53.181683, 50.282005)['sunset']-60*60))) { //определение заката по координатам опережение на 60 мин callMethod('Relay09.turnOn'); //say("Закрываю шторы через час закат",2); }
Код: Выделить всё
if (timeIs(getGlobal('ThisComputer.SunSetTime'))) { // проверка что сейчас закат
SetTimeOut("lightOnTimer","callMethod('XiOpenable01.close');", 60);
// закрываем штору, устанавливаем таймер через одну минуту после заката
}
if (timeIs(getGlobal('ThisComputer.SunRiseTime'))) { // проверка что сейчас расcвет
SetTimeOut("lightOnTimer","callMethod('XiOpenable01.open');",1500);
// открываем штору , устанавливаем таймер через 90 минут после рассвета
}
это не в сценариях должно быть, а в методе ClockChime.onNewMinute. этот метод вызывается каждую минуту и там текущее время сравнивается с закатом/рассветом из свойств ваших ThisComputer.SunSetTime и ThisComputer.SunRiseTime + время в этих свойствах должно быть в формате "чч:мм". если этот код лежит в сценариях, то его надо вызывать каждую минуту тогда, чтоб не прошляпить эти два момента за деньImageMaker писал(а): ↑Вт май 25, 2021 9:06 pmУ меня такая конструкция в сценариях:Но не работаетКод: Выделить всё
if (timeIs(getGlobal('ThisComputer.SunSetTime'))) { // проверка что сейчас закат SetTimeOut("lightOnTimer","callMethod('XiOpenable01.close');", 60); // закрываем штору, устанавливаем таймер через одну минуту после заката } if (timeIs(getGlobal('ThisComputer.SunRiseTime'))) { // проверка что сейчас расcвет SetTimeOut("lightOnTimer","callMethod('XiOpenable01.open');",1500); // открываем штору , устанавливаем таймер через 90 минут после рассвета }
![]()
Почему?
В этом методе уже есть какой-то код