Перейти к содержанию

Рекомендуемые сообщения

Опубликовано (изменено)

Всем привет!

Недавно озадачился вопросом о возможности управления индикатором FN для индикации состояния программ, выполняющихся в среде Entware-3x. Конкретно меня заинтересовала возможность написания скрипта, который мог бы отобразить своё состояние следующим образом: скрипт выполняется - индикатор FN горит, скрипт успешно завершился - индикатор FN не горит, скрипт выпал в ошибку - индикатор FN мигает. В идеале при ошибке в выполнении скрипта мигание индикатора FN должно позволить понять код ошибки.

Здесь я расскажу о способе настройки индикатора FN и последующего управления им при решении такой задачи. Постараюсь описать по шагам.

1) Заходим в CLI роутера по протоколу Telnet.

2) В консоли выполняем команду:

(config)> system led FN indicate OpkgLedControl

При успешном её исполнении должно отобразиться:

Peripheral::Manager: "OpkgLedControl" control bound to "FN" LED.

3) Cохраняем настройки и выходим из CLI

4) Заходим по SSH в консоль Entware. Нужная нам утилита выполняется только при наличии прав root, поэтому или сразу входим в root, или переходим в него из-под пользователя.

5) За работу со светодиодом отвечает утилита opkg_led_ctl. Вот её вид:

~ # opkg_led_ctl
opkg_led_ctl v1.0.0, NDM peripheral control and test utility.

Call "./opkg_led_ctl {cmd} {args}",
where {cmd} is one of the following commands:

  -c - get a list of available LED colours
  -l - get a list of available LED controls
  -p - set LED control parameters,
  -m - set LED control mode,

  -p {ctl-name} {fg-color} {fg-lighting} {bg-color} {bg-lighting}
  -m {ctl-name} {fg|bg} [fg-sec-period]
~ #

6) Использование светодиода сводится к переводу назначенного ему события индикации в фоновый или активный режим

Можете ознакомиться со списком поддерживаемых событий индикации ("контроллеров" по терминологии утилиты) и поддерживаемых цветов. Может в вашем устройстве эти параметры окажутся иными.

Скрытый текст

 

Список цветов:


 # opkg_led_ctl -c
opkg_led_ctl v1.0.0, NDM peripheral control and test utility.

Supported colors:
======================================================
No.             Name
======================================================
  0            GREEN
~ #

Список событий индикации:


~ # opkg_led_ctl -l
opkg_led_ctl v1.0.0, NDM peripheral control and test utility.

Opened LED controls:
======================================================================================================
No.                             Name                                      Description            Owner
======================================================================================================
  0                      SystemState                                     System state              ndm
  1    ButtonActivityAcknowledgement                  Button activity acknowledgement              ndm
...
  9                   OpkgLedControl                                 OPKG LED control              ndm
...

 

 

 

В моём случае единственным доступным для управления пользователю событием индикации оказался элемент OpkgLedControl, а единственный доступный цвет - GREEN (зелёный). Дальше с ними и будем работать.

7) Собственно само управление идёт в 2 этапа:

7.1) Назначаем для события OpkgLedControl поведение и цвет светодиода в фоновом и активном режиме

~ # opkg_led_ctl -p OpkgLedControl GREEN blink GREEN off

Поведение светодиода может быть одним из следующих: on (включён постоянно), off (выключен) или blink (мигающий).

Upd.: Дополнение по режимам светодиода от пользователя sergeyk.

В моём случае я определил для активного состояния события мигание светодиодом и для фонового состояния - выключение светодиода.

В ответ на нашу команду вылетает огромная портянка, где нас интересует только пункт, относящийся к нашему событию:

opkg_led_ctl v1.0.0, NDM peripheral control and test utility.

Opened LED controls:
======================================================================================================
No.                             Name                                      Description            Owner
======================================================================================================
...
  9                   OpkgLedControl                                 OPKG LED control              ndm
