-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Primeros pasos de una solución IoT con IBM Cloud
Introducción - El Internet de las Cosas (IoT por sus siglas en Inglés) es más que hype, es toda una revolución.
El IoT supone un cambio de paradigma impulsado por las nuevas tecnologías como la computación en la nube (cloud computing), el procesamiento en el borde (edge computing), la potencia de los nuevos protocolos y tecnologías de comunicación (como el 5G) o la gestión basada en datos (data driven) gracias a, big data y al machine learning.
Para poder desarrollar proyectos de IoT que requieran de estas tecnologías de forma ágil y sostenible, una excelente opción es el uso de plataformas en la nube como IBM Cloud. En esta guía se siguen todos los pasos para desarrollar un pequeño proyecto de IoT completamente desde cero y sin necesidad de tener conocimientos avanzados en TIC.
Prerequisitos - Creación cuenta IBM Cloud
El primer y único prerequisito es conseguir una cuenta en IBM Cloud y se puede hacer en el siguiente enlace:
https://cloud.ibm.com/registration
Se trata de un proceso sencillo que no conlleva más de 5 minutos y que no precisa de incluir información bancaria ni de tarjetas de crédito.
Tiempo estimado
En función de la destreza y del conocimiento previo en IBM Cloud, entre 1 y 2 horas.
Pasos a seguir
El tutorial está dividido en 3 partes diferenciadas para facilitar su seguimiento, pudiéndose realizar en momentos diferentes aunque sí de manera consecutiva.
1.1. Instalación Servicio Internet Of Things Platform
Seguimos los siguientes pasos para crear una aplicación Node-RED:
-
Log in en IBM Cloud.
-
Hacemos click en Catalog y buscamos Internet of Things Platform
-
Hacemos click sobre la casilla de Internet of Things Platform
- En la pestaña Create y completamos los siguientes campos:
- Region – Muy importante! Se debe seleccionar la misma ubicación para todos los servicios - London – en el caso de este tutorial
- Pricing plan – se deja - Lite
- Service name – Se precisa un nombre único, por lo que una sugerencia es el uso de iniciales y el nombre del servicio - iot-plpl – en el caso de este tutorial
- Resource group – Se deja Default
- Tags – Se deja vacío
- Una vez completados los campos pulsamos en Create y esperamos
1.2. Lanzamos IoT Platform
Una vez instalado el servicio:
-
Sobre la pantalla pulsamos en Launch
-
Por último, hacemos log in
-
Ya estamos dentro de nuestra plataforma IoT
1.3. Añadir un dispositivo que envíe mensajes MQTT
Con la consola de IoT Platform abierta:
-
Primero nos fijamos en el ID, en el caso del autor d5idpl. Este identificador enlazará la plataforma con los dispositivos que conectemos.
-
A continuación, para añadir un dispositivo pulsamos sobre Add Device
-
En la nueva ventana y en la pestaña Device Types pulsamos sobre Add Device Type
En la plataforma, es posible tener varios tipos de dispositivos, y varios dispositivos en cada tipo. Un tipo de dispositivo es un grupo de activos que comparten características; por ejemplo, pueden proporcionar los mismos datos de sensores.
-
En nuestro caso, el nombre del tipo de dispositivo debe ser Android. Pulsamos Next
-
En la siguiente pantalla se pueden introducir metadatos sobre el tipo de dispositivo, como un número de serie o un modelo. No es necesario especificar esta información para esta práctica. Simplemente click en Finish.
-
Una vez creado el tipo de dispositivo, registramos uno nuevo haciendo click en Register Devices.
-
La identificación del dispositivo puede ser, por ejemplo, la dirección MAC de un smartphone. Sin embargo, debe ser única dentro de la plataforma. Para la práctica, introducimos 112233445566 y después pulsamos Next
-
Se muestra una página en la que se pueden introducir metadatos sobre el dispositivo. La dejamos en blanco y haga clic en Next.
-
En la página de seguridad, se debe introducir un valor para el token de autenticación. Se debe recordar este valor para más tarde, en el caso de la práctica Token.1234. A continuación, click en Next.
-
Por último, hacemos click en Finish
1.4. Instalación, configuración y uso de la Android APP
Para el desarrollo de este tutorial se precisa de un dispositivo Android. Bien puede ser un dispositivo físico o bien uno virtualizado. Los pasos a seguir son los siguientes:
-
Descargar el fichero *.apk comprimido del siguiente link
iotstarter-v2.1.0.apk.zip -
Extraer el fichero *.zip.
-
Instalar el fichero
Ahora que está la app instalada y en funcionamiento procedemos a:
-
Nada más abrir la app, aparecerá un tutorial que por ahora vamos a omitir pulsando en Skip Tutorial
-
A continuación, debemos rellenar los campos:
- Organization – Con nuestro ID de Watson IoT Platform – En el caso de la guía d5idpl
- Device ID – Con el ID creado en el punto 4.6 en la plataforma – En el caso de la guía 112233445566
- Auth Token – Con el Token creado en el punto 4.7 en la plataforma – En el caso de la guía Token.1234
- Pulsamos sobre Activate Sensor
- Una vez activado el sensor, somos capaces de visualizar las diferentes medidas del acelerómetro del dispositivo
- Ahora tan solo agita y mueve el dispositivo.
1.5. Verificación de las lecturas en IoT Platform
De nuevo a la consola de Watson IoT Platform:
-
En la pestaña lateral Devices y en la pestaña superior Browse deberíamos visualizar nuestro dispositivo.
-
Haciendo click sobre el icono de la flecha a la derecha de tu ID de dispositivo accedemos a una página de "Eventos recientes". Deberíamos ver los eventos que vienen de tu smartphone.
-
Haciendo click en alguno de los eventos veremos los mensajes que se envían desde el smartphone en formato JSON.
1.6. Monitoriza lecturas con un dashboard
Una vez hemos comprobado que nuestra plataforma capta las señales producidas por el sensor, pasamos a recogerlas en un dashboard para su monitorización.
-
Hacemos click en la pestaña lateral Boards donde visualizamos los dashboards disponibles
-
Haciendo click sobre el icono de + creamos un nuevo board.
-
Rellenamos el Board name y la Description (opcional) y pulsamos Next
-
En la siguiente pantalla configuramos la privacidad y pulsamos en submit
-
Volvemos a la pantalla de boards y comprobamos que vemos el recién creado, que figurará vacío, sin cards.
-
Hacemos click sobre el board y en la nueva pantalla hacemos click sobre + Add New Card
-
Se abrirá un menú en el que podemos elegir el tipo de visualización que deseamos incluir en el dashboard. Elegimos Line chart
-
A continuación, deberíamos visualizar nuestro dispositivo, por lo que lo seleccionamos y le damos a Next
-
A continuación, debemos hacer click sobre Connect new data set
-
En el menú que se despliega debemos completar:
- Event – accel
- Property – acceleration_x
- Name – acceleration_x
- Type – Number
- Min – -10
- Max – 10
-
Antes de pulsar Next, hacemos scroll hacia abajo y hacemos click sobre + Connect new data set
-
Repetimos el proceso para el acelerómetro del “eje y” y el del “eje z” y pulsamos sobre Next
-
A continuación seleccionamos el tipo de gráfico, elegimos línea y tamaño XL. Pulsamos en Next.
-
Elegimos el esquema de colores y pulsamos sobre Submit
- Por último, si volvemos a agitar el dispositivo seremos capaces de monitorizar en tiempo real las lecturas del sensor de movimiento del dispositivo.
Hasta aquí la primera parte del tutorial, en el que nos hemos familiarizado con IBM Cloud y con la plataforma de Internet of Things. Los siguientes pasos nos ayudarán a trabajar con los datos obtenidos en tiempo real.
2.1. Despliegue app Node-RED
Seguimos los siguientes pasos para crear una aplicación Node-RED:
-
Log in en IBM Cloud.
-
Hacemos click en Catalog y buscamos Node-RED App
-
Hacemos click sobre la casilla de Node-RED App
- Pulsamos sobre la pestaña Create y completamos los siguientes campos:
App Details
- App name – Se precisa un nombre único, por lo que una sugerencia es el uso de iniciales y el nombre del servicio
- node-red-plpl – en el caso del tutorial
- Resource group – Se deja Default
- Tags – Se deja vacío
Service Details
- Region – Muy importante! Se debe seleccionar la misma ubicación para todos los servicios
- London – en el caso del tutorial
- Resource group – Se deja Default
- Pricing plan – Se deja Lite
- Una vez completados los campos pulsamos en Create y esperamos
2.2. Conectar con el servicio IoT Platform
Una vez desplegado el servicio anterior seguimos los siguientes pasos:
-
Pulsamos sobre Connect existing Service +.
-
Seleccionamos el servicio previamente creado de Internet of Things Platform y pulsamos sobre Done
2.3. Habilitar Continuous Delivery
-
Primero, pulsamos sobre Deploy your app.
-
A continuación, crear una IBM Cloud Api Key pulsando sobre New y posteriormente en Ok.
3.Haciendo scroll hacia abajo, seleccionamos la Region London
-
Los campos Organization, Space y Host deberían completarse automáticamente.
-
Una vez todo completado, pulsamos en Next
-
En la nueva ventana, dejamos el DevOps toolchain name el que nos viene por defecto
-
Y de nuevo en la Region, seleccionamos London
-
Una vez todo completado, pulsamos en Create
-
Una vez ha comenzado el despliegue, este tomará unos minutos para completarse
-
Las etapas que se suceden son:
- No stages detected
- In progress
- Success
- Durante el despliegue, podemos ver el log pulsando sobre Status
2.4. Accedemos a Node-RED
Una vez finalizado el despliegue de Node-RED ya estaría listo para utilizar:
-
Hacemos click sobre App URL.
-
Sobre la ventana emergente pulsamos en Next
-
Aseguramos nuestro editor introduciendo Username y Password.
-
Pulsamos sobre Next en 2 pasos y por último en Finish
-
Pulsamos sobre Go to your Node-RED flow editor
-
Hacemos log in y ya estaríamos en el editor.
2.4. Instalando extensión IBM en Node-RED
-
Nada mas abrir Node-RED encontraremos 2 nodos que componen una instrucción “Hello world”. Podemos probar a ejecutarla o simplemente los borramos.
-
Antes de empezar a trabajar, vamos a descargar unos componentes necesarios. Pulsamos sobre el icono superior derecho, y en el desplegable pulsamos sobre Manage palletes
-
En el menú que se despliega, nos posicionamos en la pestaña Install y escribimos en el campo de búsqueda ibmiotapp
-
Pulsamos sobre Install
2.5. Procesado de los mensajes en Node-RED
-
Ya con la extensión de IBM instalada, volvemos a pulsar sobre el botón de menú y esta vez pulsamos sobre importar
-
Ahora copiamos el siguiente código y lo pegamos sobre el editor que se ha abierto.
nodeRedCode.txt -
Una vez pegado pulsamos sobre Import
-
Si hemos realizado el proceso correctamente deberíamos ver un flujo con 4 nodos en pantalla. Ahora debemos configurarlos.
-
Hacemos doble click en el nodo IBM IoT App Out. En la ventana emergente, introducimos el ID de dispositivo, 112233445566 en el caso del tutorial y hacemos clic en Done.
-
Configurado el nodo, pulsamos sobre Deploy. Veremos dos puntos verdes bajo los nodos IBM indicando que el despliegue se ha realizado correctamente.
-
Si hemos realizado el proceso correctamente y volviendo a nuestro dispositivo Android, al cambiar el eje Z cambiaremos el color del fondo de la App.
-
Si inspeccionamos el bloque calc color podemos ver el cálculo que realiza para el color en base a su posición en el eje Z.
2.7. Persistencia de datos en Cloudant
-
Ahora que somos capaces de recibir y visualizar los datos, procederíamos a persistirlos en una base de datos en la nube.
-
En el buscador escribimos Cloudant y arrastramos el nodo de salida y lo conectamos con IBM IoT App in.
-
Hacemos doble click sobre el nodo de Cloudant para abrir la ventana de opciones. Tan solo hay que seleccionar el servicio de Cloudant ya desplegado en IBM Cloud enlazado con las instancias de Node e IoT Platform, y le damos un nombre a la Database.
-
De vuelta a la consola de IBM Cloud, seleccionaríamos el servicio de Cloudant
-
Pulsamos sobre Launch Dashboard para abrir la consola
-
En la consola de Cloudant deberíamos ver la base de datos generada. Si pulsamos sobre esta se abrirá una vista de tabla con los mensajes recibidos.
-
En esta nueva vista, podemos filtrar y visualizar los mensajes
-
Si pulsamos sobre cualquiera de los mensajes, podemos ver el formato Json con la información del dispositivo y de la plataforma.
Este es un ejemplo de cómo a través de una pequeña app cloud en Node-RED, vinculada a Watson IoT Platform hemos sido capaz de modificar el funcionamiento de un dispositivo conectado así como también realizar una persistencia de los datos en una base en la nube.
A continuación se integrará la aplicación de IoT con herramientas de analítica de datos para su aprovechamiento.
3.1. Modificación flujo Node-RED
Seguimos los siguientes pasos para conectar la aplicación Node-RED con un entorno de modelado analítico:
-
Volvemos al entorno de Node-Red
-
En el buscador, escribimos change y lo arrastramos al tablero.
-
Borramos la conexión entre los nodos de IBM IoT App In y Node-red-data y entre msg.playload
-
Reconectamos los nodos de IBM IoT App In con change y este con Node-red-data y msg.playload
-
Hacemos doble click sobre el nodo de set.msg.playload para abrir la configuración
-
Dejamos el primer campo como playload y cambiamos el de más abajo a expression
-
Introducimos el siguiente código:
msg.payload.{
"timestamp" : $millis(),
"ax" : d."acceleration_x",
"ay" : d."acceleration_y",
"az" : d."acceleration_z"
}
- Tras esto, pulsamos en done, y nuevamente en done.
-
Pulsamos sobre Deploy y si el sensor está detenido, lo reactivamos.
-
Si hemos seguido los pasos correctamente, en debug deberán aparecer los nuevos mensajes ya filtrados para su posterior carga y análisis.
3.2. Configuración Watson Studio
-
Volvemos a la consola de IBM Cloud
-
Dentro de Servicios buscamos la instancia de Cloudant y pulsamos sobre su nombre.
-
En la nueva ventana pulsamos sobre Service credentials
-
Pulsamos sobre New credential
-
Nombramos la credencial con un nombre único y pulsamos sobre Add
-
Una vez creada la credencial, desplegamos con el botón de la flecha para ver su contenido y lo copiamos para su posterior consulta.
-
Volvemos al catálogo y buscamos Watson Studio, pulsamos sobre el.
-
Procedemos a crear el servicio.
Como puntos a tener en cuenta:
- La región que debe ser la misma que el resto (London en el caso de la práctica)
- Se recomienda poner un nombre único al servicio.
-
En la ventana siguiente pulsamos sobre Get Started
-
En la nueva ventana pulsamos sobre New Project
-
Entre las dos opciones, elegimos la de Create an empty project
-
Damos un nombre al proyecto
-
Y pulsamos sobre Add
-
En la ventana emergente, pulsamos en Create
-
Pulsamos sobre Refresh
-
Y una vez que aparezca el servicio que acabamos de crear podemos pulsar sobre Create
3.3. Conexión Cloudant con Notebook
-
En la página del Proyecto, pulsamos sobre Add to Project +
-
En el desplegable pulsamos sobre Notebook
-
Le damos nombre al notebook
-
Como runtime seleccionamos Default Spark Python 3.6
-
Pulsamos en Create
- Una vez activo el notebook, introducimos los siguientes comandos:
import pixiedust
pixiedust.installPackage("org.apache.bahir:spark-sql-cloudant_2.11:0")
from pyspark.sql
import SparkSession spark = SparkSession.builder.getOrCreate()
def readDataFrameFromCloudant(database):
cloudantdata = spark.read.format("org.apache.bahir.cloudant")\
.option("cloudant.host",'CLOUDANT_HOST’)\
.option("cloudant.username", 'CLOUDANT_USERNAME’)\
.option("cloudant.password",'CLOUDANT_PASSWORD')\ .load(database)
return cloudantdata
Nota!
Los campos CLOUDANT_HOST, CLOUDANT_USERNAME y CLOUDANT_PASSWORD deben modificarse con las credenciales de Cloudant.
- Si no hemos recibido ningún mensaje de error, procedemos con los siguientes:
df = readDataFrameFromCloudant('node-red-data') df.createOrReplaceTempView('df')
display(df)
-
Una vez hecho correr esas dos instrucciones, habremos importado los datos a una tabla.
-
A partir de aquí es posible tratar los datos tanto en batch como en streaming.
Resumen
El propósito de este tutorial no es otro que familiarizarse con la nube pública de IBM, su plataforma de Internet de las Cosas así como alguno de sus servicios de Inteligencia Artificial y Analítica de datos.
Enlaces relacionados
https://www.ibm.com/cloud/internet-of-things
https://www.ibm.com/cloud/watson-studio
https://cloud.ibm.com/catalog/services/internet-of-things-platform#about