Contenido


Construcción de un Sensor de Temperatura Listo para la Nube con Arduino Uno e IBM IoT Foundation, Parte 3: Construcción de una Aplicación Personalizada con NODE-RED

Comments

En las primeras dos partes de esta serie, implementó las primeras tres fases de un proyecto de IoT. En la arquitectura conceptual del proyecto, un tablero Arduino, conectado a un sensor de temperatura, envía información sobre temperatura y humedad en un esquema regular a IoT Foundation a través del protocolo MQTT usando capacidades de IBM®Cloud™ y los datos se trazan en un gráfico en tiempo real:

Hasta ahora, demostré la habilidad de reunir datos del sensor de temperatura y humedad con Arduino y enviarlos a través de MQTT a IBM IoT Foundation (o al menos la parte de QuickStart). Y eso, en sí mismo, ya es genial: ver cómo los datos se transmiten en gráficos en tiempo real proporcionados por QuickStart.

Sin embargo, el motivo por el cual quería construir este proyecto en primer lugar era que quería poder ver los datos históricos,— volver y descubrir si los problemas encontrados con mi conexión a Internet estaban relacionados con la temperatura del momento en mi armario de cableado. Para resolver este rompecabezas, debe ir más allá de lo que Quickstart ofrece y construir una aplicación personalizada que pueda almacenar y mostrar datos históricos.

Lo grandioso es que algunas de las nuevas funciones de IBM Cloud y su conexión a IBM IoT Foundation no solo hicieron esto posible, sino que lo facilitaron. En este tutorial, les mostraré los pocos pasos del proceso. Primero, conectará una aplicación registrada a IoT Foundation. Luego, construirá una aplicación que pueda captar los datos recibidos a través de MQTT desde Arduino y almacenarlos en una base de datos NoSQL. Finalmente, permitirá que esos datos se puedan consultar a través de una interfaz de REST.

En la última parte, conectará esas interfaces de REST a un cliente sencillo de JavaScript y HTML y el proceso estará finalizado.

Lo que necesitará para su aplicación

  • El hardware y software analizados en la Parte 1 y Parte 2 de esta serie, configurados correctamente
  • Un ID de IBM
  • Una cuenta deIBM Cloud asociada con su ID de IBM

Node-RED facilita la construcción de API sencillas o conectar dispositivos a API.

Paso 1: Crear la conexión entre IBM Cloud e IOT Foundation

Como mencioné anteriormente, lo que ha estado utilizando en IBM IoT Foundation es QuickStart — un área compartida para que dispositivos reciban datos y puedan visualizarlos fácilmente a medida que llegan. Sin embargo, la clave aquí es "compartida". QuickStart no ofrece un armario privado para sus datos, y usted tampoco puede reunir o manejar los datos de ninguna manera luego de haberlos enviado. No obstante, puede registrar una aplicación que ha sido escrita con IBM Cloud en IOT Foundation, que le ofrece estos beneficios. El registro en IOT foundation también le permite alimentar múltiples dispositivos en su aplicación.

Solo analizaré el enfoque más sencillo para registrarse en IOT Foundation (a través de IBM Cloud), pero recomiendo que le eche un vistazo a las demás opciones y planes disponibles a medida que analice maneras de utilizar IBM Cloud e IOT Foundation más allá de los fundamentos brindados en este tutorial.

Paso 2: Crear una aplicación de Node-RED básica con IoT Starter

La primera cosa que debe hacer es crear un esquema de una aplicación en IBM Cloud. Más adelante obtendrá el código de la aplicación, pero primero, debe crear un lugar para ejecutar su aplicación. Por mucho, la manera más fácil de hacerlo en IoT es con Node-RED. Node-RED es un editor basado en el navegador para unir flujos que conectan entradas de datos (como clientes de MQTT o solicitudes de HTTP) a nodos como bases de datos o funciones escritas en JavaScript. Node-RED facilita la construcción de API sencillas o conectar dispositivos a API.

En su navegador, inicie sesión en IBM Cloud con el ID de IBM. En el catálogo, haga clic en los modelos Internet of Things Foundation :

Screenshot of the Internet of Things Foundation
Screenshot of the Internet of Things Foundation

En la esquina superior derecha de la página Crear en los modelos de Internet of Things Foundation, ingrese el nombre y host de su aplicación:

