Wer schon immer nach einer Möglichkeit gesucht hat, die LEDs auf dem BeagleboneBlack per fhem zu steuern - here we go:
package main;
use strict;
use warnings;
use Fcntl qw(:DEFAULT);
my @bbb_leds = map {
my $tmp;
sysopen($tmp, "/sys/class/leds/beaglebone:green:usr$_/brightness", O_WRONLY);
$tmp; } (0..3);
sub
myBBBUtils_Initialize($$) {
my ($hash) = @_;
}
sub bbb_led {
my @vals = @_;
for my $i (0..3) {
syswrite($bbb_leds[$i], "$vals[$i]", 1);
}
}
1;
Damit kann man mittels
bbb_led(val1,val2,val3,val4)
aus fhem heraus die vier benutzersteuerbaren LEDs auf dem Board steuern. val1-val4 sind dabei Werte von 0 (aus) oder 1 (an) und entspricht der Reihenfolge der vier vorhandenen LEDs.
Wichtig: zuvor muss die Schreibberechtigung auf das brightness-Register der jeweiligen LED vorhanden sein (es sei denn, fhem läuft als root) Ich habe dazu in meiner /etc/rc.local folgende vier Zeilen eingefügt:
chmod 777 /sys/class/leds/beaglebone\:green\:usr0/brightness
chmod 777 /sys/class/leds/beaglebone\:green\:usr1/brightness
chmod 777 /sys/class/leds/beaglebone\:green\:usr2/brightness
chmod 777 /sys/class/leds/beaglebone\:green\:usr3/brightness
Damit werden die Rechte nach einem BBB-Neustart automatisch wieder korrekt gesetzt.
(ja ich weiss, Rechtemanipulationen in /sys sollte man vermeiden, aber dummerweise werden die LEDs auf dem BBB über /sys gesteuert und nicht über /dev, was die Verwendung einer udev-Regel ausschließt)
Vielleicht wird das mal ein ganzes BBB_Tools Modul, ich will eigentlich eine Möglichkeit schaffen, die GPIO auch möglichst einfach zu verwenden (konkret: ich möchte den ELV-Gewitterwarnung über GPIO an den BBB anbinden)