Guten Morgen,
eine 8 Kanal Fernbedienung kann ich nun zuverlässig mittels Shellskript ansteuern.
gpio mode 2 out
gpio mode 3 out
gpio mode 4 out
gpio mode 5 out
gpio mode 7 out
current=$(cat channel)
echo current $current
# $1 = kanal, $2 = Knopfnummer: 0 irsend, 4 select, 1 ir rec, 2 down, 3 stop, 5 multi/single
if [ "$1" -eq 9 ]
then
gpio write 5 1
sleep 0.1
gpio write 5 0
sleep 0.2
echo all
gpio write "$2" 1
sleep 0.2
gpio write "$2" 0
sleep 0.2
gpio write 5 1
sleep 0.1
gpio write 5 0
sleep 0.2
else
klicks=`expr $1 - $current + 8`
klicks=`expr $klicks % 8`
echo klicks $klicks
index=0
while [ "$index" -lt "$klicks" ] ;do
gpio write 4 1
sleep 0.05
gpio write 4 0
sleep 0.05
current=`expr $current + 1`
index=`expr $index + 1`
done
gpio write "$2" 1
sleep 0.2
gpio write "$2" 0
sleep 0.05
if [ "$current" -eq 8 ]
then current=8
else
current=`expr $current % 8 `
fi
echo $current > /opt/fhem/channel
echo current $current
fi
Display More
Für 16 Kanäle muss es nur ganz leicht modifiziert werden (ungetestet).
gpio mode 2 out
gpio mode 3 out
gpio mode 4 out
gpio mode 5 out
gpio mode 7 out
current=$(cat channel)
echo current $current
# $1 = kanal, $2 = Knopfnummer: 0 irsend, 4 select, 1 ir rec, 2 down, 3 stop, 5 multi/single
if [ "$1" -eq 17 ]
then
gpio write 5 1
sleep 0.1
gpio write 5 0
sleep 0.2
echo all
gpio write "$2" 1
sleep 0.2
gpio write "$2" 0
sleep 0.2
gpio write 5 1
sleep 0.1
gpio write 5 0
sleep 0.2
else
klicks=`expr $1 - $current + 16`
klicks=`expr $klicks % 16`
echo klicks $klicks
index=0
while [ "$index" -lt "$klicks" ] ;do
gpio write 4 1
sleep 0.05
gpio write 4 0
sleep 0.05
current=`expr $current + 1`
index=`expr $index + 1`
done
gpio write "$2" 1
sleep 0.2
gpio write "$2" 0
sleep 0.05
if [ "$current" -eq 16 ]
then current=16
else
current=`expr $current % 16 `
fi
echo $current > /opt/fhem/channel
echo current $current
fi
Display More
Die Skripte speicher den aktuell ausgewählten Kanal in einer Datei namens channel.
Aufgerufen wird das ganze mit:
./rollo.sh <kanalnummer> <tastennummer>
Also zum Beispiel mit:
./rollo.sh 1 2 (Das Rollo auf Kanal 1 herunterlassen)
./rollo.sh 2 1 (Das Rollo auf Kanal 2 hochfahren)
./rollo.sh 3 3 (Das Rollo auf Kanal 3 stoppen)
./rollo.sh 9 2 (Alle Rollos hochfahren)
Das Skript sollte mit
ausführbar gemacht werden.
Zudem habe ich es dem FHEM user "geschenkt":
chown fhem:dialout rollo.sh
In FHEM sieht das Ganze dann so aus:
define RolloArbeitszimmerRunter notify RolloArbeitszimmer:runter "/opt/fhem/rollo.sh 6 2"
Im übrigen habe ich anstelle der Einzeltransistoren und Einzelwiderstände ein Transistorarray ULN2003A verwendet. Die GPIO Nummern weichen von denen von Strunz ab, da ich GPIO 0 und 1 für Infrarotfernbdienung mittels LIRC nutzen möchte.
GPIO 4 entspricht im Übrigen der "Select up" Taste.
Viele Grüße
Stefan