Сценарии по расписанию. Проблема.
Модератор: immortal
-
- Сообщения: 438
- Зарегистрирован: Чт авг 24, 2017 9:38 am
- Благодарил (а): 51 раз
- Поблагодарили: 86 раз
- Контактная информация:
Сценарии по расписанию. Проблема.
Через раз запускаются сценарии по расписанию. Вручную всё отрабатывает отлично. Сценарии простейшие. Без ветвлений. Включить свет утром/вечером. В чём может быть дело?
В ближайшее время под крон переделаю, но хочется пользоваться родным интерфейсом.
В ближайшее время под крон переделаю, но хочется пользоваться родным интерфейсом.
- Vovix
- Сообщения: 1155
- Зарегистрирован: Пн янв 27, 2014 1:43 am
- Откуда: г.Ижевск
- Благодарил (а): 60 раз
- Поблагодарили: 532 раза
- Контактная информация:
Re: Сценарии по расписанию. Проблема.
как показывала практика в прошлом, основной причиной неотработки сценариев могло становиться ограничение времени для исполнения скриптов, установленное в web-сервере (вернее наверно в php)!workpage писал(а):Через раз запускаются сценарии по расписанию. Вручную всё отрабатывает отлично. Сценарии простейшие. Без ветвлений. Включить свет утром/вечером. В чём может быть дело?
В ближайшее время под крон переделаю, но хочется пользоваться родным интерфейсом.
один из выходов из ситуации это запуск скриптов не на прямую, а через таймер, например у меня в методе onNewMinute:
Код: Выделить всё
setTimeOut('AlarmClock_check','runScript("AlarmClock_check");',2);
- Рейтинг: 1.16%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
-
- Сообщения: 438
- Зарегистрирован: Чт авг 24, 2017 9:38 am
- Благодарил (а): 51 раз
- Поблагодарили: 86 раз
- Контактная информация:
Re: Сценарии по расписанию. Проблема.
В редактировании сценария можно нажать галку "выполнять переодически". Вот она работает раз от раза.Vovix писал(а):как показывала практика в прошлом, основной причиной неотработки сценариев могло становиться ограничение времени для исполнения скриптов, установленное в web-сервере (вернее наверно в php)!workpage писал(а):Через раз запускаются сценарии по расписанию. Вручную всё отрабатывает отлично. Сценарии простейшие. Без ветвлений. Включить свет утром/вечером. В чём может быть дело?
В ближайшее время под крон переделаю, но хочется пользоваться родным интерфейсом.
один из выходов из ситуации это запуск скриптов не на прямую, а через таймер, например у меня в методе 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: Сценарии по расписанию. Проблема.
workpage писал(а):.....
p.s. Можете расшифровать вашу строку. Не всё ещё понимаю.
Код: Выделить всё
setTimeOut('AlarmClock_check','runScript("AlarmClock_check");',2);
setTimeOut - функция вызова таймера
AlarmClock_check - имя для таймера, для того чтобы их различать и управлять при необходимости, задаем сами
runScript("AlarmClock_check"); - собственно, скрипт который мы хотим запустить в этом таймере, даже не так - это строка которая будет выполнена движком MDM
2 - кол-во секунд, через которые нужно запустить
Идея походу проста... Особенно метод таймера MDM, часто забивали большим количеством исполняемого кода
и при его выполнении счетчик, допустимого времени выполнения, стремительно приближался к максимуму,
а передавая запуск в другой процесс (таймера в данном случае), вроде как сам метод успевает закончить свою работу вовремя.
Кроме того, если в запускаемом скрипте были ошибки, то с ними "разбирается" уже таймер, а не основной скрипт!
Так я понимаю механизм работы такого способа!!!
- Рейтинг: 2.33%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
-
- Сообщения: 438
- Зарегистрирован: Чт авг 24, 2017 9:38 am
- Благодарил (а): 51 раз
- Поблагодарили: 86 раз
- Контактная информация:
Re: Сценарии по расписанию. Проблема.
Имя таймера локальное? Его где-то надо первоначально задавать? Понятно, что для каждой задачи надо оформить свой таймер с уникальным именем... Есть ограничение на кол-во таймеров?Vovix писал(а):workpage писал(а):.....
p.s. Можете расшифровать вашу строку. Не всё ещё понимаю.всё просто:Код: Выделить всё
setTimeOut('AlarmClock_check','runScript("AlarmClock_check");',2);
setTimeOut - функция вызова таймера
AlarmClock_check - имя для таймера, для того чтобы их различать и управлять при необходимости, задаем сами
runScript("AlarmClock_check"); - собственно, скрипт который мы хотим запустить в этом таймере, даже не так - это строка которая будет выполнена движком MDM
2 - кол-во секунд, через которые нужно запустить
Идея походу проста... Особенно метод таймера MDM, часто забивали большим количеством исполняемого кода
и при его выполнении счетчик, допустимого времени выполнения, стремительно приближался к максимуму,
а передавая запуск в другой процесс (таймера в данном случае), вроде как сам метод успевает закончить свою работу вовремя.
Кроме того, если в запускаемом скрипте были ошибки, то с ними "разбирается" уже таймер, а не основной скрипт!
Так я понимаю механизм работы такого способа!!!
-
- Сообщения: 1465
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 262 раза
- Поблагодарили: 455 раз
Re: Сценарии по расписанию. Проблема.
Имя таймера "глобальное". Т.е. во всем MDM в один и тот же момент времени может существовать ("тикать" в системе) только один таймер с одним и тем же именем. Если попытаться запустить другой таймер с тем же именем (пока текущий таймер не завершился), он не запустится.workpage писал(а):Имя таймера локальное? Его где-то надо первоначально задавать? Понятно, что для каждой задачи надо оформить свой таймер с уникальным именем... Есть ограничение на кол-во таймеров?
УТОЧНЕНИЕ.
Запуск таймера с тем же именем отменяет предыдущий таймер, и запущенный таймер начинает течь заново.
Последний раз редактировалось Chainik Ср дек 27, 2017 11:28 pm, всего редактировалось 1 раз.
-
- Сообщения: 438
- Зарегистрирован: Чт авг 24, 2017 9:38 am
- Благодарил (а): 51 раз
- Поблагодарили: 86 раз
- Контактная информация:
Re: Сценарии по расписанию. Проблема.
Не работает(Chainik писал(а):Имя таймера "глобальное". Т.е. во всем MDM в один и тот же момент времени может существовать ("тикать" в системе) только один таймер с одним и тем же именем. Если попытаться запустить другой таймер с тем же именем (пока текущий таймер не завершился), он не запустится.workpage писал(а):Имя таймера локальное? Его где-то надо первоначально задавать? Понятно, что для каждой задачи надо оформить свой таймер с уникальным именем... Есть ограничение на кол-во таймеров?
Строка вот такая:
setTimeOut('ClockChime','runScript('Включить свет в холле 2 этажа верхний');',2);
Имя таймера где задавать? В объектах есть Timer/ClockChime. Это оно?
-
- Сообщения: 1465
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 262 раза
- Поблагодарили: 455 раз
Re: Сценарии по расписанию. Проблема.
Попробуйте имя скрипта взять в двойные кавычки. Затем заменить имя скрипта на латиницу без пробелов (например, "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 (то что указано в первых одинарных кавычках).
Ну т.е., попробуйте так
setTimeOut('ClockChime','runScript("turn_on_thе_light_in_the_lobby_of_the_2nd_floor_top");',2);
Имя таймера у вас ClockChime (то что указано в первых одинарных кавычках).
- Рейтинг: 1.16%
-
- Сообщения: 438
- Зарегистрирован: Чт авг 24, 2017 9:38 am
- Благодарил (а): 51 раз
- Поблагодарили: 86 раз
- Контактная информация:
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 (то что указано в первых одинарных кавычках).
- webms
- Сообщения: 498
- Зарегистрирован: Чт дек 15, 2016 3:13 am
- Благодарил (а): 221 раз
- Поблагодарили: 88 раз
Re: Сценарии по расписанию. Проблема.
он перезапишется и начнет отчет зановоChainik писал(а):он не запустится.
- Рейтинг: 1.16%