- electronica
- gnulinux
Monitorizar la temperatura desde Raspberry Pi
En este pequeño tutorial os voy a enseñar como monitorizar la temperatura de una habitación con sólo una Raspberry Pi, un sensor de temperatura DS18S20 y un poco de software.
Vamos a utilizar Emoncms, del que ya os he hablado anteriormente, instalarlo es realmente fácil, no tengáis miedo de seguir estas instrucciones, enseguida lo tendréis funcionando.
El siguiente paso va a ser conectar a la Raspberry Pi el sensor DS18S20+, podéis pedir una muestra gratuita a Maxim Integrated. El sensor se conecta usando los pines que tenemos disponibles en la RPi. Para conectarlo hay que seguir el siguiente esquema:
Es muy sencillo de conectar utilizando unos conectores para jumpers, yo he reciclado los que venían para la placa base de un PC de sobremesa antiguo, los que la conectan con los LEDs y los botones de encender y reiniciar.
El siguiente paso es poner en marcha una aplicación que recoja la temperatura del sensor y la envíe al servidor EmonCMS. Para ello voy a utilizar Python, un lenguaje interpretado muy sencillo que se utiliza mucho en la comunidad Raspberry Pi. El acceso al sensor se realiza a través de un driver que nos proporciona ya nuestra distribución de Raspbian.
El siguiente código es plenamente funcional, aunque posiblemente algo espartano, es necesario que añadáis vuestra apikey de Emoncms, la encontraréis entrando a vuestro servidor Emoncms, en la ruta /emoncms/input/api, hay que elegir la ”Read & Write:” puesto que vamos a escribir los valores.
También podéis modificar cada cuanto tiempo queréis que se envíen los datos, en este caso cada 10 segundos, pero es posible modificar la línea “time.sleep(10)” por el número de segundos que queráis.
import os import glob import time import urllib2, httplib
os.system('sudo modprobe wire')
os.system('sudo modprobe w1-gpio')
os.system('sudo modprobe w1-therm')
base_dir = '/sys/bus/w1/devices'
f = open(base_dir + '/w1_bus_master1/w1_master_slave_count', 'r')
sensorCount = f.readlines()
sensorCount = [int(l[0]) for l in sensorCount]
f.close()
f = open(base_dir + '/w1_bus_master1/w1_master_slaves', 'r')
devices = f.readlines()
f.close()
def read_temp_raw(sensor):
device_file = base_dir + '/' + devices[sensor][:-1] + '/w1_slave'
f = open(device_file, 'r')
lines = f.readlines()
f.close()
return lines
def read_temp(sensor):
lines = read_temp_raw(sensor)
while lines[0].strip()[-3:] != 'YES':
time.sleep(0.2)
lines = read_temp_raw(sensor)
equals_pos = lines[1].find('t=')
if equals_pos != -1:
temp_string = lines[1][equals_pos+2:]
return temp_string[0:4]
while True:
url = "http://localhost/emoncms/input/post?json={"
for x in range(0, sensorCount[0]):
url = url + devices[x][:-1] + ":" + read_temp(x) + ","
url = url[:-1]+"}&apikey=LA_APIKEY_VA_AQUI"
print(url)
urllib2.urlopen(url)
time.sleep(10)
Acordaos de respetar la indentación (tabuladores) en el código, si no no funciona bien en Python. Guardamos este código como un archivo .py, por ejemplo temperatura.py y ya lo podemos ejecutar de la siguiente forma:
python temperatura.py
Ahora ya nos podemos ir a Inputs en Emoncms y encontrar la entrada correspondiente a nuestro sensor de temperatura. En su configuración añadiremos un proceso “x 0.01” para que nos muestre la temperatura en ºC y bajo de eso un “Log to feed” para poder mostrarla. Ahora ya aparecerá en la pestaña Feeds, donde la editaremos y la seleccionaremos como REALTIME. Por último en la pestaña Vis seleccionamos el visor Realtime y el feedid de nuestro sensor de temperatura. El resultado será algo parecido a esto:
Ahora podemos poner este visualizador en el Dashboard y habremos terminado.
Actualización: Ahora puedes bajar el archivo python desde este enlace en mi Github.