Gestionando filtros MQTT con MyQttHub para controlar qué puede ser publicado


#1

1. Introducción a los filtros de MyQttHub

Con los filtros de MyQttHub puedes fácilmente:

  • Controlar qué puede ser publicado (PUBLISH), creando políticas para permitir-luego-denegar o denegar-rest-permitir.
  • Usar el filtrado para activar la función de Stashing para almacenar mensajes que encajen para que sean almacenados de manera permanente.

Vamos a ver cómo se configuran los filtros paso a paso. Siga leyendo.

2. Creando un filtro MQTT de permitir-luego-denegar con MyQttHub

En este caso, usted quiere:

  • Crear un filtro que permita sólo ciertos topics.
  • Opcionalmente permitir estos topics para cierto listado de usuarios (clientIds).
  • Luego denegar el resto de topics publicados (PUBLISHed) a todos los usuarios (u opcionalmente a algunos usuarios).
  1. Vaya a filtros y pinche en el menú principal:
    image

  2. …luego en Filters:
    image

  3. Ahora pulse a añadir filtro (arriba derecha):
    image

  4. Ahora introduzca una etiqueta, seleccione una prioridad alta (más alta que la regla de denegado; la prioridad va de menor a mayor, 1 tiene más prioridad que 100), seleccione el tipo de regla (limit PUBLISH), deje la regla activada y configure los filtros de topic que serán permitidos:

  5. Opcionalmente si quere limitar esta regla a un conjunto de usuarios/dispositivos (clientIds), introdúzcalos pinchando en “ClientIds”:
    image

  6. Cuando termine, pulse sobre “Add filter rule”:
    image

Si todo fue correctamente, debería ver su regla de “allow” (permitir). Ahora, repita el mismo proceso pero añadiendo una regla con menor prioridad que se encargará de denegar el resto del tráfico. Así es como se haría:

  1. Pulse a añadir de nuevo, configurando otra etiqueta, mismo tipo de regla, prioridad menor (un número más alto), cambiando “Permission/action” a Reject/deny, por último, añadiendo la regla:

  2. Opcionalmente puede configurar esta regla de rechazo (deny) para que ésta sea aplicada sólo a ciertos usuarios.

Después de esta configuración, los mensajes publicados (PUBLISH) que encajen con los topics permitidos tendrán como acción “Allow/Ok”, esto es, permitir/aceptar el mensaje lo antes posible y parar de comprobar otras reglas.

El resto de mensajes que no encajen con las reglas previas encajarán con la regla Deny/Reject debido a que tienen un “#” en nuestro ejemplo. En dicho acso, esos mensajes serán descartados.

3. Creando un filtro MQTT para denegar y el resto aceptar con MyQttHub

Por defecto, el motor de filtros de MyQttHub aceptará cualquier mensaje que no encaje con ninguna regla. De manera que que, para crear una regla de rechazo/descarte para limitar ciertos topics a ciertos usuarios, sólo tiene que crear un filtro de rechazo/descarte:

Luego, el resto de mensajes (PUBLISH) que no encajen con este filtro sepán permitidos.

4. Formato soportado para la configuración de filtros

La configuración de filtros para topics sigue las siguientes reglas:

  • Configure un filtro por cada línea
  • Use el formato de filtros para topics de MQTT (events/test/probe, events/+/+, events/#, #, +)
  • Está permitido usar los siguientes wildcards que son reemplazados por el userName si se usa %u y clientId si se usa %c, tomando dichos valores desde la conexión que está haciendo la operación.

Ejemplos válidos:

  • Encajar todos los topics:
    #

  • Encajar todos los topics bajo events/:
    events/#

  • Encajar todos los topics con tres niveles, donde el primero y el tercero sean sports y events, encajando cualquier configuración para el componente central:
    sports/+/events

  • Encajar todos los topics comenzando con una publicación clientId/, como clientId/temp/value:
    %c/#

  • Encajar todos los topics comenzando con el actual clientId/ seguido de su userName:
    %c/%u/stage

  • Selección de topic básica y explícita:
    central/events/accounting

Note que todos estos ejemplos son sólo para encajar el topic de la operación PUBLISH o SUBSCRIBE. Una vez encajen, la acción que aplica será definida por la regla.


MyQttHub y la especificación SparkPlug