# 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.

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/scaled-1680-/Fb9image.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/Fb9image.png)

***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
```

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/scaled-1680-/Ge5image.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/Ge5image.png)

### **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\_message**y **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.

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/scaled-1680-/Zo5image.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/Zo5image.png)

***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
```

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/scaled-1680-/tGrimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/tGrimage.png)

### **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__
```

**Ejemplo de configuración completa**

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/scaled-1680-/V6simage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/V6simage.png)

```
filter_begin​
filter_module_name __topic__ get right
filter_module_type generic_data_string
filter_topic testtopic/rgb/test/action/
filter_topic_exact_match 1
filter_message Move up right
filter_message_exact_match 1
filter_message_capture_regex \"yaw_direction\":\\s?\"(\\w+)\".*\"pitch_direction\":\\s?\"(\\w+)\".*\"message\":\\s?\"([^\"]+)\"
filter_message_capture_json 
filter_module_value __topic__ | Yaw Direction: __regex1__ | Pitch Direction: __regex2__ | Message: __regex3__
filter_end
```

Entonces, con el mensaje y la configuración mostradas de ejemplos previamente, se crearía el siguiente agente:

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/scaled-1680-/w0timage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/w0timage.png)  
  
Y el siguiente módulo de mensaje:

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/scaled-1680-/l2gimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/l2gimage.png)

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/scaled-1680-/MPjimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/MPjimage.png)

- ##### **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
```

<p class="callout warning">Las rutas JSONPath deben comenzar con $ porque representa la raíz del documento JSON. </p>

**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__
```

<span style="text-decoration: underline;">**Ejemplo de configuración completa**</span>

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/scaled-1680-/yIUimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/yIUimage.png)

```
filter_begin​
filter_module_name __topic__ get right
filter_module_type generic_data_string
filter_topic testtopic/rgb/test/action/
filter_topic_exact_match 1
filter_message Move up right
filter_message_exact_match 1
filter_message_capture_regex 
filter_message_capture_json $.data.yaw_direction|$.data.pitch_direction|$.message
filter_module_value __topic__ | Yaw Direction: __json1__ | Pitch Direction: __json2__ | Message: __json3__
filter_end
```

  
Entonces, con el mensaje y la configuración mostradas de ejemplos previamente, se crearía el siguiente agente:

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/scaled-1680-/w0timage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/w0timage.png)  
  
Y el siguiente módulo de mensaje:

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/scaled-1680-/l2gimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/l2gimage.png)

[![image.png](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/scaled-1680-/MPjimage.png)](https://pandorafms.com/guides/public/uploads/images/gallery/2025-02/MPjimage.png)