Skip to content

Primeros pasos de una solución IoT con IBM Cloud #1

@plplatorre

Description

@plplatorre

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.

image

image

image

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:

  1. Log in en IBM Cloud.

  2. Hacemos click en Catalog y buscamos Internet of Things Platform

  3. Hacemos click sobre la casilla de Internet of Things Platform

image

  1. 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
  1. Una vez completados los campos pulsamos en Create y esperamos

image

image

1.2. Lanzamos IoT Platform

Una vez instalado el servicio:

  1. Sobre la pantalla pulsamos en Launch

  2. Por último, hacemos log in

  3. Ya estamos dentro de nuestra plataforma IoT

image

image

image

1.3. Añadir un dispositivo que envíe mensajes MQTT

Con la consola de IoT Platform abierta:

  1. Primero nos fijamos en el ID, en el caso del autor d5idpl. Este identificador enlazará la plataforma con los dispositivos que conectemos.

  2. A continuación, para añadir un dispositivo pulsamos sobre Add Device

  3. En la nueva ventana y en la pestaña Device Types pulsamos sobre Add Device Type

image

image

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.

  1. En nuestro caso, el nombre del tipo de dispositivo debe ser Android. Pulsamos Next

  2. 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.

image

image

  1. Una vez creado el tipo de dispositivo, registramos uno nuevo haciendo click en Register Devices.

  2. 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

image

image

  1. Se muestra una página en la que se pueden introducir metadatos sobre el dispositivo. La dejamos en blanco y haga clic en Next.

  2. 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.

  3. Por último, hacemos click en Finish

image

image

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:

  1. Descargar el fichero *.apk comprimido del siguiente link
    iotstarter-v2.1.0.apk.zip

  2. Extraer el fichero *.zip.

  3. Instalar el fichero

Ahora que está la app instalada y en funcionamiento procedemos a:

  1. Nada más abrir la app, aparecerá un tutorial que por ahora vamos a omitir pulsando en Skip Tutorial

  2. 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
  1. Pulsamos sobre Activate Sensor

image

image

  1. Una vez activado el sensor, somos capaces de visualizar las diferentes medidas del acelerómetro del dispositivo

a2d7ee00-3ef2-11eb-8e3e-5c161bf3bf7d

  1. Ahora tan solo agita y mueve el dispositivo.

ab302900-3ef2-11eb-8c8d-2ab0a9ccbab4

1.5. Verificación de las lecturas en IoT Platform

De nuevo a la consola de Watson IoT Platform:

  1. En la pestaña lateral Devices y en la pestaña superior Browse deberíamos visualizar nuestro dispositivo.

  2. 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.

  3. Haciendo click en alguno de los eventos veremos los mensajes que se envían desde el smartphone en formato JSON.

image

image

image

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.

  1. Hacemos click en la pestaña lateral Boards donde visualizamos los dashboards disponibles

  2. Haciendo click sobre el icono de + creamos un nuevo board.

  3. Rellenamos el Board name y la Description (opcional) y pulsamos Next

  4. En la siguiente pantalla configuramos la privacidad y pulsamos en submit

image

image

image

  1. Volvemos a la pantalla de boards y comprobamos que vemos el recién creado, que figurará vacío, sin cards.

  2. Hacemos click sobre el board y en la nueva pantalla hacemos click sobre + Add New Card

image

image

  1. Se abrirá un menú en el que podemos elegir el tipo de visualización que deseamos incluir en el dashboard. Elegimos Line chart

  2. A continuación, deberíamos visualizar nuestro dispositivo, por lo que lo seleccionamos y le damos a Next

image

image

  1. A continuación, debemos hacer click sobre Connect new data set

  2. En el menú que se despliega debemos completar:

  • Event – accel
  • Property – acceleration_x
  • Name – acceleration_x
  • Type – Number
  • Min – -10
  • Max – 10
  1. Antes de pulsar Next, hacemos scroll hacia abajo y hacemos click sobre + Connect new data set

  2. Repetimos el proceso para el acelerómetro del “eje y” y el del “eje z” y pulsamos sobre Next

image

image

  1. A continuación seleccionamos el tipo de gráfico, elegimos línea y tamaño XL. Pulsamos en Next.

  2. Elegimos el esquema de colores y pulsamos sobre Submit

image

image

  1. Por último, si volvemos a agitar el dispositivo seremos capaces de monitorizar en tiempo real las lecturas del sensor de movimiento del dispositivo.

image

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:

  1. Log in en IBM Cloud.

  2. Hacemos click en Catalog y buscamos Node-RED App

  3. Hacemos click sobre la casilla de Node-RED App

image

  1. 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
  1. Una vez completados los campos pulsamos en Create y esperamos

image

image

2.2. Conectar con el servicio IoT Platform

Una vez desplegado el servicio anterior seguimos los siguientes pasos:

  1. Pulsamos sobre Connect existing Service +.

  2. Seleccionamos el servicio previamente creado de Internet of Things Platform y pulsamos sobre Done

image

image

2.3. Habilitar Continuous Delivery

  1. Primero, pulsamos sobre Deploy your app.

  2. A continuación, crear una IBM Cloud Api Key pulsando sobre New y posteriormente en Ok.

image

image

image

3.Haciendo scroll hacia abajo, seleccionamos la Region London

  1. Los campos Organization, Space y Host deberían completarse automáticamente.

  2. Una vez todo completado, pulsamos en Next

image

  1. En la nueva ventana, dejamos el DevOps toolchain name el que nos viene por defecto

  2. Y de nuevo en la Region, seleccionamos London

  3. Una vez todo completado, pulsamos en Create

