Sida 2 av 2

Re: Bygga ut och om. 1-wire med ASUS WL-500g Premium

Postat: 23 apr 2012, 22:04
av elf98
Ok, det där var nog bara slutet av filen.

Den här raden skickar ut temperaturen/rh-värdet:

Kod: Markera allt

   echo "$SNAME: $SVAL$append                     " > /tmp/1wire/uncached/$LCD/line20.$j
Scriptet loopar igenom alla anslutna sensorer och skriver ut dem en varsin rad.

Ganska typisk min kod när det är typ okommenterat. Tänkte väl inte när jag skrev koden att någon annan skulle labba med den 4-5 år senare... :) Det skrevs i bash då det inte var trivialt att få in något mer utvecklat språk som php i openwrt. Jag är rätt kass på Bash så det går nog att skriva effektivare och snyggare.

Re: Bygga ut och om. 1-wire med ASUS WL-500g Premium

Postat: 23 apr 2012, 22:12
av jonas_j
Hela koden:

Kod: Markera allt

root@TemperaturMonitor:~# nano /mnt/scripts/lcd.sh
  GNU nano 2.0.6                                                               File: /mnt/scripts/lcd.sh

#!/bin/sh
#Copyright Freiholtz Consulting 2008
YEARMONTH=`date +%Y%m`
SENS_NUM=0
CACHE=""
SENSORS=`cat /mnt/config.txt|grep SENSORS=|sed -e s/SENSORS=//|sed -e s/^M$//g`
SCREEN_WAIT=`cat /mnt/config.txt|grep SCREEN_WAIT=|sed -e s/SCREEN_WAIT=//|sed -e s/^M//g`

COUNT=1
while [ $COUNT -le $SENSORS ]; do
        #Hämta sensorns id och kontrollera att den existerar
        echo S$COUNT
        eval    S$COUNT=`cat /mnt/config.txt|grep S$COUNT=|sed -e s/S$COUNT=//|sed -e s/^M$//g`
        eval    S_NAME$COUNT=`cat /mnt/config.txt|grep "S_NAME$COUNT="|sed -e s/"S_NAME$COUNT="//|sed -e s/^M$//g`
        eval    S_TYPE$COUNT=`cat /mnt/config.txt|grep "S_TYPE$COUNT="|sed -e s/"S_TYPE$COUNT="//|sed -e s/^M$//g`
        if [ ! -d /tmp/1wire/$SID ]; then
                echo "SENSOR$COUNT kan inte hittas!"
                exit 1
        fi
        COUNT=`expr $COUNT + 1`
done

#Hämta LCD-displayens id
LCD=`cat /mnt/config.txt|grep LCD=|sed -e s/LCD=//|sed -e s/^M//g`

if [ ! -d /tmp/1wire/$LCD ]; then
        echo "Kan inte hitta LCD-displayen, är den ansluten?"
        exit 1
fi

#Se till att bakgrundsbelysningen är på, ändra till echo 0 > /tmp/1... för att stänga av bakgrundsbelysningen

echo 1 >/tmp/1wire/uncached/$LCD/backlight
 COUNT=1
