Эта страница является
переводом страницы
Editor Server Tools. Перевод выполнен на 100%.
Редактор iRidium Studio включает инструменты для настройки команд и получения данных обратной связи от управляемого оборудования. Операции по настройке связи с оборудованием производятся во вкладке I/O и в редакторе скриптов.
Проект iRidium Server
Проект iRidium Server - это программа, которая работает на Сервере, и обеспечивает связь Сервера с оборудованием автоматизации.
Взаимодействие сервера и панели управления
Составляющие Сервера
-
Драйверы - подключаются к оборудованию, хранят список переменных, которыми можно управлять. Они связаны с каналами сервера
-
Каналы сервера - промежуточные переменные между панелями управления и каналами драйверов. Каналы сервера объединяют переменные всех драйверов в единое пространство
-
Виртуальные переменные - хранят данные сервера и результаты работы JavaScript, не связанные с реальными переменными драйверов
-
База данных - ведет запись истории изменения переменных сервера
-
JavaScript - описывает сценарии, логику, расписания (интеллектуальные функции сервера), позволяет модифицировать данные при прохождении через сервер
-
Web сервер - позволяет подключиться к iRidium Server через веб-интерфейс для просмотра состояния и настройки. Обеспечивает работу REST API , с помощью которого сторонние приложения и системы могут управлять функциями сервера по НТТР
Управление сервером
-
i3 pro - приложение-клиент iRidium, который запускает визуализацию управления сервером. Включает:
- драйвер iRidium Server в i3 pro - этот драйвер устанавливает соединение с сервером по TCP
- JavaScript в i3 pro - позволяет создать сценарии, которые работают на панели управления (например, управляют графическим интерфейсом)
- Графический интерфейс в i3 pro - визуальный интерфейс управления оборудованием автоматизации
-
Web-интерфейс - интерфейс управления настройками сервера, который можно открыть в браузере. Он не отображает пользовательскую визуализацию
-
Сторонние приложения - приложения и устройства, которые могут управлять сервером, отправляя ему HTTP команды, настроенные в соответствии с REST API сервера
Шаги настройки серверного проекта зависят от поставленных задач автоматизации, поэтому могут отличаться (какие-то шаги можно пропустить).
Общим является то, что сервер подключается к определенному оборудованию автоматизации, поэтому связь с оборудованием мы настроим в первую очередь.
I/O. Связь с оборудованием
В простейшем случае применения сервера требуется подключение к оборудованию с нескольких панелей управления. Настроим передачу данных через сервер, обеспечив работу нескольких панелей управления
В процессе решения этой задачи, мы выполним несколько действий:
- создадим серверный проект
- добавим в него список драйверов, которыми нужно управлять
- настроим команды и каналы обратной связи для этих драйверов
- создадим проект для i3 pro на базе серверного проекта
Добавление драйвера
Создайте новый проект для сервера: File > New > New Server Project.... Откройте вкладку I/O
Создайте проект для сервера:
Из базы данных
Перетяните драйвер из Device Panel в окно I/O > DRIVERS:
Настройте драйвер: укажите Host, Port и др. параметры подключения
Импорт из файла конфигурации
iRidium поддерживает импорт из файлов:
- ETS Project (*.pr3, *.pr4, *.pr5, *.knxproj) - импорт групповых адресов из ETS (KNX)
- Simpl project (*.smw) - импорт джоинов Crestron
- Clipsal project (*.xml) - импорт групп Clipsal
- iRidium Archive Project (*.irpz) – импорт драйверов из проектов iRidium
- iRidium Server Project (*.sirpz) – импорт драйвера iRidium Server из проекта iRidium
- Modbus CSV Files (*.csv) - импорт регистров Modbus из csv таблицы
Поиск устройств в локальной сети
iRidium поддерживает сканирование локальной сети для обнаружения оборудования определенного типа. Сканирование позволяет быстро создать список устройств и команд для них:
- HDL-BUS Pro Net (UDP) – оборудование в системе HDL-BUS Pro
- Lutron Net (UDP) – оборудование в системе Lutron
- DuoTecno (TCP) – оборудование системе DuoTecno
- Domintell (UDP) – оборудование в системе Domintell
На основе проекта визуализации
Если у вас уже есть проект для панели управления (*.irpz), созданный в iRidium V2 или V3, вы можете автоматически сформировать проект для сервера. В результате, вы получите проект для панели управления, который подключается к серверу, и проект для сервера, который подключается к оборудованию, настроенному ранее в проекте визуализации. Такая конвертация - самый быстрый способ получить Серверное решение.
Будьте внимательны, iRidium server в отличие от i3 pro не поддерживает:
- графический интерфейс,
- токены проекта и
- большинство системных токенов.
Поэтому обращения к графическим элементам и токенам приведут к сбою работы скрипта. Следует вручную исправить скрипт: удалить ошибочные обращения, обращения к токенам проекта можно заменить на обращения к виртуальным каналам и тегам.
Переменные драйвера и сервера
Вкладка I/O серверного проекта визуально разделена на две части: DRIVERS и IRIDIUM SERVER:
- во вкладке
DRIVERS вы видите настройки подключения к оборудованию автоматизации.
- во вкладке
IRIDIUM SERVER вы видите проекцию переменных оборудования автоматизации на переменные сервера. С помощью переменных сервера мы объединяем все каналы оборудования в единое пространство имен. Панель управления будет обращаться к переменным сервера, а те, в свою очередь, передадут данные на оборудование.
Проекция драйвера на переменные IRIDIUM SERVER состоит из вкладок:
-
Driver Tokens - переменные драйвера. Отображают статус подключения к оборудованию
-
Channels - переменные, которыми можно управлять
-
Tags - переменные, от которых можно получить обратную связь
Записывая значение в канал Сервера, мы активируем команду оборудованию. То же с обратной связью - она будет передана из Feedback драйвера в соответствующий тег Сервера.
Переменные сервера можно записывать, читать и модифицировать с помощью JavaScript. Модификация означает промежуточное преобразование данных на сервере - перед отправкой команды оборудованию, или перед передачей обратной связи на панель управления.
Driver Tokens
Переменные драйвера. Отображают статус подключения к оборудованию
- Online - состояние подключения к управляемой системе (Online/Offline = 1/0)
- Status - статус подключения к системе (Offline/Connecting/Online/Waiting = 0...3)
- Host - доменное имя удаленной системы
- HostPort - порт на удаленной системе, к которому подключается i3 pro
- IP - IP-адрес управляющей панели
- HostIP - IP-адрес удаленной системы, к которой подключен i3 pro
- Port - локальный порт клиента, через который осуществляется связь с удаленным устройством
Токены драйвера хранят информацию о подключении сервера к управляемому оборудованию. Их можно сохранить в базу данных и использовать для построения графиков или вывода лога.
▼ Commands / Channels, Virtual Channels
Commands / Channels - переменные, с помощью которых можно управлять оборудованием.
Виртуальные переменные сервера, которыми можно управлять. Не связаны напрямую с управляемым оборудованием. Вы можете создать такие переменные вручную и записать в них результаты работы приложения: числа, строки, массивы. Данные для записи формируются в JavaScript на сервере, или с панели управления.
Работа с Virtual идентична работе с Project Tokens, использует те же правила и функции API.
Commands / Channels

