[Настройка] onNewMinute

Описание настройки чего либо

Модераторы: immortal, newz20

ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: onNewMinute

Сообщение ErmolenkoM » Пт янв 24, 2014 9:21 am

electric писал(а):Ребят, подскажите пожалуйста.
Первый раз поставил систему, разбираюсь (железо обычный ПК с Дебиан).

Так и должно быть, или что то перепутано?
Не очень разбираюсь в php, но в коде "onNewMinute" строчка say(timeNow()) должна сообщать нам время раз в час, так?
Может этот текст должен быть в методе "onNewHour"??

Где прописывается что метод "onNewMinute" вызывается раз в минуту?
Или само название метода "onNewMinute" говорит системе что его надо выполнять раз в минуту? :?
Поздравляю!
Все нормально, так и должно быть.
Текст действительно мог бы быть в _каждый_час_ , но это пример. Просто пример :-) Например можно сообщать время каждые 15 минут (правка совсем небольшая) :-)
Оба метода CMS вызывает сама. Методы _предопределены_. Более подробно смотри scripts/cycle_... .php
Можешь заглянуть в мои такие-же методы. Ссылка в подписи.
aka msh555
Cubian на Cubietruck, Connect
Kumehtar
Сообщения: 12
Зарегистрирован: Вт окт 01, 2019 8:30 am
Благодарил (а): 3 раза
Поблагодарили: 0

Re: onNewMinute

Сообщение Kumehtar » Чт ноя 28, 2019 1:17 pm

sergejey писал(а):
Пн дек 03, 2012 12:48 pm
можно сделать скрипт такого плана. например, назвать его MyScript1 и в нём такой код

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

clearTimeout("myscript1_timer"); // очищаем таймер (чтобы случайно две копии не запустить)
... тут какой-то полезный код ...
setTimeOut("myscript1_timer","runScript('MyScript1');",30); // ставим таймер на запуск самого себя через 30 секунд
ну а в onNewMinute или даже в onNewHour можно вызвать runScript('MyScript1'); для первого запуска. либо даже вручную запустить его первый раз (правда после перезагрузки системы он сам не запустится я думаю, если вручную).
Подскажите, а где можно сделать этот скрипт? Куда его писать, чтобы можно было запускать из onNewMinute или по нажатию кнопки, например
Jilber
Сообщения: 682
Зарегистрирован: Ср май 03, 2017 7:41 pm
Благодарил (а): 111 раз
Поблагодарили: 107 раз

Re: [Настройка] onNewMinute

Сообщение Jilber » Чт ноя 28, 2019 1:21 pm

Панель управления - Сценарии - Добавить сценарий
freesh
Сообщения: 189
Зарегистрирован: Сб окт 12, 2019 2:10 pm
Благодарил (а): 6 раз
Поблагодарили: 30 раз

Re: onNewMinute

Сообщение freesh » Чт ноя 28, 2019 1:22 pm

Kumehtar писал(а):
Чт ноя 28, 2019 1:17 pm
sergejey писал(а):
Пн дек 03, 2012 12:48 pm
можно сделать скрипт такого плана. например, назвать его MyScript1 и в нём такой код

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

