domingo, 11 de diciembre de 2016

Introducción a thinger.io

Cuando creamos proyectos IoT con Arduino, tenemos varias maneras de monitorizar los datos que captamos a través de los sensores. La más básica y que requiere tener el dispositivo conectado a un ordenador es a través del monitor serie. Si tenemos algún display como un LCD o una pantalla TFT, ya podremos desconectar el Arduino del ordenador y llevarlo a cualquier sito. Pero existe una tercera opción, quizás la más idónea, para poder ver los datos y la información, utilizar una plataforma para proyectos del IoT.

Yo ya he utilizado en alguna ocasión la plataforma Thingspeak pero ahora voy a realizar las primeras pruebas con thinger.io

thinger.io es una plataforma española de código abierto que podemos utilizarla gracias a sus propios servidores como en GitHub para instalarla en una máquina propia y ofrecen una cuenta gratuita para utilizando su infraestructura en la nube.

La programación es muy sencilla ya que disponemos de una librería en el repositorio oficial de Arduino y es además compatible con ESP8266, Raspberry Pi o Intel Edison.


Dispone de una consola de administración bastante completa donde podemos gestionar y geolocalizar nuestros objetos conectados. Además, la documentación es extensa y libre con una comunidad de desarrolladores muy activa.

Thinger.io es gratuita para makers con las siguientes limitaciones:
  • Permite conectar un máximo de 3 dispositivos.
  • No existe limitación en cuanto a los recursos de cada dispositivo, es decir el número de parámetros a medir por los sensores que tenga conectado (más allá de su propia capacidad) o el número de parámetros a enviar a los dispositivos desde la plataforma.
  • Los valores de los parámetros recibidos en la plataforma se pueden almacenar hasta en un máximo de 10 campos (Data Buckets) diferentes. Cada Data Bucket puede almacenar datos de múltiples sensores, con una frecuencia máxima de un minuto (un almacenamiento cada minuto). Estos datos son accesibles y actualmente no hay limitaciones ni respecto al tiempo ni al tamaño de los datos.
  • Los valores de los sensores se pueden visualizar hasta un máximo de 10 pantallas gráficas de visualización de datos (Dashboards). Estos datos pueden proceder de los Data Buckets o ser lecturas que se empiezan a tomar desde el momento en que abrimos cada Dashboard.
  • Se pueden establecer hasta 10 Endpoints que son las “marcas” para interactuar con las aplicaciones de los servicios en línea.

Precios thingerIO

De forma resumida, thinger nos permite:
  • Almacenar y visualizar información recibida desde sensores: Podemos almacenar los datos o graficarlos para poder interpretarlos de una manera más sencilla. La aplicación también nos permite exportarlos para poder disponer de ellos de una manera directa y poder tratarlos con programas de análisis.
  • Enviar información o instrucciones a dispositivos: Podemos configurar nuestros dispositivos a través de Internet (p.e. establecer una temperatura a la que se deba encender una caldera… o directamente hacer que una puerta se abra o cierre cuando lo deseemos).
  • Interactuar con aplicaciones como IFTTT que permite crear conexiones con diversos servicios en línea: servicios de almacenamiento de archivos en la nube como Google Drive, Dropbox y Skydrive; redes sociales como Facebook, Twitter, YouTube, Tumblr, Instagram y Foursquare; canales RSS de blogs y páginas web; sitios de marcadores sociales, de correos electrónicos, de mensajes de texto, de datos climatológicos y más.

Login

Lo primero que haremos es darnos de alta en la plataforma. Para ello nos vamos a thinger.io y hacemos click en sign-up. Introducimos nuestros datos, claves, etc y, despues de confirmar nuestra contraseña al recibir un email ya tenemos nuestra cuenta activa y podremos acceder a la plataforma y empezar a trabajar con ella.

