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

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

Модератор: immortal

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

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

Сообщение Logrus » Пн сен 25, 2017 6:00 pm

Logrus писал(а):в onNewMinute

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

// Режимы
$objects=getObjectsByClass("OperationalModes");
// переберем все объекты в класе
foreach($objects as $obj) {
  callMethod($obj['TITLE'].".check");
} 
DarknessMode настроен через восход - закат. все отлично

NightMode в методе check

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

// Ночь
if (timeIs("23:30") && !gg("NightMode.active")){
  say("Пора спать",1); 
  callMethod('NightMode.activate');
}

// День
if (timeIs("8:00") && gg("NightMode.active")){
  say("Утро, пора просыпаться",0); 
  callMethod('NightMode.deactivate');
} 
с кнопки включает и отключает, автоматом включает, но не отключает (мозг уже сломал), соответственно он время каждый час днем не произносит
решилось, таким кодом

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

if (timeis('23:00')) {
 callMethod('NightMode.activate');
} elseif (timeis('07:30')) {
 callMethod('NightMode.deactivate');
}
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
blackangel
Сообщения: 148
Зарегистрирован: Пт окт 21, 2016 2:00 pm
Благодарил (а): 31 раз
Поблагодарили: 13 раз

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

Сообщение blackangel » Пт янв 05, 2018 2:18 am

Всем привет! Что то я заметил что у меня darknessMode перестал работать. При вызове метода активации, не активирует. но isDark меняет. куда копать подскажите?)))
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

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

Сообщение xor » Пт янв 05, 2018 2:44 am

Logrus писал(а):Logrus писал(а):
в onNewMinute
У вас режим переключается два раза в сутки в определенное время, а эти условия проверяются в ежеминутном цикле 24*60 раз в день.
Я в таких случаях пользуюсь планировщиком Cron от Eraser'а, оччень рекомендую.
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

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

Сообщение Logrus » Пт янв 05, 2018 11:45 am

blackangel проверь аналогично https://majordomo.smartliving.ru/forum/ ... 420#p67950

xor ага, модуль хорош, но наверное концепция несколько другая, вызов всех чек у режимов единообразно и ночной более гибко
ночь.PNG
ночь.PNG (8.12 КБ) 5836 просмотров
через крон так уже не получится, либо минутный таймер там заводить (пробовал он несколько некорректно работает, это не плохо, а несколько не так как ожидаешь, но можно и плюсы в этом найти)
п.с. не скромно, а про //Message Global правда там с дропбоксом завязки, а на малинке, хз, как, можно подробнее, можно в блоге?
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

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

Сообщение xor » Пт янв 05, 2018 6:16 pm

Logrus писал(а): через крон так уже не получится
Можно-можно.
У меня есть объекты MyVars, такие глобальные переменные, чтобы не совать в зискомпьютер. Там я держу в том числе переменные для Крона. Можно их в интерфейс и вытягивать как у вас на картинке.

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

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

Сообщение Logrus » Пт янв 05, 2018 6:42 pm

единообразие вызовов не получится, там много менять придется
но я не понял как, у меня в классе Settings (начало/конец ночного не перенес), а крон то запускать по * * * * *
я у вас посмотрел, галочку в память на CheckNightTemp - Проверка ночной температуры себе поставил )))
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

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

Сообщение xor » Пт янв 05, 2018 8:15 pm

Поздравляю себя соврамши!
Да, у меня жестко в Кроне время прописано(.
Описал свои хотелки нереализованные по поводу одно-двухкратных событий в сутках.
Наверное, буду делать без Крона как-то так:

Получаем время события в сутках (напр. 14:30 ) любым способом (расчетом, напр., для восхода/заката, из интерфейса для тихого режима),
$datetime=timeConvert("14:30");
и создаем джоб
AddScheduledJob("title","commands",$datetime, $expire=60);

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

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

Сообщение Logrus » Пт янв 05, 2018 8:52 pm

я думал об этом, но остановился на таком исходя из удобства/понятности
ну дернет он все чеки в режиме 1440 раз в сутки, ну

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

if (timeIs(gg('ThisComputer.NightModeStart'))) {
 callMethod('NightMode.activate');
} elseif (timeIs(gg('ThisComputer.NightModeEnd'))) {
 callMethod('NightMode.deactivate');
} 

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

 if (timeBetween(gg('ThisComputer.SunRiseTime'),gg('ThisComputer.SunSetTime')) && gg('ThisComputer.isDark')=="1") {
  sg("ThisComputer.isDark",0);
  callMethodSafe('DarknessMode.deactivate');
 } elseif (!timeBetween(gg('ThisComputer.SunRiseTime'),gg('ThisComputer.SunSetTime')) && gg('ThisComputer.isDark')!="1") {
  sg("ThisComputer.isDark",1);
  callMethodSafe('DarknessMode.activate');
 } 
в сравнении с простыми устройствами и кучей расчетов времени и прочего, имхо, мелочь, а разбираться проще
выше примеры, с дополнительными проверками и дерганьем/записью в свойства, опять же доп условия нагрузка, но этим все постепенно обрастает
хотя уже не однообразно вижу, поправлю (хотя вот от знающих товарищей пояснения бы получить, так хорошо, так плохо, но делаем по такому компромиссу)
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

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

Сообщение xor » Пт янв 05, 2018 9:29 pm

А соглашусь.
Иногда идеально соптимизируешь, а через месяц и несколько обновлений уже хрен разберешься.
Или концепция внезапно поменяется.

Ну, за ясность!
Sergibus0
Сообщения: 31
Зарегистрирован: Пн мар 25, 2013 4:31 pm
Благодарил (а): 2 раза
Поблагодарили: 0

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

Сообщение Sergibus0 » Ср янв 10, 2018 1:21 pm

blackangel писал(а): Привожу пример, как это можно проделать:
СпойлерПоказать
поправте немного файл app_openweather.class.php, который находится в папке ../modules/app_openweather. В данном файле найдите строки
$sunRise = $sunInfo["sunrise"];
$sunSet = $sunInfo["sunset"];
после этих строк допишите
$sunRiseData = date(('H:i'),$sunInfo["sunrise"]);
$sunSetData = date(('H:i'),$sunInfo["sunset"]);
далее находим строку
sg('ow_fact.sunrise', $sunRise);
и после неё вставляем следующие строки
sg('ThisComputer.SunRiseTime', $sunRiseData);
sg('ThisComputer.SunSetTime', $sunSetData);
Сделал, всё работает, но как только прилетит обновление эту процедуру нужно будет делать заново...
Нельзя этот кусочек кода включить на постоянной основе?
Ответить