IoT industrial

Namespace de topics Sparkplug: spBv1.0, grupo, tipo de mensaje, nodo y dispositivo

Cada mensaje Sparkplug B viaja por un topic definido de forma estricta. Esta guía desglosa spBv1.0, group ID, tipo de mensaje, edge node ID y device ID, con reglas de nomenclatura, patrones de comodines y errores habituales.

Namespace de topics Sparkplug dibujado como un árbol que va de spBv1.0 al grupo, el tipo de mensaje, el edge node y el dispositivo
Pruébalo en tu propio broker MQTTConsigue un broker MQTT privado y gestionado con el plan Free y empieza con ejemplos de código listos para usar.
Pruébalo gratis Ejemplos de código Sin tarjeta

El namespace de topics Sparkplug es la estructura fija que utiliza todo mensaje Sparkplug B: spBv1.0/group_id/message_type/edge_node_id/device_id. En esta guía aprenderás qué significa cada elemento, cómo nombrar grupos, nodos y dispositivos para que sigan siendo manejables y qué suscripciones con comodines necesitas para monitorización, comandos y depuración.

Por qué Sparkplug fija la estructura de topics

MQTT puro te permite inventar la jerarquía de topics que quieras. Esa libertad es estupenda para un proyecto aislado y un problema en toda una planta, donde cada integrador elige un esquema distinto. Sparkplug elimina la elección. Los topics siguen un único patrón, de modo que cualquier aplicación host compatible con Sparkplug puede descubrir todos los edge nodes y dispositivos sin configuración específica por planta.

La contrapartida es que el topic no describe la jerarquía de tu planta más allá de grupo, nodo y dispositivo. Planta, área y línea se codifican en los IDs de grupo y de nodo o dentro de los nombres de las métricas. Esa distinción es importante cuando diseñas un Unified Namespace, y volveremos a ella más adelante.

El namespace de topics Sparkplug elemento a elemento

spBv1.0/{group_id}/{message_type}/{edge_node_id}/{device_id}
Elemento Ejemplo Significado Obligatorio
Namespace spBv1.0 Identifica la versión del payload Sparkplug B Siempre
group_id factory1 Agrupación lógica de edge nodes Siempre
message_type DDATA Qué tipo de mensaje es Siempre
edge_node_id line1 El gateway o edge node Siempre
device_id cnc1 Un dispositivo detrás del edge node Solo en mensajes D

Namespace: spBv1.0

El primer nivel es siempre la cadena literal spBv1.0. Indica a los consumidores que el payload es Protobuf de Sparkplug B. El antiguo Sparkplug A usaba spAv1.0 y está obsoleto. Si ves un topic que empieza por cualquier otra cosa, no es Sparkplug B, aunque el payload resulte ser Protobuf.

group_id

El group ID agrupa los edge nodes de forma lógica. Muchos equipos usan una planta o un área, por ejemplo plant-izmir o packaging. Una aplicación host suele suscribirse por grupo, así que elige grupos que coincidan con la forma en que quieres repartir la monitorización y los permisos.

message_type

Es el núcleo del namespace. Indica al consumidor cómo tratar el payload:

Tipo Emisor Finalidad
NBIRTH Edge node El nodo se conectó y anuncia todas sus métricas
NDEATH Broker (will) o nodo El nodo se desconectó
DBIRTH Edge node El dispositivo se conectó y anuncia sus métricas
DDEATH Edge node El dispositivo se desconectó
NDATA Edge node Valores modificados de métricas del nodo
DDATA Edge node Valores modificados de métricas del dispositivo
NCMD Aplicación host Comando al edge node, por ejemplo un rebirth
DCMD Aplicación host Comando a un dispositivo, por ejemplo escribir una consigna
STATE Aplicación host Estado online/offline del host

Los tipos birth y death contienen el modelo de estado que hace fiable a Sparkplug. Nuestra guía sobre certificados de birth y death de Sparkplug explica el ciclo de vida completo.