De manera gratuita permite registrar 3 dispositivos con un limite de envio de peticiones mensual de 100mb. Una vez que entramos, nos encontramos con el panel de control (Console Dashboard), en el que de una manera gráfica, podemos ver el estado de nuestra cuenta (Account Stats), la localización de los dispositivos conectados (Connected Devices Locations) y la cantidad de datos enviados y recibidos (Data Transmission) en las comunicaciones.


Arduino IDE

Como indiqué anteriormente, existe una librería oficial de thinger para arduino. Para instalarla solo debemos ir a Programa - Incluir librería - Gestionar liberías y buscar por thinger


En Arduino Library podrás encontrar las diferentes formas de integrar esta plataforma a tu código. Yo voy a utilizar la correspondiente a ESP8266 ya que voy a integrarlo con un pequeño ejemplo de medición de humedad y temperatura utilizando el módulo DHT22. El esquema es el siguiente:


El ejemplo que voy a realizar está basado en el un compendio de varios tutoriales obtenidos de la comunidad de thinger.io. En el siguiente videotutorial se explica el ejemplo:


Lo primero que hay que hace es añadir un dispositivo, en este caso, el ESP8266. Ha de introducir el Id. del dispositivo, una breve descripción y sus credenciales o password para el acceso al mismo. Para ello, seleccionamos Devices - Add Device e introducimos los datos del nuevo dispositivo:
  • Device Id: es el nombre que elegimos para identificar la conexión de thinger.io con el dispositivo.
  • Device description: una breve descripción de la conexión.
  • Device credentials: la clave de seguridad para establecer la conexión entre thinger.io y el dispositivo.
Una vez realizado este paso, seleccionando Statistics, veremos que en la Console Dashboard ya tenemos habilitada la conexión del dispositivo, aparece que 1 de los 3 posibles dispositivos está en uso (1/3 devices).

Los dispositivos conectados a la plataforma necesitan ser autenticados en el servidor. Cuando se crea un dispositivo en la consola, básicamente se crea un nuevo identificador de dispositivo y se establece una credencial de dispositivo. Por lo tanto, debe configurar estas credenciales también en el código Arduino para que el dispositivo pueda ser reconocido y asociado a su cuenta. Esto se hace normalmente al inicializar la instancia Thinger en el código, es decir, cuando se define la instancia de thinger.

A continuación has de programar el siguiente código en el módulo ESP8266:

#include <ESP8266WiFi.h>
#include <ThingerESP8266.h>
#include "DHT.h" //Sensor DHT

// Parámetros del dispositivo ESP8266
#define username "tu:usuario"
#define deviceId "id_del_dispositivo"
#define deviceCredential "credenciales"

// Parámetros de nuestra red wifi
#define wifi_ssid "ssid_red_wifi"
#define wifi_password "password_red_wifi"

// Parámetros del sensor DHT11
#define dht_pin D7 // GPIO13
#define dht_type DHT11 // Seleccionamos el sensor
DHT dht(dht_pin, dht_type);

ThingerESP8266 thing(username, deviceId, deviceCredential);

void setup() {
  thing.add_wifi(wifi_ssid, wifi_password);
  thing["sensores"] >> [](pson & out) {
    out["dht_humedad"] = dht.readHumidity();
    out["dht_temperatura"] = dht.readTemperature();
  };
}

void loop() {
  thing.handle();
}


Nota: Evidentemente has de cambiar los valores de los parámetros de tu red wifi y de tu dispositivo y cuenta en thinger.io

Con este sketch la placa se convierte en esclava de la plataforma thinger.io, debiendo proporcionar datos de los sensores cuando se realice una petición desde la plataforma. Básicamente, definimos los recursos y los dejas disponibles para que el servidor de thinger los pida según nuestra configuración controlado por el dashboard a un intervalo definido (Sampling Interval). También existe la opción de controlar el envío de los datos mediante un stream (Update by Device).

Nota: Debemos entender que esta condición de esclava solo es relativa a las comunicaciones con thinger.io, es decir, que en en módulo ESP8266 podríamos programar otras funciones ajenas a las misma sin ningún problema.

