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

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

Модератор: immortal

workpage
Сообщения: 438
Зарегистрирован: Чт авг 24, 2017 9:38 am
Благодарил (а): 51 раз
Поблагодарили: 86 раз
Контактная информация:

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

Сообщение workpage » Пн дек 25, 2017 8:24 am

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

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

Сообщение Vovix » Пн дек 25, 2017 6:41 pm

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

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

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

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

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

Сообщение workpage » Пн дек 25, 2017 9:02 pm

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
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

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

Сообщение Vovix » Пн дек 25, 2017 9:29 pm

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

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

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

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

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

Сообщение workpage » Пн дек 25, 2017 9:54 pm

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
Благодарил (а): 262 раза
Поблагодарили: 455 раз

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

Сообщение Chainik » Пн дек 25, 2017 10:12 pm

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

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

Сообщение workpage » Пн дек 25, 2017 10:23 pm

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

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

Сообщение Chainik » Пн дек 25, 2017 10:35 pm

Попробуйте имя скрипта взять в двойные кавычки. Затем заменить имя скрипта на латиницу без пробелов (например, "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 (то что указано в первых одинарных кавычках).
За это сообщение автора Chainik поблагодарил:
workpage (Пн дек 25, 2017 10:50 pm)
Рейтинг: 1.16%
workpage
Сообщения: 438
Зарегистрирован: Чт авг 24, 2017 9:38 am
Благодарил (а): 51 раз
Поблагодарили: 86 раз
Контактная информация:

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

Сообщение workpage » Пн дек 25, 2017 10:51 pm

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
Благодарил (а): 221 раз
Поблагодарили: 88 раз

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

Сообщение webms » Ср дек 27, 2017 11:34 am

Chainik писал(а):он не запустится.
он перезапишется и начнет отчет заново
За это сообщение автора webms поблагодарил:
Chainik (Ср дек 27, 2017 11:29 pm)
Рейтинг: 1.16%
Ответить