> For the complete documentation index, see [llms.txt](https://navixy.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://navixy.com/docs/user/es/guide/account/iot-logic/flow-management/flow-configuration-example.md).

# Ejemplo de configuración de flujo

Este ejemplo muestra cómo configurar un flujo que recopila datos de dispositivos IoT, realiza cálculos para derivar métricas relevantes para el negocio y reenvía los datos enriquecidos a un sistema externo. El ejemplo utiliza un patrón de flujo lineal que puede adaptarse a diversos casos de uso del sector.

## Escenario de negocio

En este escenario, una organización ha implementado rastreadores IoT en sus activos y necesita procesar los datos de estos dispositivos para análisis empresariales. La organización recibe los siguientes parámetros directamente de sus dispositivos de seguimiento:

* `speed`: Velocidad del vehículo en kilómetros por hora
* `temperature`: Temperatura ambiente en grados Celsius
* `odometer`: Distancia recorrida en kilómetros
* `ignition`: Estado de encendido del motor (1 = encendido, 0 = apagado)
* `fuel_level`: Medición actual del nivel de combustible
* `pressure_psi`: Lectura de presión en PSI
* `voltage`: Voltaje de la batería en voltios
* `throttle`: Posición del pedal del acelerador desde el bus CAN (0-255)
* `fuel_level_1`: Primera medición del nivel del tanque de combustible
* `fuel_level_2`: Segunda medición del nivel del tanque de combustible

La organización necesita:

1. Recopilar datos telemétricos sin procesar de los dispositivos para mantener un registro completo de las operaciones de los activos
2. Convertir las unidades de medida para que coincidan con su formato estándar de informes (unidades imperiales) para mantener la coherencia con los sistemas empresariales existentes
3. Calcular métricas basadas en el tiempo que indiquen patrones de uso para optimizar la utilización de los activos y los programas de mantenimiento
4. Crear métricas derivadas para generar información operativa no proporcionada directamente por el hardware
5. Reenviar los datos enriquecidos a un sistema de análisis externo para su integración con plataformas de inteligencia empresarial
6. Enviar los datos sin modificar a Navixy para su monitoreo

Este flujo transformará los datos sin procesar del dispositivo en un formato que respalda directamente la toma de decisiones empresariales, manteniendo al mismo tiempo la integridad de las mediciones originales.

## Pasos de configuración del flujo

Siga estos pasos para crear un flujo completo de transformación y reenvío de datos:

{% stepper %}
{% step %}
**Crear un nuevo flujo**

Abra IoT Logic. En la página de inicio, haga clic **Crear flujo**. Introduzca *Procesamiento de telemetría de activos* como nombre del flujo, añada una descripción (*"Recopila datos del dispositivo, calcula métricas derivadas y reenvía a la plataforma de análisis."*), y asegúrese de que el **Flujo habilitado** interruptor esté activado. Haga clic **Confirmar** para abrir el lienzo.
{% endstep %}

{% step %}
**Configurar la fuente de datos**

1. Arrastre un **Fuente de datos** nodo del menú izquierdo al área de trabajo
2. Haga doble clic en el nodo para abrir su panel de configuración
3. En **Nombre del nodo** tipo *Rastreadores de activos*
4. Seleccione los dispositivos que se incluirán en este flujo desde la lista filtrada

* Para este ejemplo, seleccione al menos dos dispositivos con capacidades similares

5. Haga clic en **Aplicar** para guardar la configuración del nodo
   {% endstep %}

{% step %}
**Configurar transformaciones básicas de datos**

1. Arrastre un **Iniciar atributo** nodo del menú izquierdo al área de trabajo
2. Conecte el **Fuente de datos** nodo a este **Iniciar atributo** nodo
3. Haga doble clic en el nodo para abrir su configuración
4. En **Nombre del nodo** tipo *Conversión de unidades*
5. Cree los siguientes atributos para la conversión de unidades (todos los ejemplos usan sintaxis corta, haciendo referencia a los valores de atributos más recientes sin comprobación de validez):
   1. Añada un nuevo atributo para la conversión de velocidad (km/h a mph): 1. Nombre del atributo: *speed\_mph* 2. Valor: `speed/1.609`
   2. Añada un nuevo atributo para la conversión de temperatura (Celsius a Fahrenheit): 1. Nombre del atributo: *temperature\_F* 2. Valor: `temperature*1.8 + 32`
   3. Añada un nuevo atributo para la conversión de distancia (kilómetros a millas): 1. Nombre del atributo: *distance\_miles* 2. Valor: `odometer/1.609`
   4. Añada un nuevo atributo para la conversión de presión (PSI a Bar): 1. Nombre del atributo: *pressure\_bar* 2. Valor: `pressure_psi * 0.06895`
6. Haga clic en **Aplicar** para guardar la configuración del nodo

{% hint style="info" %}
Para obtener explicaciones sobre los cálculos introducidos en este paso, consulte [Conversiones básicas de unidades](#basic-unit-conversions)
{% endhint %}
{% endstep %}

{% step %}
**Crear métricas calculadas avanzadas**

1. Arrastre otro **Iniciar atributo** nodo del menú izquierdo al área de trabajo
2. Conecte el primer **Iniciar atributo** nodo a este nuevo
3. Haga doble clic en el nodo para abrir su configuración
4. En **Nombre del nodo** tipo *Cálculos avanzados*
5. Cree los siguientes atributos para métricas avanzadas:
   1. Añada un atributo para la detección de cambios de temperatura:
      1. Nombre del atributo: *temperature\_change*
      2. Valor: `value('temperature', 0, 'valid') - value('temperature', 1, 'valid')`
      3. `genTime('temperature', 0, 'valid')`
   2. Añada un atributo para calcular el tiempo transcurrido entre las dos últimas lecturas:
      1. Nombre del atributo: *time\_between\_readings\_ms*
      2. Valor: `srvTime('speed', 0, 'valid') - srvTime('speed', 1, 'valid')`
      3. Tiempo de generación: `genTime('speed', 0, 'valid')`
   3. Añada un atributo para redondear la temperatura al entero más cercano:
      1. Nombre del atributo: *temperature\_rounded*
      2. Valor: `math:round(value('temperature', 0, 'valid'))`
   4. Añada un atributo para el cálculo de un valor estandarizado (normalizando el nivel de combustible a 0-100%):
      1. Nombre del atributo: *fuel\_level\_percent*
      2. Valor: `(value('fuel_level', 0, 'valid') - 0) / (100 - 0) * 100`
   5. Añada un atributo para el cálculo del porcentaje de carga de la batería:
      1. Nombre del atributo: *battery\_percentage*
      2. Valor: `(value('voltage', 0, 'valid') - 11) / (14 - 11) * 100`
   6. Añada un atributo para el cálculo de la posición del acelerador:
      1. Nombre del atributo: *throttle\_percentage*
      2. Valor: `value('throttle', 0, 'valid') / 255 * 100`
   7. Añada un atributo para el nivel promedio de combustible de varios sensores:
      1. Nombre del atributo: *avg\_fuel\_level*
      2. Valor: `(value('fuel_level_1', 0, 'valid') + value('fuel_level_2', 0, 'valid')) / 2`
6. Haga clic en **Aplicar** para guardar la configuración del nodo

{% hint style="info" %}
Para obtener explicaciones sobre los cálculos introducidos en este paso, consulte [Cálculos de métricas avanzadas](#advanced-metrics-calculations).
{% endhint %}
{% endstep %}

{% step %}
**Configurar el endpoint de salida**

1. Arrastre un **Punto de salida** nodo del menú izquierdo al área de trabajo
2. Conecte el segundo **Iniciar atributo** nodo a este **Punto de salida** nodo
3. Haga clic en el nodo para abrir su configuración
4. Configure los siguientes ajustes:
   1. **Tipo de endpoint**: *endpoint MQTT*
   2. **Nombre del endpoint**: *Plataforma de análisis*
   3. **Protocolo**: predeterminado *Navixy Generic Protocol (JSON)*
   4. **IP/Dominio**: Introduzca la dirección del sistema de destino (por ejemplo, "*analytics.example.com*")
   5. **Puerto**: *8883* (predeterminado para MQTT; puede dejarlo vacío)
   6. **Habilitar SSL**: *activado*
   7. **Versión de MQTT**: *5.0*
   8. **ID de cliente MQTT**: *asset-telemetry-client*
   9. **Tema**: *telemetry/assets/raw*
   10. **QoS**: *1*
   11. **Autenticación MQTT**: *Sí* (si lo requiere su sistema de destino)
   12. **Usuario y contraseña de MQTT**: Introduzca las credenciales, si corresponde
5. Haga clic en **Crear** para guardar la configuración del nodo
   {% endstep %}

{% step %}
**Agregar endpoint de salida predeterminado**

1. Arrastre un **Punto de salida** nodo del menú izquierdo al área de trabajo
2. En **Tipo de endpoint** seleccione **Endpoint predeterminado**
3. Haga clic en **Guardar** para aplicar la configuración del nodo
4. Conecte el *Rastreadores de activos* (**Fuente de datos**) y conecte el nodo a él

Esto garantiza que los datos sin procesar se envíen a Navixy directamente desde los dispositivos, sin ninguna transformación ni enriquecimiento.
{% endstep %}

{% step %}
**Guardar y probar el flujo**

Su configuración final se verá así:

<figure><img src="/files/d65646d741f1d6f9a53761071f1c121892a7280c" alt="Complete flow configuration with all nodes connected in IoT Logic workspace"><figcaption></figcaption></figure>

Haga clic en el **Guardar flujo** botón en el **Nodos** panel para almacenar la configuración de su flujo.
{% endstep %}
{% endstepper %}

{% hint style="success" %}
Utilice [Data Stream Analyzer (DSA)](/docs/user/es/guide/account/iot-logic/data-stream-analyzer.md) para supervisar los datos entrantes y verificar:

* Los dispositivos están enviando datos al flujo
* Los cálculos funcionan como se espera
* Los datos se están reenviando al destino. Por ejemplo, comprobemos que las conversiones de velocidad se calculan correctamente en un camión. Para hacerlo en DSA, seleccione el **Volvo** dispositivo y atributos **speed** y **speed\_mph**:\ <img src="/files/a5199b4ed4fc2b5d92acc20f84f6f80894362add" alt="Speed attributes for one device in Data Stream Analyzer" data-size="original">

¡Todo correcto! Los datos se reciben y convierten correctamente.
{% endhint %}

## Explicación de las transformaciones de datos

Examinemos los cálculos clave utilizados en este flujo.

### Conversiones básicas de unidades

El primer **nodo de inicialización de atributos** realiza conversiones sencillas de unidades:

* **Velocidad**: Convierte km/h a mph dividiendo entre 1.609
* **Temperatura**: Convierte Celsius a Fahrenheit mediante la fórmula °F = °C × 1.8 + 32
* **Distancia**: Convierte kilómetros a millas dividiendo entre 1.609
* **Presión**: Convierte PSI a Bar multiplicando por 0.06895, lo que lo hace compatible con los estándares internacionales de medición de presión

Estas conversiones garantizan la coherencia con los formatos estándar de informes y hacen que los datos sean inmediatamente utilizables para el análisis. Las conversiones de unidades son especialmente valiosas para las organizaciones multinacionales que operan en regiones con distintos estándares de medición.

### Cálculos de métricas avanzadas

El segundo **nodo de inicialización de atributos** realiza cálculos más complejos:

* **Detección de cambios de temperatura**: Calcula la diferencia entre las lecturas de temperatura actual y anterior para identificar cambios bruscos. Esto ayuda a detectar problemas en los equipos, como fallos de refrigeración en vehículos de transporte o problemas de HVAC en instalaciones. Por ejemplo, un aumento repentino de 5 °C en un contenedor refrigerado podría indicar un fallo del sistema de enfriamiento que requiere atención inmediata.
  * **Tiempo de generación**: El uso de `genTime('temperature', 0, 'valid')` es crucial aquí porque conserva la marca de tiempo exacta en la que el dispositivo generó la lectura de temperatura, lo que garantiza un análisis preciso de los cambios de temperatura basado en el tiempo.
  * **Tiempo del servidor**: El valor predeterminado `now()` captura automáticamente cuándo el servidor recibió los datos. Como no necesitamos modificar esta marca de tiempo, podemos dejar este campo vacío durante la configuración.
* **Tiempo entre lecturas**: Mide el intervalo entre transmisiones consecutivas de datos comparando las marcas de tiempo del servidor. Este cálculo ayuda a identificar problemas de comunicación o a validar que los dispositivos informan con la frecuencia esperada. Los intervalos irregulares podrían indicar problemas de conectividad, mientras que los retrasos constantes podrían sugerir congestión de red o problemas de configuración del dispositivo.
* **Redondeo de valores**: Aplica redondeo matemático a las lecturas de temperatura, reduciendo la precisión decimal a enteros. Esto simplifica la visualización y los informes de datos, a la vez que reduce los requisitos de almacenamiento de los datos históricos. Los valores redondeados son especialmente útiles para las visualizaciones de panel y las alertas basadas en umbrales, donde no es necesaria la precisión decimal.
  * **Tiempo de generación**: Al especificar `genTime('speed', 0, 'valid')` se conecta este metadato directamente a la marca de tiempo de la lectura original, lo que hace posible analizar tanto el intervalo de tiempo como el momento en que ocurrió.
  * **Tiempo del servidor**: El valor predeterminado `now()` captura automáticamente cuándo el servidor recibió los datos. Como no necesitamos modificar esta marca de tiempo, podemos dejar este campo vacío durante la configuración.
* **Cálculo de valor estandarizado**: Normaliza las lecturas sin procesar de los sensores a una escala porcentual (0-100%). Esta estandarización facilita la comparación de lecturas entre distintos tipos de sensores y modelos de vehículo. Para la gestión de flotas, esto permite un informe coherente del nivel de combustible independientemente de la implementación específica del sensor de combustible en cada modelo de vehículo, lo que posibilita alertas uniformes de bajo nivel de combustible y análisis del consumo.
* **Cálculo del porcentaje de carga de la batería**: Normaliza las lecturas de voltaje de la batería (rango de 11 V a 14 V) a una escala de 0-100% para facilitar la supervisión. Por ejemplo, una lectura de 12.5 V se normalizaría al 50%, proporcionando un indicador intuitivo del estado de la batería en distintos tipos de vehículos.
* **Cálculo de la posición del acelerador**: Convierte los datos brutos de la posición del acelerador (rango de 0-255) del bus CAN del vehículo a una escala porcentual. Esta estandarización ayuda a los operadores a comprender rápidamente el comportamiento del conductor y el rendimiento del vehículo sin necesidad de interpretar los valores brutos del sensor.
* **Nivel promedio de combustible de varios sensores**: Combina las lecturas de dos sensores de combustible separados para obtener una medición más precisa del nivel general de combustible. Esto es especialmente valioso para vehículos con depósitos de forma compleja o con varios depósitos, donde un solo sensor podría no proporcionar lecturas fiables debido al desplazamiento del combustible durante el movimiento.

## Resumen del flujo de ejemplo

Esta configuración del flujo demuestra varias capacidades clave de IoT Logic:

1. **Estandarización**: Convierte lecturas específicas del dispositivo en métricas empresariales estandarizadas
2. **Enriquecimiento**: Crea métricas nuevas y significativas que no están disponibles directamente desde los sensores del dispositivo
3. **Transformación**: Cambia las unidades para que coincidan con los requisitos de informes empresariales
4. **Contexto histórico**: Utiliza lecturas anteriores para calcular métricas basadas en tendencias
5. **Determinación del estado**: Crea valores categóricos basados en varias entradas de sensores

Esta combinación de capacidades transforma los datos brutos del dispositivo en inteligencia empresarial accionable, respaldando directamente la toma de decisiones operativas y manteniendo la integridad de las mediciones originales.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://navixy.com/docs/user/es/guide/account/iot-logic/flow-management/flow-configuration-example.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
