Таблицы этой страницы показывают, как записать в Waliot выражения датчиков из Wialon и других систем мониторинга: равнозначные операторы и функции, ссылки на параметры, константы, битовые операции и проверку наличия значения. По ним инженер правит формулы датчиков после импорта.
Пересчета единиц измерения здесь нет: единицы Waliot для параметров перечислены на странице «Таблица соответствия имен параметров».
В Waliot есть два класса дополнительного оборудования (датчиков):
value (исходное значение), над которой можно выполнять математические операции, округление, работу с битовыми флагами и т. п.speed, fuel[1], attributes[hdop]) и из них собираются вычисления по нескольким полям, включая ссылки на предыдущее сообщение.У стандартных датчиков используются регулярные выражения над value: арифметика (+, -, *, /, ^), остаток от деления (%), функции sin, cos, sqrt, sqr, round, floor, ceil, min, max, маска битов через оператор : и круглые скобки для приоритета. Эти формулы не могут обращаться к произвольным полям телеметрии — только к value.
У произвольных датчиков применяются произвольные выражения: помимо стандартных операций из регулярных выражений, доступны именованные переменные телеметрии (latitude, longitude, speed, analog[1], digital[8], attributes[hdop] и т. д.), а также обращение к предыдущему значению любой переменной через префикс # (например, speed - #speed). Расстояние и время от предыдущего сообщения доступны готовыми переменными: interval_meters — в метрах, interval_seconds — в секундах по времени фиксации. Если какого-то из указанных в выражении поля в записи нет, значение датчика для этой точки считается невычислимым.
В произвольных выражениях доступны переменные:
tracker_id, fix_time, server_time — идентификатор трекера, время фиксации и время регистрации сообщения на сервере (время — в секундах);valid, latitude, longitude, altitude, speed, course, satellites_count — признак достоверности навигации, координаты, высота, скорость, курс и число спутников;analog[n], digital[n], impulse[n], fuel[n], temperature[n] — значения входов трекера, где n — номер входа, отсчет с 1;attributes[имя] — любой параметр из раздела «Телеметрия» объекта, имя без учета регистра и пробелов;equipment[псевдоним] и equipment_attachment[поле] — значения другого датчика и прицепного оборудования (см. таблицу ниже);interval_meters, interval_seconds — расстояние и время от предыдущего сообщения;null — отсутствие данных.Вариант со значением из предыдущего сообщения — с # перед именем (#speed, #fuel[1]) — есть у tracker_id, fix_time, server_time, valid, latitude, longitude, altitude, speed, course, satellites_count, analog[n], digital[n], impulse[n], fuel[n], temperature[n], attributes[имя] и equipment_attachment[поле]. У interval_meters, interval_seconds, equipment[...] и null такого варианта нет.
Почти у каждого датчика есть отдельное выражение валидатора — это логическая формула, которая должна возвращать ИСТИНА/ЛОЖЬ и определяет, считать ли вычисленное значение датчика валидным. Валидатор всегда пишется как произвольное логическое выражение и может обращаться к любым полям телеметрии и датчикам, комбинируя условия через && (И) и || (ИЛИ). Операторы && и || работают только в выражении валидатора, в выражении самого датчика их нет. Круглые скобки вокруг групп условий с && и || не поддерживаются, приоритета у И над ИЛИ нет: условия вычисляются слева направо, поэтому каждое условие должно давать 1 (истина) или 0 (ложь), например результат сравнения. Если валидатор вернул ЛОЖЬ, значение датчика в этой точке считается невалидным и не попадает в отчеты и аналитику. Типичные примеры:
Валидатор произвольного фильтра в оборудовании «Настройки навигации» отбраковывает не значение датчика, а саму точку трека. В нем «предыдущее сообщение» для #параметр, interval_meters и interval_seconds — исходное сообщение трекера, даже если оно само было отбраковано. Подробнее — на странице Настройки навигации.
Для стандартных и произвольных датчиков действуют общие правила записи выражений:
equipment[...], задавайте без пробелов..) — целая и дробная части вещественного числа разделяются точкой: 1.5, 0.001, -3.14.,) — разделитель параметров функции: round(3.1415,2), floor(value,0), min(value,10), max(speed,0).( ) задают явный приоритет операций.Сначала выполняются операции с наибольшим приоритетом, затем по убыванию. Если у соседних операций приоритет одинаковый, выполнение идет слева направо. Изменить порядок можно только скобками; исключение — операторы && и || в валидаторе, они вычисляются слева направо и скобок не поддерживают.
| Оператор / функция | Приоритет | Описание |
|---|---|---|
:, ! |
7 | Значение битового флага по порядковому номеру; логическое НЕ (применяется к значениям 1 и 0, только в произвольных выражениях и валидаторах). |
round, floor, ceil, min, max |
6 | Функции с двумя аргументами: округление до указанного числа знаков дробной части (floor — в сторону нуля, ceil — от нуля); минимум и максимум из пары значений. |
sin, cos, sqrt, sqr |
5 | Тригонометрические функции и квадратный корень / квадрат. |
^ |
4 | Возведение в степень. |
*, /, % |
3 | Умножение, деление, остаток от деления. |
+, - |
2 | Сложение и вычитание. |
=, !=, >, <, >=, <= |
1 | Операции сравнения (только в произвольных выражениях и валидаторах). |
&&, || |
— | Логические И и ИЛИ (только в валидаторах): вне иерархии приоритетов, вычисляются слева направо, без скобок. |
Примеры:
value * 1.5 + (30 - 6 / 2) при value = 10 дает 42.sin(cos(value + 3^2 * 5) - 5) — сначала степень, затем умножение, сложение внутри скобок, функции, вычитание.max(min(value, 100), 0) — ограничение значения снизу нулем и сверху сотней; у min/max ровно два аргумента, больше двух — через вложенность.
| Waliot | Wialon | Описание |
|---|---|---|
parameter, parameter[index], attributes[parameter]Пример: speed, fuel[1], attributes[hdop] |
parameterПример: adc1, in1 |
Параметр из текущего сообщения. |
#parameter, #parameter[index], #attributes[parameter]Пример: #speed, #fuel[1], #attributes[hdop] |
#parameterПример: #adc1, #in1 |
Параметр из предыдущего сообщения. |
equipment[name]Пример: equipment[Псевдоним оборудования] |
[equipment]Пример: [Имя датчика] |
Обращение к значению датчика по имени. В Waliot для этого используется псевдоним датчика, который указывается в поле «Псевдоним (наименование для произвольных выражений)» дополнительного оборудования; псевдоним должен быть уникальным и без пробелов. Обращение по псевдониму доступно для типов «Аналоговый датчик», «Датчик ВКЛ/ВЫКЛ», «Датчик зажигания», «Датчик температуры», «УСС для топлива», «УСС для жидкости», «Частотный датчик», «Датчик угла наклона», «Напряжение АКБ», «Произвольный абсолютный датчик» и «Произвольный логический датчик». |
equipment_attachment[field]Пример: equipment_attachment[width] |
— | Обращение к параметру прицепного оборудования (плуг, сеялка, борона, опрыскиватель), назначенного объекту. В скобках указывается имя поля, а не название прицепа: width — ширина, equipment_above_ground_height — высота над землей. |
| Число Пример: 10, 3.14 |
constXПример: const10, const3.14 |
Константное значение. Waliot позволяет использовать константы без необходимости префикса const. Слово value в выражениях стандартных датчиков обозначает не константу, а исходное значение датчика. |
null |
— | Специальное значение, обозначающее отсутствие данных. Позволяет выполнять проверки на отсутствие данных в логических выражениях. |
| — | |Пример: [Имя датчика 1]|[Имя датчика 2] |
Проверка наличия значений датчиков. В Waliot наличие значения проверяют сравнением с null, например attributes[hdop] != null. |
| Waliot | Wialon | Описание |
|---|---|---|
+ |
+ |
Сложение. |
- |
- |
Вычитание. |
* |
* |
Умножение. |
/ |
/ |
Деление. |
% |
— | Остаток от деления. |
^Пример: ^2, ^0.5 |
^Пример: ^const2, ^const0.5 |
Возведение в степень. |
sqrt(value) Пример: sqrt(4), sqrt(param) |
— | Вычисления квадратного корня. |
sqr(value) Пример: sqr(2), sqr(param) |
— | Возведение в квадрат. |
round(value,factor)Пример: round(3.1415,2), round(param,0) |
— | Математическое округление до указанного числа знаков дробной части. |
floor(value,factor)Пример: floor(3.1415,2), floor(param,0) |
— | Округление до указанного числа знаков дробной части в сторону нуля: для положительных чисел — в меньшую сторону, для отрицательных — в большую. |
ceil(value,factor)Пример: ceil(3.1415,2),ceil(param,0) |
— | Округление до указанного числа знаков дробной части от нуля: для положительных чисел — в большую сторону, для отрицательных — в меньшую. |
min(a,b)Пример: min(value,10), min(speed, max(0, limit)) |
— | Минимум из двух аргументов. Ровно два параметра; для трех и более значений — вложенные вызовы. |
max(a,b)Пример: max(value,0), max(min(1,2),10) |
— | Максимум из двух аргументов. Ровно два параметра; для трех и более значений — вложенные вызовы. |
sin(value) |
— | Вычисления синуса. |
cos(value) |
— | Вычисления косинуса. |
( )Пример: 1.5*(param-#param) |
( )Пример: const1.5*(param-#param) |
Приоритет операций. |
value:bit_numberПример: param:4 |
value:bit_numberПример: param:4 |
Побитовый контроль параметра. Приведение числа к двоичной системе счисления (бинарное представление) и возврат флага (0 или 1) по порядковому номеру бита. Биты считаются справа налево с индекса 0. |
| Waliot | Wialon | Описание |
|---|---|---|
= |
— | Равно. |
!= |
— | Не равно. |
> |
— | Больше. |
< |
— | Меньше. |
>= |
— | Больше или равно. |
<= |
— | Меньше или равно. |
| Waliot | Wialon | Описание |
|---|---|---|
&& |
— | Логическое И. Только в выражении валидатора, без скобок. |
|| |
— | Логическое ИЛИ. Только в выражении валидатора, без скобок. |
! |
— | Логическое НЕ. Приоритет 7; применяется к значениям 1 и 0. |
Выражения Waliot вычисляются над числовыми значениями параметров, поэтому у строковых функций Wialon для текстовых параметров в столбце Waliot стоит «—».
| Waliot | Wialon | Описание |
|---|---|---|
| — | :Пример: text_value:2,text_value:10 |
Преобразование текстовых параметров в числа различных систем счисления: двоичной, восьмеричной, десятичной и шестнадцатеричной. |
| — | ltrim(text_value)ltrim(text_value,'0') |
Обрезает все нули слева. По умолчанию обрезается «0», но можно применять и к другим символам. |
| — | rtrim(text_value)rtrim(text_value,'0') |
Обрезает все нули справа. По умолчанию обрезается «0», но можно применять и к другим символам. |
| — | lower(text_value) |
Переводит символы в нижний регистр. |
| — | upper(text_value) |
Переводит символы в верхний регистр. |
| — | reverse(text_value) |
Меняет порядок символов на обратный. |
| — | reverseb(text_value) |
Меняет порядок символов на обратный по два. Если в строке нечетное количество символов, то сначала она дополняется ведущим нулем слева, а затем происходит перестановка. |
| — | lfill(text_value,5,'0') |
Добавляет указанный символ (третий параметр функции) слева до тех пор, пока в строке не будет требуемое количество символов (второй параметр функции). |
| — | rfill(text_value,5,'0') |
Добавляет указанный символ (третий параметр функции) справа до тех пор, пока в строке не будет требуемое количество символов (второй параметр функции). |
| — | sequence(text_value,2,3,5,4,1,0) |
Изменяет порядок символов. Символы расставляются в порядке, указанном после имени параметра. Если указан несуществующий индекс (порядковый номер), то на месте этого символа подставляется 0. Индексы считаются слева направо, начиная с 0. |
| — | hex(text_value) |
Переводит из десятичной системы в шестнадцатеричную. |
| — | dec(text_value) |
Переводит из шестнадцатеричной системы в десятичную. |
| — | hextoascii(text_value) |
Переводит из шестнадцатеричной системы в ASCII. |
| — | concat(text_value, 'text') |
Склеивает строки. Можно склеивать более двух строк. |
| — | substr(text_value, 1, 4) |
Выбирает определенные символы из значения параметра. Выбранные символы образуют подстроку. Индексы считаются слева направо, начиная с 0. |
| — | len(text_value) |
Возвращает число, определяющее количество символов в строке. С результатом можно выполнять математические операции, так как оно является числом. |
| Waliot | Wialon |
|---|---|
(((latitude-#latitude)*111.1365)^2+((longitude-#longitude)*64.3541)^2)^0.5/((fix_time-#fix_time)/3600) |
(((lat-#lat)*const111.1365)^const2+((lon-#lon)*const64.3541)^const2)^const0.5/((time-#time)/const3600) |
При импорте из Wialon выражения датчиков переносятся без изменений: имена параметров Wialon в формулах не заменяются, а единицы измерения не пересчитываются. После импорта сверьте каждую формулу с таблицами на этой странице и замените имена и константы на значения Waliot. Таблицы соответствия типов датчиков и имен параметров доступны на специальных страницах базы знаний.