LED während Ausführung von Bashscript blinken lassen

Stefan.W

Cadet 4th Year
Registriert
Mai 2008
Beiträge
113
Hallo Leute,

wie der Titel schon vermuten läßt würde ich gerne eine LED an meinem Raspberry während der Ausführung eines Bashscriptes blinken lassen. Leider bekomme ich das auch mit viel googlen nicht hin.

Ich habe mir folgendes Script erstellt:

Code:
#!/bin/bash

# Betriebslicht anschalten
sudo echo "1" >/sys/class/gpio/gpio23/value

# Um Mehrfachzugriff auf Datenbank zu verhindern hier ein Sleep
sleep 5

# Datenbank zum letzten Wert von Temp0 und Temp1 abfragen
tempraw=$(rrdtool lastupdate /home/pi/datenbank.rrd)

# Letzten Wert aus Temp0 auslesen
temp0=`echo $tempraw | awk '{print $4}'`
temp0scale=`echo "scale=2; $temp0 / 1" | bc`

# Letzten Wert aus Temp1 auslesen
temp1=`echo $tempraw | awk '{print $5}'`
temp1scale=`echo "scale=2; $temp1 / 1" | bc`

# Zeitdaten für spätere Prüfung erstellen
last=`head -n 1 /home/pi/.letzteschaltung.txt`
now=`date +%s`
future=`echo "${last} + 120" | bc`

# Ermittelte Temperaturen
compare1=`echo "${temp0scale} <= 22.00" | bc`
compare2=`echo "${temp0scale} < 12.00" | bc`
compare3=`echo "${temp0scale} > 35.00" | bc`

# Schalttemperatur unterschritten
if [ $compare1 -eq "1" ]

   then
   echo Testausgabe: ${temp0scale}°C, schalte AN
   echo 1 > /home/pi/.schaltzustand.txt
   echo $now > /home/pi/.letzteschaltung.txt
   # Schaltung mehrfach auslösen
   sudo /home/pi/programs/raspberry-remote/send 10101 1 1
   sudo /home/pi/programs/raspberry-remote/send 10101 1 1
   sudo /home/pi/programs/raspberry-remote/send 10101 1 1
   # Schaltlicht anschalten
   sudo echo "1" >/sys/class/gpio/gpio25/value

# Schalttemperatur überschritten, Zeit bereit erreicht
elif [ ${now} -gt ${future} ]

   then
   echo Testausgabe: ${temp0scale}°C um ${now}, schalte AUS
   echo 0 > /home/pi/.schaltzustand.txt
   # Schaltung mehrfach auslösen
   sudo /home/pi/programs/raspberry-remote/send 10101 1 0
   sudo /home/pi/programs/raspberry-remote/send 10101 1 0
   sudo /home/pi/programs/raspberry-remote/send 10101 1 0
   # Schaltlicht ausschalten
   sudo echo "0" >/sys/class/gpio/gpio25/value

# Schalttemperatur überschritten, Zeit noch nicht erreicht
   else
   echo Testausgabe: ${temp0scale}°C, ist größer, Zeit nicht erfüllt WARTEN
fi

# Mindesttemperatur nicht erreicht
if [ $compare2 -eq "1" ]

   then
   echo Versende Mindesttemperatur Warnung
   /home/pi/programs/yowsup/yowsup-cli demos --config /home/pi/programs/yowsup/config --send 491724210080 "WARNUNG: Die Temperatur im Frühbeet beträgt weniger als 12°C"
   /home/pi/programs/yowsup/yowsup-cli demos --config /home/pi/programs/yowsup/config --send 491704633793 "WARNUNG: Die Temperatur im Frühbeet beträgt weniger als 12°C"

# Maximaltemperatur überschritten
elif [ $compare3 -eq "1" ]

   then
   echo Versende Maximaltemperatur Warnung
   /home/pi/programs/yowsup/yowsup-cli demos --config /home/pi/programs/yowsup/config --send 491724210080 "WARNUNG: Die Temperatur im Frühbeet beträgt mehr als 35°C"
   /home/pi/programs/yowsup/yowsup-cli demos --config /home/pi/programs/yowsup/config --send 491704633793 "WARNUNG: Die Temperatur im Frühbeet beträgt mehr als 35°C"
fi

Während dieses Script läuft soll die am Anfang stehende LED blinken. Wenn ich das ganze allerdings per While-Schleife mache, dann komm ich ja nicht zu meinem eignentlichen Code.

Hatte das mal versucht:

Code:
#!/bin/sh
while true; do
 echo "1" > /sys/class/gpio/gpio17/value
 sleep 0.5;
 echo "0" > /sys/class/gpio/gpio17/value
 sleep 0.5;
done

Hat vielleicht jemand eine Lösung wie ich das in meinem Script gelöst bekomme?
 
Starte das 2. Skript welches blinkt in einem neuen Task und beende diesen wieder wenn dein Skript fertig ist.
 
Erstmal Danke für die Antwort. Ist nicht sehr elegant, aber es würde es tun.

Ein Script starten sollte nicht das Problem sein, aber wie beende ich es, wenn das erste beendet wird.
 
Wenn es einen erkennbaren Namen hat kannst du den Prozess einfach abschießen, was unter Linux natürlich per Konsole funktioniert.
zB ein ShellScript:
#!/bin/sh
/usr/bin/pkill meinProzessName
exit 0
 
Der Name sollte erkennbar sein. Dann müsste ich vorher den Prozess suchen.

Schöner wäre es irgendwie wenn es direkt in dem Script mit laufen könnte.
 
Vielleicht übersehe ich was, aber das Skript sieht so aus, als wäre das nach einem Wimpernschlag durchgelaufen. Mit welcher Frequenz soll die LED denn blinken solange das Skript durchläuft?
 
Im Prinzip soll die LED so lange blinken wie das Skript läuft. Es kommt darauf an, was ausgeführt wird. Sofern es Whagsapp verdickt und schalten muss läuft es auf dem Raspberry ca. 6 Sekunden ohne den Sleep. Also 11 gesamt.

Als Frequenz sollte alle 0.3 Sekunden an und aus gehen.

Ich würde das gerne haben, da der Raspberry im Ausengehe verbaut wird und ich den Status gerne anhand der LEDs erkennen möchte.

Übringends der Pkill Befehl funktioniert, wenn das Script das Blinkscript startet leider nicht. Komischerweise funktioniert er wenn ich es per Hand starte...
 
Du könntest dir auch die PID des blink-Scripts speichern und es dann später per kill abschießen:
Code:
./blink.sh &
pid=$!
kill $pid
In $! steht immer die PID des zuletzt ausgeführten Prozesses.
 
Zurück
Oben