Documentos de Académico
Documentos de Profesional
Documentos de Cultura
● Modelo publicación/suscripción.
● Conceptos:
2
MQTT. Arquitectura 1
Subscriber
Publisher
Brocker
Subscriber
Topic
Publisher
Topic
Publisher
Subscriber
3
MQTT: Arquitectura 2
Temperatura
Actuador
Sensor MensajeB = 504lm
MensajeB = 504lm
Luminosidad
4
MQTT: topics
●
El topic MQTT está incluido en cada mensaje PUBLISH.
●
El topic tiene la forma jerárquica:
●
site/line/machine/data. Se pueden utilizar “+” para sustituir por “un nivel cualquiera”
o “#” por “varios niveles cualquiera”.
●
El símbolo $ está reservado para información de sistema y no se usa en los nombres
de topic.
●
Para evitar incompatibilidades, se recomienda utilizar letras ASCII y números
●
No se pueden utilizar “wildcards” en publicación (sólo en suscripción)
●
Los topics pueden tener una longitud de 64kB
●
Muy flexible: p.ej. “sensor botón1” y “sensor botón2”: estados ON/OFF para ambos.
●
Opción A: topic1 “Boton1”, topic2 “Boton2”
●
Opción B: topic: “Botones”. Separación de variables en JSON. Los dispositivos (los
botones) tienen diferentes Ids.
●
Un topic se crea cuando el primer cliente se suscribe a él.
●
Un topic se borra cuando el último cliente suscrito se desconecta.
5
MQTT: Topics
●
No se pueden conocer todos los topics salvo que te suscribas a #.
●
Para saber las conexiones y eventos en un broker, hay que
suscribirse a:
●
$SYS/broker/connection/#
●
$SYS/broker/log/#
●
No se pueden conocer los suscriptores de un topic.
6
MQTT: Calidad de servicio QoS
● MQTT ofrece 3 niveles de QoS. El uso de cualquiera de ellos depende del grado de
confiabilidad requerido en el envío de mensajes.
● El QoS de MQTT se aplica al proceso de envío, ya sea desde el cliente hacia el broker o a la
inversa.
● QoS 0: El receptor (ya sea broker en el caso de publicación, o cliente en caso de suscripción)
recibe el mensaje como máximo una vez.
7
MQTT: Calidad de servicio QoS
● Ejemplo1:
● Si un mensaje se publica con QoS 2 y un cliente se suscribe con QoS 0, el mensaje se
con QoS 2.
● Ejemplo2:
● Si un cliente publica con QoS 0, y un cliente se suscribe con QoS 2, el suscriptor lo recibirá
● La comunicación publicador/suscriptor a través del broker, siempre tendrá la menor de las QoS
de ambas conexiones.
8
MQTT Installación (en Linux Debian)
- Brocker
port 1993
$ mosquitto_sub –d –t topic
9
MQTT: Uso básico de publish/subscribe
- Publish:
-d debug
-u nombre usuario
-P password
-i nombre cliente
-I prefijo de ID de cliente
- Subscribe:
Cliente mosquitto_sub:
-v verbose
-q QoS
-d debug
-C X finalizar tras X mensajes.
10
MQTT Autenticación:
●
El brocker se puede configurar para ser accesible mediante usuario/password. En ese caso no
se puede establecer una conexión MQTT sin autenticación.
●
Se puede utilizar para accesos a topics.
●
El usuario y la password se transmiten en texto plano (podría ser capturado de forma sencilla).
●
Proceso en Brocker
●
Crear un fichero de texto con formato “usuario:passwd”
●
Encriptar el fichero:
$ mosquitto_passwd -U ficheropasswd
●
Copiar ficheropasswd en /etc/mosquitto.
●
Editar mosquitto.conf:
…..
allow_anonymous false
password_file /etc/mosquitto/ficheropasswd
…..
●
Reiniciar mosquitto
11
MQTT Autenticación: cliente
- Cliente mosquitto:
-d debug
-u nombre usuario
-P password
-i nombre cliente
-I prefijo de ID de cliente
username_pw_set(username=”MDC3453z”,password=”mipasswd”)
12
MQTT. Cliente ESP8266
Arquitectura
Envío de datos de sensorización desde un ESP8266 hacia un brocker mosquitto con dashboard NodeRED.
13
MQTT. Cliente ESP8266
Instalación Arduino IDE
Seguir instrucciones de: https://www.arduino.cc/en/Guide
$ ls -l install.sh
-rwxr-xr-x 1 cacho cacho 11070 Jun 16 2020 install.sh
$ ./install.sh
- Ejecutar arduino. Se puede hacer desde el mismo directorio donde estaba el script de instalación “install.sh” (en el caso del ejemplo
en el directorio “/home/cacho/Arduino/arduino-1.8.13ç7”), o posiblemente desde algún nuevo icono del escritorio, o directamente desde
cualquier directorio dependiendo de si se incluyó el ejecutable en el PATH durante la instalación.
~/Arduino/arduino-1.8.13$ ./arduino
14
MQTT. Cliente ESP8266
Instalación de librerías necesarias para el módulo disponible del ESP8266
Se trabajará con el módulo WeMos D1 mini
http://arduino.esp8266.com/stable/package_esp8266com_index.json
15
MQTT. Cliente ESP8266
Instalación de librerías necesarias para el módulo disponible del ESP8266
Se cierra y se abre el Arduino IDE de nuevo.
En Tools → Board → Boards Manager se hace una búsqueda de “wemos” o directamente “esp8266”y aparece la librería “Esp8266 by
ESP8266 Community”, actualmente en su versión 2.7.4. Se pulsa “Install” y tras unos segundos aparece como “Installed”.
16
MQTT. Cliente ESP8266
“Hola mundo” ESP8266
A partir de ese momento, se selecciona para la realización, compilación y carga de los
programas la tarjeta “Wemos R1 D1 que aparece en la lista de tarjetas bajo el menu
“Tools”
17
MQTT. Cliente ESP8266
“Hola mundo” ESP8266
Open - Posiblemente, al seleccionar la tarjeta Wemos R1 D1 aparezca un
programa básico llamado “Blink” en la pantalla de edición. El
programa símplemente realiza un encendido/apagado intermitente
del led azul integrado en el ESP8266. Si no es así, puede
seleccionarse ese programa en el boton “Open” (flecha hacia arriba)
→ D1 mini examples → Basic → Blink.
void setup() {
pinMode(BUILTIN_LED, OUTPUT); // initialize onboard LED as output
}
void loop() {
digitalWrite(BUILTIN_LED, HIGH); // turn on LED with voltage HIGH
delay(5000); // wait 5 seconds
digitalWrite(BUILTIN_LED, LOW); // turn off LED with voltage LOW
delay(500); // wait 0.5 seconds
}
18
MQTT. Cliente ESP8266
“Hola mundo” ESP8266
Upload - Para compilarlo y volcarlo hacia el dispositivo Wemos, este debe
estar conectado a un puerto USB del equipo y tener permisos (en el
caso de Linux) de escritura sobre ese puerto.
19
MQTT. Cliente ESP8266
Conexión inicial a una red WiFi del ESP8266
Para conectarse a una WiFi en modo “Cliente”, es necesario instalar la librería “WiFi” desde el menu “Sketch” → “Include Library” →
“Manage Libraries”. Se realiza la búsqueda de la librería “WiFi” y se selecciona la última versión (actualmente la 1.2.7) y se instala .. en
unos segundos aparecerá como “INSTALLED”
20
MQTT. Cliente ESP8266
Conexión inicial a una red WiFi del ESP8266
Un programa básico para establecer una conexión WiFi en el ESP8266 puede verse a continuación, donde también se establece una
monitorización a través del puerto serie USB que se puede visualizar pulsando en la “Lupa” superior de la derecha del entorno Arduino IDE.
La monitorizacion por consola devuelve la direccion IP asignada al ESP8266, por lo que sera posible hacer un ping desde cualquier equipo
conectado a la misma WiFi hacia el ESP.
Serial Monitor
Nota: sustituir SSID por el nombre de la WiFi, y PASSWORD por la clave WiFi.
21
MQTT. Cliente ESP8266
Uso de la librería MQTT “PubSubClient”
Para el uso de las funciones de publicacion/suscripcion MQTT sera necesario hacer uso de la libreria “PubSubClient”, que se instalara de la
misma forma que se instalo la libreria “WiFi”.
22
MQTT. Cliente ESP8266
Publicación en un broker MQTT
Una vez establecida conexión a una red WiFi con salida a Internet, podrá hacerse una publicación en un broker MQTT ubicado en cualquier
dirección pública de Internet.
Un ejemplo sería:.
// Printing the ESP IP address
#include <ESP8266WiFi.h>
Serial.println(WiFi.localIP());
#include <PubSubClient.h>
client.setServer(mqttServer, mqttPort);
const char* ssid = "SSID";
const char* password = "PASSWORD";
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
const char* mqttServer = "BROKER_IP_ADDRESS";
const int mqttPort = BROKER_PORT;
if (client.connect("", mqttUser, mqttPassword )) {
const char* mqttUser = "BROKER_USER";
Serial.println("connected");
const char* mqttPassword = "BROKER_USER_PASSWORD";
} else {
Serial.print("failed ");
WiFiClient espClient;
delay(2000);
PubSubClient client(espClient);
}
}
int data = 0;
client.publish(“alumnos/MDC8974z/prueba", "Hello from ESP8266");
char PublishData[50];
}
void setup() {
void loop() {
// Initializing serial port for debugging purposes
String SensorData = "Data: ";
Serial.begin(115200);
SensorData.concat(data);
delay(10);
SensorData.toCharArray(PublishData, SensorData.length()+1);
Serial.println(ssid);
Serial.println(SensorData);
WiFi.begin(ssid, password);
client.publish(“alumnos/MDC8974z/prueba", PublishData);
while (WiFi.status() != WL_CONNECTED) {
client.loop();
delay(500);
data++;
}
Serial.println("WiFi connected");
}
23
MQTT. Node-RED.
1. Descripción
Node-RED se define como un “IoT Automation System”. Esto es una plataforma que sirve de pasarela
software entre los dispositivos IoT y entre estos y sistemas de control y servidores. Integra por tanto:
● Servicios (Web, …)
● Sistemas de presentación.
24
MQTT. Node-RED.
25
MQTT. Node-RED. Instalación y arranque
2. Instalación y arranque
Depende del sistema operativo. Node Red funciona sobre Java.
● Debian (a partir de Jessie 8) y Raspbian (sobre RBPi 3). Están documentadas versiones anteriores.
Puede aparecer algún warning, pero en general debería funcionar. En el caso de problemas, visualizar el log “/var/log/nodered-
install.log”
● Arrancar y parar:
$ node-red-start
$ node-red-stop
Para visualizar el log, systemd utiliza /var/log/system.log for logging. El filtrado de mensajes referidos a nodered
En cualquier navegador se accede a la IP donde está instalado Node- RED mediante https y el puerto configurado:
https://IPNODERED:PUERTO
27
MQTT. Node-RED. Protección
4. Operación básica
● Conexión a mosquitto
El manejo de NodeRED es intuitivo, arrastrando módulos hacia el panel central, conectándo módulos entre sí y haciendo doble clik sobre
ellos para configurarlos.
Se selecciona el módulo mqtt de input (es una suscripción a un topic de un broker) y se arrastra al panel central. Se hace doble sobre él
y se configura:
28
MQTT. Node-RED. Protección
4. Operación básica
● Visualización básica
Se selecciona el módulo “debug” del conjunto de los módulos “output” y se arrastra al panel central. Se conecta al módulo de
suscripción.
Se pulsa “Deploy”
Si se publica algo en ese topic del broker, deberá aparecer en la pentaña “debug” de la derecha:
29
MQTT. Node-RED. Visualización Dashboard
5. Visualización dashboard
● Instalación del módulo:
$ npm I node-red-dashboard
$ sudo service nodered restart
Se selecciona el módulo “text” y se le da doble-clic para configurar (se puede dejar la configuración por defecto). Se arrastra al panel central
y se conecta al módulo de suscripción. Se pulsa “Deploy”
30
MQTT. Node-RED. Visualización Dashboard
5. Visualización dashboard (cont)
- Visualización:
Desde un cliente (por ejemplo el comando “mosquitto_pub” de Linux) se publica un mensaje de texto:
31
MQTT. Cliente ESP8266
SUGERENCIAS DE AMPLIACION
● Uso del formato “json” (libreria ArduinoJson) para la transmision de los datos. Tened en
cuenta que “json” es un formato estándar de codificación de datos para IioT. Ver
https://randomnerdtutorials.com/decoding-and-encoding-json-with-arduino-or-esp8266/
32
MQTT. Cliente ESP8266
DATOS DE CONEXION
● DIRECCIÓN: nodered.cognosfera.net
● PUERTO: 1993
● USUARIO: 3 Iniciales (Mayúsculas) + 4 últimas cifras DNI + Letra DNI (minúscula), p.ej.
MDC4543z
● CLAVE USUARIO: orden inverso al usuario, p.ej. z3454CDM
● Topic: cualquier topic por debajo de: alumnos/”USUARIO”/, p.ej.
alumnos/MDC4543z/sensor1
NODE-RED
● URL: https://nodered.cognosfera.net:19XY
NOTA: 19XY (XY=índice del usuario en la lista de usuarios en FAITIC), p.ej
https://nodered.cognosfera.net:1921
● USUARIO: 3 Inciales (Mayúsculas) + 4 últimas cifras DNI + Letra DNI (minúscula), p.ej.
MDC4543z
● CLAVE USUARIO: orden inverso al usuario, p.ej. z3454CDM
33