Страница 1 из 2
Задержка срабатывания метода от времени восхода и заката.
Добавлено: Вт янв 26, 2016 11:43 am
Aleks130699
Привет всем.Хочу сделать чтобы шторы в доме и возможно что-то еще срабатывало на пол часа раньше или позже от времени восхода и заката взятого из яндекс погоды.нашел вот такое код у Сергея
Код: Выделить всё
if (date("H:i",time()+30*60)==getGlobal('SunRiseTime')) {
setGlobal("isDark",0);
}
if (date("H:i",time()-30*60)==getGlobal('SunSetTime')) {
setGlobal("isDark",1);
но почему то он у меня не срабатывает, я в программировании пока не сильно понимаю, могу только переделать код под себя, и так еще немного.Подскажите что не так в коде.
Re: Задержка срабатывания метода от времени восхода и заката
Добавлено: Вт янв 26, 2016 3:32 pm
Jager
Aleks130699 писал(а):но почему то он у меня не срабатывает, я в программировании пока не сильно понимаю, могу только переделать код под себя, и так еще немного.Подскажите что не так в коде.
У меня вот так корявенько, но работает
if (timeIs(getGlobal('yw_day0.sunset'))) {
SetTimeOut("lightOnTimer","callMethod('Megad3-8.turnOn');",1500);
Включается уличное освещение через 25 минут после заката.
Re: Задержка срабатывания метода от времени восхода и заката
Добавлено: Вт янв 26, 2016 5:10 pm
flair
а можете пояснить что делает Ваш скрипт? и как его привязать к другим исполнительным устройствам?
и куда его вписать?
Re: Задержка срабатывания метода от времени восхода и заката
Добавлено: Вт янв 26, 2016 5:24 pm
zelevova
Писать его туда же где твой код написан.
Код: Выделить всё
if (timeIs(getGlobal('yw_day0.sunset'))) { // проверка что сейчас закат
SetTimeOut("lightOnTimer","callMethod('Megad3-8.turnOn');",1500); // устанавливаем таймер
Собственно таймер ставиться на 25 минут = 1500/60
По таймеру вызывается "callMethod('Megad3-8.turnOn');", можно вызвать runScript() или еще чего. Это просто вариант отложить выполнение на некоторое время.
Кстати, элегантное решение. Что то я до него не сразу допер.
Re: Задержка срабатывания метода от времени восхода и заката
Добавлено: Вт янв 26, 2016 5:38 pm
flair
В какое место его прописать? В онМинут?
Или в конкретное место надо вписывать?
И этод метод как его применить к ардуине? Она у меня включает по гет запросу... (простите я нуб)))
Re: Задержка срабатывания метода от времени восхода и заката
Добавлено: Вт янв 26, 2016 5:47 pm
Jager
flair писал(а):В какое место его прописать? В онМинут?
Да
И этод метод как его применить к ардуине? Она у меня включает по гет запросу... (простите я нуб)))
Вместо callMethod вписывайте свой getUrl между кавычками.
Но лучше для своей ардуины создайте объект в классе Relays, в этом объекте пропишите в методы turnOn и turnOff свои getUrl на включение/выключение и потом просто управляйте этими методами.
Re: Задержка срабатывания метода от времени восхода и заката
Добавлено: Вт янв 26, 2016 9:26 pm
Aleks130699
Jager писал(а):
У меня вот так корявенько, но работает
if (timeIs(getGlobal('yw_day0.sunset'))) {
SetTimeOut("lightOnTimer","callMethod('Megad3-8.turnOn');",1500);
Включается уличное освещение через 25 минут после заката.
Может быть идея не плохая, но он не сработает если сервер глюканет в это время, да и на какое- то время раньше не сделаешь.
Re: Задержка срабатывания метода от времени восхода и заката
Добавлено: Вт янв 26, 2016 9:49 pm
SergeyM
можно воспользоваться скриптом
Код: Выделить всё
$lat=gg('Coordinates.latitude'); // широта 55.553964
$long=gg('Coordinates.longitude'); // долгота 39.744074
$sun_info = date_sun_info(time(), $lat, $long);
foreach ($sun_info as $key => $val) {
if ($key == 'sunrise') {
$sunrise = $val;
echo 'Восход: '.date("H:i", $sunrise).'<br>';
setGlobal('Sun.SunRiseTime',date("H:i", $sunrise));
}
if ($key == 'sunset') {
$sunset = $val;
$day_length = $sunset - $sunrise;
echo 'Заход: '.date("H:i", $sunset).'<br>';
echo 'Долгота дня: '.gmdate("H:i", $day_length).'<br>';
setGlobal('Sun.SunSetTime',date("H:i", $sunset));
setGlobal('Sun.LongTag',gmdate("H:i", $day_length));
}
if ($key == 'transit') {
echo 'В зените: '.date("H:i", $val).'<br>';
setGlobal('Sun.Transit',date("H:i", $val));
}
if ($key == 'civil_twilight_begin') {
echo 'Начало утренних сумерек: '.date("H:i", $val).'<br>';
setGlobal('Sun.civil_begin',date("H:i:s", $val));
}
if ($key == 'civil_twilight_end') {
echo 'Конец вечерних сумерек: '.date("H:i", $val).'<br>';
setGlobal('Sun.civil_end',date("H:i", $val));
}
}
для расчета восхода, заката и наступления утренних и вечерних сумерек.
Re: Задержка срабатывания метода от времени восхода и заката
Добавлено: Пт май 13, 2016 12:37 am
xor
У себя еще для улицы использую задержку вкл света после заката с учетом облачности:
Код: Выделить всё
//попадаю сюда при наступлении заката
//задержка вкл уличного света после заката от 18 с (100% облачность) до 30 мин (облачность 0%)
Settimeout('StreetLightOn',"cm('nl1.turnon');",(101-gg('ow_fact.clouds'))*18);
*** Сообщение запрещено. Сообщение похоже на спам. ***
Re: Задержка срабатывания метода от времени восхода и заката
Добавлено: Пн окт 31, 2016 10:44 am
Xseon
Не претендую на правильность решения, но у меня сделано так:
В onMinute:
Код: Выделить всё
list($tmph, $tmpm) = explode(":", gg("ThisComputer.SunSetTime"));
if (($tmpm == 00) || ($tmpm < gg("swHall.before_Dark"))) { //swHall.before_Dark - это свойство выключателя и задается слайдером в настройках (0-50 минут)
$tmph = $tmph-1;
$tmpm = $tmpm+60-gg("swHall.before_Dark");
} else { $tmpm = $tmpm-gg("swHall.before_Dark");}
if ($tmpm < 10) {sg("ThisComputer.DarkneesTime",$tmph.":0".$tmpm);}
else {sg("ThisComputer.DarkneesTime",$tmph.":".$tmpm);}
Далее стандартной процедурой обработки проверяем и включаем тамже в onMinute
Код: Выделить всё
if (timeBetween(getGlobal('SunRiseTime'),getGlobal('DarkneesTime')) && getGlobal('isDark')=="1") {
setGlobal("isDark",0);
callMethod('DarknessMode.deactivate');
say('Всходит солнце');
} elseif (!timeBetween(getGlobal('SunRiseTime'),getGlobal('DarkneesTime')) && getGlobal('isDark')!="1") {
setGlobal("isDark",1);
callMethod('DarknessMode.activate');
say('Солнце заходит');
}
*** Сообщение запрещено. Сообщение похоже на спам. ***