Screenshot of the Create Page window on the Internet of Things Foundation boilerplate
Screenshot of the Create Page window on the Internet of Things Foundation boilerplate

El nombre elegido debe ser único, porque mybluemix.net es un espacio de nombres compartido. Anote el nombre, que se convertirá en la base de URL de sus servicios.

Al crear el arrancador, se crea una aplicación que utiliza un buildpack Node.js SDK que hospedará el Node-RED; también crea un servicio Cloudant que conserva la configuración para Node-RED. La creación puede tardar uno o dos minutos. Cuando IBM Cloud le diga que su aplicación está disponible, haga clic en el mosaico de la aplicación recién creada en el panel de instrumentos de IBM Cloud para abrir la página de visión general de la aplicación:

Screenshot of application tile in main IBM Cloud status page
Screenshot of application tile in main IBM Cloud status page

Luego, debe añadir un servicio de IoT para habilitar los mensajes de MQTT que son específicos para que sus dispositivos sigan la ruta correcta a su aplicación. En la misma página, desplácese hacia abajo hasta la sección Servicios y haga clic en AÑADIR UN SERVICIO en la página de visión general de su aplicación en el panel de instrumentos.

Screenshot of the services section of application overview page
Screenshot of the services section of application overview page

Esto abre la página de catálogo de IBM Cloud; desplácese hasta la sección Internet de las Cosas y haga clic en el servicio Internet de las Cosas :

Screenshot of the Internet of Things service tile
Screenshot of the Internet of Things service tile

Al hacer clic en el servicio Internet de las Cosas, se dirige a la página de creación de un servicio. En esta página, debe asegurarse de que la aplicación seleccionada en la lista desplegable "Aplicación" sea la aplicación creada en el paso anterior.

Screenshot of the Internet of Things Foundation Service Creation page
Screenshot of the Internet of Things Foundation Service Creation page

Haga clic en CREAR. Verá una ventana de mensaje que le pregunta si desea volver a implementar la aplicación. Seleccione Aceptar en la ventana para volver a implementar la aplicación. Al finalizar, deberá tener dos servicios añadidos a su aplicación.

Paso 3: Modificar la aplicación básica registrada para añadir una base de datos

La base de datos Cloudant vinculada a la aplicación solo se utiliza para conservar la configuración para Node-RED. Para almacenar los datos de mensaje provenientes de MQTT, debe vincular otra base de datos: en este caso, una base de datos MongoDB de MongoLab.

Vuelva a la página de visión general de su aplicación en el panel de instrumentos y haga clic en AÑADIR UN SERVICIO. En la página de catálogo, desplácese hacia abajo hasta las opciones de Gestión de Datos y haga clic en base de datos Mongo de MongoLab:

Screenshot of the MongoLab Mongo database service tile
Screenshot of the MongoLab Mongo database service tile

Siga las indicaciones para crear una base de datos Mongo de MongoLab. Esto añade el servicio a la aplicación y, de nuevo, le pregunta si desea volver a implementar la aplicación. Seleccione Aceptar en la ventana adecuada.

Ha creado lo que IOT Foundation denomina una aplicación registrada. Entre bastidores en la creación del servicio de IOT Foundation, IBM Cloud ha hecho magia con claves API para conectar el tiempo de ejecución Node.js al intermediario MQTT en Internet of Things Foundation. Sin embargo, todavía debe enrutar los mensajes del dispositivo Arduino Uno a su aplicación. Para ello, debe registrar su dispositivo en IOT Foundation. La próxima sección incluye algunos pasos, pero cuando se libre de este trabajo preliminar, ¡podrá empezar a divertirse con el código!

Empiece haciendo doble clic en el mosaico del Servicio IOT Foundation en la página principal de estatus de la aplicación. Esto abre la página de inicio de Internet of Things Foundation.

Screenshot of the Internet of Things Foundation launch page
Screenshot of the Internet of Things Foundation launch page

Haga clic en Iniciar en la esquina superior derecha de la página. Luego de esto, verá la organización creada en IOT Foundation.

Screenshot of the IOT Foundation welcome page
Screenshot of the IOT Foundation welcome page

