Hallo liebe Forengemeinschaft,
ich würde mich freuen, wenn ihr euch mein nachstehendes Script einmal ansehen und mir Verbesserungen mitteilen könntet. Zur Funktion:
Das Script stellt einen Timer dar, welcher per "Hand" den GPIO6 auf EIN setzt und nach einer einstellbaren Zeit (Beispiel 15 Minuten) den GPIO6 "automatisch" wieder auf AUS setzt. Darüber hinaus wollte ich die Möglichkeit haben, den Timer, also den GPIO6 jederzeit auf AUS setzen zu können. Das ist eigentlich schon alles. Die Abfrage des GPIO6 erfolgt alle 30 Sekunden, das ist für mich ausreichend. Das Script funktioniert soweit auch gut, kann den Timer ein-und jederzeit ausschalten oder die vorgegebene Zeit ablaufen lassen. Das kann aber, weil die beiden Schleifen nun ständig alle 30 Sekunden (auch wenn der Timer nicht eingeschaltet ist) durchlaufen, zu Störungen des zeitlichen Ablaufes führen, z.B. dann, wenn der GPIO z.B. in der Mitte eines AUS-Durchlaufes auf EIN gesetzt wird. Dann läuft nämlich nur noch die Restzeit ab. Wie gesagt, wäre echt nett, wenn jemand eine Lösung für mich hätte.
#!/bin/bash
Zeit=15
mwert="0"
while true; do
zahl=$(( $Zeit*9 ))
i=0
while [ $i -le $zahl ]; do
i=$[$i+1]
wert="$( gpio read 6 )"
if [ "$wert" = "1" ] && [ "$mwert" = "0" ]; then
echo "Timer EIN"
mwert="1"
fi
if [ "$wert" = "1" ]; then
sleep 6
fi
echo "$i"
if [ "$wert" = "0" ] && [ "$mwert" = "1" ]; then
break
fi
done
gpio write 6 0
if [ "$wert" = "0" ] && [ "$mwert" = "1" ]; then
echo "Timer AUS"
mwert="0"
fi
sleep 30
done
Alles anzeigen
Vielen Dank vorab
Meisengeier