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ą.
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.