Integración con MQTT
Eziwan incluye un cliente MQTT nativo que publica los datos de campo (sensores RS485, métricas de red, eventos) en cualquier broker MQTT, ya sea en la nube o local.
Corredores compatibles
| Proveedor | Tipo | Notas |
|---|---|---|
| Eziwan MQTT | Gestionado (incluido) | mqtt.eziwan.com:8883 — TLS, sin configuración |
| Mosquitto | Autohospedado | Código abierto — para alojar |
| HiveMQ | Nube / Local | Enterprise |
| EMQX | Nube / Local | Alto rendimiento |
| AWS IoT Core | Nube | Integración con Lambda, S3 |
| Azure IoT Hub | Nube | Integración con Azure Stream Analytics |
| Google Cloud IoT | Nube | Integración con Pub/Sub |
| Scaleway IoT Hub | Nube | Alojado en Francia |
Configuración del broker
A través del panel de control de Eziwan
Dispositivo → Configuración → MQTT
Interfaz gráfica para configurar el broker, las credenciales y los temas.
Configuración YAML
mqtt:
enabled: true
broker: "mqtt.eziwan.com"
port: 8883
tls: true
client_id: "GW-Paris-01"
# Auth — token disponible en el panel de control → Configuración → MQTT
username: "np_device"
password: "np_mqtt_xxxxxxxxxx"
# Calidad del servicio
keepalive: 60
qos: 1
retain: false
# Reconnexion automatique
reconnect_delay_min: 1
reconnect_delay_max: 60
# Buffering si connexion perdue
offline_buffer: true
offline_buffer_size: 10000 # messages
offline_buffer_ttl: 3600 # secondes
Si la conexión LTE se interrumpe momentáneamente, Eziwan almacena los mensajes MQTT en búfer de forma local (hasta offline_buffer_size mensajes) y los publica automáticamente al restablecerse la conexión. Los datos nunca se pierden.
Estructura de los temas
Datos de los sensores RS485 / Modbus
eziwan/{device_id}/modbus/{slave_id}/{tag_name}
Exemple :
eziwan/d_a1b2c3d4/modbus/1/active_power
eziwan/d_a1b2c3d4/modbus/2/temperatura
También puedes definir temas personalizados por registro en la configuración de Modbus:
mqtt_topic: "usine/paris/energie/compteur-01/puissance"
Métricas del sistema (publicadas automáticamente)
| Tema | Descripción | Intervalo |
|---|---|---|
.../system/rsrp | Señal RSRP LTE (dBm) | 60 s |
.../system/rsrq | Calidad de la señal RSRQ (dB) | 60 s |
.../system/uptime | Tiempo de actividad (segundos) | 60 s |
.../system/sim_active | SIM activa (1 o 2) | Al producirse un cambio |
.../system/operator | Operador LTE actual | Al cambiar |
.../system/wan_ip | IP WAN | Al cambiar |
.../system/vpn_latency_ms | Latencia del túnel VPN | 60 s |
Eventos en tiempo real
| Tema | Desencadenante |
|---|---|
.../events/failover | Cambio de SIM1 a SIM2 |
.../events/failover_recovered | Vuelta a SIM1 |
.../events/reboot | Se ha detectado un reinicio |
.../events/vpn_connected | Túnel VPN establecido |
.../events/vpn_disconnected | Túnel VPN perdido |
.../events/modbus_timeout | El esclavo Modbus ya no responde |
Formato de las cargas útiles
Carga útil estándar (sensores)
{
"device_id": "d_a1b2c3d4",
"name": "GW-Paris-01",
"timestamp": "2025-06-15T14:23:45.123Z",
"metric": "active_power",
"value": 42.7,
"unit": "kW",
"quality": "good",
"source": "modbus:slave=1:reg=0x0048"
}
Carga útil del evento de conmutación por error
{
"device_id": "d_a1b2c3d4",
"event": "failover",
"timestamp": "2025-06-15T14:23:45.123Z",
"from_sim": 1,
"to_sim": 2,
"from_operator": "Orange",
"to_operator": "SFR",
"reason": "rsrp_below_threshold",
"rsrp_sim1_dbm": -104,
"duration_ms": 28340
}
El campo "quality" indica la fiabilidad de la medición:
"good"— lectura Modbus correcta"timeout": el esclavo no ha respondido"error": error de Modbus (campo"error_code"presente)"stale": último valor conocido (esclavo temporalmente ausente)
Suscripción y prueba
Prueba rápida con mosquitto_sub
# Suscribirse a todos los hilos de un dispositivo
mosquitto_sub -h mqtt.eziwan.com -p 8883 \
--cert ~/eziwan/client.crt \
--key ~/eziwan/client.key \
--cafile ~/eziwan/ca.crt \
-t "eziwan/d_a1b2c3d4/#" -v
# Temas específicos
mosquitto_sub -h mqtt.eziwan.com -p 8883 \
--cert ~/eziwan/client.crt --key ~/eziwan/client.key \
--cafile ~/eziwan/ca.crt \
-t "eziwan/d_a1b2c3d4/modbus/1/active_power" \
-t "eziwan/d_a1b2c3d4/events/#"
Descarga tus certificados de cliente desde Configuración → MQTT → Descargar certificados.
Integración de InfluxDB 2.x con Grafana
Arquitectura
Configuración de Telegraf
# /etc/telegraf/telegraf.conf
[[inputs.mqtt_consumer]]
servers = ["ssl://mqtt.eziwan.com:8883"]
topics = ["eziwan/+/modbus/#", "eziwan/+/system/#"]
qos = 1
# Certificats MTLS
tls_ca = "/etc/telegraf/eziwan-ca.crt"
tls_cert = "/etc/telegraf/eziwan-client.crt"
tls_key = "/etc/telegraf/eziwan-client.key"
# Parsing JSON
data_format = "json"
json_time_key = "timestamp"
json_time_format = "2006-01-02T15:04:05.999Z07:00"
tag_keys = ["device_id", "name", "metric", "unit"]
[[outputs.influxdb_v2]]
urls = ["http://influxdb:8086"]
token = "votre-token-influx"
organization = "acme-corp"
bucket = "eziwan"
Consulta de flujos para Grafana
from(bucket: "eziwan")
|> range(start: -24h)
|> filter(fn: (r) => r._measurement == "mqtt_consumer")
|> filter(fn: (r) => r.metric == "active_power")
|> filter(fn: (r) => r.device_id == "d_a1b2c3d4")
|> aggregateWindow(every: 1m, fn: mean, createEmpty: false)
|> yield(name: "puissance_active")
Integración con Node-RED
Node-RED permite crear flujos visuales de procesamiento de datos:
[
{
"type": "mqtt in",
"topic": "eziwan/d_a1b2c3d4/modbus/1/active_power",
"broker": "eziwan-mqtt",
"qos": 1
},
{
"type": "json"
},
{
"type": "function",
"func": "if (msg.payload.value > 100) { msg.alert = true; } return msg;"
},
{
"type": "http request",
"method": "POST",
"url": "https://hooks.slack.com/services/xxx",
"comment": "Alerte Slack si puissance > 100 kW"
}
]
QoS recomendada según el caso de uso
| Caso de uso | QoS | Justificación |
|---|---|---|
| Métricas del sistema (RSSI, tiempo de actividad) | 0 | Datos redundantes — pérdida aceptable |
| Sensores de proceso (energía, T°, P) | 1 | Se requiere fiabilidad, duplicados gestionados |
| Alarmas y eventos críticos | 1 | Recibido al menos una vez |
| Comandos a los actuadores | 2 | Exactamente una vez — evita la doble acción |
Los certificados de cliente MTLS están disponibles en Configuración → MQTT → Descargar certificados. Son únicos para cada cliente y se pueden volver a generar en cualquier momento.
Preguntas frecuentes
¿Por qué se ha impuesto MQTT en el IoT industrial?
Porque es ligero (ideal para 4G), funciona mediante publicación/suscripción (los dispositivos inician la conexión, sin puertos de entrada) y gestiona de forma nativa las conexiones intermitentes con niveles de calidad de servicio (QoS) y mensajes retenidos.
¿Qué nivel de QoS elegir?
QoS 1 (al menos una vez) es el valor predeterminado adecuado para la telemetría: garantiza la entrega sin la complejidad de QoS 2. Reserva QoS 0 para las mediciones de alta frecuencia tolerantes a la pérdida.
¿Cómo se protege un flujo MQTT?
TLS sistemático (puerto 8883), autenticación mediante certificado de cliente o credenciales específicas para cada dispositivo, y segregación de los temas por sitio. El broker nunca debe aceptar conexiones anónimas.
¿MQTT sustituye a Modbus?
No, se complementan: Modbus recopila los datos lo más cerca posible de los equipos (bus de campo), mientras que MQTT los transmite de forma eficaz a la nube. La pasarela se encarga de la conversión de Modbus a MQTT.
Recursos relacionados
- MQTT industrial — la página de soluciones
- OPC UA y MQTT — cómo combinar ambos estándares
- Modbus RTU a MQTT — la conversión de campo a la nube
- API REST de Eziwan — la otra vía de integración
- MQTT y RS-485 en la práctica — el artículo de fondo