Obsługa diod LED w OpenWrt
Ostatnia zmiana: 2023-09-05 18:04

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 router tych ostatnich 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 (na stałe np. power) lub sterowane sprzętowo (np. diody od chipu przełącznika - aktywność lan) i nie można nimi sterować.
Sterowanie diodami odbywa się w przez zmianę ich stany lub wykorzystują programowe "triggery" który zmieniają ich stan samodzielnie. Niektóre triggery są standardowo wbudowane w systemem a niektóre trzeba sobie doinstalować przez instalację odpowiedniego modułu kernela (kmod-ledtrig*).

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


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

Nazwy mogą być różne, choć istnieje preferencja żeby nazywać je wg definicji 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 "blue:wps" - oczywiście należy to zmienić odpowiednio w zależności rutera i obsługiwanych LED)

Włączenie diody



    # echo "1" > /sys/class/leds/blue:wps/brightness

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

Wyłączenie diody



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

Heartbeat

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


    # echo "heartbeat" > /sys/class/leds/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/blue:wps/trigger
    # echo "3000" > /sys/class/leds/blue:wps/delay_on
    # echo "1000" > /sys/class/leds/blue:wps/delay_off

Czas podany jest w ms.

Zapis do flash



    # echo "nand-disk" > /sys/class/leds/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/blue:wps/trigger
    # echo "wlan0" > /sys/class/leds/blue:wps/device_name
    # echo "link tx rx" > /sys/class/leds/blue:wps/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; można podać jedną 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='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='blue:wps'
    # uci set system.@led[-1].default=0
    # uci commit system

Heatbeat



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

Timer



    # uci add system led
    # uci set system.@led[-1].sysfs='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='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='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 diodami LED.