> 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 del flujo

Un ejemplo paso a paso que muestra cómo construir un flujo de IoT Logic que recopila la telemetría del dispositivo, calcula métricas derivadas y envía los datos enriquecidos a sistemas externos.

Este ejemplo demuestra 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 de la industria.

## Escenario de negocio

En este escenario, una organización ha desplegado dispositivos GPS en sus activos y necesita procesar los datos de estos dispositivos para la analítica de negocios. La organización recibe los siguientes parámetros directamente de sus dispositivos de seguimiento:

* `velocidad`: Velocidad del vehículo en kilómetros por hora
* `temperature`: Temperatura ambiental en Celsius
* `odómetro`: Distancia recorrida en kilómetros
* `ignición`: Estado de ignición del motor (1 = encendido, 0 = apagado)
* `nivel_de_combustible`: Medición actual del nivel de combustible
* `presion_psi`: Lectura de presión en PSI
* `voltaje`: Voltaje de la batería en voltios
* `acelerador`: Posición del pedal del acelerador del bus CAN (0-255)
* `nivel_de_combustible_1`: Primera medición del nivel del tanque de combustible
* `nivel_de_combustible_2`: Segunda medición del nivel del tanque de combustible

La organización necesita:

1. Recopilar datos brutos de telemetría de los dispositivos para mantener un registro completo de las operaciones del activo
2. Convertir las unidades de medida para que coincidan con su formato estándar de reporte (unidades imperiales) y mantener la consistencia 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 que no es proporcionada directamente por el hardware
5. Reenviar los datos enriquecidos a un sistema externo de análisis para su integración con plataformas de inteligencia empresarial
6. Enviar los datos brutos sin cambios a Navixy para monitoreo

Este flujo transforma los datos brutos de los dispositivos en un formato que respalda directamente la toma de decisiones empresariales, al tiempo que mantiene la integridad de las mediciones originales.

## Pasos para configurar el flujo