edge_node_id

El edge node ID identifica el gateway, PLC o software que mantiene la conexión MQTT. Debe ser único dentro de su grupo. Dos nodos con el mismo ID sobrescriben mutuamente sus births y corrompen los números de secuencia, uno de los fallos más habituales durante la puesta en marcha.

device_id

Los dispositivos están detrás de un edge node: un CNC, un variador, un contador Modbus. Los mensajes de nivel de dispositivo (DBIRTH, DDEATH, DDATA, DCMD) añaden el device ID como quinto nivel. Los mensajes de nivel de nodo terminan en el edge node ID.

El topic STATE

El mensaje STATE es la excepción al patrón. En Sparkplug 3.0 es spBv1.0/STATE/{host_id} con un pequeño payload JSON, publicado como retained por la aplicación host primaria de Sparkplug. Las implementaciones antiguas de la versión 2.2 usaban STATE/{host_id} sin el prefijo del namespace. Si conviven versiones distintas, comprueba qué forma esperan tu host y tus nodos.

Reglas de nomenclatura que te ahorrarán problemas

La especificación prohíbe los caracteres especiales de MQTT +, # y / dentro de los IDs de grupo, nodo y dispositivo, porque romperían los niveles del topic. Además, algunas convenciones ayudan:

  1. Usa solo minúsculas, dígitos y guiones. Mezclar mayúsculas y minúsculas provoca discrepancias entre sistemas.
  2. Mantén los IDs estables. Renombrar un edge node crea un nodo nuevo desde el punto de vista del host, y el histórico puede quedar dividido.
  3. No codifiques en un ID valores que cambian, como la versión de firmware o la dirección IP.
  4. Lleva la jerarquía más profunda a los nombres de métrica, por ejemplo Spindle/Speed, en lugar de intentar añadir niveles al topic.
  5. Documenta el significado de cada grupo para que los nuevos integradores ubiquen correctamente los nodos.
  6. Mantén los IDs cortos. Se repiten en cada topic y aparecen en todos los logs.

Suscripciones útiles

La estructura fija hace que las suscripciones con comodines sean predecibles. Estos son los patrones que más usarás:

spBv1.0/#                          todo lo de Sparkplug en el broker
spBv1.0/factory1/#                 todo lo de un grupo
spBv1.0/+/NBIRTH/#                 cada birth de nodo, todos los grupos
spBv1.0/+/DDATA/+/+                cada mensaje de datos de dispositivo
spBv1.0/factory1/+/line1/#         todo lo de un edge node
spBv1.0/factory1/DDATA/line1/cnc1  los datos de un dispositivo
spBv1.0/STATE/+                    estado de las aplicaciones host

Puedes probarlos con el servidor MQTT público gratuito. El área pública es legible por todo el mundo, así que usa un group ID aleatorio y no publiques nunca datos reales de planta allí:

mosquitto_sub -h broker.connectmq.com -p 1883 -i ns-explorer-5c21 -t "spBv1.0/demo-5c21/#" -v

En una segunda terminal, publica un mensaje de prueba en un topic de datos de dispositivo. Aquí el payload es texto plano solo para verificar el enrutamiento; un nodo real envía Protobuf:

mosquitto_pub -h broker.connectmq.com -p 1883 -i ns-pub-5c21 -t "spBv1.0/demo-5c21/DDATA/line1/cnc1" -m "routing test"

Ten en cuenta que los topics Sparkplug del broker público usan cinco niveles, holgadamente dentro de su límite de ocho, así que un simulador Sparkplug funciona allí sin cambios.

Explorar el namespace en un explorador de topics

Un namespace se entiende mucho mejor cuando puedes verlo como un árbol. En ConnectMQ, el explorador de topics del portal muestra los topics spBv1.0 a medida que llegan y, como el broker decodifica Sparkplug B, puedes hacer clic en un topic DDATA y leer sus métricas en lugar de bytes en bruto. Así respondes rápidamente a preguntas de puesta en marcha, como si un nuevo edge node ya ha publicado su birth o qué dispositivos cuelgan de un nodo determinado.

