Страница 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('Солнце заходит');
 }
*** Сообщение запрещено. Сообщение похоже на спам. ***