Andreas @ MadFlex

Create Plots using rrdtool

written on Nov 20, 2011

Next step for my humidity logger is to get nice plots. Here rrdtool seems to be the tool of choice.

First create a few rrd-files. For example:

rrdtool create humidity.rrd --step 30 \
  DS:humidity:GAUGE:120:0:100 \
  RRA:AVERAGE:0.5:1:1200 \
  RRA:MIN:0.5:12:2400 \
  RRA:MAX:0.5:12:2400 \
  RRA:AVERAGE:0.5:12:2400

With update every 30 seconds, a GAUGE value from 0 to 100. Additional calculating average, minimum and maximum of the humidity value.

Adding new values for the plot in python using python-rrdtool.

def log_to_rrd(data):
  values = json.loads(data)
  dt = time.mktime(datetime.datetime.now().timetuple())

  ret = rrdtool.update('humidity.rrd','%d:%f' %
                       (dt, values.get('humidity')))
  if ret:
      print rrdtool.error()

And build a plot for one day:

def graph():
    ret = rrdtool.graph( fn, "--start", "-1d",
                         "--lower-limit=0",
                         "--title=Humidity",
                         "--vertical-label=-" + str(cnt) + str(size),
                         "DEF:hum=humidity.rrd:humidity:AVERAGE",
                         "LINE1:hum#0000FF:Humidity\\r",
                         "COMMENT:\\n",
                         "GPRINT:hum:AVERAGE:Avg Humidity\: %2.2lf%S%%",
                         "COMMENT:    ",
                         "GPRINT:hum:MAX:Max Humidity\: %2.2lf%S%%\\r")

Final example (with humidity, temperature and calculated dew point):

rrdtool example

This entry was tagged arduino, linux and rrdtool


blog comments powered by Disqus