Перейти к основному содержимому

iRidium Studio

Редактор 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

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

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

Перетяните драйвер из 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


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

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

Editor_Convert_PanelProject_toServer.png

  • Будьте внимательны, iRidium server в отличие от i3 pro не поддерживает:
  • графический интерфейс,
  • токены проекта и
  • большинство системных токенов.

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

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

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

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

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

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

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

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

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

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 - переменные, с помощью которых можно управлять оборудованием.

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

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

Commands / Channels
Server_Tag_Relations.png
Virtual Channels
Virtual_tags_On_Server.png

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

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

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

Feedback / Tags
Server_Fb_Relations1.png
Virtual Tags
Virtual_tags_1_On_Server.png

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

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

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

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

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

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

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

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

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

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

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

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

FromDBSincWithSource.png

  1. добавьте драйвер iRidium Server из базы данных
  2. укажите путь к проекту *.sirpz, с которым нужно синхронизировать проект визуализации
  3. вы получите драйвер 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 - в указанную дату

Астротаймер

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


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

  • за состоянием фотодатчика надо следить (если загрязнится, то свет будет гореть и днем)
  • если появится паразитная засветка датчика, то освещение не включится, когда это необходимо
  • нельзя включать свет с опережением\запаздыванием относительно уровня освещения

Астротаймер лишен всех этих недостатков.


Далее рассмотрим, как настроить данный пример.

  • Для работы с астротаймером не требуется подключение к интернету.

Настройка астротаймера

  1. Создайте серверный проект или откройте уже имеющийся.
  2. В разделе Config , в полях Latitude и Longitude укажите свои координаты в виде десятичной дроби и нажмите кнопку Save .

Astrotimer_1.png


  1. Добавьте оборудование, с которым будете работать и настройте его.
  2. В разделе Schedule создайте расписание, по которому будут работать устройства освещения. Началом события укажите закат (Sunset), а окончанием – восход (Sunrise) следующего дня.

Astrotimer_2_1.png


  1. В разделе Routine создайте правила:
    Правило 1:
    WHEN → Event start

Astrotimer_3.png


THEN → отправить значение в канал устройства, чтобы оно включилось

Astrotimer_4.png


Astrotimer_5.png


Правило 2:
WHEN → Event finish

Astrotimer_6.png


THEN → отправить значение в канал устройства, чтобы оно отключилось

Astrotimer_7.png


BUT ONLY IF → устройство в данный момент включено (Feedback == 1)

Astrotimer_8.png


Astrotimer_9.png


На этом настройка завершена. Сервер автоматически рассчитает время восхода и заката Солнца, в зависимости от Вашего расположения.

Настройки повторения (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: Days - интервал повторения в днях, от 1 до 365
      • By Weeks - повторять каждую N-ю неделю, в указанные дни недели, начиная с даты начала события. Например, четверг каждой 2й недели
        • Every: Weeks - интервал повторения в неделях, от 1 до 52
        • On specified days of week - укажите дни недели, в которые нужно повторять событие
      • By Months - повторять каждый N-й месяц. Выберите принцип повторения: в указанные числа месяца / в указанные дни месяца. Например, каждый 2й месяц, 23 число. Или каждый 1й понедельник месяца.
        • Every: Months - интервал повторения в месяцах, от 1 до 12
        • On specified dates of month - повторение в указанные числа месяца. Можно выбрать несколько чисел
        • On specified days of month - повторение в указанные дни месяца: 1й понедельник, 4е воскресенье, ...
      • By Years - повторять каждый N-й год
        • Every: 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 считается активным однократно только в тот момент, когда это условие изменило своё состояние с ложного на истинное. В последующих истинных состояниях условие WHEN уже не будет активным. В связи с этим последовательность действий THEN будет выполнено только один раз после активации WHEN .

Если при запуске iRidium server условие WHEN сразу же приняло истинное значение, то действия THEN не будут выполнены, так как не было зафиксировано предварительное ложное состояние условия WHEN - обязательное условие активации сценария.

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

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;

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

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

  • значения тегов в веб-интерфейсе получаются в результате работы функции Script Modifier,

  • значения, заданные в веб-интерфейсе командой "Set", отправляются на вход функции Script Modifier перед отправкой в канал на физическое устройство.


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

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

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

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

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

/*
В канал приходит значение в диапазоне 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

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

Виртуальные переменные сервера на стороне панели управления выглядят как каналы и теги сервера. В переменную можно отправить значение 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.NameServer.Channels.Virtual 1type: string
полное имя переменной сервера
value100type: string
значение для записи в переменную сервера, number, boolean
на выходе
успешностьtruetype: boolean
успешность записи

Пример

![SetVirtualvarJS.png](/img/dev-iridi/Editor_Server_Tools/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.NameServer.Channels.Virtual 1type: string
полное имя переменной сервера
на выходе
value100type: string, number, boolean
значение в переменной сервера

Пример

![SetVirtualvarJS.png](/img/dev-iridi/Editor_Server_Tools/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;
}
  1. Вернитесь к виртуальной команде "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 секунд, пока событие не завершится:

скачать: проект для сервера и проект для клиента

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

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

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

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

  • Системная база

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

  • Пользовательская база

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

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

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

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

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

ServerStoreInDBsettings-2.png

  • 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