Im Folgenden beschreibe ich, wie man bei einem Router mit OpenWrt die LEDs deaktiviert.
Jedesmal wenn ich an meinem Router vorbeikam, dachte ich, wieso müssen denn die ganzen LEDs leuchten. Besonders im Dunkeln hat mich das gestört. Natürlich sieht der Eingeweihte an den LEDs was auf dem Router los ist. Aber ganz ehrlich – mich interessiert es die meiste Zeit nicht. Für mich wird es erst interessant, wenn etwas nicht funktioniert. Dazu später mehr.
Es handelt sich um einen Router TP-Link TL-WDR4300 V1.3. Die installierte Firmware ist OpenWrt Chaos Calmer 15.05.
Zunächst einmal habe ich die folgenden Pakete nachinstalliert:
opkg install kmod-ledtrig-default-on opkg install kmod-ledtrig-timer opkg install kmod-ledtrig-usbdev
Da bei mir auch die grafische Oberfläche Luci installiert ist, findet sich unter ->System -> LED Configuration ein neuer Punkt. Damit kann man nun etwas herumspielen.
Um zum Beispiel die LED für LAN1 zu deaktivieren, setzt man den Trigger auf “None”.
Das läßt sich für alle LEDs außer der PowerLED einrichten. Wählt man beim Trigger die Option “Timer”, kann man die LED blinken lassen. Die Werte sind laut Doku in Millisekunden anzugeben. Bei meinem Router stimmt das nicht.
So weit also der erste Schritt. Alle LEDs sind auszuschalten.
Jetzt zum interessanteren Teil – wie oben schon angedeutet möchte ich im Fehlerfall wissen, wenn es hakt. Dazu war meine Idee, den Router nach dem Starten hübsch alles anzeigen zu lassen. Nach 5 min aber sollen die LEDs ruhen. Weiterhin soll die WAN-LED (oder auch die LAN-LEDs) hektisch blinken, wenn die PPPoE-Verbindung weg ist. So kann auch der unbedarfte Benutzer erkennen, da stimmt was nicht. Vorherige Einweisung vorausgestzt oder eben der typische telefonische Hilferuf: “Das Internet geht nicht!”
Nun mache ich es wie folgt:
- Der Router startet mit seiner bisherigen Konfiguration
- Nach Wartezeit von 5 Minuten wird eine neue Konfiguration geladen, die alle LEDs ausgeschaltet
- Internetverbindung wird überwacht. Bricht diese ab, fangen die LEDs an zu blinken.
En Detail
LEDs ausschalten
Startskript
Unter ->System ->Startup kann die rc.local bearbeitet werden. Da wird das Script aufgerufen, das die neue Konfiguration lädt. Das Script wird im Hintergrund geladen und der Bootprozess wird normal beendet.
/sbin/led_off & exit 0
Da der Bootprozess ganz normal durchläuft, kann man beobachten, ob auf der WAN-Strecke eine Verbindung zustande kommt, WLAN startet, LAN-Ports aktiv werden …
Wenn der Bootprozess beendet ist, leuchtet bei mir die SYS-LED dauerhaft.
Skript LEDs aus
Ich habe verschiedene Wege versucht. U.a. direkt in die Dateien zu schreiben, was auch funktioniert. Da gibt es dann aber Nebeneffekte. Also habe ich mich dafür entschieden, für jedes Szenario eine eigene Datei zu erzeugen. Die LED-Konfiguration wird in /etc/config/system abgespeichert.
Daher gibt es für jeden Fall eine Datei, die per uci importiert wird.
#!/bin/sh # led_off.sh # # schalte LEDs aus # 5 Minuten warten sleep 300 # importiere die neue Konfiguration fuer /etc/config/system uci import system < /etc/config/scripts/exports/system_aus # Lade die LED Konfiguration /etc/init.d/led restart
und hier die Datei, die per uci-Import geladen wird nach /etc/config/system (Auszug) für deaktivierte LAN1-LED:
config led option default '0' option name 'LAN1' option sysfs 'tp-link:blue:lan1' option trigger 'none'
Am einfachsten erzeugt man sich die Datei per GUI, mit allen gewünschten Einstellungen. Dann ein uci-Export und bei Bedarf (s.o.) wird sie importiert.
uci export system > "Pfad zur Datei"
LEDs blinken lassen
#!/bin/sh # led_blink.sh # # importiere die neue Konfiguration fuer /etc/config/system uci import system < /etc/config/scripts/exports/system_blink /etc/init.d/led restart
Auch hier wieder ein Import einer vorher erzeugten system-Datei. Dieses Mal ungefähr mit diesen Werten:
... config led option sysfs 'tp-link:blue:lan1' option trigger 'timer' option delayon '1' option name 'LAN1' option delayoff '1' option default '0' ...
Nun sollen die LEDs nur blinken, wenn die Internetverbindung unterbrochen ist. Die Überwachung habe ich schon in einem anderen Beitrag beschrieben.
!/bin/sh # /sbin/wan_status.sh # ueberwacht die Internetverbindung upSeconds="$(cat /proc/uptime | grep -o '^[0-9]\+')" upMins=$((${upSeconds} / 60)) status=`ifstatus wan |grep '"up"'| grep -o true` # ist die uptime groesser als 5min if [ "${upMins}" -gt "5" ] then # Wenn die Verbindung ok, ist - LEDs aus if [ $status == "true" ]; then /sbin/led_off & exit 0 fi # sonst LEDs blinken lassen /sbin/led_blink & fi exit 0
Per Cronjob wird die Datei mit Überwachungsskript aufgerufen:
* * * * * /sbin/wan_status
Wenn die Internetverbindung wiederhergestellt wird, gehen die LEDs auch wieder aus.
LEDs ausschalten
Ich habe einige Versuche unternommen, um die LEDs auszuschalten. Grundsätzlich liegen unter
/sys/class/leds/
verschiedene Dateien und Verzeichnisse. Es handelt sich um virtuelle Dateien, die nach Bedarf erzeugt werden.
Versuchsweise habe ich mir ein Skript gebaut, dass die “brightness” benannten Dateien jeweils mit dem Wert “0” füllt.
#!/bin/sh # /sbin/led_off.sh # LED ausschalten sleep 300 MYDIR="/sys/class/leds/" DIRS=`ls -l $MYDIR | awk '{print $9}'` # "ls -l $MYDIR" = zeigt die Verzeichnisse und Dateien in einem Verzeichnis # "awk '{print $8}'" = gibt in diesem Fall nur das Ergebnis aus dem 9ten Feld aus # nun geht es in einer For-Schleife durch die Verzeichnisse: for DIR in $DIRS do echo 0 > $MYDIR${DIR}/brightness done exit 0
Die Datei unter /sbin/led_off.sh abgelegt und ausführbar gemacht.
chmod +x /sbin/led_off
Testweise ausgeführt
/sbin/led_off.sh
Und zack sind bis auf die PowerLED alle Lampen aus.
LEDs wieder einschalten
Mit folgendem Skript können die LAN-LEDs wieder aktiviert werden (Nebeneffekt s.u.):
#!/bin/sh # LED einschalten MYDIR="/sys/class/leds/" DIRS=`ls -l $MYDIR | awk '{print $9}'` # "ls -l $MYDIR" = get a directory listing # "awk '{print $8}'" = pipe the result from egrep to awk and print only the 9th field # and now loop through the directories: for DIR in $DIRS do echo 1 > $MYDIR${DIR}/enable_hw_mode done
Die entscheidenden Dateien sind z.B. für LAN1:
/sys/class/leds/tp-link:blue:lan1/brightness und /sys/class/leds/tp-link:blue:lan1/enable_hw_mode
led_off schreibt in brightness eine “1” . Gleichzeitig wechselt enable_hw_mode von “1” auf “0”.
Einen kleinen Nebeneffekt gibt es aber. Und zwar werden offensichtlich nur die “virtuellen” LEDs (LAN, WAN) wieder eingeschaltet. Denn nur diese besitzen eine Datei enable_hw_mode. Für die anderen LEDs wird ein Fehler ausgegeben. Wie diese wieder eingeschaltet werden, war für mich nicht von Interesse.
WAN-Verbindung überwachen -Watchdog
Wenn die Internetverbindung unterbrochen ist, soll die LED, die normalerweise den Status der Verbindung anzeigt, hektisch blinken. Dazu braucht es ein Skript, das die Internetverbindung überwacht.
#!/bin/sh # /sbin/watch_wan.sh # ueberwacht die Internetverbindung upSeconds="$(cat /proc/uptime | grep -o '^[0-9]\+')" upMins=$((${upSeconds} / 60)) # ist die uptime groesser als 5min if [ "${upMins}" -gt "5" ] then tries=0 while [[ $tries -lt 5 ]] do if /bin/ping -c 1 8.8.8.8 >/dev/null then echo "Internet ok" exit 0 fi tries=$((tries+1)) done else exit 0 fi echo "Internet is down"
Das Ganze wird nun einmal in der Minute per Cron aufgerufen.
crontab -e * * * * * /sbin/watch_wan.sh
WAN-LED blinken lassen
#!/bin/sh # /sbin/wan_led_flash.sh # WAN LED soll blinken # es sind nur ganze Zahlen moeglich echo 1 > /sys/class/leds/tp-link\:blue\:wan/delay_on echo 1 > /sys/class/leds/tp-link\:blue\:wan/delay_off
Dazu muss per WebGUI ->System -> LEDConfiguration bzw. in /etc/config/system ein Eintrag angelegt werden.
WebGUI
bzw.
/etc/config/system
config led option default '0' option sysfs 'tp-link:blue:wan' option trigger 'timer' option delayon '1' option name 'WANLED' option delayoff '1'
ifstatus wan |grep ‘”up”‘| grep -o true
Schreib als Erster einen Kommentar