clearTimeout("myscript1_timer"); // очищаем таймер (чтобы случайно две копии не запустить)
... тут какой-то полезный код ...
setTimeOut("myscript1_timer","runScript('MyScript1');",30); // ставим таймер на запуск самого себя через 30 секунд
ну а в onNewMinute или даже в onNewHour можно вызвать runScript('MyScript1'); для первого запуска. либо даже вручную запустить его первый раз (правда после перезагрузки системы он сам не запустится я думаю, если вручную).
Подскажите, а где можно сделать этот скрипт? Куда его писать, чтобы можно было запускать из onNewMinute или по нажатию кнопки, например
Скрипт пишешь в - Сценариях (панель управления, слева там где объекты, там ниже - сценарии, и там создаешь сценарий)- а в onNewMinute или на метод кнопки пишешь runscript('ИмяССценария").
Raspberry pi3, xiaomi, sonoff rf.
Аватара пользователя
u885
Сообщения: 34
Зарегистрирован: Сб окт 06, 2018 1:42 am
Благодарил (а): 65 раз
Поблагодарили: 15 раз

Re: [Настройка] onNewMinute

Сообщение u885 » Вт фев 11, 2020 12:00 am

Решил подробнее начать изучать систему мажордомо, и PHP вместе с ней как само собой разумеющееся. Я сам новичок в этом и многого не знаю, устал вчитываться в незакомментированные коды профессионалов этого дела, честное слово глаза сломать можно видя впервые все эти заклинания. Возможно я излишне закомментировал, но если такой код увидят новички в разделах объектов,методов или же сценариев (хотя бы установленных по дефолту как примеры при установке базовой системы ) то вопросов в чатах, форумах и группах станет намного меньше. А новичкам таким как я станет понятнее принцип взаимодействия всей системы как в целом так и в частности. Собственно мое видение метода onNewMinute.

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

#######################################################################
#                   Проверка времени выполнения кода                  #
#      для проверки раскоментируйте строки в начале и в конце         #
#######################################################################
//debmes('Запускаю onNewMinute');
//Timer::start();

#######################################################################
#      Заполняем свойство ThisComputer.timeNow текущим временем       #
#######################################################################
sg('timeNow',date('H:i'));

#######################################################################
#          В переменную $h ставим текущий час, в $m - минуту          #
#  разнесем отдельно часы от минут и заполним ThisComputer.timeH и M  #
#######################################################################
//Получаем переменную час
$h=(int)date('G',time());
//Получаем переменную минута
$m=date('i',time());
//Заполним свойство часы отдельно
sg("ThisComputer.timeH", $h);
//Заполним свойство минуты отдельно
sg("ThisComputer.timeM", $m);
//Выделим и заполним десятки и единицы часов и минут
sg("ThisComputer.timeH1",$H[0]);
sg("ThisComputer.timeH2",$H[1]);
sg("ThisComputer.timeM1",$M[0]);
sg("ThisComputer.timeM2",$M[1]);

#######################################################################
#          Заготовка под какое-либо действие с выходным днем          #
#######################################################################
# if (isWeekDay()) {// Если рабочий день
# }
#
# Или например если в рабочие дни, время 17:00, и включен эко режим
# if (isWeekDay() && timeIs("17:00") && (gg("EconomMode.active")=="1")) {
# say("Скоро пользователи с работы прийдут, отключаю эко режим");
# callMethod('EconomMode.deactivate');
#}
#######################################################################

#######################################################################
# Если время ровно 00 и после 7 утра, и дома кто-то есть, глобальная  #
# настройка clockChimeEnabled разрешена, тогда проговариваем время    #
#######################################################################
// Если время =00минут
if ($m=="00") {
 // Если больше или равно 7 часам и говорить время можно
 if (($h>=7) && gg('clockChimeEnabled')) {
  // Если режим никого нет дома выключен
  if (gg('NobodyHomeMode.active') == '0'){
        //Сказать время с параметром важности сообщения =1(днем говорит, ночью - только в лог)
        say(timeNow(),1);
//  	rs('NoScript');//Заготовка запуска скрипта NoScript
//  	rs('NoScript');//Заготовка запуска скрипта NoScript
//  	rs('NoScript');//Заготовка запуска скрипта NoScript
//  	rs('NoScript');//Заготовка запуска скрипта NoScript
  }
 }
}



#######################################################################
#           Заполняем свойство ThisComputer.HomeStatus                #
# текущим временем и текстом  Дома никого или Дома кто-то есть        #
# также показания системных статусов безопасность, система, интернет  #
#       (эта надпись показывается на главной страничке в меню)        #
#######################################################################
$homeStatus=date('H:i');// Присваиваем переменной $homeStatus текущее время
if (gg('NobodyHomeMode.active')) {//Если активен режим NobodyHomeMode
 $homeStatus.=' Дома никого';//Добавляем к переменной Дома никого
 //  	rs('NoScript');//Заготовка запуска скрипта NoScript
} else {
 $homeStatus.=' Дома кто-то есть';//Иначе добавляем Дома кто-то есть
//  	rs('NoScript');//Заготовка запуска скрипта NoScript
}
$homeStatus.=' '.gg('Security.stateDetails');//свойство статуса безопасности
$homeStatus.=' '.gg('System.stateDetails');//свойство статуса системы
$homeStatus.=' '.gg('Communication.stateDetails');//свойство статуса сети
sg('HomeStatus',$homeStatus);//Сцепляем свойство с переменной и заполняем в ThisComputer.HomeStatus

#######################################################################
#     Включаем и выключаем режим темного времени суток DarknessMode   #
#      в зависимости от времени суток и данных восхода/заката         #
#######################################################################
//Проверим Если время между рассветом и закатом и свойство темно равно 1
if (timeBetween(gg('SunRiseTime'),gg('SunSetTime')) && gg('isDark')=="1") {
  //Изменим свойство на светло
  sg("isDark",0);
  //Запустим метод деактивации режима Темное время суток
  cm('DarknessMode.deactivate');
  //  	rs('NoScript');//Заготовка запуска скрипта NoScript
//Иначе Проверим время между рассветом и закатом и свойство темно не равно 1
} elseif (!timeBetween(gg('SunRiseTime'),gg('SunSetTime')) && gg('isDark')!="1") {
  //Изменим свойство на темно
  sg("isDark",1);
  //Запустим метод активации режима Темное время суток
  cm('DarknessMode.activate');
  //  	rs('NoScript');//Заготовка запуска скрипта NoScript
}
     //Если время совпало со свойством рассвет
     if (timeIs(gg('SunRiseTime'))) {
     //Произнести фразу Всходит солнце
     say('Всходит солнце');
     //  	rs('NoScript');//Заготовка запуска скрипта NoScript
     }
     //Если время совпало со свойством закат
     if (timeIs(gg('SunSetTime'))) {
     //Произнести фразу Солнце заходит с параметром важности сообщения =2(днем и ночью произносит)
     say('Солнце заходит',2);
     //  	rs('NoScript');//Заготовка запуска скрипта NoScript
     }
#######################################################################
#               Активация режима экономии EconomMode                  #
#######################################################################
//Если никого нет дома, экономный режим выключен и время 23:30
if (timeIs("23:30") && (gg("EconomMode.active")!="1") && (gg("NobodyHomeMode.active")=="1")) {
 //Произнести Похоже никого нет сегодня, можно сэкономить немного.
 say("Похоже никого нет сегодня, можно сэкономить немного.");
 //Запустить метод активации эконом режима
 cm('EconomMode.activate');
 //  	rs('NoScript');//Заготовка запуска скрипта NoScript
}

#######################################################################
#         Активация деактивация ночного режима NightMode              #
#######################################################################
//Если время 22:22
if (timeIs('22:22')) {
 //Запустить метод активации ночного режима
 cm('NightMode.activate');
 //  	rs('NoScript');//Заготовка запуска скрипта NoScript
//Иначе если время 07:00
} elseif (timeIs('07:00')) {
 //Запустить метод деактивации режима
 cm('NightMode.deactivate');
 //  	rs('NoScript');//Заготовка запуска скрипта NoScript
}

#######################################################################
#                     Запуск обслуживания системы                     #
#######################################################################
//Если время 03:33
if (timeIs("03:33")) {
 //Запустить скрипт оптимизации
 rs("systemMaintenance");
//  	rs('NoScript');//Заготовка запуска скрипта NoScript
}

#######################################################################
#                   Проверка времени выполнения кода                  #
#######################################################################
//debmes ("Время выполнения onNewMinute: ".Timer::finish()." сек.\n\r");

Уважаемое комьюнити если вы видите что что либо не верно комментированное поправьте меня, или имеете более лучший вариант то выложите свои наработки.

По мере изучения MDM по моему мнению лучшего конструктора, буду делиться c вами своими коментариями как опенсорс опенсорсу.
За это сообщение автора u885 поблагодарили (всего 5):
proxihvost (Вт фев 11, 2020 8:48 pm) • vitosmaxim80sad145 (Вт апр 07, 2020 11:37 am) • pru469 (Вт май 05, 2020 3:39 pm) • Surgeon76 (Пн май 25, 2020 10:45 pm) • astotskiy (Пн май 25, 2020 11:37 pm)
Рейтинг: 5.81%
Surgeon76
Сообщения: 4
Зарегистрирован: Чт май 21, 2020 6:51 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Re: [Настройка] onNewMinute

Сообщение Surgeon76 » Пн май 25, 2020 10:59 pm

Пролопатил кучу веток форума, и понял, что проблема с onNewMinute довольно частая, и я не исключение, а похоже что правило))). А решение то...где?
Дважды накатывал MDM и постоянно на те же грабли. Да, я новичок в этом, но как разобраться, понять и освоить, если большинство тем просто обрывается без ответов разработчиков и именно с этим злополучным onNewMinute...
У меня вобще это время зависает и всё. Только тестовой ссылкой происходит синхронизация времени и опять останавливается. Система Debian 10, WebServer nginx, PHP 7.3
Сам код onNewMinute отличается от кода u885

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