Una organización es una estructura de nivel superior que le permite añadir personas, dispositivos y claves API. Al crear un nuevo servicio de IOT en IBM Cloud, este automáticamente creará una organización por usted. El nombre de la organización comenzará con "Instancia de servicio de IBM Cloud". Brindaré más detalles sobre esa organización más adelante. Antes, debe añadir una persona a esta organización — ¡esa persona es usted! Haga clic en la pestaña Personas en la parte superior de la página, luego, ingrese su ID de IBM (el ID utilizado para registrarse en IBM Cloud y para crear su aplicación) en el campo de texto y haga clic enAñadir.

Screenshot illustrating how to add a person to an organization
Screenshot illustrating how to add a person to an organization

A continuación, lo que debe hacer es añadir (o registrar) su dispositivo. Esto es similar al proceso de QuickStart, pero permite que el dispositivo envíe mensajes al nuevo destino de MQTT para los dispositivos registrados.

Screenshot: registering device 1 of 2
Screenshot: registering device 1 of 2

Seleccione Arduino Uno para el Tipo de Dispositivo. Asegúrese de ingresar la dirección MAC para el escudo de ethernet como el ID del dispositivo. Luego, haga clic en Continuar.

Preste especial atención a este próximo paso. Verá información importante: la primera, es el código de seis dígitos para la organización (que también se muestra en el menú desplegable en la parte superior izquierda de la página principal); y la segunda, es el token de autenticación necesario para autenticar su Arduino. Anótelo todo (o realice una captura de pantalla y guárdela). Lo necesitará para poder modificar el código de su bosquejo de Arduino (y también necesitará el código de seis dígitos de la organización).

Screenshot: registering device 2 of 2
Screenshot: registering device 2 of 2

Paso 4: Descargar y modificar el bosquejo de Arduino

  1. Haga clic en Obtener el Código.
  2. En la página de visión general del proyecto IBM DevOps Services, haga clic enEDITAR CÓDIGO.
  3. Abra la carpeta MQTT_IOT_SENSORS_AUTH_REL, seleccione el nuevo archivo del bosquejo MQTT_IOT_SENSORS_AUTH_REL.inoy haga clic en Archivo > Exportar.
  4. Guarde el archivo ZIP en su computadora, expándalo y abra el bosquejo en IDE de Arduino.

Es básicamente igual al bosquejo que usted vio en la Parte 2, pero con algunas diferencias cruciales y la mayoría está en esta sección:

 char servername[]="666666.messaging.internetofthings.ibmcloud.com"; String clientName = String("d:666666:iotsample-arduino:") + macstr; String topicName = String("iot-2/evt/status/fmt/json"); char username[]="use-token-auth"; char password[]="XXXXXXXXXXXXXXXXXXX";

Observe los cambios del ejemplo en la Parte 2: modifiqué el nombre del servidor de QuickStart y también el nombre del cliente . Además, añadí dos variables nuevas: username y password.

En el IDE de Arduino, actualice las cadenas de caracteres nombre del servidor y nombre del cliente para sustituir el 666666 por su ID de seis dígitos de la organización. Luego, sustituya el valor de contraseña por el token de autenticación obtenido al registrar el dispositivo. Observe que el nombre de usuario siempre es use-token-auth. Solo la parte de token de autenticación (contraseña) se utiliza para identificar y validar clientes.

Si analiza algunas líneas más abajo del código, encontrará otra línea de código crucial que ha sido modificada. Ahora, se conecta al intermediario MQTT con la versión de tres parámetros del métodoconnect() :

client.connect(clientStr,username,password);

Guarde el código y descárguelo a Arduino. Al abrir el Monitor Serial (Ctrl-Shift-M) luego de descargar el código, deberá ver la misma secuencia de conexión que en el último tutorial, pero de esta vez, los datos se están enviando a su parte reservada de IoT Foundation en lugar de QuickStart. No obstante, hasta ahora, es solo un contenedor de información: los datos entran pero no salen. Para abordar esta situación, es necesario crear una aplicación en IBM Cloud.

Paso 5: Editar el código en Node-RED

A estas alturas, ¡finalmente está listo para ver algún código! De vuelta a la página de visión general de la aplicación, en la parte superior izquierda, verá una sección para Rutas. Haga clic en la ruta de su aplicación y se dirigirá a la pantalla de inicio de Node-RED.

Screenshot: Route to the application
Screenshot: Route to the application

