¿Qué aprenderá?
¿Qué hará?
¿Cuáles son los prerrequisitos?
Teniendo en cuenta los posibles costos en tiempo y monetarios en los que se puede incurrir para el despliegue de un Sistema IoT utilizando un número importante de nodos de sensado y/o actuación, gateways, y diferentes tecnologías de comunicación, por tanto hemos decidido abordar este capa utilizando la simulación como herramienta para el estudio del comportamiento de las tecnologías de comunicación en un sistema IoT.
Recordemos que una simulación es una representación de una situación o proceso de manera que se pueda realizar un análisis de algunas de sus características y poder aproximarse a lo que se puede esperar en una implementación en el mundo real. En el marco de este tutorial se utilizará el software CupCarbon para realizar la simulación de dos escenarios de sistemas IoT, el primero corresponde al despliegue de Sistema IoT compuesto por una red de sensores con nodos estáticos, y el segundo escenario corresponde a la creación de un Sistema IoT compuesto por una red de sensores con nodos móviles. Pero los pasos aquí descritos pueden ser aplicados a la simulación de cualquier otro contexto.
Finalmente es importante resaltar que este tutorial no tiene como finalidad enseñar el lenguaje de programación utilizado por CupCarbon (SenScript) ya que esto tomaría un tiempo importante del curso.
En este punto es importante resaltar que las prácticas fueron desarrolladas utilizando la versión 5.0 de CupCarbon; sin embargo el software utilizado puede cambiar, por tanto no se puede garantizar que al desarrollar esta práctica todo estará exactamente igual a cuando se elaboró el tutorial. Esta es una realidad que se vive en el desarrollo de los proyectos de IoT y es muy importante desarrollar la habilidad de adaptarse a estos posibles cambios; así que los invitamos a que estén preparados para buscar información adicional que les permita llevar a buen término el trabajo propuesto. El equipo docente estará pendiente para ayudarlos.
Teniendo en cuenta que el despliegue de un Sistema IoT compuesto por un amplio número de sensores puede ser costoso y más si no se tiene certeza del posible comportamiento de las comunicaciones entre los dispositivos y con la nube, se propone el uso de los simuladores como una estrategia que permite emular el comportamiento de los sistemas de IoT, en este caso a nivel de la capa de comunicaciones, para poder determinar los parámetros y protocolos a utilizar.
Para este fin, en este tutorial se utilizará el simulador para Smart Cities y redes de sensores (WSN) llamado CupCarbon, el cual ofrece facilidades para diseñar escenarios de comunicación, movilidad y manejo de eventos naturales.
Uno de los objetivos de este simulador es ayudar a explicar visualmente los conceptos básicos de las redes de sensores y su funcionamiento; también puede servir de apoyo para probar sus topologías inalámbricas, y protocolos, entre otros.
CupCarbon ofrece dos entornos de simulación. El primer entorno de simulación permite diseñar escenarios de movilidad y generar eventos naturales como incendios y gases, así como simular redes de sensores móviles como las compuestas por vehículos y objetos voladores (por ejemplo, vehículos aéreos no tripulados). El segundo entorno de simulación representa una simulación de eventos discretos de redes de sensores inalámbricos que tiene en cuenta el escenario diseñado sobre la base del primer entorno.
A continuación se explicarán los pasos requeridos para realizar la instalación del simulador, y en la siguiente sección se dejará un enlace a una máquina virtual en la cual ya se encuentra el simulador instalado.
Como primer paso para la instalación del simulador se debe realizar la comprobación de la versión de Java instalada. Para comprobar la versión del JDK/JRE que posee actualmente escriba el siguiente comando en la ventana de comandos de su computador:
$java -version
Este comando deberá presentar en la consola la versión de java y del JDK de la cual dispone actualmente su equipo de cómputo.
En el caso de que su sistema operativo sea windows y su versión sea inferior a la 1.8, deberá realizar la instalación del JDK / JRE de acuerdo con el sistema operativo que disponga en su computador. Para tal fin ingrese al sitio de Oracle y descargue el archivo que corresponda a la arquitectura de su computador.
En el caso de que su sistema operativo sea linux y su versión inferior a la 1.8 o no tenga versión, deberá ejecutar los siguientes comandos:
sudo apt install default-jre
sudo apt install openjfx
Posteriormente instale CupCarbon en su computador. Para esto tiene dos opciones: descargar el código fuente desde el repositorio oficial o descargar el archivo .zip compilado desde la página de CupCarbon. En este punto le sugerimos realizar la descarga de la versión compilada.
Si descargó el archivo .zip, ubíquelo en la carpeta de su preferencia y realice la descompresión del archivo. En la carpeta raíz generada encontrará un archivo ejecutable llamado cupcarbon.jar
, este es el archivo que permite ejecutar el simulador.
Si posee un sistema operativo Windows, abra la consola, diríjase a la carpeta que contiene el archivo y ejecute el siguiente comando:
java -jar cupcarbon.jar
Si posee un sistema operativo Linux, ejecute los siguientes comandos en el directorio donde se encuentra el ejecutable:
java --module-path /usr/share/openjfx/lib --add-modules=javafx.controls,javafx.fxml,javafx.base,javafx.media,javafx.web,javafx.swing -jar cupcarbon.jar
Por otro lado, si decide descargar el código fuente compílelo y ejecútelo en el IDE de su preferencia para Java. El archivo main
de la aplicación se encuentra ubicado en el archivo src/cupcarbon/CupCarbon.java
.
Con el fin de evitar errores de compilación, si su sistema operativo no es iOS le recomendamos borrar las líneas 75 a 82 que contienen los comandos específicos para la interfaz mostrada en iOS. A continuación, se encuentra el contenido de estas líneas:
String os = System.getProperty ("os.name", "UNKNOWN");
if(os != null && os.startsWith("Mac")) {
macos = true;
URL iconURL = CupCarbon.class.getResource("cupcarbon_logo.png"); java.awt.Image image = new ImageIcon(iconURL).getImage();
com.apple.eawt.Application.getApplication().setDockIconImage(image);
}
Una vez ejecutado el programa, se abrirán dos ventanas una con la consola del programa y otra con la interfaz de usuario como se puede ver en la Figura 1.
Figura 1. Interfaz de usuario CupCarbon
Nota: a pesar de que el simulador NO se cerrará si usted cierra la consola, le recomendamos mantenerla abierta dado que en esta se mostrará información importante como los logs y posibles errores durante la ejecución de las simulaciones. Así mismo, en caso de no encontrar el motivo de un error, podrá ver en la parte derecha el stacktrace del mismo y ubicarlo en el código fuente.
En el siguiente enlace se encuentra disponible una máquina virtual con sistema operativo Ubuntu Linux 20.04 la cual cuenta con la versión 5.0 de Cupcarbon instalada.
La máquina virtual dispuesta debe ser ejecutada utilizando el hipervisor VMware Workstation Player.
Las credenciales de acceso a la máquina son:
Como consecuencia del incremento de la temperatura global, la Universidad de los Andes propuso a la Secretaría Distrital de Medio Ambiente de Bogotá un proyecto de monitoreo para la prevención de incendios forestales basados en IoT.
El proyecto consiste en una red de sensores que realizan el monitoreo de la temperatura de los cerros orientales de la ciudad y permite alertar a las estaciones de bomberos cercanas ante un cambio determinado en la temperatura de la zona. Interesada en el proyecto, la Secretaría propuso la realización de un piloto para el monitoreo del cerro aledaño a la Universidad e interactuar con la estación de bomberos de la Candelaria.
Para este piloto se propone el despliegue de una red compuesta por ocho sensores de temperatura distribuidos en la zona determinada, distribuidos de manera uniforme en el terreno, y ubicados específicamente en las copas de los árboles. Estos sensores se comunican entre ellos formando una red inalámbrica de sensores que permite propagar el mensaje hasta un nodo base ubicado en el edificio GA de la Universidad, el cual se encargará de comunicar a la estación de bomberos en caso de una alerta de incendio (ver Figura 2).
Con la finalidad de encontrar la mejor ubicación para cada uno de los nodos se propone realizar una simulación del piloto antes de realizar el despliegue de la red.
Figura 2. Escenario de simulación Sistema de Detección de Incendios Forestales
Para la configuración de la simulación realice lo siguiente:
Figura 3. Menú de parámetros de los Dispositivos
Para esto, pulse el botón "Sensor node" () y pulse en el mapa donde desea agregarlo. Colocar un nodo de gas en el centro de cada nodo sensor usando el botón "Gas" (
); este objeto requiere el uso del Generador de Eventos Naturales para generar archivos con los valores deseados. En la sección "Simulation Parameters", revise que las opciones "Mobility/Events" y "visibility" estén seleccionadas. Asegúrese de que cada nodo sensor esté al alcance de al menos otro nodo en la red. La flecha gris indica en cuál dirección se pueden enviar mensajes. Por ejemplo, en la siguiente imagen es posible enviar mensajes del sensor 6 al 7 y viceversa.
Figura 4. Dos nodos que se pueden comunicar mutuamente
En la sección "Device Parameters", el parámetro "Sensor Radius" indica el radio en el que un nodo sensor puede detectar eventos. El área dentro de dicho radio se tornará amarilla, si existe un evento detectable, como se ve en la Figura 5.
Figura 5. Radio de eventos naturales de un evento
mean: 22
, std: 10
, period: 6
y size: 10
, recuerde guardar los archivos después de generados y verificar que el primer valor de las tuplas generadas sea entero. Para esto pulse el botón "Natural Event Generator" (Figura 6. Valores generados aleatoriamente para un evento natural
Figura 7. Menú de parámetros de los Dispositivos
Para verificar si la asignación se realizó, revise si el centro del nodo cambia de color: de blanco a amarillo.
atget id id
data p "hola" id id
send p
loop
read mens
rdata mens tipo valor1 valor2
if( tipo == "alerta")
cprint "Alerta en: longitud" valor1 ", latitud: " valor2
end
wait 100
set ant 999
atget id id
getpos2 lonSen latSen
loop
wait 100
read mens
rdata mens tipo valor
if((tipo=="hola") && (ant == 999))
set ant valor
data mens tipo id
send mens * valor
end
if(tipo=="alerta")
send mens ant
end
delay 1000
areadsensor tempSen
rdata tempSen SensTipo idSens temp
if( temp>30)
data mens "alerta" lonSen latSen
send mens ant
end
Con el fin de mejorar la movilidad en la ciudad, la Universidad desea construir un sistema inteligente de parqueaderos a través de la cual se le indique a un vehículo la disponibilidad de un estacionamiento cerca de la universidad y cómo llegar a él. Para este fin se configurará una red de sensores en cada espacio de parqueo los cuales se comunicarán con un nodo base, al interior de cada parqueadero, y de esta manera se podrá identificar la cantidad de espacios de parqueo disponibles. Se pretende que este sistema pueda comunicarse con los vehículos que lo necesiten e indicarles hacia qué parqueadero pueden dirigirse según la disponibilidad.
Tres parqueaderos se sumaron a la iniciativa y permitieron instalar sensores en sus entradas como parte del primer piloto. Sin embargo, aún tienen dudas de su utilidad por lo que la Universidad quiere presentarles una simulación del funcionamiento del sistema.
La propuesta consiste en ubicar una estación base en la rotonda de la Calle 19 con Carrera 3 (Bogotá, Colombia), la cual, se comunicará con los sensores ubicados en los parqueaderos aliados. En la Figura 8 se muestran las posiciones de los sensores y la estación base; adicionalmente, hay un "automóvil" con un sensor que deberá utilizarse para la simulación.
Figura 8. Escenario de simulación Sistema de Parqueo Inteligente
Para la configuración de la simulación, usted deberá:
En este punto en la pantalla debería aparecer una configuración de la red similar a la presentada en la Figura 9 donde se puede apreciar el radio de cobertura de cada uno de los nodos.
Figura 9. Identificadores y radios configurados
Definir las rutas que seguirán los móviles desde la estación base (ubicada en la rotonda) hacia cada uno de los parqueaderos. Para crear una ruta, se debe marcan el punto inicial y punto final con markers () y en la barra lateral, en la sección "Market Parameters" se calcula la ruta haciendo clic sobre "Route from markers"; recuerde que si se quiere agregar marcadores adicionales a la ruta generada se puede utilizar el botón "Insert markers". A continuación, asigne el nombre de la ruta "File Name" y título "Tittle" siguiendo la nomenclatura route<n>, donde n es el id de cada parqueadero. Presione el botón "Save" para guardar la ruta y luego "Draw selected routes" para ocultarla y continuar con la creación de la siguiente ruta. Este proceso se realiza para cada parqueadero, es decir, se deben crear tres rutas en total.
En este punto en la pantalla debería aparecer una configuración de la red similar a la presentada en la Figura 10, donde se muestre una línea que pasa por cada uno de los marcadores definidos en cada una de las rutas.
Figura 10. Rutas definidas
vec cupos 3
atget id id
data mens "cupos" id
send mens
loop
read resp
rdata resp tipo Pid valor
if(tipo=="hola")
data mens "hola" id
send mens Pid
end
if(tipo=="cupos")
dec Pid
vset valor cupos Pid
end
if(tipo =="parqueo")
set max 0
set parqueadero 0
set ruta "route"
set i 0
while(i<3)
vget act cupos i
if (act>max)
set max act
set parqueadero i
end
set i i+1
end
inc parqueadero
int w parqueadero
conc respuesta "" "route" w
data mens "parqueo" respuesta
send mens Pid
end
wait 100
loop
atget id id
set cupos id
loop
print id
read mens
rdata mens tipo Bid
if( tipo=="cupos")
data mens "cupos" id cupos
send mens Bid
end
wait 100
atget id id
set x 0
loop
atnd n
read mens
rdata mens tipo valor
if((tipo =="hola") && (x==0))
set x 1
data mens "parqueo" id
send mens 4
else
if ((n>0) && (x==0))
data mens "hola" id
send mens 4
end
end
if (tipo =="parqueo")
cprint valor
route valor
end
wait 100
Al finalizar este tutorial, se espera que haya aprendido a realizar el despliegue de una simulación de un sistema IoT basado en redes de sensores en el software CupCarbon.
Ramón Arias Carlos Andrés Lozano Garzón | Autores |
Kelly Garcés Andrés Bayona Rocío Héndez | Revisores |