#Huvudloop
while [ 1 -lt 2 ]
do
        #Variabel för att ta reda på hur lång tid det tar att läsa temperaturerna
        TIMER_READ_START=`date +%s`
        i=1
        COUNT2=$COUNT
        BROKE=0
        while [ $i -le 4 ]; do
                echo test$i
                eval SNAME="\$S_NAME$COUNT2"
                eval SID="\$S$COUNT2"
                eval STYPE="\$S_TYPE$COUNT2"
                if [ "$STYPE" == "TEMP" ]; then
                        echo "Läser sensor $COUNT2 - $SNAME (Temperatur)"
                        eval S_VAL$COUNT2=`cat /tmp/1wire/$CACHE/$SID/temperature|sed -e s/" "//g|awk '{$1=$1 + 0.05;printf "%.1f", $1}'`
                else
                        echo "Läser sensor $COUNT2 - $SNAME (Luftfuktighet)"
                        eval S_VAL$COUNT2=`cat /tmp/1wire/$CACHE/$SID/HIH4000/humidity|sed -e s/" "//g|awk '{$1=$1 + 0.5;printf "%.0f", $1}'`
                fi
                 COUNT2=`expr $COUNT2 + 1`

                if [ $COUNT2 -gt $SENSORS ] && [ $i -ne 4 ]; then
                        echo "Breaking!"
                        BROKE=$i
                        break
                fi

                 i=`expr $i + 1`

        done
        #Variabel för att beräkna tidsåtgång
        TIMER_READ_END=`date +%s`


        TIMEELAPSED=`expr $TIMER_READ_END - $TIMER_READ_START`
        echo $TIMEELAPSED
        sleep `expr $SCREEN_WAIT - $TIMEELAPSED`
        j=0
        while [ $j -le 3 ];do
                if [ $BROKE -ne 0 ] && [ `expr $j + 1` -gt $BROKE ]; then
                        echo "Broke, $j"
                        if [ "$j" == "3" ]; then
                                echo "Datum:",`date +%Y-%m-%d` >/tmp/1wire/$LCD/line20.1
                                echo "ap"
                        fi
                        if [ "$j" == "2" ]; then
                                echo "VP:              " `cat /tmp/power.txt|tail -n 1|sed -e s/".*="//`W"" >/tmp/1wire/$LCD/line20.3
                                echo "ap2"
                        fi
                        if [ "$j" == "1" ]; then
                                echo "2012-04-21          "> /tmp/1wire/$LCD/line20.2
                                echo "ap3"
                        fi
                else
                        echo "Val $j"
                        eval SNAME="\$S_NAME$COUNT"
                        eval STYPE="\$S_TYPE$COUNT"
                        eval SVAL="\$S_VAL$COUNT"
                        if [ $STYPE == "TEMP" ]; then
                                append="ß"
                        else
                                append="%"
                        fi
                        echo "$SNAME: $SVAL$append                     " > /tmp/1wire/uncached/$LCD/line20.
                fi
                COUNT=`expr $COUNT + 1`
                j=`expr $j + 1`

        done
        echo "COUNT=$COUNT"
        if [ $COUNT -ge $SENSORS ]; then
                COUNT=1
        fi
done


Re: Bygga ut och om. 1-wire med ASUS WL-500g Premium

Postat: 23 apr 2012, 22:22
av elf98
Nu vet jag inte hur skriptet ser ut orginal, men du verkar ha tagit bort eller ändrat när saker skrivs till rad 0 som är den första raden. Routerns ipnummer skrivs ut vid uppstart så man ska slippa leta reda på det.

Visas inte några temperaturer alls? Och är de i såfall konfade i konfigfilen?

Re: Bygga ut och om. 1-wire med ASUS WL-500g Premium

Postat: 23 apr 2012, 22:36
av jonas_j
elf98 skrev:Nu vet jag inte hur skriptet ser ut orginal, men du verkar ha tagit bort eller ändrat när saker skrivs till rad 0 som är den första raden. Routerns ipnummer skrivs ut vid uppstart så man ska slippa leta reda på det.

Visas inte några temperaturer alls? Och är de i såfall konfade i konfigfilen?
Visas inget. Innan angavs inte radnummer utan "$j"
Koden jag klippt in är bara ändrad just kring de tre raderna som har en else ap, ap1, ap2

Re: Bygga ut och om. 1-wire med ASUS WL-500g Premium

Postat: 23 apr 2012, 22:42
av elf98
$j är en variabel som stegade upp...

Re: Bygga ut och om. 1-wire med ASUS WL-500g Premium

Postat: 24 apr 2012, 22:27
av jonas_j
Fick återställa orginalfilen, lcd.sh för att få in tempen igen. Vet inte vad jag kommit åt...