En la pantalla de inicio, desplácese para encontrar el botón grande rojo que dice "Ir para el editor de flujo Node-RED" y haga clic en él. Esto abre el editor de flujo.En este punto, su editor de flujo contiene un flujo de muestra. Seleccione los nodos en el flujo (uno a la vez o todos juntos) y elimínelos con la tecla suprimir. Esto vacía su editor de flujo. Seleccione el siguiente código y cópielo a un editor de texto.

 [{"id":"b1b4a786.d22c58","type":"ibmiot","name":"Bluemix IOT Token"},{"id":"68bf71d.f97409","type":"mongodb","hostname":"192.155.243.23","port":"10057","db":"db","name":"IBMCloud MongoDB"},{"id":"5c60019b.6aa8c8","type":"mongodb out","service":"_ext_","mongodb":"68bf71d.f97409","name":"Mongo Store","collection":"data","payonly":false,"upsert":false,"multi":false,"operation":"store","x":625.2000122070312,"y":121.19999694824219,"z":"cae409bb.8c23e8","wires":[]},{"id":"fc410194.f40058","type":"mongodb in","service":"_ext_","mongodb":"68bf71d.f97409","name":"MongoDB Query","collection":"data","x":539.2000122070312,"y":192.20001220703125,"z":"cae409bb.8c23e8","wires":[["9b229426.5a4378"]]},{"id":"9b229426.5a4378","type":"http response","name":"data output","x":732.2000122070312,"y":197.20001220703125,"z":"cae409bb.8c23e8","wires":[]},{"id":"7bfb2916.58f4f8","type":"debug","name":"","active":true,"console":false,"complete":false,"x":612.2000122070312,"y":63.19999694824219,"z":"cae409bb.8c23e8","wires":[]},{"id":"291be4b5.cca914","type":"function","name":"get and append time","func":"var d = new Date();\nvar n = d.getTime(); \nmsg.payload.d.time=n;\nreturn msg;","outputs":1,"x":343.20001220703125,"y":61.19999694824219,"z":"cae409bb.8c23e8","wires":[["5c60019b.6aa8c8","7bfb2916.58f4f8"]]},{"id":"15bd57a9.534cd8","type":"function","name":"update payload","func":"if ((typeof msg.payload.start == \"string\") & & (typeof msg.payload.end == \"string\")) {\n\tvar stt = parseInt(msg.payload.start);\n\tvar edd = parseInt(msg.payload.end);\n\tmsg.payload = {\n \t\"payload.d.time\": {$gt: stt, $lt: edd}\n }\n} else {\n\tmsg.payload = {}\n}\nreturn msg;","outputs":1,"x":334.20001220703125,"y":192.20001220703125,"z":"cae409bb.8c23e8","wires":[["fc410194.f40058"]]},{"id":"d3e8d05c.3bc0b","type":"http in","name":"data web service GET","url":"/data","method":"get","x":118.40000915527344,"y":192.40003967285156,"z":"cae409bb.8c23e8","wires":[["15bd57a9.534cd8"]]},{"id":"3fd8fa81.81641e","type":"ibmiot in","authentication":"boundService","apiKey":"b1b4a786.d22c58","inputType":"evt","deviceId":"","applicationId":"","deviceType":"","eventType":"","commandType":"","format":"","name":"IBM IoT App In","service":"registered","allDevices":true,"allApplications":"","allDeviceTypes":true,"allEvents":true,"allCommands":"","allFormats":true,"x":96.19999694824219,"y":61.19999694824219,"z":"cae409bb.8c23e8","wires":[["291be4b5.cca914"]]}]

Asegúrese de que todo el código esté en una línea. De lo contrario, habrá problemas de espaciado que pueden causar que el botón Aceptar esté deshabilitado, que algunos de los nodos funcionen incorrectamente o que Node-RED no los reconozca. Copie la línea de código en el portapapeles.

En el menú desplegable, en la esquina superior derecha del editor Node-RED, haga clic en Importar > Portapapeles... > Importar desde...:

Import from... menu selection
Import from... menu selection

Esta elección abre una ventana de importación. Pegue (con Control-V) el código desde el portapapeles a la ventana y haga clic en Aceptar para importar el flujo a Node-RED.

Paso 6: Examinar el código

