Sida 1 av 1

DS2405 Dörrövervakning med mail tjänst.

Postat: 20 jul 2008, 18:58
av Plutonium
Hej.
Sitter och kodar ett shell script som skall övervaka entré dörren och det kommer att skicka ett sms till mig dörren låses upp på oönskad tid mm..

Dock har jag ett problem.
Nu är inte detta renskrivet skall väl tillläggas, men det funkar till stora drag förutom en sak :)
Variablern $TEST får helt fel värde, antingen blandar dom ihop sig eller så får jag ett sms med båda värden i.. Förstår inte riktigt hur detta är möjligt, dom ligger ju i en if sats där det är antingen eller (inte båda eller fel) som det är i mitt fall :)..

Kod: Markera allt

#!/bin/bash

# Mysql 
USER="1wire"
PASSWD="*****"
DB="1wire"
MYSQL="mysql -u $USER -p$PASSWD -D $DB -e"

# Första argumentet i funktionen är första ordet i filen (nytt värde)
function reagera {
        if [ ${1} -eq 0 ]; then

                echo "Låst"
	$MYSQL "INSERT INTO entredoor (status) VALUES ('låst')"
	
TEST="låst"
		
	else

               	echo "Upplåst!"
	$MYSQL "INSERT INTO entredoor (status) VALUES ('upplåst')"

TEST="upplåst"

        fi
 }


function smslarm {
if [ "$LARM_VALUE" -eq 1 ]; then

echo -e "subject:$(date)\n  Entre dörren är nu "$TEST | sendmail -f Vakt@Home.nu 07******@sms.comviq.se


fi
}

# Inte lämna skräfiler kvar
function cleanup {
        rm "$TEMPFIL"
        exit 0
}

# Första argumentet måste vara en fil
[ -z "$1" -o ! -f "$1" ] && echo "overvakning.sh <fil>" && exit 1

FIL=$1
TEMPFIL=$(tempfile)
 
# Hantera ^C och dylikt
trap cleanup SIGHUP SIGINT SIGTERM

cp "$FIL" "$TEMPFIL"

while /bin/true; do
# Kollar värdet sms alarm
   ROWS=`$MYSQL "SELECT value FROM settings WHERE setting='smsalarm'"`
   LARM_VALUE=$(echo $ROWS | cut -f2 -d' ')

# Se efter om den gamla kopian skiljer sig från den nuvarande filen
   diff -qs $FIL $TEMPFIL &>/dev/null
   [ $? -ne 0 ] && smslarm && reagera $(cat $FIL | cut -d " " -f 1)
   cp "$FIL" "$TEMPFIL"
   sleep 1
done

Jag får rätt värden i de andra variablarna, inga konstigheter alls.. Det är just $TEST variablern jag får fel hela tiden..

Någon som känner sig manad att hjälpa mig?

Re: DS2405 Dörrövervakning med mail tjänst.

Postat: 20 jul 2008, 19:18
av hanpa
Vad är syftet med de två olika testvariablerna? Du sätter visserligen bara den ena eller den andra i funktionen reagera men du nollställer ju aldrig variablerna så gamla värdet ligger ju kvar. Om du nu ska ha separata testvaribler för både öppning resp. stängning så borde du nollställa dem någonstans också, antingen i huvudloopen eller komplementärt i reagera.

Re: DS2405 Dörrövervakning med mail tjänst.

Postat: 20 jul 2008, 19:27
av Plutonium
Det bara blev så att jag använde 2st för att när dom hete samma funkade inte. Men tanken är ju att det skall heta samma.

Hur nollställer man en variabel?

Re: DS2405 Dörrövervakning med mail tjänst.

Postat: 20 jul 2008, 21:46
av hanpa
Du borde väl kunna ha en och samma testvariabel. Annars är det ju bara att nollställa via TEST="" eller t.o.m. bara TEST=

Re: DS2405 Dörrövervakning med mail tjänst.

Postat: 20 jul 2008, 23:02
av Plutonium
Har testat det också.. Resultatet blir på följande:

Värde = 1
låst
Upplåst!
Värder = 0
Upplåst
Låst
osv, alltså $TEST har värdet förväxlat mot verkligheten.
Förstår inte riktigt varför han gör detta men..