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

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

Опубликовано

В настройках Keenetic можно указать действие по нажатию кнопок: OPKG - Запуск скриптов button.d

Предполагаю, что реализации этой возможности надо:

1. Выбрать в WEB-интерфейсе Keenetic для конкретной кнопки "OPKG - Запуск скриптов button.d"

2. Создать файл /opt/etc/ndm/button.d/buttons.sh

3. Написать скрипт в файле buttons.sh:

- Из скрипта будут доступны дополнительные переменные окружения:

button — название кнопкина
action — тип нажатия

- Задача будет, например, запустить Гостевую сеть

Вот набросок того, что предполагаю:

#!/opt/bin/bash

interface WifiMaster0/AccessPoint1 up

echo "Гостевая сеть запущена !"

4. Сделать скрипт исполняемым:

chmod +x /opt/etc/ndm/button.d/buttons.sh

Вопросы:

1. Соответствует ли действительности указанный выше подход ?

2. Как должен выглядеть скрипт buttons.sh ?

3. Как должен выглядеть скрипт buttons.sh с учётом какая кнопка нажата ?

Опубликовано
1 минуту назад, keenet07 сказал:

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

Не только заметил, а несколько лет пользуюсь. Указал для примера: удобно контролировать и у всех есть.

Опубликовано
1 минуту назад, keenet07 сказал:

Включить Гостевую можно, а выключить нет. ))

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

 

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

Зачем два? А в одном разве нельзя что-то вроде триггера сделать. Одну переменную куда-нибудь сохранить ведь можно? Увеличивать её значение на единицу с каждым нажатием кнопки. Если четное значение, то включаем, если нечетное, то отключаем. Это один из возможных вариантов реализации.

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

Пишем скрипт, в чем вам нравится, логику работы сами придумываем  

https://github.com/ndmsystems/packages/wiki/Opkg-Component#ndmbuttond

настраивать из скрипта что-то в ndms можно либо через утилиту ndmq(поискать по форуму) либо дергая rest api, опять же поискать по форуму. 

Изменено пользователем r13
Опубликовано
4 минуты назад, dexter сказал:

Нужно у знавать у разработчиков, что передает кнопка при нажатии.

Че там узнавать, все задокументировано, ссылка выше. 

Опубликовано (изменено)
#!/opt/bin/bash
echo "button=$button"
#interface WifiMaster0/AccessPoint1 up
#echo "Гостевая сеть запущена !"

Ничего не происходит при нажатии кнопки. Что делать ?

Изменено пользователем iFinder
Опубликовано
3 минуты назад, iFinder сказал:

#!/opt/bin/bash
echo "button=$button"
#interface WifiMaster0/AccessPoint1 up
#echo "Гостевая сеть запущена !"

Ничего не происходит при нажатии кнопки. Что делать ?

А что вы ожидаете?

Ваш скрипт печатает строку в stdout и все. 

Опубликовано (изменено)
1 минуту назад, r13 сказал:

Ваш скрипт печатает строку в stdout и все. 

Но в CLI/SSH ничего не появляется ! В данном случае разве stdout и CLI/SSH не одно и тоже ?

Изменено пользователем iFinder
Опубликовано
6 минут назад, iFinder сказал:

Но в CLI/SSH ничего не появляется ! В данном случае разве stdout и CLI/SSH не одно и тоже ?

Не появляется в вашей сессии. Скрипт просто выполняется и все. Если вместо echo использовать logger , то результат увидите в логе кинетика. 

Опубликовано
5 минут назад, r13 сказал:

Если вместо echo использовать logger , то результат увидите в логе кинетика. 

#!/opt/bin/bash
logger "button=$button"
#interface WifiMaster0/AccessPoint1 up
#echo "Гостевая сеть запущена !"

В логе кинетика по-прежнему ничего нет

 

 

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

Проверьте на всякий случай ещё раз права на файле скрипта. Разрешение на запуск.

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

Да и скрипт вроде должен быть в файле button.d а не buttons.sh если я не ошибаюсь.

Изменено пользователем keenet07
Опубликовано
9 минут назад, iFinder сказал:

#!/opt/bin/bash
logger "button=$button"
#interface WifiMaster0/AccessPoint1 up
#echo "Гостевая сеть запущена !"

В логе кинетика по-прежнему ничего нет

 

 

Просто в ssh сессии скрипт запускать пробовали? Работает?

Опубликовано
6 минут назад, keenet07 сказал:

Проверьте на всякий случай ещё раз права на файле скрипта. Разрешение на запуск.

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

Получилось, оказалось перепутал кнопки FN: 

Окт 29 15:27:24

 

root
button=FN1
Дальше дело техники !
Опубликовано
8 минут назад, keenet07 сказал:

Да и скрипт вроде должен быть в файле button.d а не buttons.sh если я не ошибаюсь.

У меня скрипт был и есть /opt/etc/ndm/button.d/PressButtons.bash

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

Итак подвожу итоги:

СОЗДАНИЕ СКРИПТА РЕАКЦИИ НА НАЖАТИЕ КНОПКИ KEENETIC

1. Создаю файл скрипта: /opt/etc/ndm/button.d/PressButtons.bash

2. Наполняю его содержимым:
 

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

#!/opt/bin/bash
# Версия 010 (Тесты)

# ====== Записываем в журнал Keenetic для истории и отладки
#logger "button=$button"   # Варианты: WLAN, FN1, FN2
#logger "action=$action"   # Варианты: click, double-click, hold
logger "button=$button  action=$action"

