Материал из for iRidium developers
Перейти к: навигация, поиск
Эта страница является переводом страницы Editor Server Tools. Перевод выполнен на 100%.

Other languages:

Серверный проект в iRidium Studio

руководство по настройке оборудования и переменных в проекте iRidium Server

Редактор iRidium Studio включает инструменты для настройки команд и получения данных обратной связи от управляемого оборудования. Операции по настройке связи с оборудованием производятся во вкладке I/O и в редакторе скриптов.


Проект iRidium Server

Проект iRidium Server - это программа, которая работает на Сервере, и обеспечивает связь Сервера с оборудованием автоматизации.


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

ServerPrincipalSceemDriverLayer.png

Составляющие Сервера

  • Драйверы - подключаются к оборудованию, хранят список переменных, которыми можно управлять. Они связаны с каналами сервера
  • Каналы сервера - промежуточные переменные между панелями управления и каналами драйверов. Каналы сервера объединяют переменные всех драйверов в единое пространство
  • Виртуальные переменные - хранят данные сервера и результаты работы 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. Связь с оборудованием

В простейшем случае применения сервера требуется подключение к оборудованию с нескольких панелей управления. Настроим передачу данных через сервер, обеспечив работу нескольких панелей управления

В процессе решения этой задачи, мы выполним несколько действий:

  1. создадим серверный проект
  2. добавим в него список драйверов, которыми нужно управлять
  3. настроим команды и каналы обратной связи для этих драйверов
  4. создадим проект для i3 pro на базе серверного проекта


Добавление драйвера

Создайте новый проект для сервера: File > New > New Server Project.... Откройте вкладку I/O

информацию о настройке каждого драйвера и его каналов вы найдете в разделе Управление оборудованием

Создайте проект для сервера:

На основе проекта визуализации

Если у вас уже есть проект для панели управления (*.irpz), созданный в iRidium V2 или V3, вы можете автоматически сформировать проект для сервера. В результате, вы получите проект для панели управления, который подключается к серверу, и проект для сервера, который подключается к оборудованию, настроенному ранее в проекте визуализации. Такая конвертация - самый быстрый способ получить Серверное решение.

Editor Convert PanelProject toServer.png

Из базы данных

Перетяните драйвер из Device Panel в окно I/O > DRIVERS:

Editor add custom driver toServer.png

Настройте драйвер: укажите Host, Port и др. параметры подключения

Импорт из файла конфигурации

Editor project device panel import add drivers.png

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 таблицы


Поиск устройств в локальной сети

Editor project device panel scan add drivers.png

iRidium поддерживает сканирование локальной сети для обнаружения оборудования определенного типа. Сканирование позволяет быстро создать список устройств и команд для них:

  • HDL-BUS Pro Net (UDP) – оборудование в системе HDL-BUS Pro
  • Lutron Net (UDP) – оборудование в системе Lutron
  • DuoTecno (TCP) – оборудование системе DuoTecno
  • Domintell (UDP) – оборудование в системе Domintell



Переменные драйвера и сервера

Вкладка I/O серверного проекта визуально разделена на две части: DRIVERS и IRIDIUM SERVER:

  • во вкладке DRIVERS вы видите настройки подключения к оборудованию автоматизации.
  • во вкладке IRIDIUM SERVER вы видите проекцию переменных оборудования автоматизации на переменные сервера. С помощью переменных сервера мы объединяем все каналы оборудования в единое пространство имен. Панель управления будет обращаться к переменным сервера, а те, в свою очередь, передадут данные на оборудование.


Проекция драйвера на переменные IRIDIUM SERVER состоит из вкладок:

  • Driver Tokens - переменные драйвера. Отображают статус подключения к оборудованию
  • Channels - переменные, которыми можно управлять
  • Tags - переменные, от которых можно получить обратную связь


Записывая значение в канал Сервера, мы активируем команду оборудованию. То же с обратной связью - она будет передана из Feedback драйвера в соответствующий тег Сервера.


