Para correr este código es necesario contar con Docker y Docker-compose instalados. Para instalarlos en Linux, se pueden seguir los pasos del siguiente artículo.
Para descargar el código se debe ejecutar el siguiente comando:
git clone https://github.com/mmondani/MIoT_DAIoT_Backend.git
Una vez hecho esto, se deben descargar los submódulos del proyecto. Moverse a la carpeta raiz del repositorio clonado y ejecutar el siguiente comando:
git submodule update --init --recursive --remote
Para que todos los servicios del backend funcionen, en primer lugar es necesario crear los certificados TLS. Estos van a ser usados:
- Por el sensor al conectarse al broker MQTT
- Por el módulo CORE para conectarse al broker MQTT
Para esto, es necesario ejecutar el script broker/scripts/crea_certs.sh
. En este script se debe configurar la variable IP
con la IP o URL donde van a estar corriendo los contenedores de docker.
El resultado de este script van a ser:
- Certificado y llave privada del CA. El certificado debe ser copiado a:
- El archivo
mqtt.c
del sensor. - La carpeta
broker/mosquitto/certs
- La carpeta
core/certs
- El archivo
- Certificado y llave privada del servidor. Ambos archivos deben ser copiados a la carpeta
broker/mosquitto/certs
- Certificado y llave privada del cliente. Ambos archivos deben ser copiados a:
- El archivo
mqtt.c
del sensor. - La carpeta
core/certs
- El archivo
Finalmente, para ejecutar el backend se debe correr el comando docker-compose up
desde la raiz del proyecto.
El backend se compone de 4 contenedores:
- Base de datos MongoDB
- Broker MQTT Mosquitto
- API REST
- Servicio Core
El contenedor de la base de datos tiene un script de inicialización (mongo-init.js
) el cual se encarga de:
- Crear el usuario
iotuser
- Crear la base de datos
iot
- Crear las collections
- Insertar en la collection iotUser el usuario
admin
La base de datos iot
se compone de las siguientes collections:
- iotAccion
- iotAtr
- iotDato
- iotDisp
- iotEmpresa
- iotUser
La comunicación con los dispositivos se va a hacer a través de MQTT. Para esto, se implementa un contenedor de Mosquitto.
Cuando inicia, va a tomar la configuración del archivo mosquitto.conf
que se encuentra en la carpeta broker/mosquitto/config
.
El broker va a estar escuchando en los puertos 9001
(mediante web sockets) y 8883
(mediante MQTT). En el caso de este último, la comunicación va a usar TLS.
Por lo tanto, es necesario cargar los certificados del broker. Estos certificados se ponen en la carpeta broker/mosquitto/certs
.
Para generar los certificados se puede usar el script crea_certs.sh
que se encuentra en la carpeta broker/scripts
La API es un fork del siguiente repositorio:
https://github.com/mcastellogh/daiot-api
A partir de ese repositorio, se agregaron algunos endpoints que son usados tanto por el frontend como por el módulo Core.
Los endpoints agregados son:
- GET
/dispo
: permite obtener toda la lista de dispositivos que están dados de alta. - GET
/dispo/:nombre
: permite obtener la información del dispositivonombre
. - PUT
/dispo/canal
: es un endpoint usado por el módulo Core con el que le indica a la API que debe actualizar el estado de un canal de un dispositivo. - PUT
/dispo/status
: es un endpoint usado por el módulo Core con el que le indica a la API si un dispositivo está online u offline. - PUT
/dispo/ultima-tele
: es un endpoint usado por el módulo Core con el que le indica a la API las últimas mediciones informadas por el sensor.
El servicio core es un fork del siguiente repositorio:
https://github.com/mcastellogh/daiot-core
Como este servicio se conecta al broker MQTT, se deben cargar los certificados que va a usar para autenticarse. Los mismos se deben poner en la carpeta core/certs
.
Al respositorio mencionado, se le agregó la suscripción a los topics device/status
y device/action
. De esta forma puede informarle a la API cuando un dispositivo se conecta o desconecta y cuando un dispositivo responde a un comando para encender o apagar un canal.
Mariano Mondani Santiago Salamandri Agustín Rey