Trabajo realizado por David Hinojosa, estudiante de la carrera de ingeniería en Telecomunicaciones de la Universidad Técnica del Norte ubicada en Ecuador, correspondiente a la asignatura de Internet De las Cosas (IoT) y dirigido por el docente Msc. Edgar Maya.
Objetivo:Configurar nodos de forma remota en la plataforma de Fit IoT-LAB para la transferencia de datos implementando MQTT hacia Amazon Web Services para su visualización en un dashboard diseñado en una página web.
Topología:Se presenta la topología en la que se basa el desarrollo del presente proyecto.
- Cuenta en Fit IoT-LAB y credenciales de acceso de AWS:
Se toma como punto de partida la creación de una cuenta en la plataforma de Fit IoT-LAB para poder configurar los nodos de forma remota en el siguiente enlace: https://www.iot-lab.info/testbed/signup
Posteriormente, se deben obtener las claves de acceso remoto SHH hacia los servidores de Fit IoT-LAB por parte de la máquina virtual de Linux implementada, para el presente puso se pueden seguir detalladamente los pasos en el siguiente enlace: https://www.iot-lab.info/docs/getting-started/ssh-access/
- Creación de una cuenta en AWS.
En el presente punto, es necesario crear una cuenta en la platafoma en línea de Amazon Web Services, mismo que puede realizarse en el siguiente enlace: https://portal.aws.amazon.com/billing/signup#/start/email
A continuación, se indica en las siguientes imágenes los pasos para realizar el registro de Amazon Web Services:
- Creación de usuario IAM
1. En el presente paso, se requiere acceder a la cuenta y seleccionar la opción llamada “Acceso de los usuarios y los roles de IAM a la información de facturación”, para posteriormente activar el acceso y actualizar dicha opción.
2. En el presente paso se debe buscar en la barra de búsquedas "IAM" y posteriormente seleccionar en el apartado de "Usuarios", y se debe dar un nombre, definir el acceso por contraseña personalizada.
- Creación de objetos en de IoT Core
1. Como primer paso, es necesario buscar "IoT Core" dentro de la barra de búsquedas que proporciona AWS, para posteriormente ir al apartados de Objetos y crear un nuevo y único objeto, se debe asignar un nombre y descargar los certificados y claves puesto a que solo pueden ser descargados una sola vez, finalmente se podrá visualizar que el objeto fue creado correctamente.
2. A continuación, es necesario crear una política para que esta sea asociada al objeto creado previamente, por lo cual se requiere ir al apartado de políticas y seleccionar crear política, a continuación se debe asignar un nombre a dicha política y posteriormente asociarla a los certificados proporcionados previamente.
- Creación de tablas en DynamoBD
1. Para el presente paso, es necesario buscar DynamoDB dentro de la barra de búsqueda de Amazon Web Services, para lo cual se debe seleccionar crear tabla y posteriormente asignar un nombre a la tabla, su clave de partición y su clave de ordenación.
- Adquisición de credenciales de acceso
1. El presente paso es necesario para poder sincronizar la máquina virtual de Linux con Amazon Web Services, por lo que se necesita crear una nueva clave de acceso y posteriormente descargar el archivo de claves, finalmente puede verificarse el estado activo de dicha clave de acceso.
- Configuración de Amazon Cognito
1. El presente paso es neesario para poder sincronizar los datos de la tabla de DynamoDB creada previamente con la página web y dashboard de visualización. Posteriormente debe acceder al apartado de IAM y eseleccionar el grupo de identidades creadas y asociar la política necesaria.
2. Se debe seleccionar el grupo de tipo federado, por lo que se requiere obtener el código muestra en formato Javascript para usar posteriormente en la configuración del servidor web.
- Inicio del experimento en FIT IoT LAB
1. Para iniciar el experimento dentro de la plataforma Fit IoT-LAB, se debe asignar un nombre a dicho experimento y su correspondiente duración, posteriormente se deben seleccionar 4 placas dentro de la zona de Strasbourg, de las cuales 3 deben ser Openmote B y 1 debe ser A8. Al subir dichos nodos al experimento, este será iniciado y podrán visualizarse los IDs de las placas seleccionadas previamente.
- Adquisición del Firmware para el Router de Borde
1. Como primer paso es necesario acceder de forma remota desde la máquina virtual en la que se trabajará a los servidores de Fit IoT-LAB.
ssh <user>@strasbourg.iot-lab.info2. Posteriormente, es necesario cambiar al directorio el cual contiene el firmware correspondiente al router de borde, en donde se debe especificar el tipo de placa y canal a implementar.
cd iot-lab/parts/RIOT/examples/gnrc_border_router
source /opt/riot.source
make ETHOS_BAUDRATE=115200 DEFAULT_SUBGHZ_CHANNEL=0 BOARD=openmote-b clean all3. Una vez obtenido el archivo que contiene el firmware y en una nueva terminal, es necesario copiarlo en la memoria real de la máquina virtual, para esto es necesario seleccionar en que carpeta se va a guardar la copia haciendo uso del comando scp.
sudo su
scp <user>@strasbourg.iot-lab.info:/senslab/users/<user>/iot-lab/parts/RIOT/examples/gnrc_border_router/bin/openmote-b/gnrc_border_router.elf /home/<destination directory>/openmoteb-border-router.elf4. Como siguiente paso, se necesita cargar el firmware en el nodo de Fit IoT-LAB que será designado como router de borde.
5. Posteriormente, es necesario iniciar el router de borde, mismo que necesita siempre estar activo para que no detenga la comunicación.
sudo ethos_uhcpd.py openmoteb-19 tap8 2a07:2e40:fffe:00f5::/64- Adquisición del Firmware para los Nodos designados como estaciones
1. Para el presente paso, es necesario adquirir el repositorio de Git Hub que cuenta con el firmware para los nodos designados como estaciones climatológicas.
git clone https://github.com/DavidHinojosa2001/PruebaB22. A continuación se debe copiar el directorio emcute_MQTTSN al directorio en donde se encuentran los ejemplos proporcionados por Fit IoT-LAB.
3. Posteriormente, es necesario ir al directorio en donde se movió la carpeta emcute_MQTTSN para adquirir el firmware para el nodo que será designado como estación 1, en donde se debe especificar la placa a implementar, el canal y el ID de dicha estación.
cd iot-lab/parts/RIOT/examples/Emcute_MQTTSN
source /opt/riot.source
make DEFAULT_SUBGHZ_CHANNEL=0 BOARD=openmote-b EMCUTE_ID=station1 clean al4. Una vez obtenido el archivo que contiene el firmware y en una nueva terminal, es necesario copiarlo en la memoria real de la máquina virtual, para esto es necesario seleccionar en que carpeta se va a guardar la copia haciendo uso del comando scp.
sudo su
scp <user>@strasbourg.iot-lab.info:/senslab/users/<user>/iot-lab/parts/RIOT/examples/Emcute_MQTTSN/bin/openmote-b/emcute_mqttsn.elf /home/<destination directory>/openmoteb-emcute_mqttsn1.elf5. Como siguiente paso, se necesita cargar el firmware en el nodo de Fit IoT-LAB que será designado como estación 1.
6. Posteriormente, es necesario ir al directorio en donde se movió la carpeta emcute_MQTTSN para adquirir el firmware para el nodo que será designado como estación 2, en donde se debe especificar la placa a implementar, el canal y el ID de dicha estación.
cd iot-lab/parts/RIOT/examples/Emcute_MQTTSN
source /opt/riot.source
make DEFAULT_SUBGHZ_CHANNEL=0 BOARD=openmote-b EMCUTE_ID=station2 clean all7. Una vez obtenido el archivo que contiene el firmware y en una nueva terminal, es necesario copiarlo en la memoria real de la máquina virtual, para esto es necesario seleccionar en que carpeta se va a guardar la copia haciendo uso del comando scp.
sudo su
scp <user>@strasbourg.iot-lab.info:/senslab/users/<user>/iot-lab/parts/RIOT/examples/Emcute_MQTTSN/bin/openmote-b/emcute_mqttsn.elf /home/<destination directory>/openmoteb-emcute_mqttsn2.elf8. Como siguiente paso, se necesita cargar el firmware en el nodo de Fit IoT-LAB que será designado como estación 2.
9. Una vez cargados los firmwares de las estaciones, es necesario ingresar a los nodos de dichas estaciones desde el terminal del sitema operativo de la máquina virtual empleada.
nc openmoteb-<IDnodo> 20000nc openmoteb-<IDnodo> 20000- Configuración de modulación en los nodos Openmote
Una vez se haya ingresado a ambos nodos desde el terminal del sitema operativo de la máquina virtual empleada, es necesario definir la modulación en la que los nodos Openmote B operarán, para lo cual su configuración de modulación debe contener los mismos parámetros establecidos en ambos nodos.
- Modulación FSK
Para realizar la configuración de esta modulación, se deben definir sus parámetros en base a los establecidos dentro del protocolo 802.15.4g, los cuales son el tipo de modulación a emplear, índice de modulación, orden de modulación, espaciado del canal, canal de comunicación y velocidad de transmisión. Se deben ingresar los mismos parámetros tanto en el nodo definido como router de borde como en ambos nodos designados como estaciones climáticas.
ifconfig 6 set phy_mode MR-FSK
ifconfig 6 set modulation_index 1
ifconfig 6 set modulation_order 2
ifconfig 6 set channel_spacing 200
ifconfig 6 set chan 10
ifconfig 6 set srate 50Una vez ingresados los parámetros de configuración, se debe verificar que la modulación fue asignada correctamente al ingresar el comando ifconfig dentro de cada nodo configurado.
ifconfig1. Modulación FSK configurada en el router de borde.
2. Modulación FSK configurada en la estación climática 1.
3. Modulación FSK configurada en la estación climática 2.
4. Ping entre estaciones climáticas al configurarse con FSK.
ping6 <ipv6_address>%6- Modulación OFDM
Al igual que FSK, para realizar la configuración de esta modulación, se deben definir sus parámetros en base a los establecidos dentro del protocolo 802.15.4g, los cuales son el tipo de modulación a emplear, opción, esquema y canal. Se deben ingresar los mismos parámetros tanto en el nodo definido como router de borde como en ambos nodos designados como estaciones climáticas.
ifconfig 6 set phy_mode MR-OFDM
ifconfig 6 set option 1
ifconfig 6 set scheme 0
ifconfig 6 set chan 2Una vez ingresados los parámetros de configuración, se debe verificar que la modulación fue asignada correctamente al ingresar el comando ifconfig dentro de cada nodo configurado.
ifconfig1. Modulación OFDM configurada en el router de borde.
2. Modulación OFDM configurada en la estación climática 1.
3. Modulación OFDM configurada en la estación climática 2.
4. Ping entre estaciones climáticas al configurarse con OFDM.
ping6 <ipv6_address>%6- Modulación O-QPSK
Al igual que FSK y OFDM, para realizar la configuración de esta modulación, se deben definir sus parámetros en base a los establecidos dentro del protocolo 802.15.4g, los cuales son el tipo de modulación a emplear, canal, chip rate y rate mode. Se deben ingresar los mismos parámetros tanto en el nodo definido como router de borde como en ambos nodos designados como estaciones climáticas.
ifconfig 6 set phy_mode MR-O-QPSK
ifconfig 6 set chan 0
ifconfig 6 set chip_rate 100
ifconfig 6 set rate_mode 0Una vez ingresados los parámetros de configuración, se debe verificar que la modulación fue asignada correctamente al ingresar el comando ifconfig dentro de cada nodo configurado.
ifconfig1. Modulación O-QPSK configurada en el router de borde.
2. Modulación O-QPSKconfigurada en la estación climática 1.
3. Modulación O-QPSK configurada en la estación climática 2.
4. Ping entre estaciones climáticas al configurarse con O-QPSK.
ping6 <ipv6_address>%6- Configuración del Broker MQTT-SN
1. Como primer paso se requiere verificar que el router de borde ofrezca una dirección IP de tipo global, para lo que en primer lugar se debe acceder desde el terminal e implementar el comando ifconfig para verificar dicho tipo de dirección IP, para posteriormente verificar que exista comunicación entre ambos nodos mediante el comando ping.
ifconfig2. Como siguiente paso, se requiere a acceder por SSH a la placa A8 que será designado como bróker con el fin de realizar el envío de datos, para lo que se debe conocer también su dirección IP haciendo uso de los siguiente comandos, para el acceso al nodo y para verificar su dirección IP.
ssh root@node-a8-<#nodo>
ip -6 -o addr show eth03. Para iniciar el broker se debe crear el archivo config.conf, para que dentro de dicho archivo se defina la comunicación MQTT que se va a desarrollar.
vim config.conf- Parámetros a ingresar dentro del archivo de configuración:
# add some debug output
trace_output protocol
# listen for MQTT-SN traffic on UDP port 1885
listener 1885 INADDR_ANY mqtts
ipv6 true
# listen to MQTT connections on tcp port 1886
listener 1886 INADDR_ANY
ipv6 true4. Como siguiente paso, debemos iniciar en primer lugar el broker, luego la estación 1 y finalmente la estación 2, de esta forma se podrá visualizar el envío de datos en tiempo real de ambas estaciones al broker.
- Cada archivo debe ser iniciado en un terminal por separado y estableciendo conexión remota a los servidores de FIT IoT-LAB para que funcionen en simultáneo.
Broker ------ broker_mqtts config.conf
Estación 1 ----- start <Direc. IPv6 global de la placa A8> 1885 1
Estación 2 ----- start <Direc. IPv6 global de la placa A8> 1885 2- Configuración del Bridge MQTT-SN
1. Primeramente, se designará a la placa A8 para que cumpla la función de Bridge, para lo cual es necesario acceder por shh a la cuenta personal de FiT IoT-LAB y de igual forma hacia dicha placa designada como bridge.
sudo ssh <user>@strasbourg.iot-lab.info
ssh root@node-a8-<#nodo>2. Posteriormente, se requiere adquirir los certificados generados previamente en Amazon Web Services puesto a que se necesitará de ellos para establecer la sincronización de los datos hacia dicha plataforma en la nube.
cd IoT_B2/Complementos
git clone https://github.com/<certs ubication>3. Como siguiente paso, se debe acceder al archivo "MQTTSNbridge.py" con el fin de añadir parámetros para establecer la sincronización de los datos, dichos parámetros a odificar son la región donde se aloja la instancia de EC2, el nombre de la tabla creada previamente, el ID de la sombra y el nombre de los certificados.
cd /home/root/IoT_B2/Complementos/MQTTSN
vim MQTTSNbridge.py4. Como siguiente paso, es necesario instalar pip en la placa A8 designada como Bridge previamente.
TMPDIR=/ pip3 install --cache-dir=/ --build / boto3==1.15.35. Posteriormente, se procede a realizar la instalación de Amazon Web Services, por lo que se requiere crear el archivo config credentials y a su vez verificar la conectividad a la siguiente url mediante el comando curl.
cd
mkdir -p ~/.aws
cd ~/.aws
touch config credentials
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"pip3 install AWSIoTPythonSDK6. Como siguiente paso, se necesita descomprimir el archivo .zip e iniciar la instalación de AWS.
unzip awscliv2.zip
./aws/install7. Posteriormente, se debe definir la región dentro del archivo de configuración.
cd ~/.aws
vim config8. Posteriormente, es necesario asignar las credenciales proporcionadas previamente por Amazon Web Services en el archivo credentials
vim credentials9. Finalmente, se debe cambiar al directorio que contiene el archivo "MQTTSNbridge.py" e iniciarlo, en donde se deberá especificar las estaciones de las que se necesite recibir sus correspondientes datos.
1
2
stop- Creación del servidor web con una instancia en EC2 - Amazon Web Services
1. Primeramente, es necesario escoger una máquina virtual dentro de EC2 - Amazon Web Services, para el presente caso se ha optado por Ubuntu Server 18.04, en donde se debe se nos proporcionará una clave .pem para acceder a dicha máquina virtual desde un terminal remoto.
2. Al acceder por SSH a través del terminal remoto, es necesario realizar una actualización.
sudo apt update2. A continuación, se realiza la instalación del servidor web.
sudo apt install apache23. Se procede a realizar la verificación de que el servidor web instalado previamente se encuentre activo
sudo systemctl status apache24. Finalmente, se procede a verificar el acceso al servidor web a través de la dirección IP pública o DNS proporcionados por Amazon Web Services.
- Creación de la página web
1. Como primer paso, se debe ingresar a la carpeta assets y posteriormente a la carpeta js, en la cual se encontrará el archivo script.js, mismo que será necesario para establecer la conexión entre la base de datos de Dynamo DB y la página web, por lo que se requiere modificar los parámetros expuestos en el siguiente paso.
cd
cd /var/www/dh.com
cd assets/js
nsno script.js2. En el archivo script.js mencionado anteriormente, se debe inicializar el proveedor de credenciales de Amazon cógnito en el que se debe especificar la región en la que se ha creado la instancia de Amazon Web Services, adicionalmente, se debe indicar el nombre de la base de datos de Dynamo DB con la que se quiere sincronizar los datos a la página web.
3. Posteriormente, se debe crear el virtualhost en el archivo dh.com.conf, mismo que estará almacenado dentro del siguiente directorio.
sudo nano /etc/apache2/sites-available/dh.com.conf4. A continuación, se debe modificar el archivo dh.com.conf para crear el virtualhost mencionado anteriormente, en donde se deberá indicar el archivo en el que se abrirá la página web al ingresar a ella.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName iot.com
DocumentRoot /var/www/<nombre_fichero>
DirectoryIndex dashboard.html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>5. Finalmente es necesario reiniciar el servidor web para que la página web y el dashboard donde se visualizarán los datos entren en funcionamiento.
sudo a2ensite dh.com.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2Una vez realizado el desarrollo en su totalidad, será posible ingresar a la página web en el navegador de preferencia mediante la dirección IP pública proporcionada por la instancia de Amazon Web Services, en la que se pueden observar los datos leídos por las instacias metereológicas.






Comments