Temat: Wskaźnik poziomu sygnału WiFI
Większość routerów wyposażonych jest w kilka diod led, które można sterować programowo. Zwykle wykorzystywane są one do celów systemowych (np. wskaźniki portów lan), ale przy odrobienie chęci można je wykorzystać do innych celów.
Załóżmy że używamy router w trybie klienta bezprzewodowego (APClient). Niektóre routery mają dedykowane wskaźniki poziomu sygnału (np. Ubiquiti czy repeatery TP-LINK TL-WAx50RE), co bardzo pomaga w instalacji czy ustawieniu optymalnego kierunku anteny, w zorientowaniu się o poziomie sygnału przy różnych warunkach terenowych/pogodowych. Inne routery pozbawione są takich wskaźników, ale mogą przydać się właśnie te inne diody led.
W OpenWrt znajdziemy narzędzie o nazwie rssileds napisane z myślą o takich wskaźnikach poziomu. Korzysta z biblioteki iwinfo i samodzielnie steruje diodami. Jedyna niezbędna czynność to zrobienie odpowiedniego pliku konfiguracyjnego.
W tym przykładzie zostały wykorzystane ledy w routerze TP-LINK TL-740N v4. Dostępne są m.in cztery ledy od portów lan (o nazwach tp-link:green:lan1 do lan4) oraz led od portu wan (tp-link:green:wan). Ponieważ są one fizycznie ułożone jedna za drugą, wykorzystałem je jako pięciostopniowy wskaźnik poziomu sygnału. Router pracuje jako klient sieci bezprzewodowej, fizyczny interfejs wifi nazywa się wlan0.
Instalacja
# opkg update
# opkg install rssileds
Konfiguracja
Po pierwsze: z systemu trzeba wyrzucić obsługę led. W moim przypadku dotyczyło to obsługi portów wan i lan, która znajduje się w pliku /etc/config/system; wyrzucamy konfiguracje ledów:
# uci del system.led_lan1
# uci del system.led_lan2
# uci del system.led_lan3
# uci del system.led_lan4
# uci del system.led_wan
# uci commit system
Jeżeli używamy innych diod, należy sprawdzić czy nie są one obsługiwane przez system.
Po drugie: tworzymy konfigurację dla rssileds. Dla pięciostopniowego wskaźnika można ona wyglądać następująco:
config rssid 'rssid_wlan0'
option dev 'wlan0'
option refresh '40000'
option threshold '1'
config led 'led_rssilow'
option name 'RSSILOW'
option sysfs 'tp-link:green:lan1'
option trigger 'rssi'
option iface 'rssid_wlan0'
option minq '1'
option maxq '100'
option offset '0'
option factor '13'
config led 'led_rssimediumlow'
option name 'RSSIMEDIUMHIGH'
option sysfs 'tp-link:green:lan2'
option trigger 'rssi'
option iface 'rssid_wlan0'
option minq '20'
option maxq '100'
option offset '-19'
option factor '13'
config led 'led_rssimedium'
option name 'RSSIMEDIUM'
option sysfs 'tp-link:green:lan3'
option trigger 'rssi'
option iface 'rssid_wlan0'
option minq '40'
option maxq '100'
option offset '-39'
option factor '13'
config led 'led_rssimediumhigh'
option name 'RSSIMEDIUMHIGH'
option sysfs 'tp-link:green:lan4'
option trigger 'rssi'
option iface 'rssid_wlan0'
option minq '60'
option maxq '100'
option offset '-59'
option factor '13'
config led 'led_rssihigh'
option name 'RSSIHIGH'
option sysfs 'tp-link:green:wan'
option trigger 'rssi'
option iface 'rssid_wlan0'
option minq '80'
option maxq '100'
option offset '-79'
option factor '13'
Łącznie 6 sekcji: jedna rssid definiująca nazwę (rssid_wlan0) oraz fizyczny interfejs (wlan0) którego będzie dotyczył monitoring oraz pięć sekcji led dla poszczególnych diod. Znaczenie opcji:
* name: nazwa sekcji
* sysfs: nazwa systemowa led (patrz poprzedni poradnik)
* trigger: zawsze rssi
* iface: nazwa zdefiniowana w sekcji rssid
* minq: minimalny poziom sygnału przy którym dioda zostanie zapalona (w %)
* max: maksymalny poziom sygnału przy którym dioda zostanie zapalona (w %)
* offset i factor: na podstawie tych dwóch parametrów wyliczany jest poziom świecenia diody led wg wzoru: ((bieżący poziom sygnału + offset) * factor), wynik obcinany jest do zakresu 0-255. Niektóre routery mają możliwość sterowania jasnością świecenia led w zależności od wpisanej wartości (z przedziału 0-255). Ten router którego użyłem nie posiada czegoś takiego (dioda gasi się przy 0 i zapala przy innej wartości), wystarczy więc dać dość duży factor żeby wynik zawsze był większy od zera.
Uruchomienie
# /etc/init.d/rssileds enable
# /etc/init.d/rssileds start