Configurando el filtrado de mensajes
El plugin hace uso de distintos filtros en los que apoyarse para la filtración de mensajes.
Filtrado de topic
Para el filtrado de topic, se hace uso de las etiquetas Filter_topic y Filter_topic_exact_match
-
Filter_topic
Expresión regular o texto exacto que deba coincidir con el topic del mensaje para cumplirse el filtro. Es opcional. Por defecto haría match con cualquier topic.
-
Filter_topic_exact_match
Indica si lo indicado en filter_topic se tratará como una expresión regular (0) o como un texto exacto (1). Es opcional. Por defecto su valor es 0.
Ejemplos
Haciendo uso de los filtros Filter_topic y Filter_topic_exact_match podremos elegir el topic al que suscribirse.
Podemos indicar directamente el nombre del topic o buscar un patron de regex en este.
Supongamos que tienes un topic MQTT llamado:
sensors/temperature/livingroom
EJEMPLO 1 filter_topic_exact_match 1 (Texto exacto)
Podríamos configurar filter_topic especifando el nombre del topic.
filter_topic sensors/temperature/livingroom
y configurar filter_topic_exact_match a 1, para que busque solo ese topic.
filter_topic_exact_match 1
Si en vez de especificar el nombre del topic completo, especificamos solo una parte de este :
filter_topic sensors/temperature/
También coincidiría.
EJEMPLO 2 filter_topic_exact_match 0 (Expresión regular)
Podríamos configurar filter_topic especifando una expresión regular que haga match con el nombre del topic al que se pretende suscribir. Por ejemplo, la siguiente, que miraría que empiecen por "sensors" y terminen en "livingroom"
filter_topic ^sensors/.*?/livingroom$
y configurar filter_topic_exact_match a 0, para que filtre por expresión regular, en vez de texto exacto.
filter_topic_exact_match 0
Filtrado de mensajes
Para el filtrado de topic, se hace uso de las etiquetas Filter_topic y Filter_topic_exact_match
-
Filter_message
Expresión regular o texto exacto que deba coincidir con el mensaje para cumplirse el filtro. Es opcional. Por defecto haría match con cualquier mensaje.
-
FIlter_message_exact_match
Indica si lo indicado en filter_message se tratará como una expresión regular (0) o como un texto exacto (1). Es opcional. Por defecto su valor es 0.
Ejemplos
Haciendo uso de los filtros Filter_messagey Filter_message_exact_match podremos filtrar los mensajes que se van a recibir.
Podemos indicar directamente contenido del mensaje o buscar un patron de regex en este.
Supongamos que tienes un mensaje como este:
{"message":"Move up right",
"status":"active",
"datetime":"2025-02-11T14:30:54.260Z",
"data":{"yaw_rate":0.11466979980468749,
"pitch_rate":0.6159210205078126,
"yaw_direction":"right",
"pitch_direction":"up"}}
EJEMPLO 1 filter_message_exact_match 1 (Texto exacto)
Podríamos configurar filter_message especifando el texto del mensaje.
filter_message Move up right
y configurar filter_topic_exact_match a 1, para que busque solo ese topic.
filter_message_exact_match 1
Si en vez de especificar el nombre del topic completo, especificamos solo una parte de este :
filter_message Move up
También coincidiría.
EJEMPLO 2 filter_message_exact_match 0 (Expresión Regular)
Podríamos configurar filter_message especifando una expresión regular que haga match con los mensajes que se pretenden filtrar. Por ejemplo, la siguiente, buscaría un mensaje que contenga las palabras "move" y "right"
filter_message Move.*right|right.*Move
y configurar filter_message_exact_match a 0, para que filtre por expresión regular, en vez de texto exacto.
filter_message_exact_match 0
Generación y uso de macros
Ejemplos
Imagina que tenemos el siguiente mensaje:
{
"message": "Move up right",
"status": "active",
"datetime": "2025-02-11T14:30:54.260Z",
"data": {
"yaw_rate": 0.11466979980468749,
"pitch_rate": 0.6159210205078126,
"yaw_direction": "right",
"pitch_direction": "up"
}
}
Y queremos capturar algunas partes del mensaje, por ejemplo :
yaw_direction
(dirección del giro), que es"right"
.pitch_direction
(dirección de inclinación), que es"up"
.message
, que contiene"Move up right"
.
Además, también queremos capturar el topic
al que pertenece el mensaje en una macro para incluirlo en el valor.
Para ello deberíamos seguir los siguientes pasos, pudiendo hacerlo con Filter_message_capture_regex y FIlter_message_capture_json:
-
FIlter_message_capture_regex
Con Filter_message_capture_regex se espera una expresión regular con grupos de captura para obtener valores del mensaje. Aquello que haga match con los grupos de captura se almacenará en macros “__regexN__”, siendo N la posición del grupo de captura de la regex. Los pasos para configurar las macros a capturar serían los siguientes:
1. Configurar filter_message_capture_regex para capturar las partes necesarias:
Usamos una expresión regular para capturar "yaw_direction", "pitch_direction" y el contenido de "message".
filter_message_capture_regex \"yaw_direction\":\\s?\"(\\w+)\".*\"pitch_direction\":\\s?\"(\\w+)\".*\"message\":\\s?\"([^\"]+)\"
2. Configurar filter_module_value para incluir las macros que contienen los valores capturados y el topic.
filter_module_value __topic__ | Yaw Direction: __regex1__ | Pitch Direction: __regex2__ | Message: __regex3__
-
Filter_message_capture_json
Con Filter_message_capture_json se espera una lista de rutas dentro de un JSON (separadas por”|”) de las cuales capturar sus valores. Usando el mismo formato que el comando jq. Aquello que se capture por cada path se almacenará en macros “__jsonN__”, siendo N la posición del path dentro de la lista. . Los pasos para configurar las macros a capturar serían los siguientes:
1. Configurar filter_message_capture_json para capturar las partes necesarias del JSON.
filter_message_capture_json .data.yaw_direction|.data.pitch_direction|.message
2. Configurar filter_module_value para incluir las macros que contienen los valores capturados y el topic.
filter_module_value __topic__ | Yaw Direction: __json1__ | Pitch Direction: __json2__ | Message: __json3__