Google+ Room Technology

domingo, 11 de mayo de 2014

Raspberry PI: Internet of Things (PARTE 2).

Mi Raspberry Pi es una autentica maquina de posibilidades. ¡He logrado grandes cosas que creía que solo los expertos podían hacerlas! Ahora estoy trabajando en un proyecto de Internet of Things (IoT). Como estamos trabajando en la plataforma Linux bajo la distribución de Raspbian (una derivación de Debian propia del Raspberry Pi) tendremos que volver a recordar los comandos básicos de Linux, para los que ya los hemos usado antes, o iniciar con unos pequeños tutoriales para los que son nuevos en esto.



¿Que voy a enviar al nube?

Tengo a un sensor de temperatura/humedad DHT21 (AM2301). Este envía un tren de pulsos con la información 'codificada', es una extensión del protocolo 1-Wire.

Tengo un sensor de Flujo de la empresa Seeedstudio. Este envía un tren de pulsos que es proporcional a la cantidad de flujo que por ese momento pasa por el dispositivo.

Ambos están diseñados para funcionar con Arduino (como siempre), pero ¿Tiene que haber alguna manera de hacerlos trabajar con Raspberry Pi? Y la hay gracias a un usuario británico muy respetado de la comunidad: Gordon Henderson. El se hizo la misma pregunto que yo, y el mismo se dio una respuesta, creo el modulo WiringPi que no es mas que: así como programas en Arduino hazlo en Raspberry Pi, es decir usar lenguaje C/C++.

No es fácil, en Google hay código en cantidad, se perfectamente eso, pero adaptarlo a tus necesidades es otro tema.

¿Hay algún objetivo?

Investigación y desarrollo, Investigación y Desarrollo ademas es solo una manera de poder "practicar un deporte", disfrazada de tema de fin de carrera.
Aquí unas capturas de mi sensor DHT21: 

Sensor DHT21

Sensor DHT21

Algunas capturas de mi sensor de flujo, este me permitirá medir al cantidad de agua que pasa por una tubería de las comunes que están instaladas en en un casa promedio en mi país.




La idea es poder enviar estos valores de humedad, temperatura y consumo de agua potable al Internet a través de la Raspberry Pi tal como lo muestra  el diagrama siguiente:


Cuando pienso en Internet me refiero a: Twitter, Gmail, Xively, Google Docs, Google Drive, Dropbox, etc. Es decir todo lo que se pueda comunicar con una Raspberry Pi. Hace que tiempo ya tengo implementado algunas de estas características pero no he podido documentar de la manera mas adecuado todo lo que tengo.  Por lo que los futuros post seguro hablaron de ello. Si desean ver todo lo que esta conectado a la Raspberry dejo los links: 

Para Xiveli use la documentación oficial. Estoy leyendo los datos de temperatura CPU, temperatura/humedad y el flujo de agua y enviándola cada minuto 24/7 sin interrupciones.

Para Twitter use la librería  de Tweepy que combinado con Python me permite acceder de manera mas fácil 
al API de Twitter. Envió tuits cada hora con los datos de temperatura CPU, temperatura/humedad y el flujo de agua sin interrupciones.

Para Google Docs use Gspread que es también una API. Cada día a las 23:55 guardo los datos del consumo diario de agua potable.

Para Dropbox un un 'bash' simple que un usuario la desarrollo ya que no hay una API oficial para arquitecturas ARM (que es la base del Broadcom que viene en la RaspberryPi), tomo fotos cada hora y las envió a la nube.

Para los envíos de e-mails uso el famoso SSMTP. Envió e-mails todos los días 5 de cada mes el consumo de agua potable del mes anterior, por ejemplo el 5 de Junio el sistema enviara un e-mail con los datos consumidos del mes de mayo, ademas los dias 15 de cada mes tambien envio e-mails.



Ademas después de mucho tiempo investigando logre usar la API de Whatsapp en Python gracias a Yowsup. Por el momento estoy enviado una alarma cuando la temperatura del CPU supera los 60°C, pero pienso añadir la funcionalidad de que cuando una determinada velocidad de flujo es superada, por ejemplo 30litros/min, envié un mensaje al celular del usuario.



El enlace de Dropbox te dirige a unas imágenes que se toman con la cámara del PI y se suben a la nube. Así como una especie de Time Lapse, aunque no de la manera mas profesional.
Recuerda que todo esto esta en periodos de pruebas por lo que es posible que hayan pequeños errores.







Por ahora esto es todo. Espero poder contar mas tiempo mas adelanta para poder hablar sobre como implemente el sistema y que mas se le puede añadir.

Gracias por visitar el blog. Saludos.