Node.js App orientado a IoT


Para esta primera aplicación respecto al diagrama del post primario ( click aquí ) se usará Node.js y Socket.io para comunicar el front-end y Raspberry Pi, lo que será nuestro servidor de backend.

Crear máquina virtual

  • En el panel izquierdo de opciones buscar uno que se llama “Máquinas virtuales” (dependiendo del idioma configurado por la cuenta) para mostrar únicamente las máquinas virtuales creadas.
  • En la parte inferior izquierda buscar un botón que dice “Nuevo” y hacer click en este
  • Cuando se haya desplegado el menú seleccionar la opción “De la galería”
  • Al hacer click en esa opción aparecerá una ventana donde se podrá seleccionar un sistema operativo para crear una nueva máquina virtual. En esta ventana buscar en las opciones del panel izquierdo el que se llama “Ubuntu” y seleccionar la versión “Ubuntu Server 14.04 LTS”
  • En la parte inferior derecha podrá visualizar unos números los cuales representan los pasos para poder crear la máquina virtual con Ubuntu Server, actualmente se está en el primer paso y solo basta con darle click al botón que tiene una flecha para ir al siguiente paso.
  • En el segundo paso los únicos datos necesarios de cambiar en esta oportunidad son “NOMBRE DE LA MÁQUINA VIRTUAL” y seleccionar la opción que dice “PROPORCIONAR UNA CONTRASEÑA”, también es necesario desmarcar la opción “CARGAR CLAVE DE SSH COMPATIBLE PARA AUTENTICACIÓN”. En este paso recomiendo anotar el usuario y la contraseña de la máquina virtual, para fines educativos y si los requerimientos de la contraseña son complicados de cumplir recomiendo esta página para generar contraseñas  http://strongpasswordgenerator.com/ (tener en cuenta que si no se modifica el usuario es azureuser)
  • En el siguiente paso verificar que el “NOMBRE DNS DE SERVICIO EN LA NUBE” no esté marcado con un ícono en rojo ya que significa que no está disponible, si es así debe cambiarlo a uno que no exista (se verifica cuando el campo se ponga en verde)
  • En el mismo paso, en la sección inferior aparece un panel donde tiene los “Extremos” de la máquina virtual, esto significa que es la configuración del Firewall; en esta sección debemos crear uno que se llame “NodeJS” y para fines prácticos dejaremos el puerto público y el privado con el mismo número que será el 3000
  • Finalmente y en el paso número 4 se seleccionan los componentes disponibles para cada máquina virtual, en este caso dejaremos tal cual está todo y le damos click al botón con forma de flecha asertiva que está ubicado en la parte inferior derecha.
  • Luego de eso regresaremos al panel principal y veremos la máquina virtual creandose, para ello esperamos entre 5 a 20 minutos, cuando finalice podremos ver el estado en “Ejecutándose” y en color verde si todo salió bien.

Instalar NPM y Node.js

Cuando la máquina virtual creada anteriormente y habiendo instalado un cliente de SSH preferido, en este caso se usará WinSCP con PuTTY para conectarnos remotamente al servidor, cabe aclarar que esta máquina creada no cuenta con una interfaz gráfica sino que todo será hecho por consola de comandos y esta es una distribución de Linux.

  • Ejecutar WinSCP
  • En esta es necesario ingresar la ip proporcionada en Microsoft Azure, el usuario y la contraseña anteriormente creada, para obtener la ip iremos al panel de Azure y enseguida del nombre veremos una flecha de color blanco, hacer click ahí. Tener en cuenta que el nombre la máquina virtual a continuación es un ejemplo.
  • Cuando haya cargado la información dirigirse a la opción llamada “PANEL” que está en el menú superior.
  • En este Panel de administración de la máquina virtual navegaremos hacia abajo en la pantalla buscando en la parte derecha la “DIRECCIÓN IP VIRTUAL (VIP) PÚBLICA”
  • Teniendo esto ya es posible acceder a la máquina virtual de manera remota, luego de haber ingresado la información necesaria darle click al botón que dice “Conectar”.
  • Cuando salga un aviso de seguridad se le debe dar click en la opción “Si”
  • Cuando termine de cargar toda la información debemos ver algo parecido a lo siguiente que este representa todas las carpetas y archivos de la máquina virtual.
  • En la parte superior derecha buscar un botón con forma de dos computadores, este representa que deseamos abrir PuTTY, hacer click en este.
  • Nuevamente saldrá un aviso de seguridad, asegurarse en darle click que si e ingresar la contraseña en la consola, cuando se finalice el ingreso de la contraseña presionar “Enter” en el teclado. Cuando haya sido exitoso el inicio de sesión se verá la consola parecida a la siguiente.

