Сценарии по расписанию. Проблема.

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

Модератор: immortal

workpage
Сообщения: 438
Зарегистрирован: Чт авг 24, 2017 9:38 am
Контактная информация:

Сценарии по расписанию. Проблема.

Сообщение workpage »

Через раз запускаются сценарии по расписанию. Вручную всё отрабатывает отлично. Сценарии простейшие. Без ветвлений. Включить свет утром/вечером. В чём может быть дело?
В ближайшее время под крон переделаю, но хочется пользоваться родным интерфейсом.
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Контактная информация:

Re: Сценарии по расписанию. Проблема.

Сообщение Vovix »

workpage писал(а):Через раз запускаются сценарии по расписанию. Вручную всё отрабатывает отлично. Сценарии простейшие. Без ветвлений. Включить свет утром/вечером. В чём может быть дело?
В ближайшее время под крон переделаю, но хочется пользоваться родным интерфейсом.
как показывала практика в прошлом, основной причиной неотработки сценариев могло становиться ограничение времени для исполнения скриптов, установленное в web-сервере (вернее наверно в php)!

один из выходов из ситуации это запуск скриптов не на прямую, а через таймер, например у меня в методе onNewMinute:

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

setTimeOut('AlarmClock_check','runScript("AlarmClock_check");',2);
хотя в вашем случае, надо бы уточнить: по расписанию из чего (откуда)?
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
workpage
Сообщения: 438
Зарегистрирован: Чт авг 24, 2017 9:38 am
Контактная информация:

Re: Сценарии по расписанию. Проблема.

Сообщение workpage »

Vovix писал(а):
workpage писал(а):Через раз запускаются сценарии по расписанию. Вручную всё отрабатывает отлично. Сценарии простейшие. Без ветвлений. Включить свет утром/вечером. В чём может быть дело?
В ближайшее время под крон переделаю, но хочется пользоваться родным интерфейсом.
как показывала практика в прошлом, основной причиной неотработки сценариев могло становиться ограничение времени для исполнения скриптов, установленное в web-сервере (вернее наверно в php)!

один из выходов из ситуации это запуск скриптов не на прямую, а через таймер, например у меня в методе onNewMinute:

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

setTimeOut('AlarmClock_check','runScript("AlarmClock_check");',2); 
хотя в вашем случае, надо бы уточнить: по расписанию из чего (откуда)?
В редактировании сценария можно нажать галку "выполнять переодически". Вот она работает раз от раза.
Все сценарии перетащил в onNewMinute.
Выглядит всё это примерно так:
if (timeIs('00:00'))
{
runScript('Выключаю весь свет в полночь');
}

Понаблюдаю. Отпишу.
p.s. Можете расшифровать вашу строку. Не всё ещё понимаю.
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Контактная информация:

Re: Сценарии по расписанию. Проблема.

Сообщение Vovix »

workpage писал(а):.....
p.s. Можете расшифровать вашу строку. Не всё ещё понимаю.

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

setTimeOut('AlarmClock_check','runScript("AlarmClock_check");',2);
всё просто:
setTimeOut - функция вызова таймера
AlarmClock_check - имя для таймера, для того чтобы их различать и управлять при необходимости, задаем сами
runScript("AlarmClock_check"); - собственно, скрипт который мы хотим запустить в этом таймере, даже не так - это строка которая будет выполнена движком MDM
2 - кол-во секунд, через которые нужно запустить

Идея походу проста... Особенно метод таймера MDM, часто забивали большим количеством исполняемого кода
и при его выполнении счетчик, допустимого времени выполнения, стремительно приближался к максимуму,
а передавая запуск в другой процесс (таймера в данном случае), вроде как сам метод успевает закончить свою работу вовремя.
Кроме того, если в запускаемом скрипте были ошибки, то с ними "разбирается" уже таймер, а не основной скрипт!
Так я понимаю механизм работы такого способа!!!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
workpage
Сообщения: 438
Зарегистрирован: Чт авг 24, 2017 9:38 am
Контактная информация:

Re: Сценарии по расписанию. Проблема.

Сообщение workpage »

Vovix писал(а):
workpage писал(а):.....
p.s. Можете расшифровать вашу строку. Не всё ещё понимаю.

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

