Страница 1 из 1

АВТОморгание светодиодом как реализовать через сценарий?

Добавлено: Сб апр 11, 2020 7:14 pm
knik777
Передо мной встала следующая задачка.
Упрощенно говоря, мне нужно настроить на мажордомо автоматическое включение-выключение светодиода. Есть объект, связанный со светодиодом, называется он Дежурныйночник. И у него есть свойство состояния: status.

Должно работать по кругу, следующим образом:
- светодиод включился, горит 1 секунду
sg('Дежурныйночник.status',1);
- светодиод выключился, не горит 5 секунд
sg('Дежурныйночник.status',0);

Вопросы:
1) Как организовать задержку 1 сек и 5 сек так, чтобы это не вешало выполнение остальных обязанностей мажордома?
2) Куда положить исполняемый код, чтобы он отрабатывал регулярно, а не раз в минуту?

Re: АВТОморгание светодиодом как реализовать через сценарий?

Добавлено: Сб апр 11, 2020 7:33 pm
Chainik
Могу предположить, что иногда (когда Юпитер входит в созвездие Козерога) вам захочется отключать моргание светодиода.
В этом случае я бы добавил еще одно свойство (скажем, "Disabled"), которое говорило бы о том, что автоморгание светодиода отключено (значение свойства = 1).

Код можете поместить в скрипт (сценарий). Чтобы не подвешивало систему, можно использовать SetTimeOut.

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

if (gg('Дежурныйночник.Disabled') == 1) return "";
sg('Дежурныйночник.status',1);
setTimeOut('myTimer_Off_1','sg("Дежурныйночник.status",0);',1);
setTimeOut('myTimer_perezapusk','runScript("ИМЯ_ВАШЕГО_СКРИПТА");',6);

Re: АВТОморгание светодиодом как реализовать через сценарий?

Добавлено: Сб апр 11, 2020 7:51 pm
knik777
Насчет Юпитера и Козерога - согласен, полезное дополнение!!
Вопросы:

1) куда поместить предложенный Вами код, чтобы он выполнялся регулярно? Достаточно ли будет просто создать сценарий с этим кодом? Или нужно его вызывать по какому то событию?
2) мне нужно еще написать скрипт перезапуска? в чем заключается его работа?

Re: АВТОморгание светодиодом как реализовать через сценарий?

Добавлено: Сб апр 11, 2020 7:57 pm
Chainik
knik777 писал(а): Сб апр 11, 2020 7:51 pm 1) куда поместить предложенный Вами код, чтобы он выполнялся регулярно? Достаточно ли будет просто создать сценарий с этим кодом? Или нужно его вызывать по какому то событию?
Нужно создать сценарий и записать код туда (назвать сценарий можно как угодно, например, "morganie"). Сам по себе код будет выполняться беспрерывно, "по кругу", но, естественно, после запуска. Запустить сценарий можно вручную. Можно по событию: произошло событие, сработал код:

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

runScript("morganie");
knik777 писал(а): Сб апр 11, 2020 7:51 pm 2) мне нужно еще написать скрипт перезапуска? в чем заключается его работа?
Никакого дополнительного скипта перезапуска писать не нужно. Этот скрипт будет перезапускать сам себя, исполняя последнюю строчку:

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

setTimeOut('myTimer_perezapusk','runScript("morganie");',6);

Re: АВТОморгание светодиодом как реализовать через сценарий?

Добавлено: Сб апр 11, 2020 8:01 pm
knik777
ааа! вон оно как! да, мне именно этого зацикливания не хватало для написания кода.
Тогда вопрос: если запущу вручную скрипт, то при перезапуске системы его же придется опять вручную выполнять, да?

Re: АВТОморгание светодиодом как реализовать через сценарий?

Добавлено: Сб апр 11, 2020 8:11 pm
Chainik
knik777 писал(а): Сб апр 11, 2020 8:01 pm ...
Тогда вопрос: если запущу вручную скрипт, то при перезапуске системы его же придется опять вручную выполнять, да?
Да, именно так. Если вам нужно, чтобы исполнялся постоянно, можете записать в onNewMinute. Или запускать вручную. Или по событию: произошло событие -- запускаем. Или по условию: проверили условию (Юпитер не в созвездии Козерога), если условие исполняется -- запускаем.

Re: АВТОморгание светодиодом как реализовать через сценарий?

Добавлено: Сб апр 11, 2020 8:19 pm
knik777
Thiscomputer.StartUp - как я понимаю как раз метод, который в обязательном порядке выполняется при старте системы мажордомо...
Наверное, он мне и нужен.
Спасибо еще раз! Вопрос закрыт.

Re: АВТОморгание светодиодом как реализовать через сценарий?

Добавлено: Сб апр 11, 2020 8:51 pm
knik777
Если кому то будет полезно, у меня все заработало.

1) Создал свойство Дежурныйночник.auto.
2) Создал сценарий "upravlenienochnikom".
3) Создал в меню переключатель "Автовключение ночника"
4) Связал переключатель в меню с объектом Дежурныйночник, свойством auto.
5) Связал переключатель в меню со сценарием upravlenienochnikom.

Теперь когда включаешь переключатель, сценарий выполняется бесконечно. Когда выключаешь переключатель, сценарий перестает выполняться. Красотааа!!

Вот код сценария upravlenienochnikom:

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

if (gg('Дежурныйночник.auto')==1)

  {
    sg('Дежурныйночник.status',1);
    setTimeOut('myTimer_Off_1','sg("Дежурныйночник.status",0);',1);
    setTimeOut('myTimer_perezapusk','runScript("upravlenienochnikom");',6);  
  }
else
{
   if (timeOutExists('myTimer_Off_1')) ClearTimeOut('myTimer_Off_1');     
   if (timeOutExists('myTimer_perezapusk')) ClearTimeOut('myTimer_perezapusk');
}