Jump to content

Управление светодиодом FN из скриптов Entware-3x.


Recommended Posts

Всем привет!

Недавно озадачился вопросом о возможности управления индикатором 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.

Edited by Shadow87
  • Thanks 2
  • Upvote 1
Link to comment
Share on other sites

Хочу добавить, что помимо режимов 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

 

  • Thanks 2
Link to comment
Share on other sites

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:

Link to comment
Share on other sites

  • 7 years later...

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

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

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

Link to comment
Share on other sites

15 часов назад, Roman M сказал:

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

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

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...