Ahora está listo para darle un vistazo al código en Node-RED. Escribir código en Node-RED es sencillo. Debe arrastrar nodos (que representan distintos aspectos del programa) desde la paleta a la izquierda hasta el editor a la derecha. Al hacer doble clic en cualquier nodo, se abrirá una ventana de editor del nodo que se puede utilizar para definir las propiedades de ese nodo. A la derecha hay dos pestañas: Info, que brinda más información sobre el nodo seleccionado, y Depurar, que es adónde se dirigen los resultados. Usted usará la pestaña Depurar en este tutorial a medida que empiece a analizar la información proveniente de Arduino.

Screenshot: Node-RED Flows
Screenshot: Node-RED Flows

El flujo debería coincidir con lo que ve en el editor Node-RED en su navegador, pero los números son míos— veamos cada uno de los nodos por separado. Usted tiene dos flujos. El primer flujo es uno que recibe los mensajes de MQTT, los modifica para añadirles indicación de fecha y hora y, luego, los añade a la base de datos Mongo. En este flujo:

  1. El primer nodo es un nodo de entrada de IoT. Ese nodo recibe la información de sus dispositivos registrados en MQTT y la coloca en una variable denominada payload.
  2. El segundo nodo es un nodo de función. Es posible escribir funciones arbitrarias de JavaScript en un nodo de función. Como deseo presentarlos como datos en serie temporales (y como contar el tiempo es algo difícil en Arduino), agrego los datos recibidos desde Arduino a este nodo. El código para este nodo en particular (recibir y añadir tiempo) es:
     var d = new Date(); var n = d.getTime(); msg.payload.d.time=n; return msg;
  3. Este nodo es un nodo de salida de Mongo. Recibe cualquier información de JSON en la carga del flujo y la coloca en un contenedor nombrado en Mongo.
  4. Este último nodo es una de las funciones más prácticas de Node-RED. Es un nodo depurador. Es posible adjuntar un nodo depurador a cualquier parte del flujo y observar el contenido del resultado del mensaje (ya sea el mensaje completo o solo la carga útil) al cual está conectado el nodo. Los resultados se pueden enviar a la pestaña depurar, a la consola o a ambos.

Está casi listo para ver algo de interacción en la consola de depuración, pero debe añadir un poco de configuración antes. Debe conectar el nodo de salida Mongo a la base de datos de Mongo vinculada a la aplicación — un proceso de dos etapas. Primero, vuelva a la página de la aplicación y haga clic en el enlaceMostrar Credenciales en el mosaico para que la instancia MongoDB muestre las credenciales:

Screenshot of the Show Credentials UI
Screenshot of the Show Credentials UI

Copie el valor de la línea denominada uri (comienza por mongodb) al portapapeles y, luego, péguelo a un editor de texto. URI en estas credenciales representa una cadena de caracteres de conexión a la base de datos, pero no es utilizada directamente por Node-RED. Deberá analizarla e ingresar esos valores en la ventana. La cadena de caracteres de conexión posee el siguiente formato:

 mongodb://USERNAME:PASSWORD@HOSTNAME:PORT/DATABASE_NAME

Ahora, haga doble clic en el nodo de base de datos Mongo. Eso abre un editor para el nodo que muestra información como el contenedor que está actualizando. (Puede ver que, en este caso, su contenedor se denomina datos). También le permite editar los parámetros de conexión de la base de datos Mongo. Haga clic en el botón que parece un lápiz para abrir la ventana del nodo de configuración de edición de Mongo:

Mongo DB configuration
Mongo DB configuration

Copie sus valores específicos de la cadena de caracteres de conexión en Host (sustituya YOURHOST), Puerto (sustituya 00000), Base de datos (sustituya YOUR_DB), Nombre de usuario y Contraseña. Haga clic en Actualizar para cerrar la ventana.

A continuación, cierre el editor de nodo de salida Mongo y haga clic en el botón rojo Desplegar en la parte superior izquierda del editor Node-RED. Ahora, no solo debería ver los datos fluyendo en la página de depuración, sino también se deberían empezar a añadir documentos a la base de datos Mongo. Vuelva al mosaico de la base de datos Mongo en la pantalla de la aplicación, haga clic en él, abra el editor MongoDB y, luego, abra la base de datos. Puede ver que el número total de documentos empieza a aumentar.

Pero este flujo solo hace de su aplicación un contenedor de información. Lo que desea es una forma de retirar la información de la aplicación. Ese es el objetivo del segundo flujo, que crea (solo en cuatro nodos) un servicio web RESTful completo.

