Online teplomery

Z HKfree wiki
Skočit na navigaci Skočit na vyhledávání

Online teplomery v HKFfree

Slatina

Svinary

Kukleny

OliAP - centrum města

Labská I

Orca AP - Prazske predmesti

AP Winterova

Jak postavit teplomer

soucastky sezenete vsude mozne (GES apod) cca za 20-40Kc, cidla se daji objednat jako vzorky zdarma na http://www.maxim-ic.com/ (chce to zvladat aspon zaklady anglictiny)

Jak vypisovat hodnoty do grafu (rrdtool)

Asi by to nekoho mohlo zajimat, tak se pokusim sem sepsat dva, tri skripty ktery zajistuji vykreslovani hodnoty teploty do grafu...

Dostudoval jsem pridavani dalsich cidel do jednoho grafu, takze popisu jak na to. Vse je tedy staveno na dve cidla v jednom grafu.

Predpokladame ze mame nainstalovan digitemp Nejprve si vytvorime databazi rrd, je jedno kde.

#!/bin/sh
rrdtool create teplota.rrd -s 60 \
        DS:teplota:GAUGE:600:U:U  \ #prvni cidlo
        DS:teplota2:GAUGE:600:U:U \ #druhe cidlo
        RRA:AVERAGE:0.5:1:600 \
        RRA:AVERAGE:0.5:6:700 \
        RRA:AVERAGE:0.5:24:775 \
        RRA:AVERAGE:0.5:288:797 \
        RRA:MIN:0.5:1:600 \
        RRA:MIN:0.5:6:700 \
        RRA:MIN:0.5:24:775 \
        RRA:MIN:0.5:288:797 \
        RRA:MAX:0.5:1:600 \
        RRA:MAX:0.5:6:700 \
        RRA:MAX:0.5:24:775 \
        RRA:MAX:0.5:288:797

Jako dalsi bude potreba skript, ktery nam bude cist hodnotu z digitempu a bude nam ji ukladat do rrd databaze

#!/bin/sh
RRDTOOL=/usr/bin/rrdtool   #cesta k rrdtoolu
RRD=/root/temp/digitemp-3.3.2/rrd/teplota.rrd   #cesta k databazovemu souboru
START=`date +%s`

cd /root/temp/digitemp-3.3.2   #kvuli zmene adresare pro spousteni digitempu 
                               #absolutni cesta mi hazi chyby, nechapu... kazdy podle sebe)

        TEMP1=`./digitemp_DS9097 -q -t0 -o"%.2C"`  #precteni hodnoty prvniho cidla(2 desetinna cisla)
        TEMP2=`./digitemp_DS9097 -q -t1 -o"%.2C"`  #precteni hodnoty druheho cidla(2 desetinna cisla)
        $RRDTOOL update $RRD "$START:$TEMP1:$TEMP2"   #ulozeni do rrd databaze obou promennych

a nyni uz muzeme vesele generovat grafy

#!/bin/sh
DATE=`date +%a`" "` date +%F`" "`date +%R` #promenna s datumem a casem do hlavicek grafu
WIDTH=600
HEIGHT=250
RRDTOOL=/usr/bin/rrdtool
STATS_DIR=/root/temp/digitemp-3.3.2/rrd
TEMP_STATS="$STATS_DIR/teplota.rrd"
TEMP_GRAPH1="$STATS_DIR/temp1h.png"
TEMP_GRAPH6="$STATS_DIR/temp6h.png"
TEMP_GRAPH24="$STATS_DIR/temp1d.png"
TEMP_GRAPH1W="$STATS_DIR/temp1w.png"
TEMP_GRAPH1M="$STATS_DIR/temp1m.png"
TEMP_GRAPH1Y="$STATS_DIR/temp1y.png"

$RRDTOOL graph $PLOSS_GRAPH1 \
    --title "Teplota Markova - posledni 1 hodina ($DATE)" \
    --start 'end-1h' \
    --end   'now-1min' \
    --unit '°C' \
    --alt-autoscale \
    --vertical-label '°C' \
    --imgformat     'PNG' \
    --width=$WIDTH \
    --height=$HEIGHT \
    "DEF:temp1=$PLOSS_STATS:teplota:AVERAGE" \
    "DEF:temp2=$PLOSS_STATS:teplota2:AVERAGE" \
    "CDEF:mtemp1=temp1,1,*" \
    "CDEF:mtemp2=temp2,1,*" \
    "LINE2:mtemp1#ff0000:Teplota venku" \
    "GPRINT:mtemp1:MIN:(min\\: %.1lf°C" \
    "GPRINT:mtemp1:AVERAGE:avg\\: %.1lf°C" \
    "GPRINT:mtemp1:MAX:max\\: %.1lf°C" \
    "GPRINT:mtemp1:LAST:current\\: %.1lf°C)\\n" \
    "LINE2:mtemp2#008000:Teplota puda " \
    "GPRINT:mtemp2:MIN:(min\\: %.1lf°C" \
    "GPRINT:mtemp2:AVERAGE:avg\\: %.1lf°C" \
    "GPRINT:mtemp2:MAX:max\\: %.1lf°C" \
    "GPRINT:mtemp2:LAST:current\\: %.1lf°C)\\n"


