Medición de temperatura ambiente con Raspberry Pi

Desde el departamento de cutremótica llega la versión 2 del control de la calefacción. El siguiente paso que necesitaba era controlar la temperatura ambiente dentro de casa de manera remota. Con esta excusa aproveché hace un tiempo para agenciarme una Raspberry Pi. Sin embargo el tema del sensor de temperatura se iba dilatando en el tiempo ya que no quería gastar mucho y la opción barata habitual para la rPi es un sensor conectado al GPIO con una resistencia en serie. Resulta que compré el sensor pero no la resistencia, y no encontraba el momento para esto último.

Finalmente he encontrado un pequeño sensor USB en DealExtreme por muy poco dinero y gastos de envío gratuitos. Y tras trastear un poco he podido hacerlo funcionar sin demasiadas dificultades. Así que resumo aquí los pasos seguidos para hacer funcionar el invento.

Necesitamos una rPi, uno de esos sensores USB y un cable de extensión USB para poder poner el termometro en un lugar concreto y que no esté pegado a la rPi, que podría incrementar ligeramente la temperatura registrada.

Existen diversas versiones del sensor USB de este fabricante (PCSensor), en mi caso tenía una que al conectarla me daba el nombre TEMPerV1.4 y concretamente el siguiente registro USB:

New USB device found, idVendor=0c45, idProduct=7401  
New USB device strings: Mfr=1, Product=2, SerialNumber=0  
Product: TEMPerV1.4  
Manufacturer: RDing  

Tras diversas pruebas y búsquedas por internet encontré un artículo sobre un pequeño programa en C para consultar la temperatura. Siguiendo las instrucciones del anterior artículo descargué el código fuente pero no me compilaba ya que no encontraba usb.h (parece que falta la libreria USB para compilar). Lo solucioné con un apt-get install libusb-dev. La primera ejecución no funcionó ya que al parecer no puede abrir el dispositivo si no se es root. Confirmé este hecho ejecutando el programa con sudo. Para permitir que cualquier usuario pueda acceder se entrega un fichero de reglas de udev para ello pero está corrupto. Este es el contenido correcto:

SUBSYSTEMS=="usb", ACTION=="add", ATTRS{idVendor}=="0c45", ATTRS{idProduct}=="7401", MODE="666"  

Y eso es todo. Ejecutando directamente el programa nos da la temperatura y la fecha, y con un '-c' tenemos simplemente la temperatura en celsius ideal para pasar a rutinas de control o un nagios, por ejemplo.

pi@raspberrypi ~/temperv14 $ ./temperv14  
2013/09/25 18:57:26 Temperature 77.45F 25.25C  
pi@raspberrypi ~/temperv14 $ ./temperv14 -c  
25.25