Shadow87 Posted August 25, 2017 Share Posted August 25, 2017 (edited) Всем привет! Недавно озадачился вопросом о возможности управления индикатором 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 August 26, 2017 by Shadow87 2 1 Quote Link to comment Share on other sites More sharing options...
sergeyk Posted August 25, 2017 Share Posted August 25, 2017 Хочу добавить, что помимо режимов 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 2 Quote Link to comment Share on other sites More sharing options...
Shadow87 Posted August 26, 2017 Author Share Posted August 26, 2017 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 Отлично! Огромное спасибо! Добавил ссылку на ваше сообщение у себя, чтобы не затерялось случайно. Quote Link to comment Share on other sites More sharing options...
Roman M Posted November 7 Share Posted November 7 а есть ли возможность управлять отдельно каждым диодом, т.е. допустим сделать так чтоб один мигал, а другой просто светился? У роутера есть два диода FN1 и FN2. Проверил сейчас команды из постов выше, но управление работает сразу на обоих. Quote Link to comment Share on other sites More sharing options...
sergeyk Posted Friday at 01:25 PM Share Posted Friday at 01:25 PM 15 часов назад, Roman M сказал: а есть ли возможность управлять отдельно каждым диодом, т.е. допустим сделать так чтоб один мигал, а другой просто светился? На текущих версиях нет: состояние индикатора задаётся только одним контроллером OpkgLedControl, который можно привязать к любому из индикаторов FN_1 или FN_2 либо к обоим одновременно. В новой версии 4.3 будет два контроллера OpkgLedControl1 и OpkgLedControl2 на устройствах с двумя индикаторами. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.