Tutorial Raspberry Pi: Conexión a Xively (Internet Of Things)
Hola a todos, hoy os traigo un tutorial con el que lograréis conectar vuestra Raspberry Pi a la plataforma Xively. Conseguiremos monitorizar en tiempo real la temperatura (en grados centígrados, ºC) que posee, observando en una gráfica los distintos valores registrados a lo largo del tiempo. Todo ello ejecutándose nada más encendamos nuestra RaspberryPi, lo cual no nos quita por tanto, de poder seguir trabajando con ella y poder ver incluso desde otro dispositivo dicha monitorización.
El resultado final que conseguiremos será el siguiente:
A continuación una lista del material que se necesita:
- 1x Raspberry Pi (con distribución Raspbian) con acceso a Internet.
- Conocimientos en entornos Linux.
- Conocimientos en el lenguaje de programación Python.
¿Qué es Xively?
Xively (originalmente llamada Pachube, más tarde Cosm y finalmente Xively, debido a una marca previamente registrada) consiste en un servicio online desarrollado específicamente para el Internet de las Cosas (Internet Of Things - IOT).
La plataforma permite publicar los datos recogidos por distintos sensores (como pueden ser sensores de humedad, temperatura, gases, luminosidad, radiación, etc.) mediante gráficas en tiempo real y widgets.
En nuestro caso, utilizaremos como sensor de recogida de datos, el sensor interno de temperatura del SoC Broadcom BCM2835 (System on a Chip = CPU+GPU+DSP+SDRAM) de nuestra Raspberry Pi.
Registro en la plataforma XIVELY
Lo primero que deberemos hacer será registrarnos en la plataforma. Para ello creamos una cuenta desde el siguiente enlace: https://xively.com/signup. A continuación, verificaremos la cuenta accediendo al enlace facilitado por el correo electrónico que recibamos.
Una vez registrados se nos presentará la página "Test Drive". Pulsamos sobre "Skip the Test Drive".
Se nos presentará por tanto, la página "Development Devices". Aquí es donde añadiremos y controlaremos los datos de nuestra Raspberry Pi, pero para ello necesitaremos registrar primero el dispositivo, por lo que pulsaremos sobre "+ Add Devive" para acceder a la siguiente página.
Escribiremos un nombre para el dispositivo y opcionalmente una descripción del mismo. Seleccionaremos la privacidad del dispositivo como "Private Device" y finalmente pulsaremos sobre "Add Device".
Se nos presentará la página principal de nuestro dispositivo. Aquí es donde se registrarán y mostrarán los distintos canales de datos recogidos por los sensores.
¡IMPORTANTE! Tomad nota de los valores que aparecen asociados a FEED ID y API KEYS, ya que son los datos necesarios para conectar el script Python con la plataforma Xively.
Hasta aquí todos los pasos necesarios que hay que hacer en la plataforma Xively.
Creación del Script Python
Lo siguiente, por tanto, es crear un script Python que se va a encargar de obtener la temperatura del SoC de la Raspberry Pi para posteriormente conectarse con la plataforma Xively y publicar el valor registrado.
Primero instalaremos la librería Python que ofrece la plataforma Xively, para ello ejecutamos los siguientes comandos:
$ sudo apt-get install git $ git clone https://github.com/xively/xively-python.git $ cd xively-python $ sudo python setup.py install
A continuación crearemos un nuevo directorio donde se guardará posteriormente el script:
$ sudo mkdir /home/pi/xively
Accedemos a la carpeta creada:
$ cd /home/pi/xively
A continuación crearemos el script python mediante el comando:
$ sudo nano xively_temp_soc.py
Copiaremos y pegaremos en el editor que se nos acaba de abrir, el siguiente código Python:
#!/usr/bin/python # coding: utf-8 # Xively Temperatura SoC Python script by @AlexCorvis84 # Agradecimientos: www.geekytheory.com import os import xively import datetime # Variables personales FEED_ID = "TU_FEED_ID" API_KEY = "TU_API_KEY" # Inicializar Cliente API api = xively.XivelyAPIClient(API_KEY) # Funcion para obtener el valor de la temperatura del SoC def getTemp(): res = os.popen('vcgencmd measure_temp').readline() return(res.replace("temp=","").replace("'C\n","")) # Funcion para crear los Canales (Datastreams) def create_datastreams(feed): try: datastream = feed.datastreams.get("Temperatura") return datastream except: datastream = feed.datastreams.create("Temperatura", tags="temp") return datastream feed = api.feeds.get(FEED_ID) canal1= create_datastreams(feed) temp = getTemp() canal1.current_value = temp canal1.at = datetime.datetime.utcnow() canal1.update()¡IMPORTANTE! Cambiad en el script donde se indica "TU_FEED_ID" y "TU_API_KEY" por vuestros respectivos valores personales. Recordad que podéis acceder a ellos en la página principal de vuestro dispositivo. Y ¡NO eliminéis las comillas!
Guardamos el fichero con los cambios realizados y a continuación daremos permisos de ejecución al script mediante el comando:
$ sudo chmod +x xively_temp_soc.py
Por último, ya sólo nos resta configurar que dicho script se ejecute cada cierto tiempo. Para ello nos ayudaremos del administrador de procesos en segundo plano (demonio) llamado Cron. Dicho administrador permite ejecutar procesos regulares (por ejemplo cada minuto, cada día a una hora determinada, cada mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el fichero crontab.
Por tanto, vamos a modificar dicho fichero para ejecutar el script, por ejemplo, cada 5 minutos. Para ello abriremos el fichero con el siguiente comando:
$ crontab -e
Y añadiremos al final del archivo la siguiente línea:
*/5 * * * * python /home/pi/xively/xively_temp_soc.py
Presionamos Ctrl+O, Intro, Ctrl+X para guardar los cambios y salir. Reiniciamos la Raspberry Pi con:
$ sudo reboot
Finalmente, accederemos a la página de tu dispositivo personal generado en Xively, y veremos como se autoactualizan cada 5 minutos los valores de la temperatura de la Raspberry Pi.
Como habréis comprobado, éste código muestra las bases de cómo obtener datos desde la Raspberry Pi y enviarlos a Xively mediante la librería Python que ofrecen. Desde aquí las oportunidades son infinitas. Por ejemplo:
- Se podrían conectar varios sensores reales a la Raspberry Pi mediante los pines GPIO y enviar los datos recogidos a Xively. Un ejemplo de ésto ha sido la creación (por parte de un par de jóvenes estudiantes) de una placa para medir aspectos medioambientales. Su nombre es AirPi y podéis encontrar más información en su WEB OFICIAL AIRPPI.
- Configurar tu script Python como un servicio para que se ejecute justo cuando tu Raspberry Pi se encienda.
- Usar tu Raspberry Pi para suscribirte a un FEED existente a través del protocolo MQTT y tener el control de activar "cosas" en respuesta a los cambios que se produzcan en ese FEED.
Espero que os animéis a conectar vuestra Raspberry Pi al Internet Of Things ;)
ENLACES IMPORTANTES PARA AQUELLOS QUE QUIERAN SABER +:
- GIT Librería python-xively
- Documentación de la librería xively-python
- Tutorial Oficial de Xively para RaspberryPI
- Tutorial base (NO utiliza la librería Python oficial)
¡Salu2 y hasta el próximo tutorial!
@AlexCorvis84