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

ProveedorTipoNotas
Eziwan MQTTGestionado (incluido)mqtt.eziwan.com:8883 — TLS, sin configuración
MosquittoAutohospedadoCódigo abierto — para alojar
HiveMQNube / LocalEnterprise
EMQXNube / LocalAlto rendimiento
AWS IoT CoreNubeIntegración con Lambda, S3
Azure IoT HubNubeIntegración con Azure Stream Analytics
Google Cloud IoTNubeIntegración con Pub/Sub
Scaleway IoT HubNubeAlojado 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
Almacenamiento en búfer sin conexión

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)

TemaDescripciónIntervalo
.../system/rsrpSeñal RSRP LTE (dBm)60 s
.../system/rsrqCalidad de la señal RSRQ (dB)60 s
.../system/uptimeTiempo de actividad (segundos)60 s
.../system/sim_activeSIM activa (1 o 2)Al producirse un cambio
.../system/operatorOperador LTE actualAl cambiar
.../system/wan_ipIP WANAl cambiar
.../system/vpn_latency_msLatencia del túnel VPN60 s

Eventos en tiempo real

TemaDesencadenante
.../events/failoverCambio de SIM1 a SIM2
.../events/failover_recoveredVuelta a SIM1
.../events/rebootSe ha detectado un reinicio
.../events/vpn_connectedTúnel VPN establecido
.../events/vpn_disconnectedTúnel VPN perdido
.../events/modbus_timeoutEl 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 usoQoSJustificación
Métricas del sistema (RSSI, tiempo de actividad)0Datos redundantes — pérdida aceptable
Sensores de proceso (energía, T°, P)1Se requiere fiabilidad, duplicados gestionados
Alarmas y eventos críticos1Recibido al menos una vez
Comandos a los actuadores2Exactamente una vez — evita la doble acción

Certificados y seguridad

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.

Contactar con el servicio de asistencia → | API REST →

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