Можно подумать проверка времени наступления джоба чем-то отличается от проверки в минутном циклеxor писал(а): ↑Вт апр 09, 2019 10:10 amЧем плох этот способ - из-за одного запуска в сутки важный минутный цикл тратит на эту проверку 60*24 чеков, и второе - при остановке и рестарте МДМ можно прошляпить это событие (
Я при вычислении заката/восхода создаю два джоба на время этих событий+добавляю проверку на наступление этих событий в метод startup
[Сценарий] Вычисляем восход и заход солнца
-
- Сообщения: 1561
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 577 раз
Re: [Сценарий] Вычисляем восход и заход солнца
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 632 раза
Re: [Сценарий] Вычисляем восход и заход солнца
win10 connect https://connect.smartliving.ru/profile/303
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 632 раза
Re: [Сценарий] Вычисляем восход и заход солнца
Она прекращается после сработкиfandaymon писал(а):Можно подумать проверка времени наступления джоба чем-то отличается от проверки в минутном циклеxor писал(а): ↑Вт апр 09, 2019 10:10 amЧем плох этот способ - из-за одного запуска в сутки важный минутный цикл тратит на эту проверку 60*24 чеков, и второе - при остановке и рестарте МДМ можно прошляпить это событие (
Я при вычислении заката/восхода создаю два джоба на время этих событий+добавляю проверку на наступление этих событий в метод startup
Я поглядываю на часы, когда жду наступления какого-нибудь события, после наступления его - перестаю. Некоторые делают по-другому. Это их путь)
Отправлено с моего Redmi 4X через Tapatalk
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 1463
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 261 раз
- Поблагодарили: 454 раза
Re: [Сценарий] Вычисляем восход и заход солнца
Прошу прощения за занудство, можно все же выложить фрагмент кода (кодом).
Скажу сейчас немыслимую для многих вещь: у меня нет телеграмма и даже смартфона.
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 632 раза
Re: [Сценарий] Вычисляем восход и заход солнца
Вот мой, вызываю при рестарте и в полночь (onNewDay) - свои координаты и несколько свойств подправить:Chainik писал(а):Прошу прощения за занудство, можно все же выложить фрагмент кода (кодом).
Скажу сейчас немыслимую для многих вещь: у меня нет телеграмма и даже смартфона.
$lat=55.4734; // широта
$long= 37.7848; // долгота
$sun_info = date_sun_info(time(), $lat, $long);
ClearScheduledJob("job_SunSet");
ClearScheduledJob("job_civil_twilight_begin");
ClearScheduledJob("job_civil_twilight_end");
foreach ($sun_info as $key => $val) {
if ($key == 'sunrise') {
$sunrise = $val;
//echo 'Восход: '.date("H:i", $sunrise).'<br>';
setGlobal('weather_my.SunRise',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('weather_my.SunSet',date("H:i", $sunset));
setGlobal('weather_my.LongTag',gmdate("H:i", $day_length));
AddScheduledJob("job_SunSet","cm('DarknessMode.activate');say('Закат',2);", $sunset);
}
if ($key == 'transit') {
//echo 'В зените: '.date("H:i", $val).'<br>';
setGlobal('weather_my.Transit',date("H:i", $val));
}
if ($key == 'civil_twilight_begin') {
//echo 'Начало утренних сумерек: '.date("H:i", $val).'<br>';
setGlobal('weather_my.civil_begin',date("H:i", $val));
AddScheduledJob("job_civil_twilight_begin","cm('DarknessMode.deactivate');", $val);
}
if ($key == 'civil_twilight_end') {
//echo 'Конец вечерних сумерек: '.date("H:i", $val).'<br>';
setGlobal('weather_my.civil_end',date("H:i", $val));
AddScheduledJob("job_civil_twilight_end","say('Сумерки!',2);", $val);
}
}
if (timeBetween(getGlobal('weather_my.civil_begin'),getGlobal('weather_my.SunSet')) && getGlobal('DarknessMode.active')==1) {
callMethod('DarknessMode.deactivate');
} elseif (!timeBetween(getGlobal('weather_my.civil_begin'),getGlobal('weather_my.SunSet')) && getGlobal('DarknessMode.active')!=1) {
callMethod('DarknessMode.activate');
}
Отправлено с моего Redmi 4X через Tapatalk
- Рейтинг: 2.33%
win10 connect https://connect.smartliving.ru/profile/303
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 632 раза
Re: [Сценарий] Вычисляем восход и заход солнца
Неприменимо -- исправлять наступление/окончание режима Темно нет причины уже неск. лет. Солнце восходит и заходит как по часам)))fandaymon писал(а): ... Но зато усложняем исправление условий срабатывания. Исправить что-то, не забыть перезапустить джобы, убедиться что там сработает именно то что надо - путь настоящего джедая
Отправлено с моего Redmi 4X через Tapatalk
win10 connect https://connect.smartliving.ru/profile/303
- nightwind
- Сообщения: 333
- Зарегистрирован: Вс июн 26, 2016 4:42 pm
- Откуда: Барановичи
- Благодарил (а): 28 раз
- Поблагодарили: 52 раза
- Контактная информация:
Re: [Сценарий] Вычисляем восход и заход солнца
пора завязывать, всю тему засрали модер поудалит лишнее, надеюсь
-
- Сообщения: 1561
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 577 раз
Re: [Сценарий] Вычисляем восход и заход солнца
Ну там - закат + час, закат + 15 минут - народу иногда нужно и такое... Имеется в виду не сам режим темно, а какие-нибудь действия, которые надо делатьxor писал(а): ↑Вт апр 09, 2019 7:20 pmНеприменимо -- исправлять наступление/окончание режима Темно нет причины уже неск. лет. Солнце восходит и заходит как по часам)))fandaymon писал(а): ... Но зато усложняем исправление условий срабатывания. Исправить что-то, не забыть перезапустить джобы, убедиться что там сработает именно то что надо - путь настоящего джедая
Отправлено с моего Redmi 4X через Tapatalk
-
- Сообщения: 1561
- Зарегистрирован: Сб янв 13, 2018 5:00 pm
- Благодарил (а): 39 раз
- Поблагодарили: 577 раз
Re: [Сценарий] Вычисляем восход и заход солнца
Зачем мне профайлер? Я по коду посмотрел, что и как там делается. gg не делает записей в базе + база на малинке в памяти, так что select достаточно быстро отрабатывает.
Ну скажем так - я тоже оптимизирую код, там где это нужно. А там где не нужно предпочитаю делать так, как быстрееnightwind писал(а): ↑Вт апр 09, 2019 7:44 pmЯ этого не утверждал. да и питон и пхп давно уже почти и не интерпретаторы) Я только обратил внимание на моду оправдывать свой говнокод доступной процессорной мощностью. типа и так сойдет. ну или напишем потом в требованиях 32 ядерный проц.
//Имею опыт переписывания говнокода в одном эмбеддед проекте, ускорившим выполнение почти в 10 000 раз.
-
- Сообщения: 2101
- Зарегистрирован: Пт апр 07, 2017 12:20 pm
- Благодарил (а): 314 раз
- Поблагодарили: 464 раза
Re: [Сценарий] Вычисляем восход и заход солнца
а облака?xor писал(а): ↑Вт апр 09, 2019 7:20 pmНеприменимо -- исправлять наступление/окончание режима Темно нет причины уже неск. лет. Солнце восходит и заходит как по часам)))fandaymon писал(а): ... Но зато усложняем исправление условий срабатывания. Исправить что-то, не забыть перезапустить джобы, убедиться что там сработает именно то что надо - путь настоящего джедая
раз в 10-й уже спорим )))
отказался от джобов, т.к. пофиг что чуть сложнее, но ограничено - сложно динамическое смещение ввести, проверяется по сравнению с минутным намного чаще - нет в этом никакой оптимизации, да и что по сути там оптимизировать гг и сравнение условий - мизер
зато при стандартном использовании:
1. раз в сутки рассчитали и записали время восхода заката (в формате линукс тайм)
2. раз в минуту вызываем проверку
Код: Выделить всё
$last_register = $this->getProperty('updated');
if (time() - $last_register >= 19800) { //облачность и поменяться может, ну добавили еще одну проверку, убрав селекты и расчеты ниже
$darkness = $this->getProperty('active');
$cloudiness = getGlobal('ow_fact.clouds');
$sunrise = getGlobal('Time.SunRiseTimestamp');
$sunrise = date('H:i', $sunrise + 600 + (30*$cloudiness));
$sunset = getGlobal('Time.SunSetTimestamp');
$sunset = date('H:i', $sunset - 1200 - (30*$cloudiness));
if ($darkness == 1 && timeBetween($sunrise, $sunset)) {
callMethodSafe('DarknessMode.deactivate');
}
elseif ($darkness == 0 && timeBetween($sunset, $sunrise)) {
callMethodSafe('DarknessMode.activate');
}
}
зато намного удобней и гибче
- Рейтинг: 2.33%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо