Przyciski

Praktycznie każdy router, który znajduje się obecnie na rynku posiada jakieś przyciski. Najczęściej jest to przycisk Reset, ale czasami się też zdarza producenci dodają dodatkowe realizujące z góry przyjęte funkcje np. WPS, SES

W OpenWrt za obsługę przycisków odpowiada pakiet kmod-button-hotplug i przeważnie jest już w obrazie wkompilowany. Oczywiście przyciski które w oficjalnym firmware realizują konkretną funkcję w OpenWrt możemy przypisać całkowicie inną.

Nazewnictwo przycisków

Żeby w ogóle przypisać akcje do przycisku trzeba znać jego nazwę. W tym celu trzeba utworzyć prosty skrypcik, który w logu przedstawi nam nazwę przycisku. Tworzymy plik:

mkdir /etc/hotplug.d/button
vi /etc/hotplug.d/button/button

o zawartości:

#!/bin/sh
logger $BUTTON
logger $ACTION

Zapisujemy i przyciskamy przycisk. Efekt:

  Nov  28 14:16:25 OpenWrt user.notice root: BTN_0
  Nov  28 14:16:25 OpenWrt user.notice root: pressed
  Nov  28 14:16:26 OpenWrt user.notice root: BTN_0
  Nov  28 14:16:26 OpenWrt user.notice root: released

Mamy doczynienia z przyciskiem BTN_0. W w/w skrypcie wykorzystujemy dwie zmienne zakodowane w środowisku OpenWrt, które to możemy również stosować w swoich skryptach wykrywając akcje($ACTION) i nazwę przycisku($BUTTON).
Możemy też się posłużyć nazwami 'ses', 'wps', 'reset' pod warunkiem że OpenWrt ma już wewnątrz powiązanie z przyciskiem.

Ustawienie przez UCI

UCI jest standardowym narzędziem do konfigurowania OpenWrt, przyciski też nim ustawimy. Jednak najpierw musimy pobrać skrypt parsujący sekcje /etc/config/system z projektu OpenWrt 1)

 mkdir /etc/hotplug.d/button
 wget -O /etc/hotplug.d/button/00-button http://openwrt.pl/dl/scripts/00-button

(Jeżeli dokonywano wykrywania nazwy przycisku, należy skrypt /etc/hotplug.d/button usunąć!)

Pozostaje utworzyć dodatkową sekcję w /etc/config/system. Sprawdźmy testowo przycisk BTN_0(reset), który wypisze w logu(komenda logread) tekst.

uci add system button
uci set system.@button[-1].button=BTN_0
uci set system.@button[-1].action=pressed
uci set system.@button[-1].handler='logger nacisnieto BTN_0'
uci commit system

Wynik:

Nov 28 14:04:44 rspro user.notice root: nacisnieto BTN_0

Jak widać działa :-)

Opcja button określa nazwę przycisku, którą wykryliśmy poprzednio
Opcja action przyjmuje dwie wartośći:

  • pressed akcja wykonana po przyciÅ›niÄ™ciu przycisku
  • released po puszczeniu przycisku

Opcja handler określa program, skrypt jaki ma zostać wykonany po przyciśnięciu/puszczeniu przycisku

Przy akcji released możemy dodatkowo zliczać czas trzymania przycisku i wówczas dochodzą jeszcze dwie opcja określające czas podawany w sekundach. Przykład:

uci add system button
uci set system.@button[-1].button=BTN_0
uci set system.@button[-1].action=released
uci set system.@button[-1].handler='logger BTN_0 przytrzymany na 3-5s'
uci set system.@button[-1].min='3'
uci set system.@button[-1].max='5'
uci add system button
uci set system.@button[-1].button=BTN_0
uci set system.@button[-1].action=released
uci set system.@button[-1].handler='logger BTN_0 przytrzymany na 5-10s'
uci set system.@button[-1].min='5'
uci set system.@button[-1].max='10'
uci commit system

Nie wiem czy to widać, ale za pomocą jednego przycisku realizujemy dwa zadania zależne od czasu przetrzymanego przycisku!

Pora na coś praktycznego: przycisk przetrzymany do 5 sek resetuje urządzenie, a dłużej(5-30sek) resetuje ustawienia routera(firstboot)

uci add system button
uci set system.@button[-1].button=BTN_0
uci set system.@button[-1].action=released
uci set system.@button[-1].handler='logger resetuje router; reboot;'
uci set system.@button[-1].min='0'
uci set system.@button[-1].max='5'
uci add system button
uci set system.@button[-1].button=BTN_0
uci set system.@button[-1].action=released
uci set system.@button[-1].handler='logger ustawienia domyslne; firstboot;reboot;'
uci set system.@button[-1].min='5'
uci set system.@button[-1].max='30'
uci commit system
1) Skrypt nie jest autorski i znajduje siÄ™ w projekcie OpenWrt
technikalia/przyciski.txt · ostatnio zmienione: 2010/11/28 19:05 przez arteq
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0
Profesjonalny Hosting