Expresiones y sintaxis del nodo de lógica

Fundamentos de expresiones

El nodo Lógica utiliza el Navixy IoT Logic Expression Language, que se basa en Java Expression Language (JEXL). Todas las expresiones deben devolver un valor booleano (true/false) para el correcto funcionamiento del nodo.

Evaluación de expresiones: Las expresiones se evalúan de izquierda a derecha, y puede usar paréntesis para controlar el orden de las operaciones.

Ejemplo de sintaxis básica:

condition1 && (condition2 || condition3 > condition4)

Operadores disponibles

Operadores de comparación

Operador
Descripción

==

Comprueba si dos operandos son iguales. Si los operandos son de tipos diferentes, JEXL los convierte a uno si es posible

!=

Comprueba la desigualdad de dos operandos. Devuelve true si los operandos no son iguales

<

Comprueba que el operando izquierdo sea menor que el operando derecho

<=

Comprueba que el operando izquierdo sea menor o igual que el operando derecho

>

Comprueba que el operando izquierdo sea mayor que el operando derecho

>=

Comprueba que el operando izquierdo sea mayor o igual que el operando derecho

Operadores lógicos

Operador
Descripción

&& o y

AND lógico: comprueba si dos condiciones son verdaderas. Devuelve true si ambas condiciones son verdaderas

| o o

OR lógico: comprueba la veracidad de al menos una de las dos condiciones

! o no

NOT lógico: convierte el resultado de la condición al valor opuesto

Operadores de coincidencia de patrones

Operador
Descripción

=~

Comprueba si el valor del operando izquierdo está en el conjunto del operando derecho. Para cadenas, comprueba la coincidencia con una expresión regular

!~

Comprueba si el valor del operando izquierdo no está en el conjunto del operando derecho. Para cadenas, comprueba la no coincidencia con una expresión regular

=^

Comprueba que la cadena del operando izquierdo comience con la cadena del operando derecho

!^

Comprueba que la cadena del operando izquierdo no comience con la cadena del operando derecho

=$

Comprueba que la cadena del operando izquierdo termine con la cadena del operando derecho

!$

Comprueba que la cadena del operando izquierdo no termine con la cadena del operando derecho

Ejemplos de expresiones

Ejemplos de condiciones básicas

Comprobaciones de igualdad:

value('lock_state', 0, 'valid') == 'sealed'
door_state_2 == 0

Comprobaciones de desigualdad:

value('lock_state', 1, 'valid') != 'unknown'
avl_io_221 != null

Comparaciones numéricas:

value('humidity', 1, 'all') < 80
value('humidity', 1, 'all') <= 80
value('humidity', 0, 'valid') > 80
value('humidity', 0, 'valid') >= 80

Monitoreo de temperatura:

value('temperature', 0, 'valid') > 75

Esta expresión se activa cuando la temperatura supera los 75 grados, útil para alertas por sobrecalentamiento.

Detección de infracción de velocidad:

value('speed', 0, 'valid') > 80

Esta expresión identifica cuando los vehículos exceden límites de velocidad de 80 km/h.

Monitoreo del estado del dispositivo:

value('battery_voltage', 0, 'valid') < 11.5

Esta expresión detecta condiciones de batería baja que requieren atención de mantenimiento.

Alertas de nivel de combustible:

value('fuel_level', 0, 'valid') < 20

Esta expresión identifica cuando los niveles de combustible caen por debajo del 20%, permitiendo reabastecimientos proactivos.

Ejemplos de operadores lógicos

Operaciones AND:

value('temperature', 0, 'valid') > 15 && value('humidity', 0, 'valid') > 80
value('temperature', 0, 'valid') > 15 and value('humidity', 0, 'valid') > 80

Operaciones OR:

temperature < 10 || humidity > 80
temperature < 10 or humidity > 80

Operaciones NOT:

!condition
not condition
Ejemplos de coincidencia de patrones

Pertenencia a conjunto:

value('lock_state', 0, 'valid') =~ ['locked','unlocked']
value('driver_name', 0, 'valid') !~ ['John', 'Steve']

Coincidencia de patrones en cadenas:

driver_id =^ 'cc6f8216'
driver_id !^ 'cc6f8216'
value('engine_hours', 0, 'valid') =$ '1000'
value('driver_id', 0, 'valid') !$ '8b38851c3c68'
Ejemplos complejos de múltiples condiciones

