MQTT entre el lector y Odoo: un broker es infraestructura, no una solución
MQTT entre el lector y Odoo: un broker es infraestructura, no una solución
Integración Odoo

MQTT entre el lector y Odoo: un broker es infraestructura, no una solución

El polling HTTP satura el ERP y pierde eventos con jitter. MQTT desacopla los lectores de la lógica de negocio, pero solo si el árbol de topics se trata como un contrato, el QoS se elige a conciencia y el puente asume deduplicación, contrapresión y replay. Una guía de diseño práctica.

11 min· By SpidersRFID Editorial Team

La primera integración típica entre un parque de lectores y un ERP es HTTP: la pasarela publica cada lote de lecturas en un endpoint, Odoo lo recibe y todos se van a casa. Tres meses después el endpoint empieza a expirar en carga punta, la pasarela reintenta contra un muro y los eventos perdidos son exactamente los que habrían explicado la discrepancia de stock.

MQTT es la solución habitual y es buena, pero solo si se entiende como un transporte con garantías concretas y no como una cola que hace desaparecer el problema por arte de magia.

Por qué falla el polling HTTP a ritmos de eventos RFID

El fallo no es cuestión de ajuste; es estructural.

  • El polling significa que el cliente pregunta; con diez mil etiquetas por hora, el preguntar mismo se vuelve la carga.
  • Una respuesta lenta del ERP bloquea la pasarela, así que los lectores o bufferizan en memoria o descartan eventos en el borde.
  • El jitter convierte una llamada sincrónica en un timeout, y un timeout en una lectura no registrada.
  • No hay canal inverso natural: Odoo no puede decirle a la pasarela que baje el ritmo, cambie de modo o relea una zona.
  • Las tormentas de reintentos amplifican el problema original, porque cada petición fallida se repite mientras llegan eventos nuevos.

Qué cambia el modelo publicación-suscripción

El broker inserta un búfer persistente y direccionable entre las dos partes, y eso cambia los modos de fallo.

  • El lector publica y se olvida; la entrega pasa a ser problema del broker y no del lector.
  • El lado de negocio se suscribe a su propio ritmo, así que un ERP lento frena el puente, no la radio.
  • Los topics aportan un vocabulario de enrutamiento: sitio, zona, lector y tipo de evento se pueden direccionar por separado.
  • El broker puede bufferizar mientras el consumidor se reinicia, lo que convierte una caída en un retraso.
  • Los topics de comando permiten que Odoo o un operador empujen configuración hacia los lectores.

El árbol de topics es el contrato

La mayoría de las integraciones MQTT envejecen mal porque el árbol de topics se improvisó, y ahora cada consumidor parsea cadenas.

  • Diseñe la jerarquía una sola vez: sitio, zona, lector, tipo de evento, y mantenga el orden para siempre.
  • Publique lecturas crudas en una rama y eventos de negocio resueltos en otra; tienen consumidores distintos y necesidades de retención distintas.
  • Use una rama separada para estado y latido, así un lector muerto se ve sin recorrer el flujo de eventos.
  • Los comodines son cómodos para herramientas y peligrosos para consumidores de producción, porque una suscripción puede ensancharse en silencio.
  • Versione el árbol, no solo el payload; un nivel renombrado rompe más que un campo renombrado.

Diseño del payload: pequeño, versionado, autodescriptivo

Los payloads también son contratos, y el coste de equivocarse llega tarde.

  • Incluya lo esencial por evento: hora del evento en el lector, identificador, antena, EPC, intensidad de señal y una secuencia monotónica.
  • Prefiera marcas de tiempo numéricas en milisegundos del dispositivo, con la hora de recepción de la pasarela en un campo aparte.
  • Mantenga el esquema plano cuando sea posible; las estructuras anidadas son más difíciles de validar y de indexar.
  • Lleve una versión explícita de esquema y de firmware, porque el comportamiento de los campos cambia con el firmware más que con el esquema.
  • Comprima solo cuando el ancho de banda esté realmente limitado; un broker lleno de blobs binarios es un broker que nadie puede depurar.

