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

Hur gör man för att ... ? Hur fungerar ... ? Steg för steg-guider och förklarande artiklar finns i detta forum.
Många guider finner också på vår blogg: https://blog.m.nu/
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5434
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

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

Inlägg 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.
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
jonas_j
Tar hemautomation på allvar
Inlägg: 138
Blev medlem: 18 nov 2006, 15:00
Ort: Åkers Styckebruk

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

Inlägg 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

Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5434
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

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

Inlägg 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?
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
jonas_j
Tar hemautomation på allvar
Inlägg: 138
Blev medlem: 18 nov 2006, 15:00
Ort: Åkers Styckebruk

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

Inlägg 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
Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5434
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

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

Inlägg av elf98 »

$j är en variabel som stegade upp...
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
jonas_j
Tar hemautomation på allvar
Inlägg: 138
Blev medlem: 18 nov 2006, 15:00
Ort: Åkers Styckebruk

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

Inlägg 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?
Senast redigerad av jonas_j den 24 apr 2012, 22:34, redigerad totalt 1 gånger.
Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5434
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

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

Inlägg 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.
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
jonas_j
Tar hemautomation på allvar
Inlägg: 138
Blev medlem: 18 nov 2006, 15:00
Ort: Åkers Styckebruk

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

Inlägg av jonas_j »

ok
jonas_j
Tar hemautomation på allvar
Inlägg: 138
Blev medlem: 18 nov 2006, 15:00
Ort: Åkers Styckebruk

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

Inlägg 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?
jonas_j
Tar hemautomation på allvar
Inlägg: 138
Blev medlem: 18 nov 2006, 15:00
Ort: Åkers Styckebruk

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

Inlägg 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
Skriv svar