Страница 6 из 11
Re: ночной и дневной режим
Добавлено: Пн янв 15, 2018 8:20 am
Logrus
xor писал(а):Наверное, буду делать без Крона как-то так:
Получаем время события в сутках (напр. 14:30 ) любым способом (расчетом, напр., для восхода/заката, из интерфейса для тихого режима),
$datetime=timeConvert("14:30");
и создаем джоб
AddScheduledJob("title","commands",$datetime, $expire=60);
Сейчас я просто борюсь у себя за очистку циклов и увеличение быстродействия
имхо, страшны не циклы, а код в них, но
реализацию готовую выше интересно увидеть и попробовать
Код: Выделить всё
// Режимы
$objects=getObjectsByClass("OperationalModes");
// переберем все объекты в класе
foreach($objects as $obj) {
callMethod($obj['TITLE'].".check");
}
/*
$objects=array('NightMode','DarknessMode','NobodyHomeMode');
foreach($objects as $obj) {
callMethod($obj.'.check');
}
*/
закомментированное не проверял, но должно работать и имеет право на жизнь при разном подходе
я видел в ветке про оптимайзер ты писал
вот пример класс Users метод isHome, дёргается скриптом проверки юзеров
в свойствах isHome, alive включена история, метод alive связан с isHome и в нем дофига чего и далее (вот 1 на 1 менялось и это всё переписывалось)
Код: Выделить всё
// Установка флага и проверка на $status
$status = $this->getProperty("isHome");
if (!$status) {
$this->setProperty("isHome", 1);
}
было без проверки, а
в историю пишет все, выводит только первое и последнее
Re: ночной и дневной режим
Добавлено: Пт фев 02, 2018 9:45 pm
Logrus
xor писал(а):Сейчас я просто борюсь у себя за очистку циклов и увеличение быстродействия
подниму тему
Код: Выделить всё
$status=$this->getProperty('active'); // если в минутном таймере, то через gg
$RiseTime=gg('Sun.RiseTime');
$SetTime=gg('Sun.SetTime');
if (timeBetween($RiseTime,$SetTime) && $status) {
cm('DarknessMode.deactivate');
} elseif (!timeBetween($RiseTime,$SetTime) && !$status) {
cm('DarknessMode.activate');
}
п.с. у кого-то ))) в минутном таймере происходит запрос через гетглобал одного и того же параметра раз так "несколько"
Re: ночной и дневной режим
Добавлено: Ср фев 07, 2018 2:47 am
xor
Убрал из минутного цикла проверку на наступление темноты/рассвет
После полуночи (0:0) запускается скрипт (ещё и в методе StartUp на всякий случай)
Код: Выделить всё
$lat=gg('ThisComputer.latitude'); // широта
$long=gg('ThisComputer.longitude'); // долгота
$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>';
}
if ($key == 'sunset') {
$sunset = $val;
$day_length = $sunset - $sunrise;
//echo 'Заход: '.date("H:i", $sunset).'<br>';
//echo 'Долгота дня: '.gmdate("H:i", $day_length).'<br>';
AddScheduledJob("job_SunSet","cm('DarknessMode.activate');say('Закат',2);", $sunset);
}
if ($key == 'transit') {
//echo 'В зените: '.date("H:i", $val).'<br>';
}
if ($key == 'civil_twilight_begin') {
//echo 'Начало утренних сумерек: '.date("H:i", $val).'<br>';
AddScheduledJob("job_civil_twilight_begin","cm('DarknessMode.deactivate');", $val); // чуть раньше рассвета, мне так больше нравится
}
if ($key == 'civil_twilight_end') {
//echo 'Конец вечерних сумерек: '.date("H:i", $val).'<br>';
AddScheduledJob("job_civil_twilight_end","say('Сумерки',2);", $val);
}
}
Сейчас проверяю, наверное, надо при старте скрипта принудительно устанавливать текущее состояние DarknessMode
Re: ночной и дневной режим
Добавлено: Ср фев 07, 2018 3:01 am
Logrus
сейчас на малинке вожусь с 3.31 с алисой упавшая (свет/питание вчера жахнул)
но я несколько дней назад, как ты выше говорил, сделал, получилось круто (проблем с принудительной установкой режима не замечено, задание/джобс наоборот само его принудительно устанавливает, если не по времени)
смотреть что выкинул (закомментировано) в минутном таймере (в голове уже почти сложилось как аналогично на "никого нет дома" смастырить)
что добавил в классах:
Astronomy туда в свойства с скрипта CalcSunSetRise пишется расчет восход/закат
и обрабатывается методами
Sunrise
Код: Выделить всё
clearScheduledJob('Sunrise');// обязательно сбрасывать, то они плодятся
$time = $this->getProperty('RiseTime');
$datetime = timeConvert($time);
addScheduledJob('Sunrise', "cm('DarknessMode.deactivate');", $datetime, 82800);
Sunset
Код: Выделить всё
clearScheduledJob('Sunset');
$time = $this->getProperty('SetTime');
$datetime = timeConvert($time);
addScheduledJob('Sunset', "cm('DarknessMode.activate');", $datetime, 82800);
в скрипте startUp (а у меня перезагружаются циклы в 00:01)
Код: Выделить всё
// обновим астрономию
runScriptSafe('CalcSunSetRise');
runScriptSafe('Moon');
аналогично на ночной в классе Settings
установка начала и окончания из меню на предыдущей странице скрин показывал
в скрипте startUp
Код: Выделить всё
// установим "ночной режим"
$nightStart = gg('Sets.NightModeStart');
$nightEnd = gg('Sets.NightModeEnd');
sg('Sets.NightModeStart', $nightStart);
sg('Sets.NightModeEnd', $nightEnd);
в коннекте все обновлено, только скопировать методы, круто и нагрузка на систему меньше!
п.с. по оптимизации там вообще поле непаханное
Re: ночной и дневной режим
Добавлено: Ср фев 07, 2018 10:25 pm
xor
да-да-да!
Мне тоже понравилось, у меня в минутном цикле ещё проверка сработки будильников болтается, я их (будильники) тоже сейчас на джобы переведу
Re: ночной и дневной режим
Добавлено: Ср фев 07, 2018 10:30 pm
nick7zmail
Для будильников если что есть модуль в маркете...если не в курсе =)
Re: ночной и дневной режим
Добавлено: Чт фев 08, 2018 3:19 am
Logrus
какие
преимущества у модуля перед джобами в плане нагрузки (как в модуле реализована подписка)?
п.с. вообще полез в это после слов на пред. странице про "согласен внесу в модуль", кстати еще не до конца закончил, в "хотелках" вообще из модуля это все выпилить (опенвейзер), а нафига мне каждый час на 16 (сейчас 4) объектов обновлять: civil_twilight_end, civil_twilight_begin, transit, day_length, sunset, sunrise; итого 6*24*16=2304 раз в сутки не нужная запись в свойства
я их (будильники) тоже сейчас на джобы переведу
поделиться не забудь

