ночной и дневной режим

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

Модератор: immortal

Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: ночной и дневной режим

Сообщение Logrus » Пн янв 15, 2018 8:20 am

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);
}
было без проверки, а в историю пишет все, выводит только первое и последнее
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: ночной и дневной режим

Сообщение Logrus » Пт фев 02, 2018 9:45 pm

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');
} 
п.с. у кого-то ))) в минутном таймере происходит запрос через гетглобал одного и того же параметра раз так "несколько"
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: ночной и дневной режим

Сообщение xor » Ср фев 07, 2018 2:47 am

Убрал из минутного цикла проверку на наступление темноты/рассвет
После полуночи (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
За это сообщение автора xor поблагодарил:
prmres (Ср окт 13, 2021 8:04 pm)
Рейтинг: 1.16%
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: ночной и дневной режим

Сообщение Logrus » Ср фев 07, 2018 3:01 am

сейчас на малинке вожусь с 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); 
в коннекте все обновлено, только скопировать методы, круто и нагрузка на систему меньше!

п.с. по оптимизации там вообще поле непаханное
Последний раз редактировалось Logrus Пн мар 04, 2019 4:44 pm, всего редактировалось 2 раза.
За это сообщение автора Logrus поблагодарил:
prmres (Ср окт 13, 2021 8:05 pm)
Рейтинг: 1.16%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: ночной и дневной режим

Сообщение xor » Ср фев 07, 2018 10:25 pm

да-да-да!
Мне тоже понравилось, у меня в минутном цикле ещё проверка сработки будильников болтается, я их (будильники) тоже сейчас на джобы переведу
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: ночной и дневной режим

Сообщение nick7zmail » Ср фев 07, 2018 10:30 pm

Для будильников если что есть модуль в маркете...если не в курсе =)
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: ночной и дневной режим

Сообщение Logrus » Чт фев 08, 2018 3:19 am

какие преимущества у модуля перед джобами в плане нагрузки (как в модуле реализована подписка)?

п.с. вообще полез в это после слов на пред. странице про "согласен внесу в модуль", кстати еще не до конца закончил, в "хотелках" вообще из модуля это все выпилить (опенвейзер), а нафига мне каждый час на 16 (сейчас 4) объектов обновлять: civil_twilight_end, civil_twilight_begin, transit, day_length, sunset, sunrise; итого 6*24*16=2304 раз в сутки не нужная запись в свойства
я их (будильники) тоже сейчас на джобы переведу
поделиться не забудь ;) пока, стоит модуль, отключен, фактически не используется
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: ночной и дневной режим

Сообщение nick7zmail » Чт фев 08, 2018 6:32 am

Logrus писал(а):какие преимущества у модуля перед джобами в плане нагрузки (как в модуле реализована подписка)?
Удобный интерфейс, ни строчки кода, можно выбрать дни недели. Подписки нет никакой, есть собственный цикл, который проверяет условия раз в 5 секунд, и если совпадают - запускает указанное оповещение (метод, сценарий, звук). Сомневаюсь что он как-то грузит систему...ну мож 1 процент проца хавает, и несколько кб оперативы (размер файла цикла).
Logrus писал(а): п.с. вообще полез в это после слов на пред. странице про "согласен внесу в модуль", кстати еще не до конца закончил, в "хотелках" вообще из модуля это все выпилить (опенвейзер), а нафига мне каждый час на 16 (сейчас 4) объектов обновлять: civil_twilight_end, civil_twilight_begin, transit, day_length, sunset, sunrise; итого 6*24*16=2304 раз в сутки не нужная запись в свойства
Раз в час записать свойства у 4 объектов - это фигня...ты видел работу простых устройств? Там просто наверно сотни свойств в секунду записываются...На фоне этого опенвезер - вообще никакой доли не вносит...тем более можно выставить период обновления 2-3 часа.
А в модуль обязательно внесу...я просто добраться до исправления модулей пока вообще не могу...помогаю "онлайн" людям по запросам...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: ночной и дневной режим

Сообщение Logrus » Чт фев 08, 2018 7:05 am

с простыми устройствами, тоже не все хорошо и не только с ними
и да, действительно без знаний невозможно разобраться (но все равно модули надо оптимизировать, зачем в 5 сек. опрашивать, разве время на срабатывание с секундами задается?)
но, я проще скажу уже с тем минимумом, чему научился (спасибо всем отвечающим), средняя температура процессора упала с 54 до 50 градусов
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: ночной и дневной режим

Сообщение nick7zmail » Чт фев 08, 2018 8:17 am

Logrus писал(а):но все равно модули надо оптимизировать, зачем в 5 сек. опрашивать, разве время на срабатывание с секундами задается?
А почему нет?) Записи в базу при этом не ведётся, обработка 1 итерации цикла, мне кажется, меньше 10 миллисекунд...просто мигом...Раз в минуту если опрашивать - есть шанс, что сработает на минуту позже...а зачем нам такие неточности...
За это сообщение автора nick7zmail поблагодарил:
slgeo (Чт фев 08, 2018 12:57 pm)
Рейтинг: 1.16%
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Ответить