QoS, mensajes retenidos y lo que garantizan de verdad

Los tres niveles de QoS se describen mucho y se entienden poco.

  • QoS cero es disparar y olvidar: vale para lecturas crudas de alto ritmo donde la siguiente lectura en un segundo la reemplaza.
  • QoS uno garantiza al menos una entrega, lo que significa duplicados, y los duplicados obligan a que el puente sea idempotente.
  • QoS dos garantiza exactamente una entrega a nivel de protocolo, al coste de un handshake de cuatro pasos por mensaje.
  • Los mensajes retenidos son para estado, no para eventos: el último estado conocido de un lector pertenece ahí, una lectura de etiqueta no.
  • El testamento es lo que hace visible un lector muerto en segundos en lugar de en la siguiente auditoría.

El puente: donde el protocolo se vuelve evento de negocio

El puente es una aplicación real con estado, y es donde se crea o se destruye el valor.

  • Suscríbase a lecturas crudas, deduplique por EPC dentro de una ventana y agregue en deltas con signo.
  • Resuelva EPC a producto y lote desde un mapeo en caché y enrute etiquetas desconocidas a un topic de cuarentena.
  • Aplique en Odoo mediante un único escritor con clave de idempotencia, nunca desde varias instancias del puente a la vez.
  • Confirme el mensaje MQTT solo después de que la escritura de negocio haga commit, o perderá eventos en el peor momento.
  • Publique el evento resuelto de vuelta en la rama de negocio para que otros consumidores no repitan ese trabajo.

Contrapresión, replay y el mensaje venenoso

Todo pipeline de eventos acaba encontrando un mensaje que no puede procesar, y la pregunta de diseño es qué pasa entonces.

  • Limite los mensajes en vuelo; un consumidor sin límite es solo una forma más lenta de quedarse sin memoria.
  • Cuando la cola supere un límite, descarte con contador en lugar de bloquear al lector, y alerte con fuerza.
  • Envíe los mensajes no procesables a un topic de mensajes muertos con el motivo adjunto, y nunca deje que uno detenga la cola.
  • Guarde la secuencia monotónica para que un replay empiece en un punto conocido en lugar de adivinar.
  • Pruebe el replay deliberadamente; un replay no probado es una creencia, no una capacidad.

Seguridad: TLS, credenciales y ACL de topics

Un broker MQTT en una red de almacén sin control de acceso es una interfaz para manipular el inventario.

  • Use TLS en el puerto seguro estándar y desactive por completo el listener en claro.
  • Dé a cada lector su propia credencial o certificado de cliente, para poder revocar un dispositivo comprometido por separado.
  • Restrinja derechos de publicación y suscripción por rama, para que un lector no publique en la rama de otro sitio.
  • Desactive el acceso anónimo y la cuenta administrativa por defecto; ambas siguen siendo los hallazgos más comunes en auditorías.
  • Registre los fallos de conexión y autorización, porque son la primera señal de un dispositivo mal configurado o hostil.

Operación: ahora eres dueño de un broker

Añadir un broker significa añadir un sistema que debe monitorizarse como cualquier otro.

  • Siga los clientes conectados, el ritmo de mensajes, los mensajes descartados y la profundidad de las sesiones persistentes.
  • Alerte sobre el retraso del puente, la edad del mensaje sin procesar más antiguo y el crecimiento de la cola de muertos.
  • Dimensione para la hora punta, no para la media diaria, y pruebe un reinicio del broker en un turno cargado.
  • Respalde el estado retenido y las tablas de mapeo del puente; son configuración, no caché.
  • Documente el árbol de topics y el esquema de payload en el repositorio, porque la siguiente integración la escribirá otra persona.
Integración Odoo RFID — solución integral

Usamos cookies para mejorar su experiencia de navegación, analizar el tráfico del sitio y personalizar el contenido. Haga clic en “Aceptar todas” para aceptar todas las cookies, o elija “Solo necesarias”. Consulte nuestra Política de privacidad para más detalles.