Переменные сервера можно записывать, читать и модифицировать с помощью JavaScript. Модификация означает промежуточное преобразование данных на сервере - перед отправкой команды оборудованию, или перед передачей обратной связи на панель управления.


Driver Tokens

Переменные драйвера. Отображают статус подключения к оборудованию

Server Token Relations.png
  • 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

Переменные, которыми можно управлять

Server Tag Relations.png

Channels:

  • Name - имя канала, то же, что у драйвера
  • Full Name - полное имя канала сервера, используйте для обращения к переменной из JS на сервере. Будет отображаться в панельном проекте
  • Description - описание переменной, опционально
  • Script - скриптовая функция модификатор, которая позволяет выполнить промежуточное преобразование значений, отправленных переменной, перед отправкой их в канал драйвера

Feedback / Tags


Переменные, от которых нужно получить обратную связь

Server Fb Relations.png

Tags

  • Name - короткое имя
  • Full Tag Name - полное имя для обращения из скрипта
  • Description - описание (опционально)
  • Store In DB - сохранение всех измененных значений в базу данных
  • Access - тип переменной: Public - можно изменить с панели управления, Private - можно изменить только с сервера
  • DB Save Strategy - способ сохранения данных в базу: периодически или при изменении
    • Deadband - погрешность изменения, значения больше которой нужно записывать в базу. Если Deadband: 0.5, изменение на 0.3 не будет записано в базу
    • Interval - переменная будет записываться в базу с указанной периодичностью
  • Script - выполнить JavaScript функцию каждый раз при активации тега - это позволяет модифицировать полученные данные перед передачей на панель управления

Virtual Channels


Виртуальные переменные сервера, которыми можно управлять. Не связаны напрямую с управляемым оборудованием. Вы можете создать такие переменные вручную и записать в них результаты работы приложения: числа, строки, массивы. Данные для записи формируются в JavaScript на сервере, или с панели управления.

Работа с Virtual идентична работе с Project Tokens, использует те же правила и функции API.

Virtual tags On Server.png

Virtual Channels:

  • Name - короткое имя канала, произвольно
  • Full Name - полное имя виртуального канала, используйте для обращения из JS на сервере. Оно будет отображаться в панельном проекте
  • Description - описание канала, опционально
  • Script - скриптовая функция модификатор, которая позволяет выполнить промежуточное преобразование значений, записанных в переменную с панели управления (или из скрипта)

Virtual Tags


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

Virtual tags 1 On Server.png

Tags

  • Name - короткое имя
  • Full Tag Name - полное имя для обращения из скрипта
  • Description - описание (опционально)
  • Store In DB - сохранение всех измененных значений в базу данных
  • Access - тип переменной: Public - можно изменить с панели управления, Private - можно изменить только с сервера
    • Deadband - погрешность изменения, значения больше которой нужно записывать в базу. Если Deadband: 0.5, изменение на 0.3 не будет записано в базу
    • Interval - переменная будет записываться в базу с указанной периодичностью
  • Script - выполнить JavaScript функцию каждый раз при активации тега - это позволяет модифицировать полученные данные перед передачей на панель управления



Создание панельного проекта

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

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

СПОСОБЫ СОЗДАНИЯ ПАНЕЛЬНОГО ПРОЕКТА

Есть несколько способов добавить драйвер iRidium Server в проект панели управления.


Быстрое создание проекта

Правой кнопкой мыши нажмите на проект Сервера и выберите пункт "Create Panel Project"

FastCreateUIbasedOnServer.png

Будет создан панельный проект с пустой страницей и драйвером iRidium Server, в который перейдут все теги сервера. С ними можно будет работать как с командами и каналами обратной связи - привязывать к элементам для управления и отображения, обрабатывать с помощью iRidium Script.

