Obsługa diód LED w OpenWrt
Ostatnia zmiana: 2017-01-22 06:58

Linie GPIO wykorzystywane są w ruterach do różnych celów. Podłączone do nich mogą być przyciski, sterowanie switchem (przełącznikiem) czy chociaż by diody LED. Każdy ruter posiada ich kilka - wskaźnik zasilania, usb, czasami połączenia wan czy wifi. Niektóre z nich są podłączone do linii gpio i można nimi sterować programowo, niektóre są podłączone w inny sposób (czasami power, diody od przełącznika - aktywność lan) lub sterowane sprzętowo i nie można nimi sterować. Aby wykorzystać triggery niezbędne jest zainstalowanie odpowiedniego pakietu kmod-ledtrig* np. kmod-ledtrig-heartbeat.

Definicja LED

Jeżeli OpenWrt w pełni obsługuje daną platformę, to istnieje szansa że obsługuje także diody LED. Aby się o tym przekonać, należy sprawdzić czy istnieje w systemie katalog /sys/class/leds/ z wypełnioną zawartością.


    # ls /sys/class/leds/

Np. dla WRT160NL dostępna jest obsługa następujących diod


    wrt160nl:amber:wps 
    wrt160nl:blue:power 
    wrt160nl:blue:wlan
    wrt160nl:blue:wps

Nazwy mogą być różne, choć istnieje preferencja żeby nazywać je jako platforma:kolor_led:przeznaczenie. W tym przypadku można sterować czterema diodami. Poniżej przedstawiono przykłady sterowania (do testów została użyta dioda oznaczona "wrt160nl:blue:wps" - oczywiście należy to zmienić odpowiednio w zależności rutera i obsługiwanych LED)

Włączenie diody



    # echo "255" > /sys/class/leds/wrt160nl\:blue\:wps/brightness

Ogólnie - każda wartość większa od zera powinna powodować zapalenie diody. Może być więc także echo 1 >> /sys... i powinno działać.

Wyłączenie diody



    # echo "0" > /sys/class/leds/wrt160nl\:blue\:wps/brightness

Heartbeat

Powoduje miganie diody z szybkością zależną od obciążenia systemu. Jak bicie serca


    # echo "heartbeat" > /sys/class/leds/wrt160nl\:blue\:wps/trigger

Timer

Czyli okresowe włączenie i wyłączenie diody. Mogą to być takie same wartości, ale także np. zapalenie diody na trzy sekundy a wygaszenie na jedna.


    # echo "timer" > /sys/class/leds/wrt160nl\:blue\:wps/trigger
    # echo "3000" > /sys/class/leds/wrt160nl\:blue\:wps/delay_on
    # echo "1000" > /sys/class/leds/wrt160nl\:blue\:wps/delay_off

Czas podany jest w ms

Zapis do flash



    # echo "nand-disk" > /sys/class/leds/wrt160nl\:blue\:wps/trigger

UWAGA: dotyczy to zapisu do flash. Nie ma możliwość ustawienia zapisów na USB czy dysk

Aktywność interfejsu sieciowego



    # echo "netdev" > /sys/class/leds/wrt160nl\:blue\:wps/trigger
    # echo "wlan0" > /sys/class/leds/wrt160nl\:blue\:wps/device_name
    # echo "link tx rx" > /sys/class/leds/wrt160nl\:wps\:power/mode

gdzie "wlan0" to nazwa interfejsu. Może być eth0, tun0 czy ppp0, a mode to: link - czyli istnienie połączenia, rx - odbiór, tx - nadawanie, jedna z wartości lub kilka rozdzielone spację.

Powyższe wpisy będą działać jeżeli je wpiszemy z konsoli, ale znikną po restarcie systemu. Jeżeli chcemy żeby po starcie dioda zachowywała się w określony sposób, możemy odpowiedni kod dodać do skryptów startowych lub wykorzystać wbudowaną obsługę i skonfigurować całość przez UCI. Po wykonaniu poleceń pojawią się nowe sekcje w pliku /etc/config/system. Przykłady analogiczne do w/w.

Włączenie diody



    # uci add system led
    # uci set system.@led[-1].sysfs='wrt160nl:blue:wps'
    # uci set system.@led[-1].default=1
    # uci commit system

Wyłączenie diody



    # uci add system led
    # uci set system.@led[-1].sysfs='wrt160nl:blue:wps'
    # uci set system.@led[-1].default=0
    # uci commit system

Heatbeat



    # uci add system led
    # uci set system.@led[-1].sysfs='wrt160nl:blue:wps'
    # uci set system.@led[-1].trigger='heartbeat'
    # uci commit system

Timer



    # uci add system led
    # uci set system.@led[-1].sysfs='wrt160nl:blue:wps'
    # uci set system.@led[-1].trigger='timer'
    # uci set system.@led[-1].delayon='3000'
    # uci set system.@led[-1].delayoff='1000'
    # uci commit system

Zapis do flash



    # uci add system led
    # uci set system.@led[-1].sysfs='wrt160nl:blue:wps'
    # uci set system.@led[-1].trigger='nand-disk'
    # uci commit system

Aktywność sieci



    # uci add system led
    # uci set system.@led[-1].sysfs='wrt160nl:blue:wps'
    # uci set system.@led[-1].trigger='netdev'
    # uci set system.@led[-1].dev='wlan0'
    # uci set system.@led[-1].mode='link tx rx'
    # uci commit system


W/w wpisy będą działać po restarcie routera lub wykonaniu polecenia


    # /etc/init.d/led restart


Zobacz także powiadamiane o zdarzeniach dodami LED.