Siga estos pasos para crear un flujo integral 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**. Ingrese *Procesamiento de telemetría de activos* como nombre del flujo, agregue una descripción (*"Recopila los datos de los dispositivos, calcula métricas derivadas y los 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 desde el menú izquierdo al espacio 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 desea incluir en este flujo de 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 desde el menú izquierdo al espacio 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 *Conversiones de unidades*
5. Cree los siguientes atributos para la conversión de unidades (todos los ejemplos usan la sintaxis corta, haciendo referencia a los valores más recientes del atributo sin verificación de validez):
   1. Agregue 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: `Odómetro/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 desde el menú izquierdo al espacio de trabajo
2. Conecte el primero **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. Agregue un atributo para detectar 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. Agregar un atributo para el cálculo de valor estandarizado (normalizar el nivel de Combustible al 0-100 %):
      1. Nombre del atributo: *nivel\_de\_Combustible\_porcentaje*
      2. Valor: `(value('fuel_level', 0, 'válido') - 0) / (100 - 0) * 100`
   5. Agregue un atributo para el cálculo del porcentaje de carga de la batería:
      1. Nombre del atributo: *porcentaje de batería*
      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: *porcentaje\_del\_acelerador*
      2. Valor: `value('throttle', 0, 'valid') / 255 * 100`
   7. Agregue un atributo para el nivel promedio de combustible de múltiples sensores:
      1. Nombre del atributo: *avg\_combustible\_level*
      2. Valor: `(value('combustible_level_1', 0, 'valid') + value('combustible_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 avanzados de métricas](#advanced-metrics-calculations).
{% endhint %}
{% endstep %}

{% step %}

### Configure el Nodo de Salida

1. Arrastre un **Nodo de Salida** nodo desde el menú izquierdo al espacio de trabajo
2. Conecte el segundo **Iniciar atributo** nodo a este **Nodo de Salida** nodo
3. Haga clic en el Nodo para abrir su configuración
4. Configure los siguientes ajustes:
   1. **Tipo de nodo**: *Nodo de salida MQTT*
   2. **Nombre del punto de conexión**: *Plataforma de análisis*
   3. **Protocolo**: predeterminado *Navixy Generic Protocol (JSON)*
   4. **IP/dominio**: Ingrese la dirección del sistema de destino (p. ej., "*analytics.example.com*")
   5. **Puerto**: *8883* (predeterminado para MQTT, puede dejarlo vacío)
   6. **Habilitar SSL**: *activar*
   7. **Versión MQTT**: *5.0*
   8. **ID de cliente MQTT**: *cliente de telemetría de activo*
   9. **Tema**: *telemetry/assets/raw*
   10. **QoS**: *1*
   11. **Autenticación MQTT**: *Sí* (si lo requiere su sistema de destino)
   12. **Inicio de sesión y contraseña de MQTT**: Ingrese las credenciales si corresponde
5. Haga clic en **Crear** para guardar la configuración del nodo
   {% endstep %}

{% step %}

### Agregar Nodo de Salida predeterminado

1. Arrastre un **Nodo de Salida** nodo desde el menú izquierdo al espacio de trabajo
2. En **Modo** seleccione **Nodo de salida predeterminado**
3. Haga clic en **Guardar** para aplicar la configuración del nodo
4. Conecte el *Rastreadores de activos* (**Fuente de datos**) nodo a él

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

{% step %}

### Guarde y pruebe el flujo

Su configuración final se verá así:

<figure><img src="https://1900701122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-76943e439a5bab01e5e25fe9f9199d46c99ade30%2Fiot-logic-flow-configuration-example.png?alt=media" alt="Complete flow configuration with all nodes connected in IoT Logic workspace"><figcaption></figcaption></figure>

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

{% hint style="success" %}
Use [Analizador de datos (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 **velocidad** y **speed\_mph**:\ <img src="https://1900701122-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F446mKak1zDrGv70ahuYZ%2Fuploads%2Fgit-blob-dd91833c4e91cbf04798d44c3604cd4ef38c0937%2Fimage-20250407-204530.png?alt=media" alt="Speed attributes for one device in Data Stream Analyzer" data-size="original">

¡Todo bien! 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 primero **Nodo de Iniciar atributo** realiza conversiones sencillas de unidades:

* **Velocidad**: Convierte km/h a mph dividiendo por 1,609
* **Temperatura**: Convierte Celsius a Fahrenheit usando la fórmula °F = °C × 1,8 + 32
* **Distancia**: Convierte kilómetros a millas dividiendo por 1,609
* **Presión**: Convierte PSI a bar multiplicando por 0,06895, lo que la 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 diferentes estándares de medición.

### Cálculos avanzados de métricas

La segunda **Nodo de Iniciar atributo** realiza cálculos más complejos:

* **Detección de cambios de temperatura**: Calcula la diferencia entre las lecturas de temperatura actuales y anteriores para identificar cambios repentinos. Esto ayuda a detectar problemas en los equipos, como fallas 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 una falla del sistema de enfriamiento que requiere atención inmediata.
  * **Tiempo de generación**: Al usar `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. Esta marca de tiempo no necesita modificarse, así que deje este campo vacío durante la configuración.
* **Tiempo entre lecturas**: Mide el intervalo entre transmisiones de datos consecutivas comparando las marcas de tiempo del servidor. Este cálculo ayuda a identificar problemas de comunicación o a validar que los dispositivos informen con la frecuencia esperada. Los intervalos irregulares podrían indicar problemas de conectividad, mientras que los retrasos constantes podrían sugerir congestión de la red o problemas de configuración del dispositivo.
* **Redondear valores**: Aplica redondeo matemático a las lecturas de temperatura, reduciendo la precisión decimal a números enteros. Esto simplifica la visualización y los informes de datos, al tiempo que reduce los requisitos de almacenamiento para los datos históricos. Los valores redondeados son especialmente útiles para pantallas de paneles e alertas basadas en umbrales donde la precisión decimal no es necesaria.
  * **Tiempo de generación**: Al especificar `genTime('speed', 0, 'valid')` vincula estos metadatos directamente con 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. Esta marca de tiempo no necesita modificarse, así que deje 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 diferentes tipos de sensores y modelos de vehículos. Para la gestión de flotas, esto permite generar informes coherentes del nivel de combustible independientemente de la implementación específica del sensor de combustible en cada modelo de vehículo, lo que habilita alertas uniformes por 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 11V a 14V) a una escala de 0 a 100% para facilitar la supervisión. Por ejemplo, una lectura de 12,5V se normalizaría a 50%, lo que proporciona un indicador intuitivo del estado de la batería en diferentes 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 a 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 múltiples sensores**: Combina las lecturas de dos sensores de combustible independientes para producir una medición general del nivel de combustible más precisa. Esto es especialmente valioso para vehículos con formas de tanque complejas o con múltiples tanques, donde un solo sensor podría no proporcionar lecturas confiables debido al desplazamiento del combustible durante el movimiento.

## Resumen del flujo de ejemplo

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

1. **Estandarización**: Convierte las lecturas específicas del dispositivo en métricas empresariales estandarizadas
2. **Enriquecimiento**: Crea métricas nuevas y significativas que no están disponibles directamente en los sensores del dispositivo
3. **Transformación**: Cambia las unidades para cumplir con los requisitos de los 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 múltiples 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