# ++++++ Нажата кнопка FN1 - Анализируем тип нажатия
if [ "$button" == "FN1" ]
then
    # +++ Кнопка FN1 один раз - Включаем WiFi-сеть  # Можно elif
    if [ "$action" == "click" ]
    then
        #ndmq -x -p "interface WifiMaster0/AccessPoint1 up"
        #logger "Гостевая WiFi-сеть включена одним нажатием кнопки FN1."
        ndmq -x -p "interface WifiMaster0/AccessPoint0 up"
        logger "Домашняя WiFi-сеть включена одним нажатием кнопки FN1."
        #continue
    # +++ Кнопка FN1 два раза - Отключаем WiFi-сеть
    else if [ "$action" == "double-click" ]
    then
        #ndmq -x -p "interface WifiMaster0/AccessPoint1 down"
        #logger "Гостевая WiFi-сеть отключена двойным нажатием кнопки FN1."
        ndmq -x -p "interface WifiMaster0/AccessPoint0 down"
        logger "Домашняя WiFi-сеть отключена двойным нажатием кнопки FN1."
    fi
fi

 

3. Делаю его исполняемым:

chmod +x /opt/etc/ndm/button.d/PressButtons.bash

4. Указываю в Настройках Keenetic реакцию на нажатие кнопки FN1:

Однократное нажатие =  "OPKG - Запуск скриптов button.d"

Двукратное нажатие =  "OPKG - Запуск скриптов button.d"

5. Проверил запуском из CLI/SSH

/opt/etc/ndm/button.d/PressButtons.bash

НО ПРИ НАЖАТИИ КНОПКИ FN1 в журнале Keenetic появились записи:

Окт 29 17:56:28
 
root
button=FN1 action=click
Окт 29 17:56:28
 
ndm
Opkg::Manager: /opt/etc/ndm/button.d/PressButtons.bash: /opt/etc/ndm/button.d/PressButtons.bash: line 34: syntax error: unexpected end of file.
Окт 29 17:56:28
 
ndm
Opkg::Manager: /opt/etc/ndm/button.d/PressButtons.bash: exit code 2.

 

Может кто знает, в чём причина ?

Изменено пользователем iFinder
Опубликовано (изменено)
5 минут назад, ajs сказал:

Как по мне, одного fi не хватает

Вот описание:

Else if и elif

elif

elif -- это краткая форма записи конструкции else if. Применяется для построения многоярусных инструкций if/then.

if [ condition1 ]
then
   command1
   command2
   command3
elif [ condition2 ]
# То же самое, что и else if
then
   command4
   command5
else
   default-command
fi

И при тестовом запуске из CLI/SSH всё нормально.

Изменено пользователем iFinder
Опубликовано
5 минут назад, iFinder сказал:

И при тестовом запуске из CLI/SSH всё нормально.

В конце попробуйте exit 0

Опубликовано
24 минуты назад, iFinder сказал:

Может кто знает, в чём причина ?

5 минут назад, ajs сказал:

В конце попробуйте exit 0

В итоге ПОМОГЛО ! Надо в конце добавить:

exit 0

 

Опубликовано (изменено)
13 минуты назад, iFinder сказал:

elif -- это краткая форма записи конструкции else if. Применяется для построения многоярусных инструкций if/then.

Это в большом баше, как тут не знаю, но я бы попробовал или заменить таки на elif, или добавил бы fi, или вообще убрал else if т.к. оно там по большому счету не надо, оставил бы 2-а подряд идущих if ... Если exit 0 не поможет :)

Изменено пользователем ajs
Опубликовано
Только что, ajs сказал:

2-а подряд идущих if

тоже работает. Но первый Ваш совет содержательнее: он показал, что есть разница в написании скриптов!

Опубликовано
Только что, iFinder сказал:

Но первый Ваш совет содержательнее: он показал, что есть разница в написании скриптов!

Думаю тут нет разницы особой, просто система ожидает отклик на запуск скрипта, и когда его не получает ругается:

30 минут назад, iFinder сказал:

Opkg::Manager: /opt/etc/ndm/button.d/PressButtons.bash: exit code 2.

А когда Вы сообщили что в скрипте все хорошо exit 0, оно успокоилось :)

2 минуты назад, iFinder сказал:

тоже работает.

А чего бы ему не работать? Просто в варианте 2 if в том виде как у Вас, было бы 2 проверки при любом нажатии, в Вашем варианте 2 проверки только при дойном нажатии, но и это решаемо вызовом exit 0 после действия в каждом блоке if и допустим вызовом в конце exit 1 (или еще что-то) в случае долгого нажатия на кнопку (скрипт не умеет отрабатывать данное событие) :)

Опубликовано

Ну а теперь верх хотелок:

У меня три WiFi-сетки. Две управляются кнопкой стандартно. Короткое нажатие - Гостевая сеть, Двойное - Служебная сеть.

Логично было бы переключать третью (Домашнюю) сеть Долгим нажатием кнопки.

Именно переключать, а не задействовать два разных нажатия кнопки как в моём скрипте выше.

Но как можно узнать текущее состояние интерфейса в скрипте ?

Напишите пожалуйста, кто знает, строчку или две кода для этого. 

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

А как я вам выше предлагал не подойдет? 

Никакого состояния не выяснять а тупо на каждое долгое нажатие либо включать, либо выключать. Через раз. По счетчику четное/нечетное нажатие или как-нибудь ещё. На четное нажатие включаем, на не четное выключаем.

Изменено пользователем keenet07

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

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

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

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

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

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

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

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

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

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

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

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