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

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ответить
knik777
Сообщения: 15
Зарегистрирован: Чт апр 09, 2020 8:03 pm
Благодарил (а): 7 раз
Поблагодарили: 2 раза

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

Сообщение knik777 » Сб апр 11, 2020 7:14 pm

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

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

Вопросы:
1) Как организовать задержку 1 сек и 5 сек так, чтобы это не вешало выполнение остальных обязанностей мажордома?
2) Куда положить исполняемый код, чтобы он отрабатывал регулярно, а не раз в минуту?
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

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

Сообщение Chainik » Сб апр 11, 2020 7:33 pm

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

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

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

if (gg('Дежурныйночник.Disabled') == 1) return "";
sg('Дежурныйночник.status',1);
setTimeOut('myTimer_Off_1','sg("Дежурныйночник.status",0);',1);
setTimeOut('myTimer_perezapusk','runScript("ИМЯ_ВАШЕГО_СКРИПТА");',6);
За это сообщение автора Chainik поблагодарил:
knik777 (Сб апр 11, 2020 7:51 pm)
Рейтинг: 1.16%
knik777
Сообщения: 15
Зарегистрирован: Чт апр 09, 2020 8:03 pm
Благодарил (а): 7 раз
Поблагодарили: 2 раза

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

Сообщение knik777 » Сб апр 11, 2020 7:51 pm

Насчет Юпитера и Козерога - согласен, полезное дополнение!!
Вопросы:

1) куда поместить предложенный Вами код, чтобы он выполнялся регулярно? Достаточно ли будет просто создать сценарий с этим кодом? Или нужно его вызывать по какому то событию?
2) мне нужно еще написать скрипт перезапуска? в чем заключается его работа?
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

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

Сообщение Chainik » Сб апр 11, 2020 7:57 pm

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

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

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

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

setTimeOut('myTimer_perezapusk','runScript("morganie");',6);
knik777
Сообщения: 15
Зарегистрирован: Чт апр 09, 2020 8:03 pm
Благодарил (а): 7 раз
Поблагодарили: 2 раза

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

Сообщение knik777 » Сб апр 11, 2020 8:01 pm

ааа! вон оно как! да, мне именно этого зацикливания не хватало для написания кода.
Тогда вопрос: если запущу вручную скрипт, то при перезапуске системы его же придется опять вручную выполнять, да?
Chainik
Сообщения: 1465
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 262 раза
Поблагодарили: 455 раз

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

Сообщение Chainik » Сб апр 11, 2020 8:11 pm

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

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

Сообщение knik777 » Сб апр 11, 2020 8:19 pm

Thiscomputer.StartUp - как я понимаю как раз метод, который в обязательном порядке выполняется при старте системы мажордомо...
Наверное, он мне и нужен.
Спасибо еще раз! Вопрос закрыт.
knik777
Сообщения: 15
Зарегистрирован: Чт апр 09, 2020 8:03 pm
Благодарил (а): 7 раз
Поблагодарили: 2 раза

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

Сообщение knik777 » Сб апр 11, 2020 8:51 pm

Если кому то будет полезно, у меня все заработало.

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');
}
За это сообщение автора knik777 поблагодарил:
omship (Чт апр 16, 2020 12:09 pm)
Рейтинг: 1.16%
Ответить