Учетная запись

Выражения и синтаксис логики IF/THEN

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

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

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

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

condition1 && (condition2 || condition3 > condition4)

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

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

Оператор

Описание

==

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

!=

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

<

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

<=

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

>

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

>=

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

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

Оператор

Описание

&& или and

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

| или or

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

! или not

Логическое 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 %, что позволяет заранее выполнить дозаправку.

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

И операции :

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

Операции ИЛИ:

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

НЕ операции :

!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('latitude', 0, 'valid') < 40.7489 || value('latitude', 0, 'valid') > 40.7589) && value('business_hours', 0, 'valid') == true

Ветка THEN: формирование уведомлений о нахождении в неразрешённой зоне, уведомление службы безопасности, журналирование нарушений

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