Con repecto a otros proyectos abordados, incluimos la librería ThingerESP8266.h para poder interactuar con la plataforma.De forma general, en setup() configuramos los recursos que vamos a monitorizar y mostrar a través de Internet mientras que en loop()  es el lugar donde llamar siempre al método thing.handle().

Compila el programa y cárgalo en el módulo ESP8266. En ese momento, thinger.io detecta el dispositivo ESP8266, que dispone de un recurso demonidado sensores y que dispone de dos campos, dht_humedad y dht_temperatura. Accedemos a thinger.io y seleccionamos Devices  para comprobar si se ha iniciado la comunicación. Si se ha iniciado en el dispositivo aparecerá “Connected“, si no se ha iniciado, lo que aparecerá será “Disconnected” y tendremos que revisar los pasos anteriores para ver donde está el fallo. Si pulsamos sobre el dispositivo tendremos más detalles de la conexión:


En la plataforma Thinger.io, cada dispositivo puede definir varios recursos. Se puede pensar que un recurso es algo que puede sentir o actuar. Por ejemplo, un recurso típico será un valor de sensor como temperatura o humedad, o un relé que enciende y apaga una luz.

Todos los recursos deben definirse dentro del método setup (). De esta manera los recursos se configuran al principio, pero se puede acceder más tarde según sea necesario. Hay tres tipos de recursos:
  • Recursos de entrada: Si utilizan para controlar o activar su dispositivo IoT, es decir, un recurso de entrada es cualquier cosa que pueda proporcionar información a nuestro dispositivo. Por ejemplo, puede ser un recurso para encender y apagar una luz o un relé, cambiar una posición de servo, ajustar un parámetro de dispositivo, etc. Esto significa que a través de la plataforma nosotros podemos interacturar con el dispositivo IoT.
  • Recursos de salida: Los recursos de salida deben usarse en general cuando necesite mostrar el  valor de sensor, como temperatura, humedad, etc. Así que los recursos de salida son muy útiles para extraer información del dispositivo y mostrarlos en internet.
  • Recursos de entrada/salida: El último tipo de recurso es un recurso que no sólo toma una entrada o una salida, sino que toma ambos parámetros. Esto es muy útil cuando se desea leer una salida que depende de una entrada.
En nuestro ejemplo utilizaremos recursos de salida, es decir, el dispositivo envía a la plataforma los valores obtenidos de temperatura y humedad para que sean mostrados en internet.

La recursos de salida toma un parámetro del tipo pson que es un tipo de variable que puede contener booleanos, números, flotadores, cadenas o incluso información estructurada como en un documento JSON. Para definir un recurso de salida se utiliza el operador >>.

A continuación creamos nuestro dashboard. En el siguiente videotutorial se explica como hacerlo:



Dentro de la pantalla gráfica o dashboard podremos insertar los siguientes elementos (Widget Setting) de representación gráfica:
  • Time Series Chart: gráfico que une con una spline los valores medidos en un periodo de tiempo.
  • Donut Chart: gráfico de donut para representar un único valor (p.e. el último valor medido).
  • Progressbar: gráfico de barra para representar un único valor (p.e. el último valor medido).
  • Google Map: mapa de Google Maps con la localización del dispositivo.
  • Image/MJPEG: imagen desde una URL (p.e. imagenes obtenidas por una videocámara vía Internet).
  • Text/Value: un único valor de texto o numérico (p.e. último valor medido).
  • Clock: reloj.

En nuestro caso, el dashboard estárá formado únicamente por dos widget, temperatura y humedad y he seleccionado utilizar el modo de refresco Sampling by interval (1 segundo). Al utilizar datos leídos directamente desde el dispositivo podríamos tomar mediciones y representarlas gráficamente con una frecuencia máxima de un dato por segundo, pero una vez cerrado el Dashboard los datos se borrarán (en otro artículo explicaré como almacenarlo)..

El resultado es el siguiente:



Fuentes:

Enlaces:

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.