В этой части статьи описывается применение языка сценариев для работы с иконками объектов и новые (добавленные в язык) операторы и функции.
Теперь в выражениях можно использовать логические операторы: & (AND), | (OR) и ^ (XOR).
Примеры:
ALARM = SENSOR1 & SENSOR2;
GROUP_STATE = UNIT(«12345»).X1 | UNIT(«67890»).X2;
Эти операторы работают над значениями переменных побитово.
Функция BOOL — возвращает значение 1, если переданный аргумент больше 0, или 0, если он меньше или равен 0. Можно использовать функцию IFSET, но в некоторых случаях с использованием BOOL получается более короткая запись.
Для удобства задания значения в шестнадцатеричном виде можно использовать функции HEX и BIN:
HEX(«FE») — возвращает 254
BIN(«10110») — возвращает 22
Функции полезны при работе с атрибутами объектов, которые передаются в виде битовых строк.
Формат: MAPVALUE(VAL0, RET0, VAL1, RET1,..., VALN, RETN, PARAM);
Функция проверяет значение параметра PARAM (последний параметр функции) по параметрам VAL0,VAL1,… VALN. Находит тот, для которого выполняется условие PARAM>VALX и возвращает соответствующий ему параметр RETX. Из всех параметров, удовлетворяющих условию выбирается имеющий наибольшее значение VAL, то есть ближайший к PARAM. Это позволяет передавать аргументы в не отсортированном по VAL порядке, то есть в качестве аргументов VAL могут задаваться переменные, атрибуты объектов — например расстояния ваших устройств до определенного местоположения, которые вычисляются на момент выполнения сценария. Если такого параметра на нашлось, всегда возвращается значение RET, которое соответствует минимальному из всех параметров VAL.
Пример:
X1 = MAPVALUE(10, 100, 20, 200, 30,300,23);
значение X1 при этом будет установлено в 200.
Формат: MAPVALUESTR(VAL0, RET0, VAL1, RET1,..., VALN, RETN, PARAM);
Функция аналогична функции, MAPVALUE, но в качестве переменных RET задаются строковые данные и возвращает функция строку. Пример применения этой функции будет дан ниже, при описании динамической установки изображения и цвета иконки объекта.
Перед описанием работы с иконками в сценарии, приведу доп. информацию о работе с иконками в сервисе:
В основном меню сервиса «Профиль», выбрав подменю «Пользовательские элементы», можно загружать свои изображения для объектов.
Для каждого объекта, выбрав в контекстном меню «Редактировать», можно назначить объекту иконку. Иконка выбирается из предустановленных групп или из группы «Пользовательские иконки». Можно изменить цвет иконки и ее размер. Ниже описывается как это можно делать с помощью языка сценариев динамически.
В данном случае приводится пример изменения цвета и изображения иконки при поступлении сообщений от объекта. Для этого через контекстное меню объекта необходимо добавить в сценарий следующие операторы:
UNIT.ICON.COLOR=MAPVALUESTR(0,«FF6A00»,10,«B6FF00»,20,«00FFFF»,40,«0094FF»,60,«0026FF»,80,«B200FF»,100,«FF006E»,UNIT.V);
UNIT.ICON.IMAGE=MAPVALUESTR(0,«car5pack.png»,50,«car5.png»,100,«car5sign.png»,UNIT.V);
С помощью первого оператора иконка объекта меняет цвет в зависимости от текущей скорости.С помощью второго оператора на основании текущей скорости объекта меняется изображение иконки. Для работы с иконкой используются следующие атрибуты объекта:
UNIT.ICON.COLOR
UNIT.ICON.IMAGE
UNIT.ICON.SIZE
Последний атрибут позволяет с помощью сценария изменять размер иконки объекта.
В рамках выполнения сценария для одного объекта можно изменять иконки других объектов (если они находятся в этой же папке, или принадлежат тому же пользователю, которому принадлежит объект, для которого выполняется сценарий).
Изображение должно существовать в рамках той группы, в которой выбрана иконка объекта. То есть, нельзя в рамках скрипта присвоить объекту иконку из группы «Автобус», если изначально она была выбрана в группе «Интернет вещей».
Пример работы данного сценария можно посмотреть на примере объекта «Barcеlona» в Сервис ViaLatM в демо доступе..
Логические операторы
Теперь в выражениях можно использовать логические операторы: & (AND), | (OR) и ^ (XOR).
Примеры:
ALARM = SENSOR1 & SENSOR2;
GROUP_STATE = UNIT(«12345»).X1 | UNIT(«67890»).X2;
Эти операторы работают над значениями переменных побитово.
Функция BOOL
Функция BOOL — возвращает значение 1, если переданный аргумент больше 0, или 0, если он меньше или равен 0. Можно использовать функцию IFSET, но в некоторых случаях с использованием BOOL получается более короткая запись.
Функции HEX,BIN
Для удобства задания значения в шестнадцатеричном виде можно использовать функции HEX и BIN:
HEX(«FE») — возвращает 254
BIN(«10110») — возвращает 22
Функции полезны при работе с атрибутами объектов, которые передаются в виде битовых строк.
Функция MAPVALUE
Формат: MAPVALUE(VAL0, RET0, VAL1, RET1,..., VALN, RETN, PARAM);
Функция проверяет значение параметра PARAM (последний параметр функции) по параметрам VAL0,VAL1,… VALN. Находит тот, для которого выполняется условие PARAM>VALX и возвращает соответствующий ему параметр RETX. Из всех параметров, удовлетворяющих условию выбирается имеющий наибольшее значение VAL, то есть ближайший к PARAM. Это позволяет передавать аргументы в не отсортированном по VAL порядке, то есть в качестве аргументов VAL могут задаваться переменные, атрибуты объектов — например расстояния ваших устройств до определенного местоположения, которые вычисляются на момент выполнения сценария. Если такого параметра на нашлось, всегда возвращается значение RET, которое соответствует минимальному из всех параметров VAL.
Пример:
X1 = MAPVALUE(10, 100, 20, 200, 30,300,23);
значение X1 при этом будет установлено в 200.
Функция MAPVALUESTR
Формат: MAPVALUESTR(VAL0, RET0, VAL1, RET1,..., VALN, RETN, PARAM);
Функция аналогична функции, MAPVALUE, но в качестве переменных RET задаются строковые данные и возвращает функция строку. Пример применения этой функции будет дан ниже, при описании динамической установки изображения и цвета иконки объекта.
Перед описанием работы с иконками в сценарии, приведу доп. информацию о работе с иконками в сервисе:
Загрузка пользовательских иконок
В основном меню сервиса «Профиль», выбрав подменю «Пользовательские элементы», можно загружать свои изображения для объектов.
Назначение иконки для объекта
Для каждого объекта, выбрав в контекстном меню «Редактировать», можно назначить объекту иконку. Иконка выбирается из предустановленных групп или из группы «Пользовательские иконки». Можно изменить цвет иконки и ее размер. Ниже описывается как это можно делать с помощью языка сценариев динамически.
Работа с иконками в языке сценариев
В данном случае приводится пример изменения цвета и изображения иконки при поступлении сообщений от объекта. Для этого через контекстное меню объекта необходимо добавить в сценарий следующие операторы:
UNIT.ICON.COLOR=MAPVALUESTR(0,«FF6A00»,10,«B6FF00»,20,«00FFFF»,40,«0094FF»,60,«0026FF»,80,«B200FF»,100,«FF006E»,UNIT.V);
UNIT.ICON.IMAGE=MAPVALUESTR(0,«car5pack.png»,50,«car5.png»,100,«car5sign.png»,UNIT.V);
С помощью первого оператора иконка объекта меняет цвет в зависимости от текущей скорости.С помощью второго оператора на основании текущей скорости объекта меняется изображение иконки. Для работы с иконкой используются следующие атрибуты объекта:
UNIT.ICON.COLOR
UNIT.ICON.IMAGE
UNIT.ICON.SIZE
Последний атрибут позволяет с помощью сценария изменять размер иконки объекта.
В рамках выполнения сценария для одного объекта можно изменять иконки других объектов (если они находятся в этой же папке, или принадлежат тому же пользователю, которому принадлежит объект, для которого выполняется сценарий).
Изображение должно существовать в рамках той группы, в которой выбрана иконка объекта. То есть, нельзя в рамках скрипта присвоить объекту иконку из группы «Автобус», если изначально она была выбрана в группе «Интернет вещей».
Пример работы данного сценария можно посмотреть на примере объекта «Barcеlona» в Сервис ViaLatM в демо доступе..