Before
you start make sure that you have configured cacti installation.
To complete the project, you will need the following parts :
To complete the project, you will need the following parts :
- Raspberry Pi
- DS18B20 Digital temperature sensor(s)
- 4 .7K or 10K ohm resistor
- Jumper wire
I
used waterproof version of the DS18B20 the device has three leads:
red(VCC), black(GND) and yellow(DATA). Every seller may have
different variation of colors!
How
to connect sensor to your Raspberry Pi.
As
you can see sensor is NOT waterproof, but this is only for example!
Now
login in Raspberry Pi and open terminal. You can use ssh to operate
with Pi.
Type
these commands into a terminal window:
sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices
ls
cd 28-xxxx (change this to match what serial number pops up)
cat w1_slave
If
everything is OK, you will see current temperature.
I
have two sensors with
unique serial numbers for
my fireplace in/out water.
I
use this perl script,because
reading
the sensors on the command line with cat isn't very useful.
Script
is for ONLY ONE SENSOR!
#!/usr/bin/perl
$mods = `cat /proc/modules`;
if ($mods =~ /w1_gpio/ && $mods =~ /w1_therm/)
{
print "w1 modules already loaded \n";
}
else
{
print "loading w1 modules \n";
$mod_gpio = `sudo modprobe w1-gpio`;
$mod_them = `sudo modprobe w1-therm`;
}
$sensor_temp = `cat /sys/bus/w1/devices/10-*/w1_slave 2>&1`;
if ($sensor_temp !~ /No such file or directory/)
{
if ($sensor_temp !~ /NO/)
{
$sensor_temp =~ /t=(\d+)/i;
$tempreature = (($1/1000)-0); #You can fix your temp value.In this case is0
print "fireplace temp = $tempreature\n"; #Print fireplace temp as result
exit;
}
die "Error locating sensor file or sensor CRC was invalid";
}
Now
you need to install RRDtool archiving and graphing temperature
readings.
This command will install it.
This command will install it.
sudo apt-get install rrdtool
Then
create database to store readings.
pi@raspberrypi:~/rrdtool create fireplace.rrd --step 300 \
DS:temp:GAUGE:600:0:100 \
RRA:AVERAGE:0.5:1:12 \
RRA:AVERAGE:0.5:1:288 \
RRA:AVERAGE:0.5:12:168 \
RRA:AVERAGE:0.5:12:720 \
RRA:AVERAGE:0.5:288:365
A
shell script produces graphs.
#!/bin/bash
RRDPATH="/home/pi/temperature/"
RAWCOLOUR="#FF0000"
TRENDCOLOUR="#0000FF"
# Edited 2012/12/9 to add running averages to hourly and daily graphs
#hour
rrdtool graph $RRDPATH/hour.png --start -6h \
DEF:temp=$RRDPATH/fireplace.rrd:temp:AVERAGE \
CDEF:trend=temp,1800,TREND \
LINE2:temp$RAWCOLOUR:"Hourly Raspberry PI temperature" \
LINE1:trend$TRENDCOLOUR:"30 min average"
#day
rrdtool graph $RRDPATH/day.png --start -1d \
DEF:temp=$RRDPATH/fireplace.rrd:temp:AVERAGE \
CDEF:trend=temp,21600,TREND \
LINE2:temp$RAWCOLOUR:"Daily Raspberry PI temperature" \
LINE1:trend$TRENDCOLOUR:"6h average"
#week
rrdtool graph $RRDPATH/week.png --start -1w \
DEF:temp=$RRDPATH/fireplace.rrd:temp:AVERAGE \
LINE2:temp$RAWCOLOUR:"Weekly Raspberry PI temperature" \
#month
rrdtool graph $RRDPATH/month.png --start -1m \
DEF:temp=$RRDPATH/fireplace.rrd:temp:AVERAGE \
LINE1:temp$RAWCOLOUR:"Monthly Raspberry PI temperature" \
#year
rrdtool graph $RRDPATH/year.png --start -1y \
DEF:temp=$RRDPATH/fireplace.rrd:temp:AVERAGE \
LINE1:temp$RAWCOLOUR:"Yearly Raspberry PI temperature" \
To
run the perl sensor reading code and the graph generating script
every five minutes from a cron job.
# m h dom mon dow command
*/5 * * * * /home/pi/temperature/get_temp_one.pl
*/5 * * * * /home/pi/temperature/graph_temp_one.sh
Cacti can use external rrd files. I found very good tutorial to make it happen.
TUTORIAL: external rrd files in cacti
Aaand
final result
in cacti!
You
can download all need files from DROPBOX
get_temp_one.pl - script for ONE sensor
get_temp_multiple.pl – script for MULTIPLE sensors
graph_temp_one.sh – graph ONE sensor
graph_temp_multiple.sh – graph MULTIPLE sensor
create_rrd.sh – creates rrd file
createrrd_multi.sh - creates rrd file for multiple sensors
You can buy DS18B20 sensors from HERE