LEDs deaktivieren bei OpenWRT TP-Link 4300

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

LED per WebGUI deaktivieren

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

WAN LED blinken

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.