Först och främst, resultatet (klicka på bilden för att få upp hela bilden): För att åstadkomma detta används flaggan --right-axis och --right-axis-label. Men för att få detta snyggt behöver man även räkna om en av linjerna så att den matchar den andra linjens skala. För att göra det lite enklare för mig har jag i följande skript fördefinierat den övre och undre temperaturgränsen (29 resp. 14°C).
Mitt skript förutsätter även ett par saker. T.ex. att man matar inte två argument, det första med namnet på rummet (kommer till det strax) och det andra argumentet är namnet på grafen. I mitt fall kan det se ut så här:
./room.sh bedroom3 "Lovisas rum"
Namnet på rummet fyller två syften, att hitta rätt rrd-fil samt att välja rätt datasource inom databasen. Mina temperaturfiler heter nämligen t_[rumsnamn].rrd och värmefilerna heter h_[rumsnamn].rrd. T.ex. t_bedroom3.rrd och h_bedroom3.rrd. Dessa innehåller alltid bara en datasource vars namn är samma som rumsnamnet. Nåväl, nog om det. Men det kan vara bra att känna till så att man lättare vet vad man ska ändra i filen.
Här kommer skriptet:
Kod: Markera allt
#!/bin/bash
# EDIT THESE VARIABLES
# Define these two minimum and maximum y-axis values as you see fit.
UPPERLIMIT=29
LOWERLIMIT=14
PATH_TO_RRDS=/home/pakerfeldt/rrd
OUTPUT_PATH=/var/www/graphs
if [ -z "$1" ]; then
echo "Supply room name as first argument"
exit 1
fi
if [ -z "$2" ]; then
echo "Supply graph name as second argument"
exit 1
fi
# These two are used to go from 0-100% scale (heat) to the temperature scale defined
# by the upper and lower limit
let SHIFT_LEFT=$LOWERLIMIT
SCALE_LEFT=$(printf '%3.3f\n' $(echo "scale=3; ($UPPERLIMIT-$LOWERLIMIT)/100" | bc -l))
# These two are used to go from lower and upper limit to 0-100% (right axis)
SCALE_RIGHT=$(printf '%3.3f\n' $(echo "scale=3; 100/15" | bc -l))
SHIFT_RIGHT=$(printf '%3.3f\n' $(echo "scale=3; ($SCALE_RIGHT*$UPPERLIMIT)-100" | bc -l))
rrdtool graph $OUTPUT_PATH/$1.png \
--height=480 --width=800 \
--color=BACK#FFFFFF \
--start end-1d --vertical-label "Temperatur (°C)" --title "$2" \
--upper-limit $UPPERLIMIT --lower-limit $LOWERLIMIT --rigid \
--right-axis $SCALE_RIGHT:-$SHIFT_RIGHT --right-axis-label="Värme (%)" \
DEF:temperature=$PATH_TO_RRDS/t_$1.rrd:$1:AVERAGE \
DEF:tempmax=$PATH_TO_RRDS/t_$1.rrd:$1:MAX \
DEF:heating=$PATH_TO_RRDS/h_$1.rrd:$1:AVERAGE \
CDEF:heatings=heating,$SCALE_LEFT,*,$SHIFT_LEFT,+ \
LINE2:temperature#9FEE00:"Temperatur\t" \
GPRINT:temperature:LAST:"Nu\: %6.1lf°C\t" \
GPRINT:temperature:AVERAGE:"Medel\: %6.1lf°C\t" \
GPRINT:temperature:MAX:"Max\: %6.1lf°C\t" \
GPRINT:temperature:MIN:"Min\: %6.1lf°C\\n" \
\
LINE2:heatings#FF0000:"Värme\t\t" \
GPRINT:heating:LAST:"Nu\: %6.0lf %%\t" \
GPRINT:heating:AVERAGE:"Medel\: %6.0lf %%\t" \
GPRINT:heating:MAX:"Max\: %6.0lf %%\t" \
GPRINT:heating:MIN:"Min\: %6.0lf %%\\n"