$h=(int)date('G',time());
$m=date('i',time());


if (isWeekDay()) {

}


if (($h>=8) && getGlobal('clockChimeEnabled')) {
 if ($m=="00") {
   say(timeNow(),1);
 }
}


setGlobal('timeNow',date('H:i'));

$homeStatus=date('H:i');
if (getGlobal('NobodyHomeMode.active')) {
 $homeStatus.=' Дома никого';
} else {
 $homeStatus.=' Дома кто-то есть';
}

$homeStatus.=' '.getGlobal('Security.stateDetails');
$homeStatus.=' '.getGlobal('System.stateDetails');
$homeStatus.=' '.getGlobal('Communication.stateDetails');
setGlobal('HomeStatus',$homeStatus);

 if (timeBetween(getGlobal('SunRiseTime'),getGlobal('SunSetTime')) && getGlobal('isDark')=="1") {
  setGlobal("isDark",0);
  callMethod('DarknessMode.deactivate');  
 } elseif (!timeBetween(getGlobal('SunRiseTime'),getGlobal('SunSetTime')) && getGlobal('isDark')!="1") {
  setGlobal("isDark",1);
  callMethod('DarknessMode.activate');    
 }
 
  if (timeIs(getGlobal('SunRiseTime'))) {
  say('Всходит солнце');
 }
 if (timeIs(getGlobal('SunSetTime'))) {
  say('Солнце заходит',2);
 }
 
