Выражения и синтаксис узла Logic

Основы выражений

Узел Logic использует Navixy IoT Logic Expression Language, который основан на Java Expression Language (JEXL). Все выражения должны возвращать логическое значение (true/false) для корректной работы узла.

Оценка выражений: Выражения оцениваются слева направо, и вы можете использовать скобки для управления порядком операций.

Пример базового синтаксиса:

condition1 && (condition2 || condition3 > condition4)

Доступные операторы

Операторы сравнения

Оператор
Описание

==

Проверяет, равны ли два операнда. Если операнды разных типов, JEXL при возможности приводит их к одному типу

!=

Проверяет неравенство двух операндов. Возвращает true, если операнды не равны

<

Проверяет, что левый операнд меньше правого операнда

<=

'Проверяет, что левый операнд меньше или равен правому операнду

>

Проверяет, что левый операнд больше правого операнда

>=

Проверяет, что левый операнд больше или равен правому операнду

Логические операторы

Оператор
Описание

&& или и

Логическое AND — проверяет, истинны ли оба условия. Возвращает true, если оба условия истинны

| или или

Логическое OR — проверка истинности хотя бы одного из двух условий

! или не

Логическое NOT — преобразует результат условия в противоположное значение

Операторы сопоставления с шаблоном

Оператор
Описание

=~

Проверяет, находится ли значение левого операнда в наборе правого операнда. Для строк проверяет соответствие регулярному выражению

!~

Проверяет, что значение левого операнда не находится в наборе правого операнда. Для строк проверяет несоответствие регулярному выражению

=^

Проверяет, что левая строка начинается с правой строки

!^

Проверяет, что левая строка не начинается с правой строки

=$

Проверяет, что левая строка заканчивается правой строкой

!$

Проверяет, что левая строка не заканчивается правой строкой

Примеры выражений

Примеры базовых условий

Проверки на равенство:

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

Проверки на неравенство:

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

Числовые сравнения:

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

Мониторинг температуры:

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

Это выражение срабатывает, когда температура превышает 75 градусов, полезно для оповещений о перегреве.

Обнаружение превышения скорости:

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

Это выражение выявляет случаи, когда транспортные средства превышают ограничение скорости 80 км/ч.

Мониторинг состояния устройства:

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

Это выражение обнаруживает низкое напряжение батареи, требующее обслуживания.

Оповещения об уровне топлива:

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

Это выражение обнаруживает, когда уровень топлива падает ниже 20%, что позволяет своевременно заправляться.

Примеры логических операторов

Операции AND:

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

Операции OR:

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

Операции NOT:

!condition
not condition
Примеры сопоставления с шаблоном

Членство в наборе:

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

Сопоставление строк с шаблоном:

driver_id =^ 'cc6f8216'
driver_id !^ 'cc6f8216'
value('engine_hours', 0, 'valid') =$ '1000'
value('driver_id', 0, 'valid') !$ '8b38851c3c68'
Сложные примеры с несколькими условиями

Оповещение о превышении скорости вне рабочего времени:

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

Это сочетает мониторинг скорости с временными условиями для повышения безопасности в ночные смены.

Комплексная диагностика устройства:

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

Это одновременно проверяет несколько параметров состояния устройства для обеспечения надежной работы.

Мониторинг безопасности водителя:

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

Это выявляет опасное поведение при вождении, когда водитель не идентифицирован в системе.

Планирование обслуживания оборудования:

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

Это вызывает оповещения о необходимости обслуживания, когда рабочие часы двигателя превышают пороги и обслуживание просрочено.

Соответствие температурному диапазону:

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

Это обнаруживает случаи, когда температура в рефрижераторе выходит за допустимые пределы.

Сложность выражений и скобки

Вы можете создавать сложные выражения, комбинируя несколько условий со скобками для управления порядком оценки:

Сложная проверка безопасности:

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

Проверка оборудования по нескольким параметрам:

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

Сценарии обработки ошибок

Сценарий
Результат
Путь потока
Значение атрибута

Выражение оценивается как true

Успех

THEN соединение

true

Выражение оценивается как false

Успех

ELSE соединение

false

Ссылка на атрибут является null

Обрабатывается как false

ELSE соединение

false

Синтаксическая ошибка в выражении

Обрабатывается как false

ELSE соединение

null

Ссылка на атрибут не существует

Обрабатывается как false

ELSE соединение

null

Практические примеры реализации

Мониторинг температуры автопарка

Требование бизнеса: Мониторить рефрижераторные транспортные средства, чтобы обеспечить соблюдение температурного режима груза

value('cargo_temperature', 0, 'valid') > 4 || value('cargo_temperature', 0, 'valid') < -18
  • THEN путь: Немедленно отправлять оповещения в диспетчерскую, фиксировать нарушения соответствия, инициировать корректирующие действия

  • ELSE путь: Продолжать нормальную обработку для соответствующих температур, обновлять панели состояния

Принудительное соблюдение безопасности водителя

Требование бизнеса: Выявлять небезопасные модели вождения в часы активной смены

value('harsh_acceleration', 0, 'valid') == true && value('shift_active', 0, 'valid') == true
  • THEN путь: Формировать отчеты по обучению водителей, отправлять уведомления о безопасности, фиксировать инциденты

  • ELSE путь: Обрабатывать данные о нормальном поведении при вождении, обновлять показатели эффективности

Оповещения предиктивного обслуживания

Требование бизнеса: Обнаруживать потенциальные отказы оборудования до их возникновения

value('engine_temperature', 0, 'valid') > 95 && value('oil_pressure', 0, 'valid') < 30
  • THEN путь: Назначать приемы на обслуживание, отправлять оповещения техникам, фиксировать диагностические данные

  • ELSE путь: Продолжать рутинный мониторинг, обновлять панели состояния состояния оборудования

Мониторинг соблюдения геозон

Требование бизнеса: Обеспечивать работу транспортных средств в разрешенных зонах в рабочие часы

(value('latitude', 0, 'valid') < 40.7489 || value('latitude', 0, 'valid') > 40.7589) && value('business_hours', 0, 'valid') == true
  • THEN путь: Формировать оповещения о несанкционированных местоположениях, уведомлять службу безопасности, фиксировать нарушения

  • ELSE путь: Продолжать нормальное ведение журнала операций, обновлять отслеживание местоположения

Последнее обновление

Это было полезно?