Att få det på de rader jag vill är motigt. Får bara till följande
Ute: 2°C
Inne: 21°C
Hus: 1250W, VP: 120W
Datum: 2012-04-24

Jag lyckas alltså inte få ute och inne på samma rad. Jag lyckas heller inte klura ut vad jag skriver för att få lite mer info från funktionen date.

Kod: Markera allt

date +%Y-%m-%d
ger: "2012-04-24"
Hur får jag dit veckodag, timmar och minuter? Skriver jag bara date får jag ut för mkt (sekunder och CEST 2012)

Edit: testade lite mer...

Kod: Markera allt

+%Y-%m-%d" "%H:%M
verkar funka och ger: 2012-04-24 22:33
Hur hittar jag veckodag?

Re: Bygga ut och om. 1-wire med ASUS WL-500g Premium

Postat: 24 apr 2012, 22:33
av elf98
http://unixhelp.ed.ac.uk/CGI/man-cgi?date ger dig all info om date du behöver.

Scriptet var aldrig tänkt att modifieras av användaren, eller ens att någon skulle titta på det... Därav den totala avsaknaden av kommentarer.

Re: Bygga ut och om. 1-wire med ASUS WL-500g Premium

Postat: 24 apr 2012, 22:34
av jonas_j
ok

Re: Bygga ut och om. 1-wire med ASUS WL-500g Premium

Postat: 16 okt 2012, 23:03
av jonas_j
Då var jag på det igen efter månader av uppehåll. Jag har äntligen kopplat in LED-räknaren och den tycks fungera men bara så långt att jag ser att den tickar upp med:

Kod: Markera allt

grep . /tmp/1wire/1D*/counters.ALL
att sen få någon beräkning att ske på detta tycks inte gå
det tycks inte längre skapas någon \tmp\power.txt

koden som ska göra beräkningen

Kod: Markera allt

root@TemperaturMonitor:~# /mnt/scripts/power_calc.sh
LAST_COUNTER=1350419102
expr: non-numeric argument
COUNT_DIFF=
expr  / 1000 + 43538,09
awk: cmd. line:1: Division by zero
Mätarställningen är  kWh
SL: 2012-10-16 22:21,,1350418885 LC: 1350419102 - LC2_ 1350418885
COUNT_DIFF=217
TIME_DIFF = -
awk: cmd. line:1: Division by zero
Nuvarande effektuttag är:  W
parameter "LAST_COUNTER" stegar inte upp... Vad missar jag?

Re: Bygga ut och om. 1-wire med ASUS WL-500g Premium

Postat: 16 okt 2012, 23:25
av jonas_j
power_sum.sh

Kod: Markera allt

root@TemperaturMonitor:~# vi /mnt/scripts/power_sum.sh
#!/bin/sh
LOGTIME=`date '+%Y-%m-%d %H:%M'`
sleep 30
MATARE=`cat /tmp/power.txt|head -n1|sed -e s/MATARSTALLNING=//|awk '{$1=$1 + 0.5;printf "%d", $1}'`

echo "$LOGTIME $MATARE<br>" >> /mnt/log/matar.htmll
power_calc.sh

Kod: Markera allt

root@TemperaturMonitor:~# vi /mnt/scripts/power_calc.sh
#!/bin/sh
YEARMONTH=`date +%Y%m`
TIME=`date +%H:%M`
TIMESTAMP=`date +%s`
LOGTIME=`date '+%Y-%m-%d %H:%M'`
IF="/mnt/log/counter-$YEARMONTH.log"
LAST=`tail -n1 $IF`
SECOND_LAST=`tail -n2 $IF|head -n1`

ENERGI_TID=`cat /mnt/config.txt|grep ENERGI_TID=|sed -e s/ENERGI_TID=//|sed -e s
ENERGI_COUNT=`cat /mnt/config.txt|grep ENERGI_COUNT=|sed -e s/ENERGI_COUNT=//|se
ENERGI_MATARE=`cat /mnt/config.txt|grep ENERGI_MATARE=|sed -e s/ENERGI_MATARE=//
ENERGI_PULSE=`cat /mnt/config.txt|grep ENERGI_PULSE=|sed -e s/ENERGI_PULSE=//|se