ConnectMQ también puede republicar datos Sparkplug en topics ISA-95. Un mensaje en spBv1.0/factory1/DDATA/line1/cnc1 queda disponible en connectmq/factory1/production/line1/cnc1/telemetry, más cómodo para dashboards y herramientas que esperan una jerarquía de planta.

Topics Sparkplug y el Unified Namespace

El namespace de topics Sparkplug es plano por diseño: grupo, nodo, dispositivo. Un Unified Namespace suele seguir ISA-95: empresa, planta, área, línea, celda. Ambas visiones coexisten en muchas arquitecturas. Sparkplug se encarga del transporte fiable y consciente del estado desde el edge, y un árbol ISA-95 ofrece a personas y aplicaciones un modelo navegable. Para el razonamiento de diseño, lee MQTT, Sparkplug B y el Unified Namespace, y para el contexto general consulta la guía de IoT industrial con MQTT.

Solución de problemas con los topics

Síntoma Causa probable Qué comprobar
El host nunca ve un nodo Errata en el topic o mayúsculas incorrectas en spBv1.0 La cadena exacta del namespace, que distingue mayúsculas
Dos nodos hacen rebirth continuamente Edge node ID duplicado en un grupo IDs únicos por grupo
No se reciben comandos El nodo no está suscrito a sus topics NCMD/DCMD El nodo se suscribe a spBv1.0/group/NCMD/node y a DCMD
Se ignoran los datos del dispositivo DDATA enviado antes del DBIRTH El dispositivo debe publicar primero el DBIRTH
Falta el estado del host Host y nodos no coinciden en el formato del topic STATE Topic STATE de 2.2 frente a 3.0

Cuando sospeches un problema de topics, suscríbete a spBv1.0/your-group/# con salida detallada y observa el orden de los mensajes durante el arranque. Primero deben llegar los births y después los datos.

Dónde ejecutarlo

El tráfico Sparkplug funciona en cualquier broker MQTT que cumpla el estándar, pero las plantas en producción necesitan credenciales, TLS y alguien responsable de la disponibilidad. Un broker MQTT gestionado se ocupa de la infraestructura para que tu equipo se centre en la nomenclatura, el modelado y la integración. Una vez que fluyen los births y los datos, el siguiente paso es leer los propios payloads, algo que cubre nuestra guía del payload Sparkplug B.

Empieza con ConnectMQ

Crea un broker Serverless gratuito en app.connectmq.com, sin tarjeta de crédito. Conecta tu edge node con las credenciales generadas mediante TLS en el puerto 8883 y explora tu namespace de topics Sparkplug, decodificado y organizado, en el explorador de topics de ConnectMQ.

Preguntas frecuentes

¿Puedo añadir más niveles a un topic Sparkplug?

No. El namespace de topics Sparkplug tiene cuatro niveles fijos para los mensajes de nodo y cinco para los de dispositivo. Lleva la jerarquía adicional a los nombres de las métricas o mapea los datos a un árbol ISA-95.

¿El group ID equivale a una planta?

Puede serlo, pero la especificación solo lo define como una agrupación lógica de edge nodes. Muchos equipos usan un grupo por planta o por área, según cómo se delimiten las aplicaciones host.

¿Por qué el topic STATE tiene un aspecto distinto?

Los mensajes STATE proceden de aplicaciones host, no de edge nodes, por lo que no siguen el patrón de nodo y dispositivo. En Sparkplug 3.0 el topic es spBv1.0/STATE/{host_id}.

¿Los topics Sparkplug distinguen entre mayúsculas y minúsculas?

Sí. Los topics MQTT distinguen mayúsculas y minúsculas, así que spBv1.0 y SPBV1.0 son topics distintos, igual que Line1 y line1.

Artículos relacionados

Todos los artículos →

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.