if (timeIs("23:30") && (gg("EconomMode.active")!="1") && (gg("NobodyHomeMode.active")=="1")) {
 say("Похоже никого нет сегодня, можно сэкономить немного.");
 callMethod('EconomMode.activate');
}

if (timeIs('20:00')) {
 callMethod('NightMode.activate');
} elseif (timeIs('08:00')) {
 callMethod('NightMode.deactivate');
}

if (timeIs("03:00")) {
 runScript("systemMaintenance");
}

if (gg('ThisComputer.AlarmStatus') && timeIs(gg('ThisComputer.AlarmTime'))) {
 runScript('MorningAlarm');
}
Сама проблема на скриншоте
Снимок экрана в 2020-05-25 21-55-00_2.png
Снимок экрана в 2020-05-25 21-55-00_2.png (189.37 КБ) 4831 просмотр
И пофиг этому MDM, на то, что написано про onNewMinute в мануале по установке:
Если не выполняются onNewMinute и onNewHour

Нужно проверить настройку BASE_URL в config.php. Если Вы используете домен, а не IP, тогда добавьте в файл /etc/hosts строку вида:
127.0.0.1 domain.com
1

127.0.0.1 domain.com

Где domain.com - это Ваш домен который Вы используете. Комментарий Сергея с форума: Дело в том, что эти методы вызываются через внутреннюю функцию raseEvent, которая обращается к серверу через HTTP-запрос используя BASE_URL. Если он неправильный, то метод не вызовется.

На этом статья об установке MajorDoMo на Linux Ubuntu закончена.
Решение то какое?
Все пробовал. Ничего не помогает :roll:

ЗЫ: Цыклы все работают, ошибок нет. Старые 20015 года, конечно сбросил. И вот, не пойму...сложно их убрать в дистрибутиве сразу???
Logrus
Сообщения: 2079
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 313 раз
Поблагодарили: 457 раз

Re: [Настройка] onNewMinute

Сообщение Logrus » Пн май 25, 2020 11:28 pm

Surgeon76 писал(а):
Пн май 25, 2020 10:59 pm
Пролопатил кучу веток форума, и понял, что проблема с onNewMinute довольно частая, и я не исключение, а похоже что правило))). А решение то...где?
Дважды накатывал MDM и постоянно на те же грабли. Да, я новичок в этом, но как разобраться, понять и освоить, если большинство тем просто обрывается без ответов разработчиков и именно с этим злополучным onNewMinute...
У меня вобще это время зависает и всё. Только тестовой ссылкой происходит синхронизация времени и опять останавливается. Система Debian 10, WebServer nginx, PHP 7.3
Сам код onNewMinute отличается от кода u885

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

$h=(int)date('G',time());
$m=date('i',time());


if (isWeekDay()) {

}


if (($h>=8) && getGlobal('clockChimeEnabled')) {
 if ($m=="00") {
   say(timeNow(),1);
 }
}


setGlobal('timeNow',date('H:i'));

$homeStatus=date('H:i');
if (getGlobal('NobodyHomeMode.active')) {
 $homeStatus.=' Дома никого';
} else {
 $homeStatus.=' Дома кто-то есть';
}