FastSincWithSource.png
При внесении изменений в серверный проект, вы можете быстро синхронизировать его с панельным проектом. Выберите драйвер iRidium Server и нажмите Sinc with Source.


Файл серверного проекта, с которым будет синхронизироваться драйвер, можно заменить в строке Source Project


Добавление iRidium Server в готовый проект визуализации

Если вы уже создали проект визуализации, и хотите добавить в него связь с Сервером:

SincWithServerSourceUsingImport.png
  1. выберите "iRidium Server Project" в списке проектов для импорта
  2. укажите путь к проекту *.sirpz, с которым нужно синхронизировать проект визуализации
  3. вы получите драйвер iRidium Server с актуальным списком команд и каналов обратной связи.
FromDBSincWithSource.png
  1. добавьте драйвер iRidium Server из базы данных
  2. укажите путь к проекту *.sirpz, с которым нужно синхронизировать проект визуализации
  3. вы получите драйвер iRidium Server с актуальным списком команд и каналов обратной связи.

Когда основа для проекта визуализации готова, можно перейти к разделу Визуализация управления iRidium Server - в нем описаны настройки управления переменными сервера.

Если сервер, в вашем случае, должен не только предавать данные на панели управления, но и модифицировать их, запускать сценарии, сохранять базу данных и т.д, изучите остальные разделы инструкции:


Schedule. Расписания

Раздел Schedule в серверном проекте - это планировщик, реализованный в виде расписания с событиями. События могут срабатывать однократно или с заданной периодичностью.

События планировщика используют для инициации команд, созданных в разделе Routine (в списке сценариев). Событие в расписании может повторяться с периодичностью от 1 дня до 1 раза в несколько лет.


Нажмите на вкладку Schedule в проекте iRidium Server - окно настройки событий в расписании. В расписании можно создать любое число событий:

Scheduler setup1.png

- добавить событие
- удалить событие. При этом перестанут работать сценарии, для которых это событие использовалось как условие срабатывания
- изменить настройки события


Настройки

Scheduler setup2.png
  • Name - название события
  • Description - краткое описание (не обязательно)
  • Start - дата и время начала события
  • Finish - дата и время завершения события. Галочка "Specify the Date" по умолчанию снята, это значит, что событие закончится в тот же день, что началось. Поставив галочку, вы можете указать дату окончания события.
  • Repeat - нужно ли повторять событие. Если нужно, указывается интервал повторения события. Примеры и описание настроек повторения см. ниже
  • End - когда завершить повторение события (если включено повторение)
    • Never - никогда
    • Date - в указанную дату


Настройки повторения (Repeat)

Repeat - периодичность повторения созданного события. Варианты настройки:

Scheduler setup3.png
  • Never - не повторять событие
Scheduler setup4.png
  • Every Day - каждый день, в указанное время
  • Every Week - в тот же день недели, что началось, каждую неделю. Например, каждый Пн
  • Every 2 Weeks - в тот же день недели, что началось, каждую 2ю неделю. Например, каждое второе Вс
  • Every Monts - в ту же дату, что началось, каждый месяц. Например, каждое 23е число
  • Every Year - в ту же дату и месяц, что началось, каждый год. Например, каждое 1 января
Scheduler setup7.png
Scheduler setup6.png
Scheduler setup8.png
  • 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 - окно настройки сценариев:

Routine setup1.png

- добавить сценарий
- удалить сценарий
- изменить настройки сценария

Добавить сценарий:

Routine ready.png
  • 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:

Routine setup when.png
Routine setup then.png
Routine setup butonlyif.png


Использование расписания в сценариях

WHEN. Для запуска сценариев используют статусы событий расписания:

  • Start - событие началось
  • Finish - событие закончилось


BUT ONLY IF. Как проверочное условие при выполнении сценария используют состояния:

  • In process - событие происходит сейчас
  • Not in process - событие не происходит сейчас


Модификация данных на сервере