пока, стоит модуль, отключен, фактически не используется
Re: ночной и дневной режим
Добавлено: Чт фев 08, 2018 6:32 am
nick7zmail
Logrus писал(а):какие преимущества у модуля перед джобами в плане нагрузки (как в модуле реализована подписка)?
Удобный интерфейс, ни строчки кода, можно выбрать дни недели. Подписки нет никакой, есть собственный цикл, который проверяет условия раз в 5 секунд, и если совпадают - запускает указанное оповещение (метод, сценарий, звук). Сомневаюсь что он как-то грузит систему...ну мож 1 процент проца хавает, и несколько кб оперативы (размер файла цикла).
Logrus писал(а):
п.с. вообще полез в это после слов на пред. странице про "согласен внесу в модуль", кстати еще не до конца закончил, в "хотелках" вообще из модуля это все выпилить (опенвейзер), а нафига мне каждый час на 16 (сейчас 4) объектов обновлять: civil_twilight_end, civil_twilight_begin, transit, day_length, sunset, sunrise; итого 6*24*16=2304 раз в сутки не нужная запись в свойства
Раз в час записать свойства у 4 объектов - это фигня...ты видел работу простых устройств? Там просто наверно сотни свойств в секунду записываются...На фоне этого опенвезер - вообще никакой доли не вносит...тем более можно выставить период обновления 2-3 часа.
А в модуль обязательно внесу...я просто добраться до исправления модулей пока вообще не могу...помогаю "онлайн" людям по запросам...
Re: ночной и дневной режим
Добавлено: Чт фев 08, 2018 7:05 am
Logrus
с простыми устройствами, тоже не все хорошо и не только с ними
и да, действительно без знаний невозможно разобраться (но все равно модули надо оптимизировать, зачем в 5 сек. опрашивать, разве время на срабатывание с секундами задается?)
но, я проще скажу уже с тем минимумом, чему научился (спасибо всем отвечающим), средняя температура процессора упала с 54 до 50 градусов
Re: ночной и дневной режим
Добавлено: Чт фев 08, 2018 8:17 am
nick7zmail
Logrus писал(а):но все равно модули надо оптимизировать, зачем в 5 сек. опрашивать, разве время на срабатывание с секундами задается?
А почему нет?) Записи в базу при этом не ведётся, обработка 1 итерации цикла, мне кажется, меньше 10 миллисекунд...просто мигом...Раз в минуту если опрашивать - есть шанс, что сработает на минуту позже...а зачем нам такие неточности...