$homeStatus.=' '.getGlobal('Security.stateDetails');
$homeStatus.=' '.getGlobal('System.stateDetails');
$homeStatus.=' '.getGlobal('Communication.stateDetails');
setGlobal('HomeStatus',$homeStatus);

 if (timeBetween(getGlobal('SunRiseTime'),getGlobal('SunSetTime')) && getGlobal('isDark')=="1") {
  setGlobal("isDark",0);
  callMethod('DarknessMode.deactivate');  
 } elseif (!timeBetween(getGlobal('SunRiseTime'),getGlobal('SunSetTime')) && getGlobal('isDark')!="1") {
  setGlobal("isDark",1);
  callMethod('DarknessMode.activate');    
 }
 
  if (timeIs(getGlobal('SunRiseTime'))) {
  say('Всходит солнце');
 }
 if (timeIs(getGlobal('SunSetTime'))) {
  say('Солнце заходит',2);
 }
 
if (timeIs("23:30") && (gg("EconomMode.active")!="1") && (gg("NobodyHomeMode.active")=="1")) {
 say("Похоже никого нет сегодня, можно сэкономить немного.");
 callMethod('EconomMode.activate');
}

if (timeIs('20:00')) {
 callMethod('NightMode.activate');
} elseif (timeIs('08:00')) {
 callMethod('NightMode.deactivate');
}

if (timeIs("03:00")) {
 runScript("systemMaintenance");
}

if (gg('ThisComputer.AlarmStatus') && timeIs(gg('ThisComputer.AlarmTime'))) {
 runScript('MorningAlarm');
}
Сама проблема на скриншоте
Снимок экрана в 2020-05-25 21-55-00_2.png
И пофиг этому MDM, на то, что написано про onNewMinute в мануале по установке:
Если не выполняются onNewMinute и onNewHour

Нужно проверить настройку BASE_URL в config.php. Если Вы используете домен, а не IP, тогда добавьте в файл /etc/hosts строку вида:
127.0.0.1 domain.com
1

127.0.0.1 domain.com

Где domain.com - это Ваш домен который Вы используете. Комментарий Сергея с форума: Дело в том, что эти методы вызываются через внутреннюю функцию raseEvent, которая обращается к серверу через HTTP-запрос используя BASE_URL. Если он неправильный, то метод не вызовется.

На этом статья об установке MajorDoMo на Linux Ubuntu закончена.
Решение то какое?
Все пробовал. Ничего не помогает :roll:

ЗЫ: Цыклы все работают, ошибок нет. Старые 20015 года, конечно сбросил. И вот, не пойму...сложно их убрать в дистрибутиве сразу???
он хоть и страшен, но причина в другом, почитайте мои первые посты, и за пару лет отладите до идеала ;)
За это сообщение автора Logrus поблагодарил:
Surgeon76 (Пн май 25, 2020 11:47 pm)
Рейтинг: 1.16%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Surgeon76
Сообщения: 4
Зарегистрирован: Чт май 21, 2020 6:51 pm
Благодарил (а): 3 раза
Поблагодарили: 0

Re: [Настройка] onNewMinute

Сообщение Surgeon76 » Вт май 26, 2020 11:49 am

почитайте мои первые посты,
....не совсем понял....где посмотреть?

И ещё проблему нашёл. Цикл main в икс-рэе обновляется каждые 6 секунд...А методы нет. Не вызываются...Ерунда какая-то...
russell
Сообщения: 1
Зарегистрирован: Чт фев 01, 2018 7:24 pm
Благодарил (а): 0
Поблагодарили: 0

Re: [Настройка] onNewMinute

Сообщение russell » Пн авг 15, 2022 4:28 pm

На Ubuntu я решил следующим образом:

в /etc/hosts есть вот такое:
------------------------
127.0.1.1 <hostname>
------------------------

Т.к. /etc/hosts имеет приоритет выше, чем все остальные методы dns.

Закомментировал эти строку и прописал свои ip и hostname след образом:
------------------------------------------------------------------
#127.0.1.1 <hostname>

<web ip-address> <hostname> <hostname>.<domainname>

------------------------------------------------------------------


P.S. Конечно же используйте свои адреса и имена
miks69
Сообщения: 23
Зарегистрирован: Пн ноя 26, 2018 1:35 pm
Благодарил (а): 3 раза
Поблагодарили: 2 раза

Re: [Настройка] onNewMinute

Сообщение miks69 » Вт авг 16, 2022 4:35 pm

Столкнулся с аналогичной проблемой (не выполняется метод onNewMinute).
Решением проблемы стала установка корректного значения BASE_URL в config.php.
Ответить