Todos sabemos que un smartphone dispone de múltiples sensores como por ejemplo el acelerómetro, el giroscopio, el sensor de luz, el termómetro, el lector de huellas, etc.
Las aplicaciones clientes instaladas en los smartphones recogen los datos de los diferentes sensores para procesarlos internamente o enviarlas a un servidor IoT para analizar los datos y en algunos caso, devolver al dispositivo mensajes de vuelta
Bien, pues me he lanzado a comprobar que es posible y en menos de 30 minutos, usando un quick-starter y un tutorial (en el que está basado este artículo), voy a intentar convertir tu smartphone en un dispositivo sensor que conectado al servidor IBM IoT (Internet of Things), se usará para enviar/recibir datos y procesar/visualizar los datos del dispositivo en IBM Bluemix.
¿No os parece alucinante? utilizar un sensor de tu smartphone y procesar los datos que se obtienen... uhmm.. Imaginad cuando se le dedica tiempo a frikear esto lo que se puede hacer ;)
Bueno vamos a ello, la visión general de la arquitectura que voy a montar será la que muestra la siguiente imagen:
Es caso de uso de este post es simple, el smartphone se gira y envía la información a un servicio IoT (1) que lo procesa e envía un mensaje de vuelta (2) para que cambie el color de la pantalla del smartphone en función de la aceleración de giro. Los datos obtenidos del sensor se pueden explotar por una aplicaión cliente (3).
Para ello se usará el sensor acelerómetro, indispensable para medir la aceleración, la inclinación y la gravedad. Este sensor normalmente se usa cuando cambiamos el dispositivo de una posición vertical a horizontal y viceversa.
La comunicación entre el Smartphone y el servicio IoT se realiza mediante el protocolo MQTT (Message Queue Telemetry Transport). MQTT es un protocolo usado para la comunicación machine-to-machine (M2M) en IoT y está orientado a la comunicación de sensores debido a que consume muy poco ancho de banda. Puede ser utilizado en la mayoría de los dispositivos con pocos recursos: CPU, RAM, etc.
1) Acceder a la cuenta de Bluemix
2) Pulsar en Catalog y en el filtro de búsqueda escribir “Internet of Things"
3) Pulsar en el Boilerplates de Internet of Things
4) Escribir el nombre de la aplicación IoT y pulsar Create
Se desplegarán y se conectarán los siguientes servicios:
1) Acceder a la consola de la aplicación IoT
2) Pulsar en el menú de IBM Bluemix en la parte superior izquierda de la pantalla
3) Seleccionar Services y después pulsar Dashboard
4) En la lista de servicios buscar el servicio IoT creado y pulsar sobre él
5) En la página inicial de la gestión del servicio pulsar Launch
6) Se muestra el panel de control del servidor IBM Internet of Things, que es un servicio independiente de Bluemix. Se asigna un ID de organización a la aplicación y se necesitará este ID más adelante al desarrollar la aplicación para dispositivos móviles.
7) Pulsar en el icono Devices
8) Pulsar en Add Devices
9) Crear un tipo de dispositivo que se llame Android y pulsar Next
10) Pulsar Next, para esta demo no es necesario información adicional del dispositivo
11) Pulsar Next
12) Pulsar Create para crear el tipo de dispositivo
13) Aparece la pantalla de añadir dispositivo. Seleccionar el tipo Android. Pulsar Next
14) Añadir el ID del dispositivo y pulsar Next
15) Dejar la información de los metadatos en blanco y pulsar Next
16) Crear una autenticación por defecto de tokens: secret123 y pulsar Next
17) Pulsar Add
18) Cerrar la ventana
Ya está listo para enviar mensajes MQTT desde un dispositivo al IBM IoT Server.
1) En el móvil, ir a Settings > Security. Debajo de Device Administration, activa Unknown sources. También se puede instalar .apk desde repositorios fuera del Google Play.
2) Abrir un navegador y descargar la aplicación de cliente desde la URL:
Se descarga el fichero : iot-starter_501_v2.apk
Nota: versión compilada con Android 5.0.1 y compatible con versiones superiores
3) Instalar la la aplicación iot-starter_501_v2.apk en el dispositivo móvil
4) Una vez instalada la aplicación, se ejecuta para terminar la configuración
Nota: No seguir el tutorial pulsando Skip Tutorial
5) Introducir los parámetros de configuración
Nota: El código de la aplicación Android se puede descargar de Git:
https://github.com/ibm-watson-iot/iot-starter-for-android
2) Pulsar sobre el dispositivo y pulsar sobre algún evento recibido
Nota: Los mensajes que se envían desde el móvil están en formato JSON y contienen datos de aceleración y posición.
1) Acceder a la consolad de la aplicación de Bluemix
2) Pulsar en el menú de IBM Bluemix en la parte superior izquierda de la pantalla
3) Pulsar Apps y después sobre el mismo menú pulsar Dashboard
4) En la lista de aplicaciones Cloud Foundry buscar la aplicación creada y pulsar el icono Open URL
Nota: La primera vez que se accede aparece un asistente de configuración de la seguridad del editor Node-RED. También se crea por defecto un flujo de trabajo con los objetos necesarios para interactuar con dispositivos IoT
5) Crear un nuevo flujo, copiar e importar desde el clipboard el siguiente código con una configuración por defecto:
6) Adaptar los parámetros específicos. Pulsar dos veces sobre el nodo IBM IoT App out. En la ventana emergente, introducir el ID del dispositivo y pulsar DONE
7) Pulsar Deploy para desplegar los nodos y activarlos automáticamente
8) Mover el smartphone para ver cómo cambia de color la pantalla dependiendo de la aceleración de giro.
9) En el editor Node-RED, pulsar en el rectángulo cerca del nodo msg.payload node, y pulsar el tabulador debug para activar las trazas. Los datos de las trazas enviados desde el dispositivo móvil son en formato JSON
10) Inspecciona el código del calculador del color. Pulsa dos veces sobre la función calc color
Ahora hay una comunicación bidireccional entre su smartphone y la aplicación de Bluemix.
1) Descargar el código de la aplicación ejemplo:
3) Crear aplicación. Pulsar Create App
4) Pulsar sobre la aplicaciones Cloud Foundry SDK for Node.js
5) Escribir el nombre de la aplicación. En este ejemplo iotvisualizerjif
6) Pulsar Create. En pocos minutos la aplicación se creará y estará en ejecución
7) Descomprimir la aplicación rickshaw4iot-0.2.0.zip
8) Editar el fichero de manifiesto manifest.yml y cambiar los parámetros host y name de la aplicación como se muestra en el ejemplo:
9) Desde la línea de comandos y dentro de la carpeta descomprimida del proyecto ejecutar los siguientes comandos:
cf login solo es requerido la primera vez
10) Desplegar la aplicación en Bluemix
11) Realizar un Bind con la aplicación IoT creada. En el Dashboard de la aplicación Pulsar Connections y luego Connect Existing
12) Seleccionar el servicio creado en el ejemplo y pulsar Connect
13) Pulsar Restage para que la aplicación empieze a recibir mensajes del servidor IoT
14) Abrir la aplicación desde un navegador, en este ejemplo:
15) Selecciona el dispositivo a visualizar
He convertido fácilmente mi smartphone en un dispositivo sensor, y lo he conectado al servidor IBM Internet of Things, para enviar y recibir datos en menos de 30 minutos.
¿Y tú? ¿lo has conseguido?
Las aplicaciones clientes instaladas en los smartphones recogen los datos de los diferentes sensores para procesarlos internamente o enviarlas a un servidor IoT para analizar los datos y en algunos caso, devolver al dispositivo mensajes de vuelta
Bien, pues me he lanzado a comprobar que es posible y en menos de 30 minutos, usando un quick-starter y un tutorial (en el que está basado este artículo), voy a intentar convertir tu smartphone en un dispositivo sensor que conectado al servidor IBM IoT (Internet of Things), se usará para enviar/recibir datos y procesar/visualizar los datos del dispositivo en IBM Bluemix.
¿No os parece alucinante? utilizar un sensor de tu smartphone y procesar los datos que se obtienen... uhmm.. Imaginad cuando se le dedica tiempo a frikear esto lo que se puede hacer ;)
Bueno vamos a ello, la visión general de la arquitectura que voy a montar será la que muestra la siguiente imagen:
Es caso de uso de este post es simple, el smartphone se gira y envía la información a un servicio IoT (1) que lo procesa e envía un mensaje de vuelta (2) para que cambie el color de la pantalla del smartphone en función de la aceleración de giro. Los datos obtenidos del sensor se pueden explotar por una aplicaión cliente (3).
Para ello se usará el sensor acelerómetro, indispensable para medir la aceleración, la inclinación y la gravedad. Este sensor normalmente se usa cuando cambiamos el dispositivo de una posición vertical a horizontal y viceversa.
La comunicación entre el Smartphone y el servicio IoT se realiza mediante el protocolo MQTT (Message Queue Telemetry Transport). MQTT es un protocolo usado para la comunicación machine-to-machine (M2M) en IoT y está orientado a la comunicación de sensores debido a que consume muy poco ancho de banda. Puede ser utilizado en la mayoría de los dispositivos con pocos recursos: CPU, RAM, etc.
¿Qué se necesita?
- Una cuenta en Bluemix, existe una versión trial de 30 días
- Cloud Foundry CLI, interfaz de línea de comandos de Bluemix para descargar, modificar y reasignar aplicaciones y instancias de servicio de Cloud Foundry.
- Teléfono móvil (smartphone) (Android)
Paso 1 - Crear aplicación IoT
Este paso se describe el procedimiento para la creación de una aplicación en IoT que contiene un motor Node-RED que se usa para procesar los mensajes de de la aplicación IoT. También se crea un servicio de IoT para enviar y recibir mensajes MQTT.1) Acceder a la cuenta de Bluemix
2) Pulsar en Catalog y en el filtro de búsqueda escribir “Internet of Things"
3) Pulsar en el Boilerplates de Internet of Things
4) Escribir el nombre de la aplicación IoT y pulsar Create
Se desplegarán y se conectarán los siguientes servicios:
- Watson IoT Platform - Un kit de herramientas IoT que incluye administración de pasarelas, administración de dispositivos y acceso a aplicaciones. Mediante el uso de Watson IoT Platform, puede recopilar datos de dispositivos conectados y ejecutar analíticas en datos en tiempo real
- IBM® SDK for Node.js para Bluemix® - Entorno de ejecución en el que Node-RED se ejecuta
- IBM® Cloudant® NoSQL DB para Bluemix® - Base de datos en la que Node-RED almacena metadatos
- Aplicación Node-RED - Una instancia de la aplicación Node-RED que incluye nodos diseñados para la plataforma Watson IoT
Paso 2 - Añadir dispositivo para enviar mensajes MQTT al servidor IoT
Este paso muestra el procedimiento para registrar y crear un tipo de dispositivo en la plataforma de Watson IoT.
2) Pulsar en el menú de IBM Bluemix en la parte superior izquierda de la pantalla
3) Seleccionar Services y después pulsar Dashboard
4) En la lista de servicios buscar el servicio IoT creado y pulsar sobre él
5) En la página inicial de la gestión del servicio pulsar Launch
6) Se muestra el panel de control del servidor IBM Internet of Things, que es un servicio independiente de Bluemix. Se asigna un ID de organización a la aplicación y se necesitará este ID más adelante al desarrollar la aplicación para dispositivos móviles.
7) Pulsar en el icono Devices
8) Pulsar en Add Devices
9) Crear un tipo de dispositivo que se llame Android y pulsar Next
10) Pulsar Next, para esta demo no es necesario información adicional del dispositivo
11) Pulsar Next
12) Pulsar Create para crear el tipo de dispositivo
13) Aparece la pantalla de añadir dispositivo. Seleccionar el tipo Android. Pulsar Next
14) Añadir el ID del dispositivo y pulsar Next
15) Dejar la información de los metadatos en blanco y pulsar Next
16) Crear una autenticación por defecto de tokens: secret123 y pulsar Next
17) Pulsar Add
18) Cerrar la ventana
Ya está listo para enviar mensajes MQTT desde un dispositivo al IBM IoT Server.
Paso 3 – Instalar y configurar la aplicación Android
Este paso muestra el procedimiento para instalar y configurar la aplicación cliente en un smartphone.
2) Abrir un navegador y descargar la aplicación de cliente desde la URL:
Se descarga el fichero : iot-starter_501_v2.apk
Nota: versión compilada con Android 5.0.1 y compatible con versiones superiores
3) Instalar la la aplicación iot-starter_501_v2.apk en el dispositivo móvil
4) Una vez instalada la aplicación, se ejecuta para terminar la configuración
Nota: No seguir el tutorial pulsando Skip Tutorial
5) Introducir los parámetros de configuración
- Organization: El ID de la organización que se muestra en el servidor de IBM IoT server (cuando empieza la comunicación empieza a enviar mensajes MQTT al servidor IoT). Para este ejemplo, puflid para este tutorial
- Device ID: ID con el cual se ha configurado el dispositivo
- Auth Token: Clave secreta de autentificación.
Nota: El código de la aplicación Android se puede descargar de Git:
https://github.com/ibm-watson-iot/iot-starter-for-android
Paso 4 – Verificar que los datos son enviados del móvil al servidor IoT
1) Volviendo al servidor IoT, ir a página Devices2) Pulsar sobre el dispositivo y pulsar sobre algún evento recibido
Nota: Los mensajes que se envían desde el móvil están en formato JSON y contienen datos de aceleración y posición.
Paso 5 – Procesar los mensajes enviados en Node-RED
Esta sección mejorará la aplicación Bluemix IoT utilizando un flujo
Node-RED para procesar mensajes desde el smartpohone y, a continuación,
enviar mensajes al smartphone. El móvil reaccionará en estos mensajes
cambiando el color de fondo en la aplicación.
Nota: Node-RED es una herramienta visual que facilita el procesamiento de mensajes de IoT.
1) Acceder a la consolad de la aplicación de Bluemix
2) Pulsar en el menú de IBM Bluemix en la parte superior izquierda de la pantalla
3) Pulsar Apps y después sobre el mismo menú pulsar Dashboard
4) En la lista de aplicaciones Cloud Foundry buscar la aplicación creada y pulsar el icono Open URL
Nota: La primera vez que se accede aparece un asistente de configuración de la seguridad del editor Node-RED. También se crea por defecto un flujo de trabajo con los objetos necesarios para interactuar con dispositivos IoT
5) Crear un nuevo flujo, copiar e importar desde el clipboard el siguiente código con una configuración por defecto:
[{"id":"215c6601.12d32a","type":"ibmiot
in","authentication":"boundService","apiKey":"","inputType":"evt","deviceId":"","applicationId":"","deviceType":"","eventType":"accel","commandType":"","format":"json","name":"IBM
IoT App
In","service":"registered","allDevices":true,"allApplications":"","allDeviceTypes":true,"allEvents":"","allCommands":"","allFormats":"","x":264.1999969482422,"y":434.1999969482422,"z":"dc6a0ca6.7993b","wires":[["ce21edbb.320628","fdfdaaa2.a45678"]]},{"id":"ce21edbb.320628","type":"function","name":"calc
color","func":"var accelZ = msg.payload.d.acceleration_z;\nvar
r = 0.0;\nvar b = 0.0;\nvar g = 0.0;\nif (accelZ > 0) {\n\tg =
Math.round(accelZ * 25);\n} else if (accelZ < 0) {\n\tr = 255.0;\n} else
{\n\tr = 104;\n\tg = 109;\n\tb = 115;\n}\na = 1.0;\n\nmsg.eventOrCommandType =
\"color\";\nmsg.payload =
JSON.stringify({\"d\":{\"r\":r,\"b\":b,\"g\":g,\"alpha\":a}});\n\nreturn
msg;","outputs":1,"noerr":0,"x":437.1999969482422,"y":430.1999969482422,"z":"dc6a0ca6.7993b","wires":[["9df37edb.5d4588"]]},{"id":"9df37edb.5d4588","type":"ibmiot
out","authentication":"boundService","apiKey":"","outputType":"cmd","deviceId":"112233445566","deviceType":"Android","eventCommandType":"text","format":"json","data":"{\"d\":{\"value\":\"text\"}}","name":"IBM
IoT App Out","service":"registered","x":629.1999969482422,"y":443.1999969482422,"z":"dc6a0ca6.7993b","wires":[]},{"id":"fdfdaaa2.a45678","type":"debug","name":"","active":false,"console":"false","complete":"false","x":442.1999969482422,"y":364.1999969482422,"z":"dc6a0ca6.7993b","wires":[]}]
6) Adaptar los parámetros específicos. Pulsar dos veces sobre el nodo IBM IoT App out. En la ventana emergente, introducir el ID del dispositivo y pulsar DONE
7) Pulsar Deploy para desplegar los nodos y activarlos automáticamente
8) Mover el smartphone para ver cómo cambia de color la pantalla dependiendo de la aceleración de giro.
9) En el editor Node-RED, pulsar en el rectángulo cerca del nodo msg.payload node, y pulsar el tabulador debug para activar las trazas. Los datos de las trazas enviados desde el dispositivo móvil son en formato JSON
10) Inspecciona el código del calculador del color. Pulsa dos veces sobre la función calc color
Ahora hay una comunicación bidireccional entre su smartphone y la aplicación de Bluemix.
Paso 6 - Crear una aplicación Bluemix para visualizar los datos del sensor
Este paso muestra el procedimiento para crear una aplicación auxiliar para visualizar los datos del sensor.
1) Descargar el código de la aplicación ejemplo:
- https://github.com/ibm-watson-iot/rickshaw4iot
3) Crear aplicación. Pulsar Create App
4) Pulsar sobre la aplicaciones Cloud Foundry SDK for Node.js
5) Escribir el nombre de la aplicación. En este ejemplo iotvisualizerjif
6) Pulsar Create. En pocos minutos la aplicación se creará y estará en ejecución
7) Descomprimir la aplicación rickshaw4iot-0.2.0.zip
8) Editar el fichero de manifiesto manifest.yml y cambiar los parámetros host y name de la aplicación como se muestra en el ejemplo:
applications: - disk_quota: 1024M host: iotvisualizerjif name: iotvisualizerjif command: node app.js path: . domain: mybluemix.net instances: 1 memory: 128M
9) Desde la línea de comandos y dentro de la carpeta descomprimida del proyecto ejecutar los siguientes comandos:
& cf api https://api.ng.bluemix.net
& cf login -u <your_bluemix_login_id>
cf login solo es requerido la primera vez
10) Desplegar la aplicación en Bluemix
& cf push
11) Realizar un Bind con la aplicación IoT creada. En el Dashboard de la aplicación Pulsar Connections y luego Connect Existing
12) Seleccionar el servicio creado en el ejemplo y pulsar Connect
13) Pulsar Restage para que la aplicación empieze a recibir mensajes del servidor IoT
14) Abrir la aplicación desde un navegador, en este ejemplo:
15) Selecciona el dispositivo a visualizar
Conclusiones
Pues funciona!!! :DHe convertido fácilmente mi smartphone en un dispositivo sensor, y lo he conectado al servidor IBM Internet of Things, para enviar y recibir datos en menos de 30 minutos.
¿Y tú? ¿lo has conseguido?