Differenze tra le versioni di "Rasberry PI Progetto "Rasberry Temperatura""

Da raspibo.
Jump to navigation Jump to search
(Pagina svuotata)
 
Riga 1: Riga 1:
Ciao a tutti , scrivo il primo WIKI della mia vita , spero di non fare troppi errori, in ogni caso, un grazie a Davide per le info iniziali
 
  
Volevo presentare il progetto a cui sto lavorando in questi ultimi giorni , anche lui il è mio primo Rasberry. E' uno dei tanti progetti per leggere la temperatura , però volevo propinarlo lo stesso.. Intanto presentato in italiano, poi a parte la gestione elettronica, che è molto semplice. Il tutto prevede di integrare nel rasberry; un server web , un gestore di grafici rrdtools , vari script in php + bash + python, perciò anche come "palestra" per imparare una qualche funzione mi sembra utile , personalmente mi sta dando parecchi spunti. Poi funziona e ottengo il grafico della temperatura di casa .
 
 
 
'''SCHEMA PROGETTO Rasberry Temperatura
 
----
 
'''
 
 
[[File:progetto.png|800px]]
 
 
Lo scopo è visualizzare l'andamento della temperatura nel tempo , e creare un grafico con gli RRDTOOL, poi esportare il tutto su un server web esterno , per poter visualizzare il tutto anche da fuori casa , in più è stato aggiunto un modulo per leggere la temperatura esterna dal servizio weather.noaa.gov.
 
 
Il "cuore" del sistema è l'integrato DS18B20
 
 
[[File:ds18b20.png]] Il principio di funzionamento e lo schema sono illustrati nella sezione [[1Wire e il sensore di temperatura ds18s10]]
 
 
E' obbligatoria la lettura che comprende anche i test per verificare che il sensore sia installato in modo corretto.
 
 
 
== HARDWARE ==
 
 
 
Lista componenti
 
*Rasberry PI versione B
 
*Chip DS18B20
 
*Resistenza 4,7 Kohm
 
#Collegare il pin1 (GND) del DS18B20 al pin 6 del GPIO Rasberry
 
#Collegare il pin2 (DQ) del DS18B20 al pin 7 GPIO4 del Rasberry
 
#Collegare il pin3 (VDD) del DS18B20 al pin 1 3,3V del GPIO Rasberry
 
#Collegare la resistenza 4,7 Kohm tra il piedino 2 e 3 del DS18B20
 
Schema connessioni
 
 
[[File:ds18s10.png]]
 
 
Questa è l'immagine del primo prototipo
 
[[File:prototipo.jpg|400px]]
 
 
Che poi si è evoluto in
 
[[File:jack.jpg| 400px]][[File:finale.jpg|500px]]
 
 
== SOFTWARE ==
 
*occorre che il rasberry abbia il "suo"sistema operativo già installato , la Raspbian Wheezy è perfetta.
 
*ricordo i test di funzionamento ( [[1Wire e il sensore di temperatura ds18s10]] )
 
*installiamo i moduli mancanti del sistema operativo
 
#sudo apt-get install libwww-perl
 
#sudo apt-get install python-paramiko
 
#sudo apt-get install rrdtool
 
#sudo apt-get install apache2 php5 libapache2-mod-php5
 
#sudo apt-get install ftp
 
