Hallo meigrafd,habe jetzt einiges ausprobiert. Dein regain.sh skript ( alles markiert und reinkopiert) wirft mir folgende Fehlermeldung aus:
Codeawk: line 1: syntax error at or near print awk: line 1: syntax error at or near print awk: line 1: syntax error at or near print awk: line 1: syntax error at or near print
Liegt am awk-Aufruf im unteren Abschnitt. da ist Dir ein $-zeichen reingerutscht. Habe ich bei mir geändert. Soweit läufts jetzt. Habe Deine Versoin abgeänderte (wegen den GPIO-Nummern) die läuft irgendwie noch nicht rund...
Ahja Oke $print ... So hast du wenigstens auch was gemacht
Hier ist mein gheändertes Skript (nur der Teil mit den GPIO-Definitionen ist anders, der Rest Original)
Bash Alles anzeigen#!/bin/bash LOGFILE=/home/pi/aquarium/log/steuerung.log Relais="1 2 3 4 5" Steckdosen="1 2 3 4" for n in $Relais; do LastLine=$(grep "Relais $n" $LOGFILE | tail -1) LastDate=$(echo $LastLine | awk {'print $1'}) if [ "$LastDate" = "$(date "+%m%d%Y")" ]; then StatusText="Letzter Schaltzustand von relais $n ist von Heute ... und war: " if [ "$(echo $LastLine | awk {'print $6'})" = "eingeschaltet" ]; then Status=0 StatusText+="eingeschaltet" elif [ "$(echo $LastLine | awk {'print $6'})" = "ausgeschaltet" ]; then Status=1 StatusText+="ausgeschaltet" fi echo "$(date "+%m%d%Y %T") : $StatusText" >> $LOGFILE 2>&1 if [ $n = 1 ]; then GPIO=0 elif [ $n = 2 ]; then GPIO=2 elif [ $n = 3 ]; then GPIO=3 elif [ $n = 4 ]; then GPIO=12 elif [ $n = 5 ]; then GPIO=1 #elif [ $n = 6 ]; then # GPIO=4 #elif [ $n = 7 ]; then # GPIO=5 #elif [ $n = 8 ]; then # GPIO=6 fi sudo gpio write $GPIO $Status fi done for n in $Steckdosen; do LastLine=$(grep "Steckdose $n" $LOGFILE | tail -1) LastDate=$(echo $LastLine | awk {'print $1'}) if [ "$LastDate" = "$(date "+%m%d%Y")" ]; then StatusText="Letzter Schaltzustand von steckdose $n ist von Heute ... und war: " if [ "$(echo $LastLine | awk {'print $6'})" = "eingeschaltet" ]; then Status="-o $n" StatusText+="eingeschaltet" elif [ "$(echo $LastLine | awk {'print $6'})" = "ausgeschaltet" ]; then Status="-f $n" StatusText+="ausgeschaltet" fi echo "$(date "+%m%d%Y %T") : $StatusText" >> $LOGFILE 2>&1 sudo sispmctl $Status fi done
Wat is dat denn für eine Verunstaltung des Scripts?
Vielleicht kannt Du mal drüber scheuen ob das so passt, bzw. hast wieder eine tolle Idee was man da verbessern kann.
Du kannst 'Relais' zu einem Array machen und somit wäre dass dann auch flexibler bzw cooler Bedarf nur 3 kleinen Anpassungen.
Beispiel:
declare -A Relais
#format: Relais[<relais#>]=<gpio#>
Relais["1"]=0
Relais["2"]=2
Relais["3"]=3
Relais["4"]=12
Relais["5"]=1
for n in ${!Relais[*]}; do
LastLine=$(grep "Relais $n" $LOGFILE | tail -1)
LastDate=$(echo $LastLine | awk {'print $1'})
if [ "$LastDate" = "$(date "+%m%d%Y")" ]; then
StatusText="Letzter Schaltzustand von relais $n ist von Heute ... und war: "
if [ "$(echo $LastLine | awk {'print $6'})" = "eingeschaltet" ]; then
Status=0
StatusText+="eingeschaltet"
elif [ "$(echo $LastLine | awk {'print $6'})" = "ausgeschaltet" ]; then
Status=1
StatusText+="ausgeschaltet"
fi
echo "$(date "+%m%d%Y %T") : $StatusText" >> $LOGFILE 2>&1
sudo gpio write ${Relais[$n]} $Status
fi
done
Alles anzeigen