Virtual Channels

- Name - короткое имя канала
- Full Name - полное имя канала сервера, используйте для обращения к переменной из JS на сервере. Будет отображаться в панельном проекте.
- Description - описание переменной, опционально
- Script Modifier - скриптовая функция-модификатор, которая позволяет выполнить промежуточное преобразование значений перед отправкой их в канал драйвера или после получения их с панели управления и скрипта.
▼ Feedbacks / Tags, Virtual Tags
Переменные, от которых нужно получить обратную связь
Виртуальные переменные сервера, от которых можно получить обратную связь. Не связаны напрямую с управляемым оборудованием.
Feedback / Tags

Virtual Tags

Tags
- Name - короткое имя
- Full Tag Name - полное имя для обращения из скрипта
- Description - описание (опционально)
- Access - тип переменной: Public - можно изменить с панели управления, Private - можно изменить только с сервера
- Script Modifier - выполнить JavaScript функцию каждый раз при активации тега - это позволяет модифицировать полученные данные перед передачей на панель управления
- Persist - восстановить последнее значение переменной в случае перезагрузки Сервера
- Store In DB - сохранение всех измененных значений в базу данных
- DB Save Strategy - способ сохранения данных в базу: периодически или при изменении
- Deadband - погрешность изменения, значения больше которой нужно записывать в базу. Если Deadband: 0.5, изменение на 0.3 не будет записано в базу
- Interval - переменная будет записываться в базу с указанной периодичностью
Создание панельного проекта
Когда драйверы в серверном проекте настроены, вы можете создать проект для панели управления - визуализацию управления сервером.
Проект генерируется на базе серверного, т.к. должен содержать информацию о переменных сервера.
СПОСОБЫ СОЗДАНИЯ ПАНЕЛЬНОГО ПРОЕКТА
Есть несколько способов добавить драйвер iRidium Server в проект панели управления.
Быстрое создание проекта
Правой кнопкой мыши нажмите на проект Сервера и выберите пункт "Create Panel Project"
Будет создан панельный проект с пустой страницей и драйвером iRidium Server, в который перейдут все теги сервера. С ними можно будет работать как с командами и каналами обратной связи - привязывать к элементам для управления и отображения, обрабатывать с помощью iRidium Script.
При внесении изменений в серверный проект, вы можете быстро синхронизировать его с панельным проектом. Выберите драйвер iRidium Server и нажмите
Sinc with Source.
Файл серверного проекта, с которым будет синхронизироваться драйвер, можно заменить в строке
Source Project
Добавление iRidium Server в готовый проект визуализации
Если вы уже создали проект визуализации, и хотите добавить в него связь с Сервером:
- добавьте драйвер iRidium Server из базы данных
- укажите путь к проекту *.sirpz, с которым нужно синхронизировать проект визуализации
- вы получите драйвер iRidium Server с актуальным списком команд и каналов обратной связи.
Когда основа для проекта визуализации готова, можно перейти к разделу Визуализация управления iRidium Server - в нем описаны настройки управления переменными сервера.
Если сервер, в вашем случае, должен не только предавать данные на панели управления, но и модифицировать их, запускать сценарии, сохранять базу данных и т.д, изучите остальные разделы инструкции:
Schedule. Расписания
Раздел Schedule в серверном проекте - это планировщик, реализованный в виде расписания с событиями. События могут срабатывать однократно или с заданной периодичностью.
События планировщика используют для инициации команд, созданных в разделе Routine (в списке сценариев). Событие в расписании может повторяться с периодичностью от 1 дня до 1 раза в несколько лет.
Нажмите на вкладку Schedule в проекте iRidium Server - окно настройки событий в расписании. В расписании можно создать любое число событий:
- добавить событие
- удалить событие. При этом перестанут работать сценарии, для которых это событие использовалось как условие срабатывания
- изменить настройки события
Настройки
- Name - название события
- Description - краткое описание (не обязательно)
- Start - дата и время начала события
- Finish - дата и время завершения события. Галочка "Specify the Date" по умолчанию снята, это значит, что событие закончится в тот же день, что началось. Поставив галочку, вы можете указать дату окончания события.
- Repeat - нужно ли повторять событие. Если нужно, указывается интервал повторения события. Примеры и описание настроек повторения см. ниже
- End - когда завершить повторение события (если включено повторение)
- Never - никогда
- Date - в указанную дату
Астротаймер
Астротаймер предназначен для создания расписаний и правил, связанных с восходом и закатом Солнца. Например, Вам необходимо создать расписание, по которому уличное освещение будет включаться на закате и отключаться на рассвете.
В таком случае можно использовать простое фотореле, но у него есть ряд недостатков:
- за состоянием фотодатчика надо следить (если загрязнится, то свет будет гореть и днем)
- если появится паразитная засветка датчика, то освещение не включится, когда это необходимо
- нельзя включать свет с опережением\запаздыванием относительно уровня освещения
Астротаймер лишен всех этих недостатков.
Далее рассмотрим, как настроить данный пример.
Для работы с астротаймером не требуется подключение к интернету.
Настройка астротаймера
1 Создайте серверный проект или откройте уже имеющийся.
2 В разделе Config, в полях Latitude и Longitude укажите свои координаты в виде десятичной дроби и нажмите кнопку Save.
3 Добавьте оборудование, с которым будете работать и настройте его.
4 В разделе Schedule создайте расписание, по которому будут работать устройства освещения. Началом события укажите закат (Sunset), а окончанием – восход (Sunrise) следующего дня.
5 В разделе Routine создайте правила:
Правило 1:
WHEN → Event start
THEN → отправить значение в канал устройства, чтобы оно включилось
Правило 2:
WHEN → Event finish
THEN → отправить значение в канал устройства, чтобы оно отключилось
BUT ONLY IF → устройство в данный момент включено (Feedback == 1)
На этом настройка завершена. Сервер автоматически рассчитает время восхода и заката Солнца, в зависимости от Вашего расположения.
Настройки повторения (Repeat)
Repeat - периодичность повторения созданного события. Варианты настройки:
- Never - не повторять событие
- Every Day - каждый день, в указанное время
- Every Week - в тот же день недели, что началось, каждую неделю. Например, каждый Пн
- Every 2 Weeks - в тот же день недели, что началось, каждую 2ю неделю. Например, каждое второе Вс
- Every Monts - в ту же дату, что началось, каждый месяц. Например, каждое 23е число
- Every Year - в ту же дату и месяц, что началось, каждый год. Например, каждое 1 января
- Custom - позволяет настроить повторение по дням, неделям, месяцам, годам, но с большим периодом. Например, каждые 3 дня, или каждый 2й понедельник указанных месяца.
- Repeat Settings: (только для Repeat: Custom)
- Periodicity - периодичность повторения
- By Days - повторять каждый N-й день, начиная с даты начала события. Например, каждый 2й день
- Every: <N> Days - интервал повторения в днях, от 1 до 365
- By Weeks - повторять каждую N-ю неделю, в указанные дни недели, начиная с даты начала события. Например, четверг каждой 2й недели
- Every: <N> Weeks - интервал повторения в неделях, от 1 до 52
- On specified days of week - укажите дни недели, в которые нужно повторять событие
- By Months - повторять каждый N-й месяц. Выберите принцип повторения: в указанные числа месяца / в указанные дни месяца. Например, каждый 2й месяц, 23 число. Или каждый 1й понедельник месяца.
- Every: <N> Months - интервал повторения в месяцах, от 1 до 12
- On specified dates of month - повторение в указанные числа месяца. Можно выбрать несколько чисел
- On specified days of month - повторение в указанные дни месяца: 1й понедельник, 4е воскресенье, ...
- By Years - повторять каждый N-й год
- Every: <N> Years - интервал повторения в годах
- On specified months -месяцы года, когда событие будет повторяться. Оно сработает в дату начала события
- On specified days - для повторения в указанный день недели, а не дату месяца, поставьте галочку "At specified Day". Например, можно настроить срабатывание в 1й понедельник месяца
Routine. Сценарии (рутины)
Routine - это сценарий, который автоматически запускается при возникновении определенного события. Событием может быть получение данных от оборудования, или Event из расписания сервера.
Настройки
Нажмите на вкладку Routine в проекте iRidium Server - окно настройки сценариев:
- добавить сценарий
- удалить сценарий
- изменить настройки сценария
Добавить сценарий:
- Name - название события
- Description - краткое описание (не обязательно)
- WHEN - условие, за которым следит сценарий. При его выполнении, последовательно выполнятся команды, заданные в THEN. Условий может быть несколько, к срабатыванию сценария приведет выполнение любого из них (OR). В качестве условия WHEN можно выбрать:
- Feedback - изменение канала драйвера
- Event - начало или завершение события в расписании
- THEN - когда сработало условие WHEN, все команды, настроенные в THEN будут выполнены друг за другом, как последовательность
- BUT ONLY IF - исключающие условия. Если условия, настроенные в BUT ONLY IF не выполнены, сценарий не сработает. Если уловий несколько, должны выполниться они все (AND)
- Feedback - выполняется условие по сравнению канала драйвера со значением
- Event - событие в расписании сейчас происходит или не происходит
Настройка условий WHEN, THEN, BUT ONLY IF:
Сценарии работают на основе событийной логики: условие WHEN считается активным однократно только в тот момент, когда это условие изменило своё состояние с ложного на истинное. В последующих истинных состояниях условие WHEN уже не будет активным. В связи с этим последовательность действий THEN будет выполнено только один раз после активации WHEN.
Если при запуске iRidium server условие WHEN сразу же приняло истинное значение, то действия THEN не будут выполнены, так как не было зафиксировано предварительное ложное состояние условия WHEN - обязательное условие активации сценария.
Использование расписания в сценариях
WHEN. Для запуска сценариев используют статусы событий расписания:
- Start - событие началось
- Finish - событие закончилось
BUT ONLY IF. Как проверочное условие при выполнении сценария используют состояния:
- In process - событие происходит сейчас
- Not in process - событие не происходит сейчас
Модификация данных на сервере
Модификация - изменение полученных данных перед отправкой по назначению: оборудованию или на панели управления.
Модификация производится с помощью скриптовой функции модификатора, которая настраивается в параметрах серверного канала или тега (виртуальные переменные модифицируются по тем же принципам):
- Если функция модифицирует канал сервера: значение, полученное каналом от панели управления будет пересчитано в скрипте, и только потом отправлено драйверу
- Если функция модифицирует тег сервера: значение, полученное тегом от драйвера будет пересчитано в скрипте, и только потом отправлено на панель управления.
Пример: графические элементы на панели управления регулируют переменную в диапазоне от 0 до 100. Сервер приводит эти значения к 0...255 с помощью модификаторов, и только потом отправляет драйверу (оборудованию автоматизации):
Функцию-модификатор нужно создать в редакторе скриптов и указать в свойствах переменной, строка Script:
function modify_send (in_Type, in_Name, in_Value)
{
in_Value *= 255/100;
return in_Value;
}
function modify_receive (in_Type, in_Name, in_Value)
{
in_Value *= 100/255;
return in_Value;
}
Канал или тег, вызвавший функцию, передает ей аргументы:
-
in_Type - тип переменной, 0 - канал, 1 - тег обратной связи
-
in_Name - полное имя команды или тега
-
in_Value - значение команды или тега
Таким образом, мы производим обработку данных при прохождении через сервер в обе стороны (от панели управления к оборудованию и обратно).
модифицированное значение (in_Value) возвращаем переменной с помощью команды return in_Value;
возвращать модифицированное значение не обязательно - можно просто выполнить разовое действие. Тогда начальное значение, полученное функцией, не попадет к адресату, а только приведет к выполнению функции.
В веб-интерфейсе сервера отображаются модифицированные значения тегов и каналов, то есть:
- значения тегов в веб-интерфейсе получаются в результате работы функции Script Modifier,
- значения, заданные в веб-интерфейсе командой "Set", отправляются на вход функции Script Modifier перед отправкой в канал на физическое устройство.
Примеры модификаторов
Модификация Driver Tokens
Driver Tokens отображают статус подключения к оборудованию автоматизации - они доступны только на чтение.
/*
Токен Online любого драйвера может вернуть только значение 1 = Online и 0 = Offline.
Заменим 1 на текущее время и фразу " Connection established"; 0 на время и " Connection closed"
Вернем результат преобразования тому, кто вызвал функцию
*/
function onlineModify (in_Type, in_Name, in_Value)
{
if (in_Value == 1)
{
in_Value = IR.GetVariable("System.Time.24")+" Connection established";
return in_Value;
} else
{
in_Value = IR.GetVariable("System.Time.24")+" Connection closed";
return in_Value;
}
}
Чтобы выбрать, какую переменную будет обрабатывать функция-модификатор, укажите имя функции в настройках переменной:
В переменную Сервера, а из нее на панель управления, приходет только результат модификации, но не реальное значение переменной.
Модификация Driver Channels & Tags
Каналы и теги драйверов связаны с переменными сервера, которые можно модифицировать. Привязать модификатор к команде драйвера нельзя - можно привязать его только к связанному с ней каналу сервера.
При выполнении команды, ей нужно передать значение (иногда значение не нужно, в этом случае передается пустая строка). Это значение модифицируется перед отправкой оборудованию:
/*
В канал приходит значение в диапазоне 0-100
Приведем это значение к диапазону 0-255, округлим и отправим оборудованию
*/
function rangeModify (in_Type, in_Name, in_Value)
{
in_Value *= 255/100;
return in_Value.toFixed(0);
}
Чтобы выбрать, какой канал будет обрабатывать функция-модификатор, укажите имя функции в настройках переменной:
Driver Tags
/*
Канал принимает значения в диапазоне 0-255
Приведем значение к диапазону 0-100, округлим и вернем в канал обратной связи
*/
function rangeModifyBack (in_Type, in_Name, in_Value)
{
in_Value *= 100/255;
return in_Value.toFixed(0);
}
Чтобы выбрать, какой тег будет обрабатывать функция-модификатор, укажите имя функции в настройках переменной:
Тег будет выдавать только результат модификации, но не исходное значение.
Модификация Virtual Channels & Tags
Виртуальные переменные сервера на стороне панели управления выглядят как каналы и теги сервера. В переменную можно отправить значение value, на основе которого вы можете сформировать команду и отправить ее оборудованию автоматизации:
/*
команда DVD плейеру имеет вид: "VOLUME XX", ХХ - это громкость от 00 до 100
Громкость может состоять из двух или трех симовлов, т.е. 00, 01, 02, ... 100 (ASCII)
Получим значение 0-100 с панели управления (с обычного Level Item), сформируем и отправим команду
*/
var driver = IR.GetDevice("AV & Custom Systems (TCP)");
function volume (in_Type, in_Name, in_Value)
{
if (in_Value < 10)
{
in_Value = "0"+in_Value;
driver.Send(["VOLUME "+in_Value+"\r\n"]);
} else
{
driver.Send(["VOLUME "+in_Value+"\r\n"]);
}
}
Чтобы выбрать, какую переменную обрабатывать, укажите имя функции в настройках переменной:
Virtual Tags
Виртуальные теги сервера на панели управления они выглядят как каналы обратной связи. В них можно записать значение из скрипта, а затем обработать его функцией модификатором. Финальное значение будет доступно для чтения с панели управления.
/*
Виртуальный тег не получает значений напрямую от оборудования
Поэтому мы запишем значение в тег из скрипта, когда это необходимо
*/
IR.SetVariable("Server.Tags.Virtual 1", 100)
/*
обработаем значение с помощью функции модификатора
*/
function value (in_Type, in_Name, in_Value)
{
in_Value = "brightness: "+in_Value+"%";
return in_Value; // brightness: 100%
}
Чтобы выбрать, какую переменную модифицировать, укажите имя функции в настройках переменной:
Запись и чтение переменных
Переменные сервера - это Driver Tokens, Channels, Tags, а также Virtual Channels и Virtual Tags. Их состояние можно изменять и запрашивать с панелей управления и из скриптов, размещенных на Сервере.
Запись и чтение производится с помощью JavaScript команд:
-
IR.GetVariable(name)
IR.SetVariable(name, value)
Для панели управления переменные сервера выглядят как команды и каналы драйвера. Поэтому для них применимы методы API iRidium для драйверов
Записать значение в переменную
1. Скопируйте полное имя переменной из вкладки IRIDIUM SERVER
2. Используйте метод IR.SetVariable, чтобы записать в переменную значение:
Синтаксис
IR.SetVariable("Server.Path.Name", value)
| на входе
|
значение
|
описание
|
| Server.Path.Name
|
Server.Channels.Virtual 1
|
type: string полное имя переменной сервера
|
| value
|
100
|
type: string, number, boolean значение для записи в переменную сервера
|
| успешность
|
true
|
type: boolean успешность записи
|
Пример
IR.AddListener(IR.EVENT_START, 0, function()
{
IR.SetVariable("Server.Channels.Virtual 1", 100);
});
метод можно применить к каналам и тегам сервера
Прочитать значение переменной
1. Скопируйте полное имя переменной из вкладки IRIDIUM SERVER
2. Используйте метод IR.GetVariable, чтобы прочитать из переменной значение:
Синтаксис
IR.GetVariable("Server.Path.Name")
| на входе
|
значение
|
описание
|
| Server.Path.Name
|
Server.Channels.Virtual 1
|
type: string полное имя переменной сервера
|
| value
|
100
|
type: string, number, boolean значение в переменной сервера
|
Пример
IR.AddListener(IR.EVENT_START, 0, function()
{
IR.GetVariable("Server.Channels.Virtual 1");
});
метод можно применить к каналам и тегам сервера
Шлюзование данных между виртуальным каналом и тегом
Виртуальная команда Virtual Channel (Server.Channels.Virtual 1) изначально не связана с виртуальным тегом обратной связи Virtual Tag (Server.Tags.Virtual 1), поэтому вы можете изменить значение виртуальной переменной на сервере, но оно не вернется на панель в виде значения обратной связи.
Чтобы вернуть в i3 pro значение, отправленное из i3 pro на сервер, вам нужно создать скриптовую функцию (Script Modifier). Эта функция возьмет значение, отправленное из i3 pro и запишет в виртуальный тег обратной связи сервера. Именно это изменение увидит панель управления.
скачать пример
Чтобы настроить передачу данных от виртуальной команды тегу:
1 Создайте новый проект для iRidium Server
2 Создайте виртуальный канал (команду) и тег (канал обратной связи) с одинаковыми именами. Например, "Virtual 1"
3 Откройте редактор скриптов (кнопка JS на панели инструментов), и создайте новый файл скрипта. Добавьте в него функцию модификатор:
function virtual_to_virtual (in_Type, in_Name, in_Value)
{
var namepart = in_Name.split(".");
IR.SetVariable("Server.Tags." + in_Name, in_Value);
return in_Value;
}
4 Вернитесь к виртуальной команде "Virtual 1" (Server.Channels.Virtual 1), выберите в выпадающем списке параметра Script Modifier функцию virtual_to_virtual
5 Все готово, при записи значения в Server.Channels.Virtual 1, это значение автоматически будет передано в Server.Tags.Virtual 1, и может быть отображено панелью управления как канал обратной связи.
Шлюзование данных между драйверами
Задача сквозного шлюзования данных - передача информации между не связанными системами автоматизации.
Выполнить шлюзование позволяют функции модификаторы.
скачать пример
Пример: при изменении регистра в контроллере Modbus передать его новое значение групповому адресу KNX. значение перед отправкой в можно модифицировать (например, умножить на 100):
function gate_to_modbus (in_Type, in_Name, in_Value)
{
IR.SetVariable("Server.Channels.Modbus TCP 2.Channel 12", in_Value*100);
return in_Value;
}
Функция address_1 следит за изменением канала обратной связи Modbus драйвера, выберите её в поле Script серверного тега Modbus.
Если переменные в драйверах, между которыми настроено шлюзование, назвать одинаково, достаточно создать одну функцию модификатор и привязать к каналам драйвера, данные из которого нужно передавать в другой:
function gate_to_modbus (in_Type, in_Name, in_Value)
{
var namepart = in_Name.split(".");
IR.SetVariable("Server.Channels.Modbus TCP 2." + namepart[1], in_Value);
return in_Value;
}
Активация сценария с панели управления
В качестве основного способа выполнения периодических действий, используйте Расписания и Сценарии. Но, если их функционал недостаточен, можно воспользоваться скриптами.
Активируем скриптовый сценарий при отправке значения с панели управления в виртуальный канал сервера. Для этого подпишемся на изменения канала в скриптах сервера:
Пример сценария:
IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function (name, value)
{
if (name == "Server.Channels.Scenario 1" && value ==1)
{
IR.SetVariable("Server.Channels.KNX Router (KNXnet/IP).Address 1", 100);
IR.SetVariable("Server.Channels.KNX Router (KNXnet/IP).Address 2", 75);
IR.SetVariable("Server.Channels.KNX Router (KNXnet/IP).Address 3", 0);
}
});
IR.SubscribeTagChange("Server.Channels.Scenario 1");
Чтобы выполнить такой сценарий, отправьте с панели управления значение 1 в канал сервера "Server.Channels.Scenario 1".
в проекте можно создать только один глобальный слушатель (IR.SetGlobalListener()). Все операции нужно производить внутри одного слушателя. Количество подписок практически не ограничено.
Периодические действия
В качестве основного способа выполнения периодических действий, используйте Расписания и Сценарии. Но, если их функционал недостаточен, можно воспользоваться скриптами.
Пример 1: самый простой вариант - периодические действия без возможности настройки. Создаем набор таймеров на сервере, их нельзя посмотреть в клиенте или изменить время срабатывания:
// if your another JS files includes "IR.SetGlobalListener()"
// you have to add the code inside of previous IR.SetGlobalListener() and delete the listener from this file!
// if you are not sure that you are able to do it yourself please contact to support@iridiummobile.ru
IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function (name, value)
{
if (name == "System.Time.Minutes")
{
// SET UP PERIODICAL ACTIONS:
// start hour, start minute, duration of process (ms), channel full name, start value, stop value
// if you don't want to stop process, add "no" instead of stop value
check_timer (10, 45, 60000, "Server.Channels.KNX Router (KNXnet/IP).Pump 1", 1, 0); // timer 1
check_timer (14, 30, 480000, "Server.Channels.KNX Router (KNXnet/IP).Pump 2", 1, "no"); // timer 2
// you can add more
}
// do not edit the other part, you need only to add the needed timers in above
function check_timer (hours, minutes, duration, channel, start_value, stop_value)
{
if (IR.GetVariable("System.Time.Hour") == hours && IR.GetVariable("System.Time.Minutes") == minutes)
{
function stop ()
{
IR.GetServer().Set(channel, stop_value);
IR.Log("process at "+hours+":"+minutes+" stopped");
}
IR.GetServer().Set(channel, start_value);
IR.Log("process at "+hours+":"+minutes+" started");
if (stop_value != "no")
{
IR.SetTimeout(duration, stop);
}
}
}
});
IR.SubscribeTagChange("System.Time.Minutes");
Пример 2: скрипт на сервере проверяет время каждую минуту. Если время совпало со временем будильника, настроенного на определенный час и минуту в приложении-клиенте, и если будильник активен, то скрипт выполнит набор действий в системе автоматизации (можно включить свет и начать воспроизведение музыки в комнате).
Для установки времени срабатывания, нужно с панели управления отправить значения в переменные сервера.
Чтобы все панели управления могли получить информацию о времени, на которое настроен будильник, и его состоянии, нужно записать установки будильника в виртуальные теги сервера.
Пример 3: опирается на использование функций IR.SetInterval() и IR.ClearInterval(): показывать напоминание каждые 5 секунд, пока событие не завершится:
не воспринимайте эти проекты как готовое решение, они призваны продемонстрировать взаимодействие сервера и приложения-клиента
Запросы к базе данных
База данных SQL формируется на iRidium Server при создании серверного проекта.
Если вы работаете с несколькими проектами и заменяете их на сервере, в каждом проекте создается файл системной базы. Также можно создать свою, пользовательскую базу:
- Системная база
- запись в базу производится только через настройки переменных сервера в iRidium Strudio
- можно читать с помощью специальных SQL запросов
- нельзя редактировать и удалять
- Пользовательская база
- запись в базу производится только через JavaScript
- можно читать с помощью специальных SQL запросов
- можно редактировать и удалять с помощью JavaScript
Где найти системную базу:
Путь к файлу базы можно найти через web-интерфейс Сервера, вкладка System > Database.
Как сохранить данные в системную базу:
Записать в базу можно Driver Channel, Driver Tags, Virtual Channel, Virual Tag - переменные сервера. Поэтому и настройки сохранения есть только у переменных сервера. Если хотите сохранить канал драйвера - выберите его проекцию на переменные сервера - вы увидите настойки сохранения в базу:
- Name - имя переменной сервера
- Full Tag Name - полное имя переменной, можно использовать для обращения из скрипта и определения типа
- Description - описание переменной для упрощения ее идентификации (не обязательно)
- Access - доступ к переменной с панелей управления:
- Public - разрешен,
- Private - запрещен
- Script - JavaScript функция-модификатор, обрабатывает переменную перед отправкой на панели управления
- Persist - вернуть последнее значение переменной в случае перезагрузки сервера
- Store In DB - формат сохранения переменной в базу данных
- None - не сохранять
- Signed 32bit - сохранять как целое число
- Float 64bit - сохранять как число с плавающей запятой
- String UTF8 - сохранять как строку
- DB Save Strategy - событие, при котором создается запись в базу
- Deadband - минимальное изменение. Запись создается, если переменная изменилась больше, чем на указанное значение
- Interval - периодическая фиксация. Запись создается с указанным временным интервалом
- Deadband (Value) - минимальное изменение переменной, требующее записи в базу
- Interval (sec) - интервал записи в секундах
- Load On Start - восстановить значение переменной из базы данных в случае перезагрузки сервера (в отличие от параметра Persist = Yes будет восстановлено не самое последнее значение, а последнее значение, сохранённое в базе данных).
Сохранение можно настроить по двум принципам:
- с определенной периодичностью по времени
- при изменении переменной более, чем на указанное значение - целое или дробное.
Первый способ удобно использовать для переменных, которые изменяются плавно и достаточно инертны, например, температура и влажность воздуха. Второй способ идеален для переменных, которые меняются нечасто, но значительно. Например, можно писать в базу факт включения и выключения света. При этом, запись по изменению сформирует гораздо меньше записей в базе и не позволит пропустить событие.
Доступ к базам данных Сервера производится с помощью специализированных SQL запросов. Запросы позволяют получать данные по заданным условиям.
Пользовательская база данных:
Редактируемую базу данных можно создать с помощью JavaScript. Запись, чтение, редактирование данных в пользовательской базе производится с помощью SQL запросов.
Доступ к пользовательской базе через JavaScript:
Руководство предоставляет инструкции по работе с системной и пользовательской базами данных.
Справочник включает список всех методов для работы с базами.
Построение графиков
Для возможности отображения графиков изменения переменных, iRidium сохраняет значения этих переменных в Базу данных SQL , которая хранится на на iRidium Server.
Когда нужно построить график изменения переменной, приложение i3 pro формирует запрос к базе за определенный период времени, и отображает результат на графике.
Когда сохранение в базу настроено, вы можете отразить переменную в i3 pro в виде графика.
Синхронизация панели управления и Сервера
Интерфейс визуализации лучше всего создавать, когда готов серверный проект: настроена связь с оборудованием автоматизации, сформированы виртуальные теги и скрипты для них на стороне сервера. Импорт серверного проекта позволит быстро получить полный набор управляемых переменных для проекта визуализации. Останется привязать переменные к графическим элементам.
См. Как создать проект для панели управления
Загрузка проекта на Сервер
Загрузка серверного проекта (*.sirpz) на сервер осуществляется аналогично загрузке проекта в клиент i3 pro, т.е. при помощи приложения iRidium Transfer на вашем ПК.
Transfer находит и отображает в своем интерфейсе все запущенные Серверы в пределах IP подсети. С помощью Transfer вы передаете проект конфигурации и лицензию на iRidium Server.
См. Как запустить проект на iRidium Server