Модификация - изменение полученных данных перед отправкой по назначению: оборудованию или на панели управления.

Модификация производится с помощью скриптовой функции модификатора, которая настраивается в параметрах серверного канала или тега (виртуальные переменные модифицируются по тем же принципам):

  • Если функция модифицирует канал сервера: значение, полученное каналом от панели управления будет пересчитано в скрипте, и только потом отправлено драйверу
  • Если функция модифицирует тег сервера: значение, полученное тегом от драйвера будет пересчитано в скрипте, и только потом отправлено на панель управления.


Пример: графические элементы на панели управления регулируют переменную в диапазоне от 0 до 100. Сервер приводит эти значения к 0...255 с помощью модификаторов, и только потом отправляет драйверу (оборудованию автоматизации):

ModifyJS.png


Функцию-модификатор нужно создать в редакторе скриптов и указать в свойствах переменной, строка 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;
}
ModifyJSinWindow.png

Канал или тег, вызвавший функцию, передает ей аргументы:

  • in_Type - тип переменной, 0 - канал, 1 - тег обратной связи
  • in_Name - полное имя команды или тега
  • in_Value - значение команды или тега


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

модифицированное значение (in_Value) возвращаем переменной с помощью команды return in_Value;

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


Примеры модификаторов

Модификация 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;
   }
}

Чтобы выбрать, какую переменную будет обрабатывать функция-модификатор, укажите имя функции в настройках переменной:

Return Mod Value FromJStoPToken.png

В переменную Сервера, а из нее на панель управления, приходет только результат модификации, но не реальное значение переменной.

Модификация Driver Channels & Tags

Каналы и теги драйверов связаны с переменными сервера, которые можно модифицировать. Привязать модификатор к команде драйвера нельзя - можно привязать его только к связанному с ней каналу сервера.

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

/*
    В канал приходит значение в диапазоне 0-100
    Приведем это значение к диапазону 0-255, округлим и отправим оборудованию
*/
function rangeModify (in_Type, in_Name, in_Value) 
{
      in_Value *= 255/100;
      return in_Value.toFixed(0);
}

Чтобы выбрать, какой канал будет обрабатывать функция-модификатор, укажите имя функции в настройках переменной:

Return Mod Value FromJStoCmd.png

Driver Tags

/*
    Канал принимает значения в диапазоне 0-255
    Приведем значение к диапазону 0-100, округлим и вернем в канал обратной связи
*/
function rangeModifyBack (in_Type, in_Name, in_Value)
{
      in_Value *= 100/255;
      return in_Value.toFixed(0);
}

Чтобы выбрать, какой тег будет обрабатывать функция-модификатор, укажите имя функции в настройках переменной:

Return Mod Value FromJStoFb.png

Тег будет выдавать только результат модификации, но не исходное значение.


Модификация 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"]);
      }
}

Чтобы выбрать, какую переменную обрабатывать, укажите имя функции в настройках переменной:

Return Mod Value VirtModFromJS.png


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%
}


Чтобы выбрать, какую переменную модифицировать, укажите имя функции в настройках переменной:

Return Mod Value VirtTagFromJS.png


Запись и чтение переменных

Переменные сервера - это 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
успешность записи


Пример

SetVirtualvarJS.png
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
значение в переменной сервера


Пример

SetVirtualvarJS.png
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 и запишет в виртуальный тег обратной связи сервера. Именно это изменение увидит панель управления.


скачать пример

ModifyFunc Scheme server.png


Чтобы настроить передачу данных от виртуальной команды тегу:

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

ModifyFunc ImageStudio server.png

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 секунд, пока событие не завершится:

не воспринимайте эти проекты как готовое решение, они призваны продемонстрировать взаимодействие сервера и приложения-клиента



Построение графиков

Для возможности отображения графиков изменения переменных, iRidium сохраняет значения этих переменных в Базу данных SQL , которая хранится на на iRidium Server.

