Страница 3 из 6
Re: [Сценарий] Вычисляем восход и заход солнца
Добавлено: Чт ноя 22, 2018 5:35 pm
webms
skysilver писал(а):
Мне помнится что кто то в начале года тоже не умел создавать модули для МД)) Не понимал как)
Но за то сейчас какая красота
Не только красиво оформленные (уделяешь внимание мелочам), но и стабильные программы которые сразу доведены до конца и без касяков.
Еще раз спасибо за труд.
Re: [Сценарий] Вычисляем восход и заход солнца
Добавлено: Пн апр 08, 2019 5:41 pm
Torch
Коллеги, прошу прощения, если вопрос банальный. Я еще только учусь

. Скопировал отсюда скрипт, он для моих координат находит время заката/рассвета.
Но время заката и рассвета само по себе особого значения не имеет, оно важно только для запуска каких-то скриптов, поэтому подскажите правильный метод как запускать сценарий по восходу/закату.
К сожалению поиском по форуму найти не получилось

Re: [Сценарий] Вычисляем восход и заход солнца
Добавлено: Пн апр 08, 2019 5:52 pm
Chainik
Есть информация на форуме (
viewtopic.php?f=4&t=3508&start=2)
И это далеко не все.
Не получится / или не найдете как сделать, подскажем.
Все несложно.
п.№1 вы уже надеюсь, реализовали: периодическую запись в соответствующие свойства времени восхода и заката.
Re: [Сценарий] Вычисляем восход и заход солнца
Добавлено: Пн апр 08, 2019 5:55 pm
Torch
Chainik писал(а): Пн апр 08, 2019 5:52 pm
п.№1 вы уже надеюсь, реализовали: периодическую запись в соответствующие свойства времени восхода и заката.
Да, с глобальными переменными вроде понятно

