Связь скрипта проекта Сервера и проекта Графики
Добрый день.
Есть проект сервера UMC (с KNX драйвером) и проект графики (iPad).
Необходимо по некоторым событиям в KNX обрабатывать действия на сервере, результат отправлять в других переменных в KNX и отображать на панели.
Например, реализовать термостат (простейший) - считывать значение температуры от датчика (из драйвера), сравнивать с пороговым значением, в зависимости от результата записывать состояние реле вентилятора (в драйвер) и менять цвет кнопки на панели.
Получается примерно такой скрипт:
IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function(name, value)
{
switch (name) {
case "Drivers.iRidium Server.KNX IP Router.Температура":
temp = value;
if (temp > 30) {
IR.GetDevice("iRidium Server").Set("KNX IP Router.Вентилятор", 1);
IR.GetPage("Page1").GetItem("Label1").GetState(0).FillColor = color1;
} else if (temp_server < 30) {
IR.GetDevice("iRidium Server").Set("KNX IP Router.Вентилятор", 0);
IR.GetPage("Page1").GetItem("Label1").GetState(0).FillColor = color2;
}
break;
}
});
IR.SubscribeTagChange("Drivers.iRidium Server.KNX IP Router.Температура");
Если запускать его в проекте графики, то всё работает. Но когда iPad с графикой "засыпает", эта логика перестает работать.
Если перенести скрипт в проект сервера, то логика будет работать всё время, но как в тогда обеспечить связь панелью (когда она "проснется")?
Customer support service by UserEcho
Добрый день.
Сервер может определять подключение панели по событию EVENT_ACCEPT. Если панель заснула, то сервер должен увидеть событие EVENT_RELEASE. Вы хотите с сервера отправлять данные на панель или панель должна инициировать запрос к серверу после пробуждения?
да, я хочу данные с сервера отправлять на панель (когда она активна). Как это можно осуществить? Через какие-нибудь глобальные переменные?
Когда панель заснула и пробудилась, некоторые состояния уже могли поменяться..
Добрый день.
Если это произвольные данные, то создайте виртуальные фидбэки в серверном проекте, синхронизируйте панельный проект с серверным и по событию EVENT_ACCEPT отправляйте в виртуальные фидбэки значения. Отправить можно число или строку. Если у вас JSON, то преобразуйте его в строку перед отправкой. На панели получайте значение виртуального фидбэка в драйвере iRidium Server и используйте.
Если данные передаются в нативном драйвере, то ничего отдельно создавать не надо, панель должна получить их при подключении.
Спасибо!
А возможно вызвать из скрипта панели функцию скрипта сервера? Или для этого нужно отслеживать состояние виртуальной переменной?
Добрый день.
Лучше делать это через виртуальные каналы/фидбэки. Напрямую вызвать скрипт на сервере нельзя с панели.
Создал в серверном проекте Virtual переменные, например, Tag c именем Tag1 и Channel с именем Channel1.
В проекте панели на Project Device Panel они отображаются как Drivers -> iRidium Server -> Virtual -> Commands (или Feedback)
1) Как обратиться к этим переменным из скрипта проекта панели? А именно записать значение -
IR.SetVariable("Drivers.iRidium Server.Tag1", 12345);
Так?
2) и как отслеживать изменение Virtual переменной (из проекта сервера, например)? Так?
IR.SetGlobalListener(IR.EVENT_GLOBAL_TAG_CHANGE, function(name, value)
{
switch (name) {
case "Drivers.iRidium Server.Channel1":
IR.Log(name + ": "+value);
break;
}
});
IR.SubscribeTagChange("Drivers.iRidium Server.Channel1");
Добрый день.
С панели нужно отправлять значение через драйвер iRidium Server.
Отслеживать можно через EVENT_TAG_CHANGE или EVENT_GLOBAL_TAG_CHANGE.
Пример во вложениях.
Block.sirpz
Set.irpz
Спасибо.
Переменные в списке Commands и Feedback должны быть одинаковыми? Или для передачи данных от сервера к панели можно создать только переменную в Feedback (она же Tag на сервере), например tag_1? А для передачи от панели к серверу только Commands (Channels на сервере), например channel_2?
Имя виртуального канала должно совпадать с именем виртуального фидбэка, это нужно для шлюзования. Имя в этой паре может быть любое.