Examinar el segundo flujo

Veamos cada uno de los nodos de este flujo por separado:

  1. Este nodo es un nodo de entrada HTTP; exactamente como el nodo de entrada IOT que vimos anteriormente, es el lugar por el cual las solicitudes HTTP entran al entorno de Node-RED. Si hace doble clic en él, podrá ver que posee campos de propiedad para el método HTTP (GET, POST, etc. — GET para su servicio) y URI (/data en este caso).
  2. El segundo nodo es, nuevamente, un nodo de función como el que vimos anteriormente. En este caso, procesaré un parámetro de solicitud y actualizaré la carga útil:
     if ((typeof msg.payload.start == "string") && (typeof msg.payload.end == "string")) { var stt = parseInt(msg.payload.start); var edd = parseInt(msg.payload.end); msg.payload = { "payload.d.time": {$gt: stt, $lt: edd} } } else { msg.payload = {} } return msg;

    El motivo por el cual debo realizar esto es que un nodo de consulta MongoDB (el nodo 7, el siguiente) recibe una cadena de caracteres JSON especial que representa una consulta en la carga del mensaje. Podría haberlo recibido como el cuerpo de mi solicitud HTTP y no necesitaría el nodo. Sin embargo, es bien sabido que una de las cosas que nunca querrá hacer en ningún lenguaje de programación es permitir que una cadena de caracteres sin filtrar entre directamente a la base de datos. Si esto fuera una base de datos SQL, habría un inminente ataque de inyección de SQL, pero los mismos tipos de ataques de inyección también son posibles en bases de datos NoSQL JSON.

    Lo que estoy haciendo (analizar dos cadenas de caracteres como números y, luego, crear una cadena de caracteres de consulta a partir de esos números al estar seguro de que realmente son números) debería evitar muchos de esos problemas. Si existen parámetros de inicio y fin, pero no se pueden analizar como números, entonces no devuelve datos (la consulta falla). Si se realiza una solicitud sin parámetros, sencillamente devuelve GET predeterminado para todos los datos, lo que respeta la semántica del método GET en REST. Usted podría argumentar que yo no debería haber devuelto datos como predeterminado, pero esa es una discusión más profunda sobre qué debería ser la semántica de GET. Consulte Desarrollo Web Moderno con IBM WebSphere para otras posibles opciones.

  3. Este es un nodo de consulta MongoDB (aquel mencionado en la descripción del nodo anterior) que obtiene todo lo que esté en la carga del mensaje como una cadena de caracteres de consulta. Consulte la documentación de MongoDB para obtener más información sobre los tipos de cadenas de caracteres de consulta permitidos.
  4. Finalmente, el último nodo es un nodo de salida HTTP. Este nodo se necesita para permitir que los resultados se devuelvan a la aplicación solicitante. Luego de pegar este código y realizar los cambios a la configuración de Mongo, verá que el gran botón Desplegar, en la esquina superior derecha de la pantalla Node-RED, ahora está activo y rojo. Haga clic en el botón para desplegar su aplicación — solo debería tardar uno o dos segundos — y deberá ver un mensaje que dice "Despliegue exitoso".

Paso 6: Probar su aplicación

¿Está listo para ver si funciona? Ingrese este URL (sustituyendo yourhostname por el nombre de host elegido anteriormente para su aplicación) en el navegador, cURL, o su cliente de prueba de REST favorito:

 http://yourhostname.mybluemix.net/data

Deberá obtener una lista de todos los mensajes recibidos desde Arduino en el formato JSON, con indicaciones de fecha y hora. Elija dos de las indicaciones de fecha y hora en una serie y, luego, pruebe la otra variación (con los reemplazos necesarios):

 http://yourhostname.mybluemix.net/data?start=yourstarttime&end=yourendtime

Conclusión

Esto es todo para la tercera parte de esta serie. En la última parte, les mostraré cómo colocar un JavaScript GUI sobre su nueva aplicación de Node-RED y, como resultado, investigaremos un poco sobre la infraestructura del procesamiento de servicio REST.


Recursos para Descargar


Temas relacionados


Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Internet of Things
ArticleID=1019900
ArticleTitle=Construcción de un Sensor de Temperatura Listo para la Nube con Arduino Uno e IBM IoT Foundation, Parte 3: Construcción de una Aplicación Personalizada con NODE-RED
publish-date=02262018