Differenze tra le versioni di "Termostato"
Riga 49: | Riga 49: | ||
sudo apt-get install nginx php5-fpm php5-cli php5-curl php5-cgi php-pear php5-gd | sudo apt-get install nginx php5-fpm php5-cli php5-curl php5-cgi php-pear php5-gd | ||
− | == | + | == Lettura sensori e salvataggio su redis == |
+ | |||
+ | Per la lettura si utilizza uno script in bash: | ||
+ | |||
+ | #!/bin/bash | ||
+ | sensori[0]='28-000004052c94' | ||
+ | sensori[1]='28-0000040520d3' | ||
+ | |||
+ | #controllo che lo script venga lanciato con 1 parametro | ||
+ | if [ $# != 1 ] | ||
+ | then | ||
+ | echo -n "Lancia lo script: $0 [all" | ||
+ | for i in "${sensori[@]}" | ||
+ | do | ||
+ | echo -n "|$i" | ||
+ | done | ||
+ | echo ']' | ||
+ | else | ||
+ | if [ $1 == "all" ] # Se lanciato con il parametro all visualizza la lettura di tutti i sensori | ||
+ | then | ||
+ | for i in "${sensori[@]}" | ||
+ | do | ||
+ | $0 $i | ||
+ | done | ||
+ | else | ||
+ | sensore=$1 | ||
+ | |||
+ | for x in 1 2 3 4 | ||
+ | do | ||
+ | lettura=`paste -s /sys/bus/w1/devices/${sensore}/w1_slave | grep YES` # esegue la lettura verificando il CRC | ||
+ | # echo $? | ||
+ | # echo lettura | ||
+ | if [ $? == 0 ] | ||
+ | then temp=$lettura; break | ||
+ | else temp='ERR' ; break | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | temperatura=`echo $temp | paste -s | awk -F "=" '{print $3/1000}'` | ||
+ | |||
+ | echo $temperatura | ||
+ | fi | ||
+ | fi | ||
+ | |||
+ | |||
+ | == Configurazione | ||
== Screen shoot == | == Screen shoot == |
Versione delle 16:16, 23 mar 2013
Le applicazioni dei termostati sono svariate, in questo caso partiamo con la realizzazione di un termostato per il controllo della caldaia di casa che può comunque essere ampliato con sensori o attuatori aggiuntivi ad esempio per il controllo del condizionatore.
Per rendere il termostato più flessibile la gestione è modulare perciò i dati vengono salvati su [1]redis per la sua velocità, e la possibilità di sincronizzazione master/slave.
Per rendere più facile la gestione viene utilizzata una interfaccia web implementata sul server web [2]nginx con [3]php e librerie [4]Flotr2 per la rappresentazione grafica dei dati.
Schema di massima
Sensori utilizzati
Per la misura della temperatura si possono uitlizzare i sensori DALLAS vedi voce Raspberry Pi-Lettura Temperatura per la semplicità d'uso, la possibilità di collegamento su un bus digitale in modo da usare pochi pin del GPIO.
Questi sensori utilizzano un pin del gpio, possono essere collegati su bus lineare o a stella la lunghezza massima del collegamento arriva a 200 metri.
Possono essere utilizzati anche altri sensori grazie alla modularità del sistema basta infatti che i dati vengano inseriti in redis.
Installazione del software
Innanzitutto modificare il file /etc/modules inserendo i moduli per la gestioe del bus 1 wire:
echo 'wire' >> /etc/modules echo 'w1_gpio' >> /etc/modules echo 'w1_therm' >> /etc/modules
Riavviare il Raspberry ed installare i sensori.
Al riavvio nella dir /sys/bus/w1/devices/ si trovano i files relativi ai sensori:
root@raspberrypi:~/termostato# ls -l /sys/bus/w1/devices/ totale 0 drwxr-xr-x 2 root root 0 mar 21 21:33 ./ drwxr-xr-x 4 root root 0 mar 21 21:33 ../ lrwxrwxrwx 1 root root 0 mar 21 21:33 28-0000040520d3 -> ../../../devices/w1_bus_master1/28-0000040520d3/ lrwxrwxrwx 1 root root 0 mar 21 21:33 28-000004052c94 -> ../../../devices/w1_bus_master1/28-000004052c94/ lrwxrwxrwx 1 root root 0 mar 21 21:38 w1_bus_master1 -> ../../../devices/w1_bus_master1/
Si può procedere all'installazione vera e propria del software:
il server redis per la memorizzazione dei dati
sudo apt-get install redis-server bc
il comando elink per la lettura della temperatura esterna da inernet
sudo apt-get install elinks
il software per la gestione via web
sudo apt-get install nginx php5-fpm php5-cli php5-curl php5-cgi php-pear php5-gd
Lettura sensori e salvataggio su redis
Per la lettura si utilizza uno script in bash:
#!/bin/bash sensori[0]='28-000004052c94' sensori[1]='28-0000040520d3'
#controllo che lo script venga lanciato con 1 parametro if [ $# != 1 ] then echo -n "Lancia lo script: $0 [all" for i in "${sensori[@]}" do echo -n "|$i" done echo ']' else if [ $1 == "all" ] # Se lanciato con il parametro all visualizza la lettura di tutti i sensori then for i in "${sensori[@]}" do $0 $i done else sensore=$1 for x in 1 2 3 4 do lettura=`paste -s /sys/bus/w1/devices/${sensore}/w1_slave | grep YES` # esegue la lettura verificando il CRC # echo $? # echo lettura if [ $? == 0 ] then temp=$lettura; break else temp='ERR' ; break fi done temperatura=`echo $temp | paste -s | awk -F "=" '{print $3/1000}'` echo $temperatura fi fi
== Configurazione