Tip: Si la contraseña no coincide o es muy complicada de escribir PuTTY permite el pegado desde portapapeles, para ello es necesario copiar el texto de la contraseña y dar click derecho en un parte vacía de la consola (en color negro).

  • Ahora solo resta instalar Node.js y NPM que es el administrador de paquetes para Node.js, para hacer esto solo escribir los siguientes comandos. Tener en cuenta de ejecutar uno por uno.
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
  • Para probar que fue instalado exitosamente Node.js debemos escribir nodejs y se verá la consola parecida a la siguiente, aquí ya podemos ejecutar código JavaScript de lado del servidor. Para salir de ahí solo basta con presionar Ctrl + C

Instalar paquetes básicos

  • Para instalar Socket.io quien es el encargado de conectar todo solo basta con escribir
sudo npm install socket.io
  • E instalar Express para facilitar la creación del servidor
sudo npm install express

Para información adicional:  https://ingcamilorodriguez.wordpress.com/2014/09/14/primeros-pasos-node-js/

Hola mundo

  • Para crear la primera aplicación en Node.js en nuestro computador crear un archivo llamado app.js
  • Abrir el archivo en un editor de texto para escribir el código, en este caso se usará Sublime Text 2
// Cargar el módulo 'http' para crear un servidor http
var http = require('http');

// Configurar la petición para responder siempre con un mensaje
var server = http.createServer(function (request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.end("Hello World\n");
});

// Poner el servidor a la escucha en el puerto 3000
server.listen(3000);

// Escribir en la consola un mensaje
console.log("Servidor corriendo en el puerto 3000");

Crear aplicación base

Bien, ahora solo resta crear la aplicación que se usará en este taller de IoT Expert Day, para ello se usará Socket.io y se implementará un protocolo de comunicación basado en eventos para que el servidor se queda a la espera de un evento y así ejecutar otros eventos.

  • Parar la ejecución de la aplicación actual con CTRL + C y así evitar conflictos.
  • Reemplazar el código de la aplicación por el siguiente
console.log('== IoT Expert Day ==');

/// Libraries
var express = require("express");
var app = express();
var path = require('path');

var http = require('http').Server(app);
var io = require("socket.io")(http);
var port = 3000;

console.log('\nLibrerías importadas');

io.sockets.on('connection', function(socket){     

	console.log('-' + socket.id);
	/// Saludo hacia quien se conecte al nodo
	var mensaje = {Message: 'Bienvenido a IoT Expert Day'}
    socket.emit('Welcome', JSON.stringify(mensaje));

    /// Protocolo de comunicación para escuchar un evento de Apache Cordova
    /// y emitir un evento desde Node.js hacia Raspberry Pi
    socket.on('apache.led', function(data){
    	// Almacena la información en una variable preparando la información
    	var convertedData = {Command: data.Command, Values:  data.Values };

    	// Convierte en texto toda la información para que
    	// Python entienda los datos
        io.sockets.emit('node_led', JSON.stringify(convertedData));
    });

});

console.log('Socket.io inicializado')

io.listen(app.listen(port));
console.log('Escuchando en puerto 3000');