$RRDTOOL graph $PLOSS_GRAPH6 \
    --title "Teplota Markova - posledni 6 hodin ($DATE)" \
    --start 'end-6h' \        #receno do kdy zpet se maji grafy tvorit
    --end   'now-1min' \
    --unit '°C' \
    --alt-autoscale \
    --vertical-label '°C' \
    --imgformat     'PNG' \
    --width=$WIDTH \
    --height=$HEIGHT \
    "DEF:temp1min=$PLOSS_STATS:teplota:MIN" \
    "DEF:temp1max=$PLOSS_STATS:teplota:MAX" \
    "DEF:temp1avg=$PLOSS_STATS:teplota:AVERAGE" \
    "DEF:temp2min=$PLOSS_STATS:teplota2:MIN" \
    "DEF:temp2max=$PLOSS_STATS:teplota2:MAX" \
    "DEF:temp2avg=$PLOSS_STATS:teplota2:AVERAGE" \
    "CDEF:mtemp1min=temp1min,1,*" \
    "CDEF:mtemp1max=temp1max,1,*" \
    "CDEF:mtemp1avg=temp1avg,1,*" \
    "CDEF:mtemp2min=temp2min,1,*" \
    "CDEF:mtemp2max=temp2max,1,*" \
    "CDEF:mtemp2avg=temp2avg,1,*" \
    "CDEF:mtemp1mindraw=mtemp1min,1,*" \
    "CDEF:mtemp1maxdraw=mtemp1max,1,*" \
    "CDEF:mtemp1avgdraw=mtemp1avg,1,*" \
    "CDEF:mtemp2mindraw=mtemp2min,1,*" \
    "CDEF:mtemp2maxdraw=mtemp2max,1,*" \
    "CDEF:mtemp2avgdraw=mtemp2avg,1,*" \
    "AREA:mtemp1maxdraw#ffc0c0:\\g" \
    "LINE1:mtemp1maxdraw#a0a0a0:\\g" \
    "AREA:mtemp1mindraw#ffffff:\\g" \
    "LINE1:mtemp1mindraw#a0a0a0:\\g" \
    "LINE2:mtemp1avgdraw#ff0000:Teplota venku" \
    "GPRINT:mtemp1min:MIN:(min\\: %.1lf°C" \
    "GPRINT:mtemp1avg:AVERAGE:avg\\:%.1lf°C" \
    "GPRINT:mtemp1max:MAX:max\\: %.1lf°C)\\n" \
    "AREA:mtemp2maxdraw#c0ffc0:\\g" \
    "LINE1:mtemp2maxdraw#a0a0a0:\\g" \
    "AREA:mtemp2mindraw#ffffff:\\g" \
    "LINE1:mtemp2mindraw#a0a0a0:\\g" \
    "LINE2:mtemp2avgdraw#008000:Teplota puda " \
    "GPRINT:mtemp2min:MIN:(min\\: %.1lf°C" \
    "GPRINT:mtemp2avg:AVERAGE:avg\\:%.1lf°C" \
    "GPRINT:mtemp2max:MAX:max\\: %.1lf°C)\\n"
#pro vice grafu napr 24h, 1week, 1month, 1year staci rozkopirovat a 
#upravit hlavicku grafu a do kdy se maji grafy tvorit.

/usr/bin/convert -geometry 20% $STATS_DIR/temp1w.png $STATS_DIR/thumb-temp1w.png  #zmenseni obrazku pro nahled
cp $STATS_DIR/thumb-temp1w.png /var/www/hotsanic/teplota
cp $STATS_DIR/temp1h.png /var/www/hotsanic/teplota
cp $STATS_DIR/temp6h.png /var/www/hotsanic/teplota
cp $STATS_DIR/temp1d.png /var/www/hotsanic/teplota
cp $STATS_DIR/temp1w.png /var/www/hotsanic/teplota
cp $STATS_DIR/temp1m.png /var/www/hotsanic/teplota
cp $STATS_DIR/temp1y.png /var/www/hotsanic/teplota

Ted uz jen podle sveho gusta uvlozit do crontab patricne radky

*/1 * * * * root /root/temp/digitemp-3.3.2/temp.sh
*/10 * * * * root /root/temp/digitemp-3.3.2/rrd/diagrams.sh

Hodnoty jdou do minusu uplne v pohode. Uvitam dalsi vylepseni od ostatnich. Jedna vec, ktera se asi neda odstranit je ze kdyz spadne teplota pod nulu, graf se nakresli, ale "oblak" minimalnich a maximalnich nodnot neni cerveny ci zeleny ale bily.. je to proto, ze AREA se bere vzdy k ose "0" a pokud je definovano ze max AREA je cervena a MIN area je bila, je rozdil mezi MAX/MIN cerveny a pod MIN je oblast bila... ale pokud padne hodnota do zaporu, pomery se otoci a je vse bile... Viz moje grafy na Markovce Grafy Markova