Skip to main content
Skip table of contents

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

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

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

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

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

CODE
condition1 && (condition2 || condition3 > condition4)

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

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

Оператор

Описание

==

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

!=

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

<

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

<=

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

>

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

>=

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

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

Оператор

Описание

&& или and

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

| или or

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

! или not

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

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

Оператор

Описание

=~

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

!~

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

=^

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

!^

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

=$

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

!$

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

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

Примеры основных условий

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Предупреждения по уровню топлива

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

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

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

И операции :

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

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

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

НЕ операции :

CODE
!condition
not condition

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

Принадлежность множеству

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

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

CODE
driver_id =^ 'cc6f8216'
driver_id !^ 'cc6f8216'
value('engine_hours', 0, 'valid') =$ '1000'
value('driver_id', 0, 'valid') !$ '8b38851c3c68'

Примеры сложных многоусловных выражений

Предупреждение о превышении скорости в нерабочее время

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

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

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

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

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

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

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

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

Планирование технического обслуживания оборудования

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

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

Контроль соответствия температурному диапазону

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

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

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

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

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

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

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

CODE
(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

Практические примеры использования

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

Бизнес-требование: контролировать рефрижераторные транспортные средства, чтобы обеспечивать соответствие температуры груза установленным требованиям

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

Ветка THEN: отправка немедленных уведомлений диспетчеру, журналирование нарушений соответствия, запуск корректирующих действий

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

Контроль качества вождения

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

CODE
value('harsh_acceleration', 0, 'valid') == true && value('shift_active', 0, 'valid') == true

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

Ветка ELSE: обработка данных о нормальном поведении при вождении, обновление показателей эффективности

Контроль посещения геозон

Бизнес-требование: обеспечивать эксплуатацию транспортных средств только в разрешённых зонах в рабочее время

CODE
(value('latitude', 0, 'valid') < 40.7489 || value('latitude', 0, 'valid') > 40.7589) && value('business_hours', 0, 'valid') == true

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

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

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.