¿Qué son los topics en mqtt?

En MQTT se denomina Topic a una cadena de texto UTF-8, una longitud máxima de 65536 caracteres (aunque lo normal es que sea mucho menor) y distingue entre mayúsculas y minúsculas.

Los Topics están formados por uno o más "niveles" separados entre sí por una barra inclinada '/'. Cada nivel debe está formado por uno o más caracteres.

Ejemplo
  • casa/living/temperatura
  • casa/living/luz
  • casa/dormitorio/temperatura

El funcionamiento de los topics en mqtt

El funcionamiento de los Topcis en MQTT es sencillo y transparente. Por un lado el Broker acepta todos los Topics. No es necesario crearlo explícitamente antes de publicar o suscribirse al Broker.

Por su parte, los clientes pueden suscribirse a uno o varios Topic. Para ello, el cliente puede establecer varias suscripciones y/o emplear Wildcards, como veremos mas adelante.

Finalmente, los clientes publican mensajes indicando un único Topic. El Broker recibe el mensaje y, si encuentra alguna suscripción que cumpla con el filtro del Topic, transmite el mensaje a los clientes suscritos.

Wildcards

Cuando un cliente establece una suscripción puede suscribirse a un Topic específico, o usar Wildcards para suscribirse a múltiples Topic. Existen dos Wildcards que podemos emplear, de "NIVEL ÚNICO" O "NIVEL MÚLTIPLE"

Wildcard de nivel único

El carácter + puede ser empleado para sustituir un único nivel en cualquier lugar del Topic.

Ejemplo
Topic Aplica
casa/+/temperatura
  • casa/living/temperatura
  • casa/dormitorio/temperatura
casa/living/+
  • casa/living/temperatura
  • casa/living/luz

Te puede interesar

Wildcard nivel múltiple

El carácter # puede ser empleado para sustituir cualquier número de niveles y puede usarse únicamente al final del Topic.

Ejemplo
Topic Aplica
casa/living/#

Recibirá todos los mensajes cuyo Topic empiece por: "casa/living/"

  • casa/living/temperatura
  • casa/living/luz
casa/#

Recibirá todos los mensajes cuyo Topic empiece por: "casa/"

  • casa/living/temperatura
  • casa/living/luz
  • casa/dormitorio/temperatura

Los Wildcards son únicamente para la suscripción. Los mensajes pueden publicarse únicamente contra un Topic.

Recomendaciones al organizar los topic

El éxito de un sistema de IoT depende enormemente de la arquitectura que diseñemos para la mensajería. En el caso de MQTT es esencial planear y organizar los Topic que vamos a emplear en el proyecto. Hay varios consejos que podemos seguir.

El principal es diseñar el sistema de Topic para que sea ampliable y mantenible. Queremos poder añadir más dispositivos a nuestra red o nuevas funcionalidades, y evitar darnos cuenta en el futuro de que el sistema que elegimos es insuficiente.

Otro consejo es mantener los Topic lo más pequeños y claros posible. Asimismo, es recomendable usar Topics lo más específicos posibles, evitando enviar mensajes a varios dispositivos y discriminar por el contenido del mensaje.

Así, por ejemplo, si se tiene varios sensores /Habitacion/Humedad/1/, /Habitacion/Humedad/2/, /Habitacion/Temperatura/1/ en lugar de usar /Habitacion/ para todos los dispositivos

Finalmente, otro pequeño consejo es emplear únicamente caracteres ASCII estándar, evitando caracteres especiales e incluso espacios. Esto hará más sencillo la interpretación de Topics, y la interoperabilidad entre lenguajes de programación y dispositivos.
Así, por ejemplo, es preferible emplear /Habitacion/ frente a /Habitación/ y /Humedad/ frente a /Sensor humedad/.