*Creiamo una cartella dove andare a memorizzare i file degli script , i miei esempi fanno riferimento ad una cartella creata in /opt/dallas, ma non è vincolante ( DALLAS è l'iniziale della sigla DS18B20 la società che costruisce il componente NDR )
 
*creiamo il primo file chiamato create_db.sh , questo serve per creare e inizializzare il database "round robin" utilizzato da rrdtools
 
Io solitamente uso il "vi" ma ognuno utilizzi il suo "editor" preferito
 
* vi /opt/dallas/create_db.sh
 
 
#!/bin/bash
 
rrdtool create hometemp.rrd --start N --step 300 \
 
DS:temp:GAUGE:600:U:U \
 
DS:outtemp:GAUGE:600:U:U \
 
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
 
 
Ricordiamoci di renderlo eseguibile con:
 
chmod +x /opt/dallas/create_db.sh
 
 
*Creiamo il file create_graphs.sh questo script crea l'andamento giornaliero, settimanale, mensile e annuale sulla base dei dati memorizzati nel database rrdtool
 
 
vi /opt/dallas/create_graphs.sh
 
 
#!/bin/bash
 
DIR="/opt/dallas"
 
#set to C if using Celsius
 
TEMP_SCALE="C"
 
#define the desired colors for the graphs
 
INTEMP_COLOR="#CC0000"
 
OUTTEMP_COLOR="#0000FF"
 
#hourly
 
rrdtool graph $DIR/temp_hourly.png --start -4h \
 
DEF:temp=$DIR/hometemp.rrd:temp:AVERAGE \
 
AREA:temp$INTEMP_COLOR:"Inside Temperature [deg $TEMP_SCALE]" \
 
DEF:outtemp=$DIR/hometemp.rrd:outtemp:AVERAGE \
 
LINE1:outtemp$OUTTEMP_COLOR:"Outside Temperature [deg $TEMP_SCALE]"
 
#daily
 
rrdtool graph $DIR/temp_daily.png --start -1d \
 
DEF:temp=$DIR/hometemp.rrd:temp:AVERAGE \
 
AREA:temp$INTEMP_COLOR:"Inside Temperature [deg $TEMP_SCALE]" \
 
DEF:outtemp=$DIR/hometemp.rrd:outtemp:AVERAGE \
 
LINE1:outtemp$OUTTEMP_COLOR:"Outside Temperature [deg $TEMP_SCALE]"
 
#weekly
 
rrdtool graph $DIR/temp_weekly.png --start -1w \
 
DEF:temp=$DIR/hometemp.rrd:temp:AVERAGE \
 
DEF:outtemp=$DIR/hometemp.rrd:outtemp:AVERAGE \
 
AREA:temp$INTEMP_COLOR:"Inside Temperature [deg $TEMP_SCALE]" \
 
LINE1:outtemp$OUTTEMP_COLOR:"Outside Temperature [deg $TEMP_SCALE]"
 
#monthly
 
rrdtool graph $DIR/temp_monthly.png --start -1m \
 
DEF:temp=$DIR/hometemp.rrd:temp:AVERAGE \
 
DEF:outtemp=$DIR/hometemp.rrd:outtemp:AVERAGE \
 
AREA:temp$INTEMP_COLOR:"Inside Temperature [deg F]" \
 
LINE1:outtemp$OUTTEMP_COLOR:"Outside Temperature [deg F]"
 
#yearly
 
rrdtool graph $DIR/temp_yearly.png --start -1y \
 
DEF:temp=$DIR/hometemp.rrd:temp:AVERAGE \
 
DEF:outtemp=$DIR/hometemp.rrd:outtemp:AVERAGE \
 
AREA:temp$INTEMP_COLOR:"Inside Temperature [deg $TEMP_SCALE]" \
 
LINE1:outtemp$OUTTEMP_COLOR:"Outside Temperature [deg $TEMP_SCALE]"
 
#aggiorna server web locale
 
cp $DIR/*.png /var/www/.
 
#aggiorna server web esterno
 
#/opt/dallas/ftp_graphs.sh
 
rendiamo sempre il file eseguibile
 
 
chmod +x /opt/dallas/create_graphs.sh
 
 
Creiamo il file get_temp.pl questo è il fle che va a leggere i dati dal sensore , perciò nella riga
 
$output = `sudo cat /sys/bus/w1/devices/'''10-0008027acdab'''/w1_slave 2>&1`;
 
Occorre mettere il codice del vostro sensore DS , ricordo che i sensori sono serializzati, ogni sensore ha un codice diverso, e nella riga
 
my $metar_url = 'http://weather.noaa.gov/pub/data/observations/metar/stations/LIMP.TXT';
 
La sigla LIMP.TXT sta per Parma , ognuno poi metterà il codice della sua zona secondo la tabella di weather.noaa.gov, io ho messo PR , purtroppo Reggio non avendo aereoporto non è contemplata
 
 
vi /opt/dallas/get_temp.pl
 
 
#!/usr/bin/perl
 
use LWP::UserAgent;
 
my $dir = '/opt/dallas';
 
my $metar_url = 'http://weather.noaa.gov/pub/data/observations/metar/stations/LIMP.TXT';
 
my $is_celsius = 1; #set to 1 if using Celsius
 
my $ua = new LWP::UserAgent;
 
$ua->timeout(120);
 
my $request = new HTTP::Request('GET', $metar_url);
 
my $response = $ua->request($request);
 
my $metar= $response->content();
 
$metar =~ /([\s|M])(\d{2})\//g;
 
$outtemp = ($1 eq 'M') ? $2 * -1 : $2; #'M' in a METAR report signifies below 0 temps
 
$outtemp = ($is_celsius) ? $outtemp + 0 : ($outtemp * 9/5) + 32;
 
$modules = `cat /proc/modules`;
 
if ($modules =~ /w1_therm/ && $modules =~ /w1_gpio/)
 
{
 
        #modules installed
 
}
 
else
 
{
 
        $gpio = `sudo modprobe w1-gpio`;
 
        $therm = `sudo modprobe w1-therm`;
 
}
 
$output = "";
 
$attempts = 0;
 
while ($output !~ /YES/g && $attempts < 5)
 
{
 
        $output = `sudo cat /sys/bus/w1/devices/10-0008027d7cb0/w1_slave 2>&1`;
 
        if($output =~ /No such file or directory/)
 
        {
 
                print "Could not find DS18B20\n";
 
                last;
 
        }
 
        elsif($output !~ /NO/g)
 
        {
 
                $output =~ /t=(\d+)/i;
 
                $temp = ($is_celsius) ? ($1 / 1000) : ($1 / 1000) * 9/5 + 32;
 
                $rrd = `/usr/bin/rrdtool update /$dir/hometemp.rrd N:$temp:$outtemp`;
 
        }
 
        $attempts++;
 
}
 
$file = '/var/www/temperatura.txt';
 
open(INFO, ">$file");
 
print INFO "$temp\n";
 
close(INFO)
 
#print "Outside temp: $outtemp\n";
 
#print "Inside temp: $temp\n";
 
 
Rendiamo sempre eseguibile il file
 
 
chmod +x /opt/dallas/get_temp.pl
 
 
Andiamo a creare gli utimi 3 file, che però servono solo a traferire i dati su un server web esterno , utilizzando il protocollo ftp, questo script va utilizzato in abbinamento al file /root/.netrc . Nel file .netrc vengono memorizzati i dati di accesso all'aera ftp con la password in chiaro .
 
vi /root/.netrc
 
 
machine NOME.SERVER.FTP
 
login NOME_UTENTE
 
password PASSWORD_FTP_UTENTE
 
 
poi il comando chmod 0600 /root/.netrc
 
 
File contenente la lista dei file da trasferire
 
vi /opt/dallas/lista
 
 
prompt on
 
binary
 
mput *.png
 
 
E infine lo script per iniziare l'upload verso il sito esterno
 
vi /opt/dallas/ftp_graphs.sh
 
 
#!/bin/bash
 
cd /opt/dallas
 
ftp NOME.SERVER.FTP < lista
 
 
Rendere eseguibile il file con chmod +x /opt/dallas/ftp_graphs.sh
 
 
Ultimo file , va creato in /var/www è il file in php che genera la pagina web, da richiamare
 
 
vi /var/www/temperature.php
 
 
Questo file, lo allego in formato pdf temperature.pdf, essendo in formato php/html va in "contrasto" con il sistema wiki
 
[[File:temperature.pdf]]
 
 
== COLLAUDO ==
 
Ora eseguire nell'ordine i seguenti programmi
 
#/opt/dallas/create_db.sh
 
#/opt/dallas/get_temp.pl
 
#/opt/dallas/create_graphs.sh
 
#da un pc della rete htp://IP_RASBERRY/temperature.php
 
 
Se tutto OK , inserire nel crontab i 2 script , vedi questo come esempio
 
*/5 * * * * /opt/dallas/get_temp.pl
 
*/5 * * * * /opt/dallas/create_graphs.sh
 
 
e togliere il #dall'ultima riga di /opt/dallas/create_graphs.sh , per abilitare il trasferimento ftp verso il sito
 
 
 
== WORK IN PROGRESS ==
 
Tutto quello che ho scritto e realizzato  , è stato ispirato da varie letture e da questo progetto
 
http://blog.turningdigital.com/2012/09/raspberry-pi-ds18b20-temperature-sensor-rrdtool/
 
Manca ancora di tradurre un paio di scritte in Inglese e implementare ulteriori funzioni , tipo:
 
#modulo per Nagios
 
#allarmi di sovra/sotto temperatura a mezzo email , oppure chiudendo un contatto di un relè
 
#Oppure mi viene in mente come modulo di un eventuale controllo temperatura di un appartamento , controllabile da remoto
 
 
Qua link al "mio" http://www.ferrarini.info/temperature.php
 
 
le temperature negative , anomale per il periodo, erano le lettura di una stazione meterologica USA
 
 
ATTENZIONE a dove inserire il jack per il sensore di temperatura.
 
se guardate la foto , il "miO" jack stereo da 2,5" è finito proprio sopra il regolatore di tensione ... Io ho costruito 2 sonde una "corta" e una con un cavetto di 2 metri ( vedi foto ) . La sonda "corta" non funziona perchè il regolatore interno di tensione scalda il connettore metallico... Falsando le misure :(
 
 
[[File:sonde.jpg|300px]]
 
 
--[[Utente:Luca|Luca]] ([[Discussioni utente:Luca|discussioni]]) 00:16, 19 mar 2013 (CET)
 

Versione attuale delle 09:17, 19 mar 2013