Schalten der ON-Board LEDs

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    angeregt durch diesen Thread, habe ich mich eben damit beschäftigt, ob und falls ja, welche der On-Board LEDs man softwareseitig steuern kann.

    Hier das Ergebnis meiner Recherche. Gilt für RPi 2, 3, 4, Zero

    PWR-LED

    Einschalten

    Code
    sudo su
    echo 1 > /sys/class/leds/led0/brightness

    Ausschalten

    Code
    sudo su
    echo 0 > /sys/class/leds/led0/brightness

    ACT-LED

    Einschalten

    Code
    sudo su
    echo 1 > /sys/class/leds/led1/brightness

    Ausschalten

    Code
    sudo su
    echo 0 > /sys/class/leds/led1/brightness

    CAPS-LOCK-LED (RPI 400)

    Einschalten

    Code
    sudo su
    echo 1 > /sys/class/leds/input1::capslock/brightness

    Ausschalten

    Code
    sudo su
    echo 0 > /sys/class/leds/input1::capslock/brightness


    NUM-LED (RPi 400)

    Einschalten

    Code
    sudo su
    echo 1 > /sys/class/leds/input1::numlock/brightness

    Ausschalten

    Code
    sudo su
    echo 0 > /sys/class/leds/input1::numlock/brightness


    Und die Umsetzung in den Programmierprachen Ion und Unicon sieht dann so aus:

    Code-Deutung:

    Die Funktion bekommt einen Namen und erwartet zwei Argumente. Das erste ist eine Zeichenkette, die die OnBoard-LED bezeichnet (CAPS_LOCK, NUM_LOCK, PWR). Das zweite ist ein Modus, der entweder den Status der LED angibt (0 für aus und 1 für leuchtet) oder leer bleibt. In letzterem Fall soll der Status bei jedem Aufruf hin- und herschalten (sog. toggeln).

    Es werden drei statische Variablen definiert. Diese behalten nach Verlassen der Funktion ihren Wert und stehen beim nächsten Aufruf unverändert zur Verfügung. Die Verwendung statischer Variablen ist eine Möglichkeit, globale Variablen zu vermeiden. Globale Variablen werden in Icon und Unicon nicht so als Teufelszeug betrachtet wie in Python. Aber egal...

    Ursprünglich wollte ich das Schalten der OnBoard-LEDs über kleine Bash-Skripte machen. Das war aber zu langsam.

    Dann zeigte sich das Ganze sehr störrisch im Zusammenspiel mit meiner Anwendung, wenn da plötzlich der Anwender wechselt und kein Weg zurück führt.

    Und in einer Hochsprache in eine Datei eine 0 oder eine 1 zu schreiben, ist jetzt auch nicht so'n Ding.

    Also muss der Weg darüber gehen, dass der Eigentümer der LEDs auf den User pi gesetzt werden muss.


    Dann folgt ein Initial-Block, der nur beim allerersten Aufruf dieser Funktion aufgerufen wird. Hier passiert also etwas, was nur einmalig geschehen soll.

    Hier wird der Eigentümer der LED-Dateien auf den User pi gesetzt

    Dann folgt eine Fallunterscheidung. Je nach zu verwendender LED passiert so ziemlich das Gleiche (hier hätte man den Code auch in eine weitere Funktion ausgliedern können).

    Der Ausdruck /caps_lock := 1 bedeutet, dass die statische Variable caps_lock nur dann auf 1 gesetzt wird, wenn die Variable noch keine Zuweisung auf etwas anderres als &null erfahren hat.

    In der Zeile if /modus then caps_lock := ixor(caps_lock, 1) else caps_lock := modus passiert folgendes:

    Falls beim Funktionsaufruf das Argument modus nicht beachtet wurde, dann soll der Status der LED "getogglet" werden. Dieses Umschalten geht am aller einfachten durch einen Exklusiv-Oder der betreffenden Variablen mit 1. Dadurch wird streg genommen das niederwertigste Bit umgeschaltet.

    Wenn das Argument modus doch einen Wert enthält, dann soll dieser Wert der LED zugeordnet werden.

    Dann wird die betreffende Datei zum Schreiben geöffnet und der Wert, der der LED zugewiesen wurde (also 0 oder 1 ) in die Datei geschrieben. Die LED leuchtet und erlischt.

    Die geöffnete Datei wird dann schnellstmöglich wieder geschlossen.

    Was für CAPS-LOCK gemacht wurde wird analog für NUM_LOCK und PWR wiederholt.

    Dadurch erreicht man, das mit einer Funktion 3 LED unabhängig voneinander gesteuert werden können.


    Beste Grüße

    Andreas


    P.S.: [30-AUG-2022]:

    Wenn das hier beschriebene aufgrund von Updates nicht mehr funktionieren sollte, dann kann das hier hier helfen:

    Link 1 und Link 2 [Quelle der Links: Thread] Martin28 : :bravo2::danke_ATDE:

    Demnach sollen in der Datei /boot/config.txt folgende Einträge vorgenommen (oder ersetzt werden):

    Statt

    Code
    dtparam=pwr_led_trigger=none
    dtparam=pwr_led_activelow=off

    ersetzen oder überhaupt einfügen:

    Code
    dtparam=pwr_led_trigger=default-on
    dtparam=pwr_led_activelow=off

    Siehe auch den angegebenen Thread zur Diskussion.

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    3 Mal editiert, zuletzt von Andreas (31. August 2022 um 11:23)

  • Vielleicht zusätzlich noch ein Hinweis, wenn man einen LED-Zustand dauerhaft / nach dem Booten des RPi haben möchte, ohne einen Cronjob oder eine Systemd Service Unit einrichten zu müssen.

    Was die ACT-LED betrifft, kann man diese auch persistent durch einen Eintrag in die /boot/config.txt einstellen. Bei der PWR-LED funktioniert das allesrdings nicht bei den A und B Modellen. Mehr dazu steht in der Datei /boot/overlays/README.

  • Hallo Hyle,

    mir ging es NUR darum, die drei LEDs des RPi 400 als Statusanzeige (Fortschritt, Gutteil, Schlechtteil) zu missbrauchen, ohne über die GPIO irgendwelche LEDs auf einer zu erstellenden Platine, Gehäuse etc. anzusteuern.

    Na klar, man kann die LEDs auch dauerhaft ausschalten. War aber nicht das Thema für mich.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Moin!

    Ist PWR nicht die rote, und ACT die grüne bei 4B? Dann hast Du im Post /led0/ und /led1/ vertauscht?

    Ich habe gerade ein externes Raspberry Pi Keyboard angeschlossen, auch dessen LEDs lassen sich ansteuern:

    Code
    ls -al /sys/class/leds/

    zeigt die Übersicht an, ich habe noch scroll lock dabei. Nicht unter input1, sondern input14, hier jeweils nur das Einschalten:

    Code
    ~ $ sudo su
    # echo 1 > /sys/class/leds/input14::capslock/brightness
    # echo 1 > /sys/class/leds/input14::numlock/brightness
    # echo 1 > /sys/class/leds/input14::scrolllock/brightness

    Die gehen aber nach kurzer Zeit wieder in den Zustand zurück, in dem sie vor dem Befehl waren. Schaltet also nur die LED (kurz) um, nicht Klein/Großschreibung z.B. Ist das beim RPi400 anders?

    :rolleyes: sudo !!

  • In #1 habe ich noch Code in der Programmiersprache Icon bzw. Unicon inkl. Code-Deutung ergänzt (aus einer aktuellen Entwicklung).

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Moin DistroEx,

    herzlich Willkommen in diesem Forum!

    Moin!

    Die gehen aber nach kurzer Zeit wieder in den Zustand zurück, in dem sie vor dem Befehl waren. Schaltet also nur die LED (kurz) um, nicht Klein/Großschreibung z.B. Ist das beim RPi400 anders?

    Beim RPi 400 leuchten die LEDs so lange, bis ein anderes Kommando den Zustand ändert. Anerenfalls hätte ich das ja nicht als Statusanzeige verwenden können.

    Beste Grüße

    Andreaas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Moin DistroEx,

    Moin!

    Ist PWR nicht die rote, und ACT die grüne bei 4B? Dann hast Du im Post /led0/ und /led1/ vertauscht?

    Beim RPi 400 leuchtet die PWR-LED grün, während die NUMLock und die CapsLock-LEDs bei Bedarf rot leuchten.

    Die ACT-LED habe ich noch nicht entdeckt.

    Deswegen bin ich mir sicher, dass ich led0 und led1 nicht vertauscht habe (wenn ich mich auf den RPi 400 beziehe). Auf anderen RPi habe ich das Zeug aus #1 nicht getestet.

    Interessant finde ich aber, dass mit diesen Befehlen (nur anderen LED-Bezeichnungen) auch die LEDs einer externen Tastatur geschaltet werden können. Vielen Dank für den Hinweis!


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Andreas,

    danke für die Begrüßung! Lese schon einige Tage mit.

    Beim RPi 400 leuchtet die PWR-LED grün, während die NUMLock und die CapsLock-LEDs bei Bedarf rot leuchten.

    Die ACT-LED habe ich noch nicht entdeckt.


    Deswegen bin ich mir sicher, dass ich led0 und led1 nicht vertauscht habe (wenn ich mich auf den RPi 400 beziehe). Auf anderen RPi habe ich das Zeug aus #1 nicht getestet.

    Das müssten dann andere noch mal testen. Bei mir ist /led1/ für die rote LED.

    Interessant finde ich aber, dass mit diesen Befehlen (nur anderen LED-Bezeichnungen) auch die LEDs einer externen Tastatur geschaltet werden können.

    Ohne die Funktionen zu ändern. Dass die LEDs wieder von alleine auf den vorherigen Zustand gehen stimmt allerdings nicht, wenn ich eine ausschalte bleibt die aus. Ich hatte zunächst VNC vom Laptop aus an, und gleichzeitig die Raspberry Pi Tastatur. Und wenn ich über VNC tippe geht zumindestens die Caps-Lock-Taste an der am Raspi hängenden Tastatur _immer_ aus. War mir vorher nie aufgefallen.

    :rolleyes: sudo !!

  • Deswegen bin ich mir sicher, dass ich led0 und led1 nicht vertauscht habe (wenn ich mich auf den RPi 400 beziehe). Auf anderen RPi habe ich das Zeug aus #1 nicht getestet.

    Bei mir am Pi4 ist led0 die grüne LED und led1 die rote LED.

    Beim Pi Zero und Zero 2 W gibt es nur die grüne led0.

    Beim Pi2 ist auch led1 die rote LED.

  • Hallo DistroEx,

    dann passt das doch (aus meiner Sicht):

    Das müssten dann andere noch mal testen. Bei mir ist /led1/ für die rote LED.

    Beim RPi 400 leuchtet die PWR-LED grün (bei den anderen Modellen definitiv rot). ==> LED0

    Beim RPi 400 scheint es keine von vorne sichtbare ACT-LED zu geben. Die leuchtete bei den früheren Modellen definitiv grün. ==> LED1

    Beim RPi 400 leuchtet die NUM_LOCK und die CAP_LOCK-Taste rot.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • bei den anderen Modellen definitiv rot). ==> LED0

    Bei mir am Pi4 ist led0 die grüne LED und led1 die rote LED.

    Ich habe es gerade auch ausprobiert. Das Ergebnis ist das gleiche wie bei fred0815

    Pi4

    led0 ==> grüne act LED

    led1 ==> rote Power LED

  • Gilt für RPi 2, 3, 4, Zero

    Ich habe mal eben meinen alten 1B aktiviert und mit folgendem Script die LEDs blinken lassen.

    Bash
    #/bin/bash
    
    while :; do
        echo 0 > $1
        sleep 1
        echo 1 > $1
        sleep 1
    done    

    Leider gibt es nur die gruene LED0 ;(

    Code
    ls -la /sys/class/leds/ #1B
    total 0
    drwxr-xr-x  2 root root 0 Apr 28 22:38 .
    drwxr-xr-x 54 root root 0 Aug  7  2021 ..
    lrwxrwxrwx  1 root root 0 Apr 28 22:38 default-on -> ../../devices/virtual/leds/default-on
    lrwxrwxrwx  1 root root 0 Apr 30 18:42 input2::capslock -> ../../devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/0003:1A2C:0002.0001/input/input2/input2::capslock
    lrwxrwxrwx  1 root root 0 Apr 30 18:42 input2::numlock -> ../../devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/0003:1A2C:0002.0001/input/input2/input2::numlock
    lrwxrwxrwx  1 root root 0 Apr 30 18:42 input2::scrolllock -> ../../devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/1-1.2:1.0/0003:1A2C:0002.0001/input/input2/input2::scrolllock
    lrwxrwxrwx  1 root root 0 Apr 28 22:38 led0 -> ../../devices/platform/leds/leds/led0
    lrwxrwxrwx  1 root root 0 Apr 28 22:38 mmc0 -> ../../devices/virtual/leds/mmc0

    :no_sad: ... Kein Backupkein Mitleid ... :no_sad:
    :) Nutze lieber raspiBackup bevor Du in die Luft 💥 gehst wie ein HB Männchen :)

    Einmal editiert, zuletzt von framp (30. April 2022 um 19:35) aus folgendem Grund: Ist ein 1B - kein 2B

  • Auf der 3B gibt es die gruene LED0 und die rote LED1:

  • Code
    cat /proc/cpuinfo 
    Model        : Raspberry Pi 2 Model B Rev 1.1
    
    ls -la /sys/class/leds/
    drwxr-xr-x  2 root root 0 Apr 30 19:20 .
    drwxr-xr-x 57 root root 0 Apr 30 18:27 ..
    lrwxrwxrwx  1 root root 0 Apr 30 19:20 default-on -> ../../devices/virtual/leds/default-on
    lrwxrwxrwx  1 root root 0 Apr 30 19:20 led0 -> ../../devices/platform/leds/leds/led0
    lrwxrwxrwx  1 root root 0 Apr 30 19:20 led1 -> ../../devices/platform/leds/leds/led1
    lrwxrwxrwx  1 root root 0 Apr 30 19:20 mmc0 -> ../../devices/virtual/leds/mmc0

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!