...
States of opened LED controls:
===========================================================================================================
No.    Fg./Bg. color     Fg./Bg. mode   Fg./Bg. left (sec.)                                   Blink pattern
===========================================================================================================
...
  9            GREEN            blink              infinite
               GREEN              off
...

Слово infinite или числовое значение в этом столбце находится в строке напротив активного в данный момент состояния. Infinite указывает на постоянное назначение состояния, а число соответствует количеству секунд, после которого состояние сменится. Верхняя строка - активное состояние, нижняя - фоновое.

7.2) Переводим наше событие в активное состояние и наблюдаем результат.

Команда перевода в постоянно активный режим:

~ # opkg_led_ctl -m OpkgLedControl fg

В нашем примере светодиод FN начнёт постоянно моргать.

Команда перевода в постоянно фоновый режим:

~ # opkg_led_ctl -m OpkgLedControl bg

Команда временного перевода в активный режим на несколько секунд:

~ # opkg_led_ctl -m OpkgLedControl fg 5

В нашем примере светодиод FN поморгает 5 секунд и выключится.

В консоли при этом каждый раз вылетает портянка, аналогичная той, что мы видели при настройке на шаге 7.1

Вот и всё. Если эта писанина оказалась настолько понятной, что принесла пользу, буду только рад.

Сразу скажу, что до этого я инструкций вообще никогда не писал, потому и постеснялся выкладывать сей опус как готовое решение.

Надеюсь, что те, кто задавался таким вопросом не пройдут мимо этой темы. Спасибо за внимание.

С уважением, Shadow87. В миру - Олег.

P.S. У меня это всё дело сработало на устройствах Keenetic Ultra II и Keenetic GIGA III с дельта прошивкой 2.09.C.0.0-5.

Изменено пользователем Shadow87
Опубликовано

Хочу добавить, что помимо режимов on (включён постоянно), off (выключен) или blink (мигающий) можно использовать blink+ (мигать быстро), blink++ (мигать очень быстро), а также задавать произвольный шаблон мерцания в формате N1,N2,N3,...,N8. Где Ni — интервал в миллисекундах. Например, чтобы задать режим "2 секунды включен, 2 секунды выключен, 0,5 секунды включен, 0,5 секунды выключен, 0,5 секунды включен, 0,5 секунды выключен", можно использовать следующий шаблон: "2000,2000,500,500,500,500".

~ # opkg_led_ctl -p OpkgLedControl default off default 2000,2000,500,500,500,500

 

Опубликовано
15 часов назад, sergeyk сказал:

Хочу добавить, что помимо режимов on (включён постоянно), off (выключен) или blink (мигающий) можно использовать blink+ (мигать быстро), blink++ (мигать очень быстро), а также задавать произвольный шаблон мерцания в формате N1,N2,N3,...,N8. Где Ni — интервал в миллисекундах. Например, чтобы задать режим "2 секунды включен, 2 секунды выключен, 0,5 секунды включен, 0,5 секунды выключен, 0,5 секунды включен, 0,5 секунды выключен", можно использовать следующий шаблон: "2000,2000,500,500,500,500".


~ # opkg_led_ctl -p OpkgLedControl default off default 2000,2000,500,500,500,500

 

Отлично! Огромное спасибо! Добавил ссылку на ваше сообщение у себя, чтобы не затерялось случайно. :12_slight_smile:

  • 7 лет спустя...
Опубликовано

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

У роутера есть два диода FN1 и FN2.

Проверил сейчас команды из постов выше, но управление работает сразу на обоих.

Опубликовано
15 часов назад, Roman M сказал:

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

На текущих версиях нет: состояние индикатора задаётся только одним контроллером OpkgLedControl, который можно привязать к любому из индикаторов FN_1 или FN_2 либо к обоим одновременно.

В новой версии 4.3 будет два контроллера OpkgLedControl1 и OpkgLedControl2 на устройствах с двумя индикаторами.

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.