Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: ice 05. 06. 2015, 09:55:28

Název: Pomoc s shell script kodom
Přispěvatel: 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 (
Kód: [Vybrat]
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

Kód: [Vybrat]
#!/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
Název: Re:Pomoc s shell script kodom
Přispěvatel: Peter 05. 06. 2015, 10:17:25
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č.
Název: Re:Pomoc s shell script kodom
Přispěvatel: inotify 05. 06. 2015, 10:50:46
Pokud chapu spravne zadani, tak neco takoveho by mohlo fungovat:

Kód: [Vybrat]
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"
Název: Re:Pomoc s shell script kodom
Přispěvatel: inotify 05. 06. 2015, 10:58:49
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).
Název: Re:Pomoc s shell script kodom
Přispěvatel: Tuxik 05. 06. 2015, 11:30:32
Tohle by slo?

Kód: [Vybrat]
#!/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
Název: Re:Pomoc s shell script kodom
Přispěvatel: Tuxik 05. 06. 2015, 11:36:52
Kód: [Vybrat]
#!/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 :)
Název: Re:Pomoc s shell script kodom
Přispěvatel: ice 05. 06. 2015, 12:30:14
Tuxik: funguje to velmi pekne dakujem :)