Задержка срабатывания метода от времени восхода и заката.

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Aleks130699
Сообщения: 102
Зарегистрирован: Чт ноя 19, 2015 5:33 pm
Благодарил (а): 7 раз
Поблагодарили: 7 раз

Задержка срабатывания метода от времени восхода и заката.

Сообщение Aleks130699 » Вт янв 26, 2016 11:43 am

Привет всем.Хочу сделать чтобы шторы в доме и возможно что-то еще срабатывало на пол часа раньше или позже от времени восхода и заката взятого из яндекс погоды.нашел вот такое код у Сергея

Код: Выделить всё

 if (date("H:i",time()+30*60)==getGlobal('SunRiseTime')) {
  setGlobal("isDark",0);
 }
 
 if (date("H:i",time()-30*60)==getGlobal('SunSetTime')) {
  setGlobal("isDark",1); 
но почему то он у меня не срабатывает, я в программировании пока не сильно понимаю, могу только переделать код под себя, и так еще немного.Подскажите что не так в коде.
За это сообщение автора Aleks130699 поблагодарил:
djleon (Ср дек 20, 2017 10:38 am)
Рейтинг: 1.18%
Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 180 раз

Re: Задержка срабатывания метода от времени восхода и заката

Сообщение Jager » Вт янв 26, 2016 3:32 pm

Aleks130699 писал(а):но почему то он у меня не срабатывает, я в программировании пока не сильно понимаю, могу только переделать код под себя, и так еще немного.Подскажите что не так в коде.
У меня вот так корявенько, но работает :)
if (timeIs(getGlobal('yw_day0.sunset'))) {
SetTimeOut("lightOnTimer","callMethod('Megad3-8.turnOn');",1500);
Включается уличное освещение через 25 минут после заката.
flair
Сообщения: 197
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Задержка срабатывания метода от времени восхода и заката

Сообщение flair » Вт янв 26, 2016 5:10 pm

а можете пояснить что делает Ваш скрипт? и как его привязать к другим исполнительным устройствам?
и куда его вписать?
zelevova
Сообщения: 291
Зарегистрирован: Вт ноя 18, 2014 11:43 pm
Откуда: Краснодарский край
Благодарил (а): 32 раза
Поблагодарили: 68 раз

Re: Задержка срабатывания метода от времени восхода и заката

Сообщение zelevova » Вт янв 26, 2016 5:24 pm

Писать его туда же где твой код написан.

Код: Выделить всё

if (timeIs(getGlobal('yw_day0.sunset'))) { // проверка что сейчас закат
SetTimeOut("lightOnTimer","callMethod('Megad3-8.turnOn');",1500); // устанавливаем таймер  
Собственно таймер ставиться на 25 минут = 1500/60
По таймеру вызывается "callMethod('Megad3-8.turnOn');", можно вызвать runScript() или еще чего. Это просто вариант отложить выполнение на некоторое время.

Кстати, элегантное решение. Что то я до него не сразу допер. :)
За это сообщение автора zelevova поблагодарили (всего 3):
flair (Вт янв 26, 2016 5:36 pm) • Samir77 (Чт дек 13, 2018 1:25 pm) • Nail (Пн мар 02, 2020 5:02 pm)
Рейтинг: 3.53%
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
flair
Сообщения: 197
Зарегистрирован: Сб янв 16, 2016 12:18 am
Откуда: Минск
Благодарил (а): 16 раз
Поблагодарили: 15 раз

Re: Задержка срабатывания метода от времени восхода и заката

Сообщение flair » Вт янв 26, 2016 5:38 pm

В какое место его прописать? В онМинут?
Или в конкретное место надо вписывать?
И этод метод как его применить к ардуине? Она у меня включает по гет запросу... (простите я нуб)))
Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 180 раз

Re: Задержка срабатывания метода от времени восхода и заката

Сообщение Jager » Вт янв 26, 2016 5:47 pm

flair писал(а):В какое место его прописать? В онМинут?
Да
И этод метод как его применить к ардуине? Она у меня включает по гет запросу... (простите я нуб)))
Вместо callMethod вписывайте свой getUrl между кавычками.
Но лучше для своей ардуины создайте объект в классе Relays, в этом объекте пропишите в методы turnOn и turnOff свои getUrl на включение/выключение и потом просто управляйте этими методами.
За это сообщение автора Jager поблагодарил:
flair (Вт янв 26, 2016 6:31 pm)
Рейтинг: 1.18%
Aleks130699
Сообщения: 102
Зарегистрирован: Чт ноя 19, 2015 5:33 pm
Благодарил (а): 7 раз
Поблагодарили: 7 раз

Re: Задержка срабатывания метода от времени восхода и заката

Сообщение Aleks130699 » Вт янв 26, 2016 9:26 pm

Jager писал(а): У меня вот так корявенько, но работает :)
if (timeIs(getGlobal('yw_day0.sunset'))) {
SetTimeOut("lightOnTimer","callMethod('Megad3-8.turnOn');",1500);
Включается уличное освещение через 25 минут после заката.
Может быть идея не плохая, но он не сработает если сервер глюканет в это время, да и на какое- то время раньше не сделаешь.
SergeyM
Сообщения: 100
Зарегистрирован: Вт ноя 11, 2014 5:16 pm
Откуда: Шатура
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: Задержка срабатывания метода от времени восхода и заката

Сообщение SergeyM » Вт янв 26, 2016 9:49 pm

можно воспользоваться скриптом

Код: Выделить всё

$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));
}

}
 
для расчета восхода, заката и наступления утренних и вечерних сумерек.
За это сообщение автора SergeyM поблагодарил:
nightwind (Вт июл 12, 2016 1:18 pm)
Рейтинг: 1.18%
Windows, Debian 8, 1-Wire
Connect
Аватара пользователя
xor
Сообщения: 1812
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 225 раз
Поблагодарили: 549 раз

Re: Задержка срабатывания метода от времени восхода и заката

Сообщение xor » Пт май 13, 2016 12:37 am

У себя еще для улицы использую задержку вкл света после заката с учетом облачности:

Код: Выделить всё

//попадаю сюда при наступлении заката
//задержка вкл уличного света после заката от 18 с (100% облачность) до 30 мин (облачность 0%)
Settimeout('StreetLightOn',"cm('nl1.turnon');",(101-gg('ow_fact.clouds'))*18);
*** Сообщение запрещено. Сообщение похоже на спам. ***
Xseon
Сообщения: 51
Зарегистрирован: Ср сен 18, 2013 12:21 am
Благодарил (а): 9 раз
Поблагодарили: 7 раз

Re: Задержка срабатывания метода от времени восхода и заката

Сообщение Xseon » Пн окт 31, 2016 10:44 am

Не претендую на правильность решения, но у меня сделано так:
В 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('Солнце заходит');
 }
*** Сообщение запрещено. Сообщение похоже на спам. ***
Ответить