Когда нужно построить график изменения переменной, приложение i3 pro формирует запрос к базе за определенный период времени, и отображает результат на графике.

Чтобы настроить сохранение переменной в базу данных, нужно выбрать в редакторе iRidium Studio переменную сервера (именно сервера, а не драйвера), и настроить ее сохранение в базу.

Сохранение можно настроить по двум принципам:

  • с определенной периодичностью по времени
  • при изменении переменной более, чем на указанное значение - целое или дробное.


Первый способ удобно использовать для переменных, которые изменяются плавно и достаточно инертны, например, температура и влажность воздуха. Второй способ идеален для переменных, которые меняются нечасто, но значительно. Например, можно писать в базу факт включения и выключения света. При этом, запись по изменению сформирует гораздо меньше записей в базе и не позволит пропустить событие.

Store In Database
  • 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 - минимальное изменение. Запись создается, если переменная изменилась больше, чем на указанное значение
      • Deadband (Value) - минимальное изменение переменной, требующее записи в базу
    • Inverval - периодическая фиксация. Запись создается с указанным временным интервалом
      • Interval (sec) - интервал записи в секундах


Когда сохранение в базу настроено, вы можете отразить переменную в i3 pro в виде графика.



Запросы к базе данных

База данных SQL формируется на iRidium Server при создании серверного проекта.

Если вы работаете с несколькими проектами и заменяете их на сервере, в каждом проекте создается файл системной базы. Также можно создать свою, пользовательскую базу:

  • Системная база
    • запись в базу производится только через настройки переменных сервера в iRidium Strudio
    • можно читать с помощью специальных SQL запросов
    • нельзя редактировать и удалять
  • Пользовательская база
    • запись в базу производится только через JavaScript
    • можно читать с помощью специальных SQL запросов
    • можно редактировать и удалять с помощью JavaScript


Где найти системную базу:

Путь к файлу базы можно найти через web-интерфейс Сервера, вкладка System > Database.


Как сохранить данные в системную базу:

Записать в базу можно Driver Channel, Driver Tags, Virtual Channel, Virual Tag - переменные сервера. Поэтому и настройки сохранения есть только у переменных сервера. Если хотите сохранить канал драйвера - выберите его проекцию на переменные сервера - вы увидите настойки сохранения в базу:

Store In Database
  • 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 - минимальное изменение. Запись создается, если переменная изменилась больше, чем на указанное значение
      • Deadband (Value) - минимальное изменение переменной, требующее записи в базу
    • Inverval - периодическая фиксация. Запись создается с указанным временным интервалом
      • Interval (sec) - интервал записи в секундах



Доступ к базам данных Сервера производится с помощью специализированных SQL запросов. Запросы позволяют получать данные по заданным условиям.


Пользовательская база данных:

Редактируемую базу данных можно создать с помощью JavaScript. Запись, чтение, редактирование данных в пользовательской базе производится с помощью SQL запросов.


Доступ к пользовательской базе через JavaScript:

Руководство предоставляет инструкции по работе с системной и пользовательской базами данных.

Справочник включает список всех методов для работы с базами.


Синхронизация панели управления и Сервера

Интерфейс визуализации лучше всего создавать, когда готов серверный проект: настроена связь с оборудованием автоматизации, сформированы виртуальные теги и скрипты для них на стороне сервера. Импорт серверного проекта позволит быстро получить полный набор управляемых переменных для проекта визуализации. Останется привязать переменные к графическим элементам.

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



Загрузка проекта на Сервер

Загрузка серверного проекта (*.sirpz) на сервер осуществляется аналогично загрузке проекта в клиент i3 pro, т.е. при помощи приложения iRidium Transfer на вашем ПК.


Transfer находит и отображает в своем интерфейсе все запущенные Серверы в пределах IP подсети. С помощью Transfer вы передаете проект конфигурации и лицензию на iRidium Server.

См. Как запустить проект на iRidium Server