setTimeOut('AlarmClock_check','runScript("AlarmClock_check");',2);
всё просто:
setTimeOut - функция вызова таймера
AlarmClock_check - имя для таймера, для того чтобы их различать и управлять при необходимости, задаем сами
runScript("AlarmClock_check"); - собственно, скрипт который мы хотим запустить в этом таймере, даже не так - это строка которая будет выполнена движком MDM
2 - кол-во секунд, через которые нужно запустить

Идея походу проста... Особенно метод таймера MDM, часто забивали большим количеством исполняемого кода
и при его выполнении счетчик, допустимого времени выполнения, стремительно приближался к максимуму,
а передавая запуск в другой процесс (таймера в данном случае), вроде как сам метод успевает закончить свою работу вовремя.
Кроме того, если в запускаемом скрипте были ошибки, то с ними "разбирается" уже таймер, а не основной скрипт!
Так я понимаю механизм работы такого способа!!!
Имя таймера локальное? Его где-то надо первоначально задавать? Понятно, что для каждой задачи надо оформить свой таймер с уникальным именем... Есть ограничение на кол-во таймеров?
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am

Re: Сценарии по расписанию. Проблема.

Сообщение Chainik »

workpage писал(а):Имя таймера локальное? Его где-то надо первоначально задавать? Понятно, что для каждой задачи надо оформить свой таймер с уникальным именем... Есть ограничение на кол-во таймеров?
Имя таймера "глобальное". Т.е. во всем MDM в один и тот же момент времени может существовать ("тикать" в системе) только один таймер с одним и тем же именем. Если попытаться запустить другой таймер с тем же именем (пока текущий таймер не завершился), он не запустится.
УТОЧНЕНИЕ.
Запуск таймера с тем же именем отменяет предыдущий таймер, и запущенный таймер начинает течь заново.
Последний раз редактировалось Chainik Ср дек 27, 2017 11:28 pm, всего редактировалось 1 раз.
workpage
Сообщения: 438
Зарегистрирован: Чт авг 24, 2017 9:38 am
Контактная информация:

Re: Сценарии по расписанию. Проблема.

Сообщение workpage »

Chainik писал(а):
workpage писал(а):Имя таймера локальное? Его где-то надо первоначально задавать? Понятно, что для каждой задачи надо оформить свой таймер с уникальным именем... Есть ограничение на кол-во таймеров?
Имя таймера "глобальное". Т.е. во всем MDM в один и тот же момент времени может существовать ("тикать" в системе) только один таймер с одним и тем же именем. Если попытаться запустить другой таймер с тем же именем (пока текущий таймер не завершился), он не запустится.
Не работает(
Строка вот такая:
setTimeOut('ClockChime','runScript('Включить свет в холле 2 этажа верхний');',2);
Имя таймера где задавать? В объектах есть Timer/ClockChime. Это оно?
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am

Re: Сценарии по расписанию. Проблема.

Сообщение Chainik »

Попробуйте имя скрипта взять в двойные кавычки. Затем заменить имя скрипта на латиницу без пробелов (например, "turn_on_thе_light_in_the_lobby_of_the_2nd_floor_top"). К сожалению большинство языков программирования не разделяют наши патриотические устремления и "противятся" кириллице.
Ну т.е., попробуйте так
setTimeOut('ClockChime','runScript("turn_on_thе_light_in_the_lobby_of_the_2nd_floor_top");',2);
Имя таймера у вас ClockChime (то что указано в первых одинарных кавычках).
workpage
Сообщения: 438
Зарегистрирован: Чт авг 24, 2017 9:38 am
Контактная информация:

Re: Сценарии по расписанию. Проблема.

Сообщение workpage »

Chainik писал(а):Попробуйте имя скрипта взять в двойные кавычки. Затем заменить имя скрипта на латиницу без пробелов (например, "turn_on_thе_light_in_the_lobby_of_the_2nd_floor_top"). К сожалению большинство языков программирования не разделяют наши патриотические устремления и "противятся" кириллице.
Ну т.е., попробуйте так
setTimeOut('ClockChime','runScript("turn_on_thе_light_in_the_lobby_of_the_2nd_floor_top");',2);
Имя таймера у вас ClockChime (то что указано в первых одинарных кавычках).
Двойные Кавычки помогли. Кирилица не при чём. Спасибо за помощь.
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am

Re: Сценарии по расписанию. Проблема.

Сообщение webms »

Chainik писал(а):он не запустится.
он перезапишется и начнет отчет заново
Ответить