#Mätarställningen:
LAST_COUNTER=`echo $LAST|sed -e s/,/" "/g|awk '$0=$3'`
echo "LAST_COUNTER=$LAST_COUNTER"
COUNT_DIFF=`expr $LAST_COUNTER - $ENERGI_COUNT`
echo "COUNT_DIFF=$COUNT_DIFF"
echo "expr $COUNT_DIFF / 1000 + $ENERGI_MATARE"
MATARSTALLNING=` echo "$COUNT_DIFF $ENERGI_MATARE $ENERGI_PULSE"| awk '{$1=$1 /
- /mnt/scripts/power_calc.sh 1/40 2%
#!/bin/sh
YEARMONTH=`date +%Y%m`
TIME=`date +%H:%M`
TIMESTAMP=`date +%s`
LOGTIME=`date '+%Y-%m-%d %H:%M'`
IF="/mnt/log/counter-$YEARMONTH.log"
LAST=`tail -n1 $IF`
SECOND_LAST=`tail -n2 $IF|head -n1`

ENERGI_TID=`cat /mnt/config.txt|grep ENERGI_TID=|sed -e s/ENERGI_TID=//|sed -e s/^M$//g`
ENERGI_COUNT=`cat /mnt/config.txt|grep ENERGI_COUNT=|sed -e s/ENERGI_COUNT=//|sed -e s/^M$//g`
ENERGI_MATARE=`cat /mnt/config.txt|grep ENERGI_MATARE=|sed -e s/ENERGI_MATARE=//|sed -e s/^M$//g`
ENERGI_PULSE=`cat /mnt/config.txt|grep ENERGI_PULSE=|sed -e s/ENERGI_PULSE=//|sed -e s/^M$//g`



#Mätarställningen:
LAST_COUNTER=`echo $LAST|sed -e s/,/" "/g|awk '$0=$3'`
echo "LAST_COUNTER=$LAST_COUNTER"
COUNT_DIFF=`expr $LAST_COUNTER - $ENERGI_COUNT`
echo "COUNT_DIFF=$COUNT_DIFF"
echo "expr $COUNT_DIFF / 1000 + $ENERGI_MATARE"
MATARSTALLNING=` echo "$COUNT_DIFF $ENERGI_MATARE $ENERGI_PULSE"| awk '{$1=$1 / $3 + $2 ;printf "%.1f", $1}'`

echo "Mätarställningen är $MATARSTALLNING kWh"

#Nuvarande förbrukning
LAST_COUNTER2=`echo $SECOND_LAST|sed -e s/,/" "/g|awk '$0=$3'`
TS1=`echo $LAST|sed -e s/,/" "/g|awk '$0=$4'`
TS2=`echo $SECOND_LAST|sed -e s/,/" "/g|awk '$0=$4'`
echo "SL: $SECOND_LAST LC: $LAST_COUNTER - LC2_ $LAST_COUNTER2"
COUNT_DIFF=`expr $LAST_COUNTER - $LAST_COUNTER2`
echo "COUNT_DIFF=$COUNT_DIFF"
TIME_DIFF=`expr $TS1 - $TS2`
echo "TIME_DIFF = $TIME_DIFF"
CURR_POWER=`echo "$COUNT_DIFF $TIME_DIFF $ENERGI_PULSE"|awk '{$1=$1 / $2 * 1000 / $3 * 3600; printf "%.0f", $1}'`
echo "Nuvarande effektuttag är: $CURR_POWER W"

echo "MATARSTALLNING=$MATARSTALLNING" > /tmp/power.txt
echo "NUVARANDE_EFFEKT=$CURR_POWER" >> /tmp/power.txt