Expressões e sintaxe do nó de lógica

Fundamentos de expressão

O nó Logic usa o Navixy IoT Logic Expression Language, que é baseado em Java Expression Language (JEXL). Todas as expressões devem retornar um valor booleano (true/false) para o correto funcionamento do nó.

Avaliação de expressões: As expressões são avaliadas da esquerda para a direita, e você pode usar parênteses para controlar a ordem das operações.

Exemplo de sintaxe básica:

condition1 && (condition2 || condition3 > condition4)

Operadores disponíveis

Operadores de comparação

Operador
Descrição

==

Verifica se dois operandos são iguais. Se os operandos forem de tipos diferentes, o JEXL os converte para um tipo comum se possível

!=

Verifica a desigualdade entre dois operandos. Retorna true se os operandos não são iguais

<

Verifica se o operando esquerdo é menor que o operando direito

<=

Verifica se o operando esquerdo é menor ou igual ao operando direito

>

Verifica se o operando esquerdo é maior que o operando direito

>=

Verifica se o operando esquerdo é maior ou igual ao operando direito

Operadores lógicos

Operador
Descrição

&& ou e na

Logical AND - verifica se duas condições são verdadeiras. Retorna true se ambas as condições forem verdadeiras

| ou ou

Logical OR - verifica a veracidade de pelo menos uma das duas condições

! ou não

Logical NOT - converte o resultado da condição para o valor oposto

Operadores de correspondência de padrão

Operador
Descrição

=~

Verifica se o valor do operando esquerdo está no conjunto do operando direito. Para strings, verifica correspondência por regex

!~

Verifica se o valor do operando esquerdo não está no conjunto do operando direito. Para strings, verifica não correspondência por regex

=^

Verifica que o operando string esquerdo começa com o operando string direito

!^

Verifica que o operando string esquerdo não começa com o operando string direito

=$

Verifica que o operando string esquerdo termina com o operando string direito

!$

Verifica que o operando string esquerdo não termina com o operando string direito

Exemplos de expressões

Exemplos de condições básicas

Verificações de igualdade:

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

Verificações de desigualdade:

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

Comparações numéricas:

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

Monitoramento de temperatura:

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

Essa expressão dispara quando a temperatura excede 75 graus, útil para alertas de superaquecimento.

Detecção de infração de velocidade:

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

Esta expressão identifica quando os veículos excedem limites de velocidade de 80 km/h.

Monitoramento da saúde do dispositivo:

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

Esta expressão detecta condições de bateria fraca que requerem atenção de manutenção.

Alertas de nível de combustível:

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

Esta expressão identifica quando os níveis de combustível caem abaixo de 20%, permitindo reabastecimento proativo.

Exemplos de operadores lógicos

Operações AND:

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

Operações OR:

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

Operações NOT:

!condition
not condition
Exemplos de correspondência de padrão

Pertencimento a conjunto:

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

Correspondência de padrão em strings:

driver_id =^ 'cc6f8216'
driver_id !^ 'cc6f8216'
value('engine_hours', 0, 'valid') =$ '1000'
value('driver_id', 0, 'valid') !$ '8b38851c3c68'
Exemplos complexos com múltiplas condições

Alerta de excesso de velocidade fora do expediente:

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

Isso combina monitoramento de velocidade com condições baseadas em horário para supervisão de segurança ampliada durante turnos noturnos.

Diagnóstico abrangente do dispositivo:

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

Isso valida múltiplos parâmetros de saúde do dispositivo simultaneamente para garantir operação confiável.

Monitoramento de segurança do motorista:

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

Isso identifica comportamento de condução inseguro quando o motorista não está devidamente identificado no sistema.

Agendamento de manutenção de equipamentos:

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

Isso dispara alertas de manutenção quando as horas do motor excedem os limites e a manutenção está atrasada.

Conformidade de faixa de temperatura:

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

Isso detecta quando as temperaturas de carga refrigerada estão fora da faixa aceitável.

Complexidade de expressão e parênteses

Você pode criar expressões complexas combinando múltiplas condições com parênteses para controlar a ordem de avaliação:

Validação complexa de segurança:

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

Verificação de equipamento com múltiplos parâmetros:

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

Cenários de tratamento de erros

Cenário
Resultado
Caminho do fluxo
Valor do atributo

A expressão avalia para true

Sucesso

Conexão THEN

true

A expressão avalia para false

Sucesso

Conexão ELSE

false

O atributo referenciado é null

Tratado como false

Conexão ELSE

false

Erro de sintaxe na expressão

Tratado como false

Conexão ELSE

null

O atributo referenciado não existe

Tratado como false

Conexão ELSE

null

Exemplos práticos de implementação

Monitoramento de temperatura da frota

Requisito de negócio: Monitorar veículos refrigerados para garantir conformidade da temperatura da carga

value('cargo_temperature', 0, 'valid') > 4 || value('cargo_temperature', 0, 'valid') < -18
  • Caminho THEN: Enviar alertas imediatos para despacho, registrar violações de conformidade, acionar ações corretivas

  • Caminho ELSE: Continuar o processamento normal para temperaturas em conformidade, atualizar painéis de status

Aplicação de segurança do motorista

Requisito de negócio: Identificar padrões de condução insegura durante horas de turno ativas

value('harsh_acceleration', 0, 'valid') == true && value('shift_active', 0, 'valid') == true
  • Caminho THEN: Gerar relatórios de orientação ao motorista, enviar notificações de segurança, registrar incidentes

  • Caminho ELSE: Processar dados de comportamento normal de condução, atualizar métricas de desempenho

Alertas de manutenção preditiva

Requisito de negócio: Detectar possíveis falhas de equipamento antes que ocorram

value('engine_temperature', 0, 'valid') > 95 && value('oil_pressure', 0, 'valid') < 30
  • Caminho THEN: Agendar compromissos de manutenção, enviar alertas a técnicos, registrar dados de diagnóstico

  • Caminho ELSE: Continuar monitoramento de rotina, atualizar painéis de saúde do equipamento

Monitoramento de conformidade de geocerca

Requisito de negócio: Garantir que os veículos operem dentro de áreas autorizadas durante o horário comercial

(value('latitude', 0, 'valid') < 40.7489 || value('latitude', 0, 'valid') > 40.7589) && value('business_hours', 0, 'valid') == true
  • Caminho THEN: Gerar alertas de localização não autorizada, notificar segurança, registrar violações

  • Caminho ELSE: Continuar registro de operações normais, atualizar rastreamento de localização

Atualizado

Isto foi útil?