.
Спасибо. сейчас доберусь до дома буду дальше читать.
Re: [Сценарий] Вычисляем восход и заход солнца
Добавлено: Пн апр 08, 2019 8:33 pm
Chainik
В общем:
1. Получаем время восхода и заката (
viewtopic.php?f=4&t=4090&start=4). Координаты, естественно, вписываете свои.
Код этот можно дописать, например, в onNewHour (Панель управления >>> ОБЪЕКТЫ >>> Объекты >>> Timer).
2. В onNewMinute (расположен там же) дописываем код:
Код: Выделить всё
if (timeIs(getGlobal('ThisComputer.SunRiseTime'))) {
runScript("Имя_вашего_сценария_с_действиями_которые_надо_совершить_при_наступлении_времени_восхода");
}
Собственно, и вся задача.
Re: [Сценарий] Вычисляем восход и заход солнца
Добавлено: Пн апр 08, 2019 9:06 pm
Torch
Chainik писал(а): Пн апр 08, 2019 8:33 pm
Собственно, и вся задача.
Да, спасибо так и сделал. Прошу прощения за ламерские вопросы просто опыта Majordomo практически нет, логику системы еще не до конца понял, поэтому могу тупить.
Re: [Сценарий] Вычисляем восход и заход солнца
Добавлено: Вт апр 09, 2019 10:10 am
xor
Chainik писал(а):В общем:
1. Получаем время восхода и заката (
viewtopic.php?f=4&t=4090&start=4). Координаты, естественно, вписываете свои.
Код этот можно дописать, например, в onNewHour (Панель управления >>> ОБЪЕКТЫ >>> Объекты >>> Timer).
2. В onNewMinute (расположен там же) дописываем код:
Код: Выделить всё
if (timeIs(getGlobal('ThisComputer.SunRiseTime'))) {
runScript("Имя_вашего_сценария_с_действиями_которые_надо_совершить_при_наступлении_времени_восхода");
}
Собственно, и вся задача.
Чем плох этот способ - из-за одного запуска в сутки важный минутный цикл тратит на эту проверку 60*24 чеков, и второе - при остановке и рестарте МДМ можно прошляпить это событие (
Я при вычислении заката/восхода создаю два джоба на время этих событий+добавляю проверку на наступление этих событий в метод startup
Отправлено с моего Redmi 4X через Tapatalk
Ps.
https://t.me/MajorDoMoRu/117123
Коллега Руслан собрал несколько решений на эту тему в телеге
Re: [Сценарий] Вычисляем восход и заход солнца
Добавлено: Вт апр 09, 2019 10:57 am
Chainik
xor писал(а): Вт апр 09, 2019 10:10 am
...+добавляю проверку на наступление этих событий в метод startup
А можно фрагмент кода из метода startup, которым проводится эта проверка?
Re: [Сценарий] Вычисляем восход и заход солнца
Добавлено: Вт апр 09, 2019 11:15 am
nightwind
Господа, что вы лепите?)))
НАФИГА держать в базе координаты дома? вы знаете сколько ресурсов жрет бессмысленно один getGlobal? а если каждую секунду в скрипте проверять??
Зачем заводить время в свойства компьютера?? вы обалдели что ли?
смотрите
в папке /lib/ мажора создаешь файл astrolib.php
Код: Выделить всё
if (!function_exists('time2Hm')) {
function time2Hm($tm) {
return date("H:i", $tm);
}
class Astro {
var $latitude;
var $longitude;
function Astro() {
$this -> latitude = 53.112268;
$this -> longitude = 26.014811;
}
function isDark() {
if (time() > $this -> sunSetTime())return 1;
return 0;
}
function sunRiseTime() {
$sun_info = date_sun_info(time(), $this -> latitude, $this -> longitude);
return $sun_info['sunrise'];
}
function sunRiseTime_Hm() {
return time2Hm($this -> sunRiseTime());
}
function sunSetTime() {
$sun_info = date_sun_info(time(), $this -> latitude, $this -> longitude);
return $sun_info['sunset'];
}
function sunSetTime_Hm() {
return time2Hm($this -> sunSetTime());
}
function dayLength() {
return $this -> sunSetTime() - $this -> sunRiseTime();
}
function dayLength_Hm() {
return time2Hm($this -> dayLength());
}
function transit() {
$sun_info = date_sun_info(time(), $this -> latitude, $this -> longitude);
return $sun_info['transit'];
}
function civil_begin() {
$sun_info = date_sun_info(time(), $this -> latitude, $this -> longitude);
return $sun_info['civil_twilight_begin'];
}
}
потом в минутном таймере например
Код: Выделить всё
$a = new Astro;
if (timeIs($a->sunRiseTime_Hm())) {
say('Всходит солнце');
callMethod('lamp2.turnoff');
}
И ни одного лишнего обращения к базе, вычисляетя все мгновенно.
И пожалуйста, не выкладывайте говнокод. и так все тормозит. ps - этот код тоже не образец качества, еще и вставился коряво.
Re: [Сценарий] Вычисляем восход и заход солнца
Добавлено: Вт апр 09, 2019 1:00 pm
xor
nightwind писал(а):Господа, что вы лепите?)))
НАФИГА держать в базе координаты дома? вы знаете сколько ресурсов жрет бессмысленно один getGlobal? а если каждую секунду в скрипте проверять??
Зачем заводить время в свойства компьютера?? вы обалдели что ли?
смотрите
в папке /lib/ мажора создаешь файл astrolib.php
Код: Выделить всё
if (!function_exists('time2Hm')) {
function time2Hm($tm) {
return date("H:i", $tm);
}
class Astro {
var $latitude;
var $longitude;
function Astro() {
$this -> latitude = 53.112268;
$this -> longitude = 26.014811;
}
function isDark() {
if (time() > $this -> sunSetTime())return 1;
return 0;
}
function sunRiseTime() {
$sun_info = date_sun_info(time(), $this -> latitude, $this -> longitude);
return $sun_info['sunrise'];
}
function sunRiseTime_Hm() {
return time2Hm($this -> sunRiseTime());
}
function sunSetTime() {
$sun_info = date_sun_info(time(), $this -> latitude, $this -> longitude);
return $sun_info['sunset'];
}
function sunSetTime_Hm() {
return time2Hm($this -> sunSetTime());
}
function dayLength() {
return $this -> sunSetTime() - $this -> sunRiseTime();
}
function dayLength_Hm() {
return time2Hm($this -> dayLength());
}
function transit() {
$sun_info = date_sun_info(time(), $this -> latitude, $this -> longitude);
return $sun_info['transit'];
}
function civil_begin() {
$sun_info = date_sun_info(time(), $this -> latitude, $this -> longitude);
return $sun_info['civil_twilight_begin'];
}
}
потом в минутном таймере например
Код: Выделить всё
$a = new Astro;
if (timeIs($a->sunRiseTime_Hm())) {
say('Всходит солнце');
callMethod('lamp2.turnoff');
}
И ни одного лишнего обращения к базе, вычисляетя все мгновенно.
И пожалуйста, не выкладывайте говнокод. и так все тормозит. ps - этот код тоже не образец качества, еще и вставился коряво.
Лепят каждый для себя)) у кого-то, кто использует жпс модуль, координаты и так в базе хранятся, кто-то не использует время восхода/заката, а ориентируется на сумерки, кто-то считает, что глупо занимать минутный цикл для проверки разового события, у кого-то железо позволяет не только не экономить на gg/sg, но и распознаванием видео онлайн заниматься.
У вас задача минимизировать обращения к базе, как я понял
Отправлено с моего Redmi 4X через Tapatalk