Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: ice 05. 06. 2015, 09:55:28
-
Dobry den
Potreboval by som pomoct so shell scriptom. Ide oto ze potrebujem spravit aby dani kod zaslal pushbullet notifikaciu len pri zmene hodnoty v danom subore gpio (sys/class/gpio/gpio2/value/
, cize ak bude v danom subore 1 tak script vypise notifikaciu len raz a nebude ju vypisovat stale pokial sa vsak zmeni na 0 vyhodi to notifikaciu zase. Cize ide oto aby to vypisovalo len notifikaciu pri danej zmene z 0 na 1 alebo z 1 na 0 .
Vedel by mi niekto poradit ?
Dakujem
#!/bin/sh
while [ "1" = "1" ]
do
a=1 # Fixed value
b=0 # Fixed value - 1
page=$(cat /sys/class/gpio/gpio2/value)
echo "Temperature: $page"
if [ $page -ge $a ]
then
curl -u $API: https://api.pushbullet.com/v2/pushes -d type=note -d title="Zavlaha povolena je "$page"°C" -d body="$MSG"
echo "1"
elif [ $page -le $b ]
then
fi
sleep 30
done
-
Ak Ti správne rozumiem, tak chceš porovnávať ovsah premennej page s jej predchádzajúcou hodnotou. Zadefinuj si teda ďalšiu premennú, napr pageold a porovnaj to. V prípade zmeny môžeš teda vvypísať hodnotu, v opačnom pripade nemusíš vykonať nič.
-
Pokud chapu spravne zadani, tak neco takoveho by mohlo fungovat:
old=`cat ./testfile`;
while inotifywait -e MODIFY ./testfile 2>/dev/null >/dev/null ; do
now=`cat ./testfile`;
if [ "$now" != "$old" ]; then
echo "File content changed";
fi;
old=$now;
done
Predpokladam, ze na systemu je dostupny inotifywait (ve Fedore balicek inotify-tools) a ze sledovany soubor (testfile) existuje jeste pred spustenim "scriptu"
-
Tak bohuzel tohle fungovat nebude :(
z man 7 inotify: Furthermore, various pseudo-filesystems such as /proc, /sys, and /dev/pts are not monitorable with inotify.
V tom pripade me napade jen nahradit inotifywait za :; a vlozit do smycky nejaky rozumny sleep(1).
-
Tohle by slo?
#!/bin/sh
OLD_VALUE=$(cat /cesta/ke/sledovanymu/souboru)
NEW_VALUE=$OLD_VALUE
while true; do
sleep 1
NEW_VALUE=$(cat /cesta/ke/sledovanymu/souboru)
if [ $OLD_VALUE != $NEW_VALUE ]; then
echo Sem patri tvoje akce
OLD_VALUE=$NEW_VALUE
fi
done
-
#!/bin/sh
OLD_VALUE=$(cat value)
NEW_VALUE=$OLD_VALUE
while true; do
sleep 1
NEW_VALUE=$(cat value)
if [ $OLD_VALUE != $NEW_VALUE ]; then
OLD_VALUE=$NEW_VALUE
case $NEW_VALUE in
0)
echo Hodnota se zmenila na 0
;;
1)
echo Hodnota se zmenila na 1
;;
*)
echo Neplatny stav
;;
esac
fi
done
Nebo jeste takhle, at to je hezci :)
-
Tuxik: funguje to velmi pekne dakujem :)