Alerta por exceso de velocidad fuera de horario:

value('speed', 0, 'valid') > 60 && (value('current_hour', 0, 'valid') >= 18 || value('current_hour', 0, 'valid') <= 6)

Esto combina el monitoreo de velocidad con condiciones basadas en el tiempo para una supervisión de seguridad mejorada durante los turnos nocturnos.

Diagnóstico integral del dispositivo:

value('gps_satellites', 0, 'valid') >= 4 && value('battery_voltage', 0, 'valid') > 11.5 && value('signal_strength', 0, 'valid') > -80

Esto valida múltiples parámetros de salud del dispositivo simultáneamente para asegurar un funcionamiento confiable.

Monitoreo de seguridad del conductor:

value('harsh_braking', 0, 'valid') == true && value('driver_identified', 0, 'valid') == false

Esto identifica comportamientos de conducción inseguros cuando el conductor no está correctamente identificado en el sistema.

Programación de mantenimiento de equipos:

value('engine_hours', 0, 'valid') > 250 && value('last_maintenance', 0, 'valid') > 30

Esto activa alertas de mantenimiento cuando las horas de motor exceden los umbrales y el mantenimiento está atrasado.

Cumplimiento del rango de temperatura:

value('cargo_temperature', 0, 'valid') < -18 || value('cargo_temperature', 0, 'valid') > 4

Esto detecta cuando las temperaturas de la carga refrigerada están fuera del rango aceptable.

Complejidad de expresiones y paréntesis

Puede crear expresiones complejas combinando múltiples condiciones con paréntesis para controlar el orden de evaluación:

Validación de seguridad compleja:

!driver_identified && (vibration_active || speed > 3)

Verificación de equipo con múltiples parámetros:

(value('oil_pressure', 0, 'valid') < 20 || value('coolant_temp', 0, 'valid') > 95) && value('engine_running', 0, 'valid') == true

Escenarios de manejo de errores

Escenario
Resultado
Ruta del flujo
Valor del atributo

La expresión evalúa a true

Éxito

conexión THEN

true

La expresión evalúa a false

Éxito

conexión ELSE

false

El atributo referenciado es null

Tratado como false

conexión ELSE

false

Error de sintaxis en la expresión

Tratado como false

conexión ELSE

null

El atributo referenciado no existe

Tratado como false

conexión ELSE

null

Ejemplos de implementación práctica

Monitoreo de temperatura de la flota

Requisito empresarial: Monitorizar vehículos refrigerados para garantizar el cumplimiento de la temperatura de la carga

value('cargo_temperature', 0, 'valid') > 4 || value('cargo_temperature', 0, 'valid') < -18
  • Ruta THEN: Enviar alertas inmediatas a despacho, registrar violaciones de cumplimiento, activar acciones correctivas

  • Ruta ELSE: Continuar el procesamiento normal para temperaturas conformes, actualizar paneles de estado

Aplicación de seguridad del conductor

Requisito empresarial: Identificar patrones de conducción inseguros durante las horas activas del turno

value('harsh_acceleration', 0, 'valid') == true && value('shift_active', 0, 'valid') == true
  • Ruta THEN: Generar informes de entrenamiento al conductor, enviar notificaciones de seguridad, registrar incidentes

  • Ruta ELSE: Procesar datos de comportamiento de conducción normal, actualizar métricas de rendimiento

Alertas de mantenimiento predictivo

Requisito empresarial: Detectar fallos potenciales del equipo antes de que ocurran

value('engine_temperature', 0, 'valid') > 95 && value('oil_pressure', 0, 'valid') < 30
  • Ruta THEN: Programar citas de mantenimiento, enviar alertas a técnicos, registrar datos de diagnóstico

  • Ruta ELSE: Continuar la monitorización rutinaria, actualizar paneles de salud del equipo

Monitoreo de cumplimiento de geocercas

Requisito empresarial: Asegurar que los vehículos operen dentro de áreas autorizadas durante el horario laboral

(value('latitude', 0, 'valid') < 40.7489 || value('latitude', 0, 'valid') > 40.7589) && value('business_hours', 0, 'valid') == true
  • Ruta THEN: Generar alertas de ubicación no autorizada, notificar a seguridad, registrar violaciones

  • Ruta ELSE: Continuar el registro de operaciones normales, actualizar el seguimiento de ubicación

Última actualización

¿Te fue útil?