image

  1. Una vez ha comenzado el despliegue, este tomará unos minutos para completarse

  2. Las etapas que se suceden son:

  • No stages detected
  • In progress
  • Success
  1. Durante el despliegue, podemos ver el log pulsando sobre Status

image

image

image

image

2.4. Accedemos a Node-RED

Una vez finalizado el despliegue de Node-RED ya estaría listo para utilizar:

  1. Hacemos click sobre App URL.

  2. Sobre la ventana emergente pulsamos en Next

image

image

  1. Aseguramos nuestro editor introduciendo Username y Password.

  2. Pulsamos sobre Next en 2 pasos y por último en Finish

  3. Pulsamos sobre Go to your Node-RED flow editor

  4. Hacemos log in y ya estaríamos en el editor.

image

image

image

2.4. Instalando extensión IBM en Node-RED

  1. Nada mas abrir Node-RED encontraremos 2 nodos que componen una instrucción “Hello world”. Podemos probar a ejecutarla o simplemente los borramos.

  2. 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

image

  1. En el menú que se despliega, nos posicionamos en la pestaña Install y escribimos en el campo de búsqueda ibmiotapp

  2. Pulsamos sobre Install

image

2.5. Procesado de los mensajes en Node-RED

  1. Ya con la extensión de IBM instalada, volvemos a pulsar sobre el botón de menú y esta vez pulsamos sobre importar

  2. Ahora copiamos el siguiente código y lo pegamos sobre el editor que se ha abierto.
    nodeRedCode.txt

  3. Una vez pegado pulsamos sobre Import

image

image

  1. Si hemos realizado el proceso correctamente deberíamos ver un flujo con 4 nodos en pantalla. Ahora debemos configurarlos.

  2. 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.

  3. Configurado el nodo, pulsamos sobre Deploy. Veremos dos puntos verdes bajo los nodos IBM indicando que el despliegue se ha realizado correctamente.

image

image

image

  1. 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.

  2. 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.

image

image

image

2.7. Persistencia de datos en Cloudant

  1. Ahora que somos capaces de recibir y visualizar los datos, procederíamos a persistirlos en una base de datos en la nube.

  2. En el buscador escribimos Cloudant y arrastramos el nodo de salida y lo conectamos con IBM IoT App in.

  3. 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.

image

image

image

  1. De vuelta a la consola de IBM Cloud, seleccionaríamos el servicio de Cloudant

  2. Pulsamos sobre Launch Dashboard para abrir la consola

image

image

  1. 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.

  2. En esta nueva vista, podemos filtrar y visualizar los mensajes

  3. Si pulsamos sobre cualquiera de los mensajes, podemos ver el formato Json con la información del dispositivo y de la plataforma.

image

image

image

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:

  1. Volvemos al entorno de Node-Red

  2. En el buscador, escribimos change y lo arrastramos al tablero.

  3. Borramos la conexión entre los nodos de IBM IoT App In y Node-red-data y entre msg.playload

  4. Reconectamos los nodos de IBM IoT App In con change y este con Node-red-data y msg.playload

image

image

  1. Hacemos doble click sobre el nodo de set.msg.playload para abrir la configuración

  2. Dejamos el primer campo como playload y cambiamos el de más abajo a expression

  3. Introducimos el siguiente código:

msg.payload.{
    "timestamp" : $millis(),
    "ax" : d."acceleration_x",
    "ay" : d."acceleration_y",
    "az" : d."acceleration_z"
}
  1. Tras esto, pulsamos en done, y nuevamente en done.

image

image

  1. Pulsamos sobre Deploy y si el sensor está detenido, lo reactivamos.

  2. Si hemos seguido los pasos correctamente, en debug deberán aparecer los nuevos mensajes ya filtrados para su posterior carga y análisis.

image

image

3.2. Configuración Watson Studio

  1. Volvemos a la consola de IBM Cloud

  2. Dentro de Servicios buscamos la instancia de Cloudant y pulsamos sobre su nombre.

  3. En la nueva ventana pulsamos sobre Service credentials

  4. Pulsamos sobre New credential

image

image

  1. Nombramos la credencial con un nombre único y pulsamos sobre Add

  2. Una vez creada la credencial, desplegamos con el botón de la flecha para ver su contenido y lo copiamos para su posterior consulta.

image

image

  1. Volvemos al catálogo y buscamos Watson Studio, pulsamos sobre el.

  2. 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.

image

image

image

  1. En la ventana siguiente pulsamos sobre Get Started

  2. En la nueva ventana pulsamos sobre New Project

  3. Entre las dos opciones, elegimos la de Create an empty project

image

image

image

  1. Damos un nombre al proyecto

  2. Y pulsamos sobre Add

  3. En la ventana emergente, pulsamos en Create

image

image

  1. Pulsamos sobre Refresh

  2. Y una vez que aparezca el servicio que acabamos de crear podemos pulsar sobre Create

image

image

3.3. Conexión Cloudant con Notebook

  1. En la página del Proyecto, pulsamos sobre Add to Project +

  2. En el desplegable pulsamos sobre Notebook

image

image

  1. Le damos nombre al notebook

  2. Como runtime seleccionamos Default Spark Python 3.6

  3. Pulsamos en Create

image

  1. 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.

image

image

  1. Si no hemos recibido ningún mensaje de error, procedemos con los siguientes:
df = readDataFrameFromCloudant('node-red-data') df.createOrReplaceTempView('df')
display(df)

image

  1. Una vez hecho correr esas dos instrucciones, habremos importado los datos a una tabla.

  2. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions