0
Under review

Связь скрипта проекта Сервера и проекта Графики

olegdax 1 week ago • updated by Vladimir Ovchinnikov 20 hours ago 5

Добрый день.

Есть проект сервера 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 с графикой "засыпает", эта логика перестает работать.

Если перенести скрипт в проект сервера, то логика будет работать всё время, но как в тогда обеспечить связь  панелью (когда она "проснется")?

Under review

Добрый день.

Сервер может определять подключение панели по событию EVENT_ACCEPT. Если панель заснула, то сервер должен увидеть событие EVENT_RELEASE. Вы хотите с сервера отправлять данные на панель или панель должна инициировать запрос к серверу после пробуждения?

да, я хочу данные с сервера отправлять на панель (когда она активна). Как это можно осуществить? Через какие-нибудь глобальные переменные? 

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

Добрый день.

Если это произвольные данные, то создайте виртуальные фидбэки в серверном проекте, синхронизируйте панельный проект с серверным и по событию EVENT_ACCEPT отправляйте в виртуальные фидбэки значения. Отправить можно число или строку. Если у вас JSON, то преобразуйте его в строку перед отправкой. На панели получайте значение виртуального фидбэка в драйвере iRidium Server и используйте.

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

Спасибо!

А возможно вызвать из скрипта панели функцию скрипта сервера? Или для этого нужно отслеживать состояние виртуальной переменной?

Добрый день.

Лучше делать это через виртуальные каналы/фидбэки. Напрямую вызвать скрипт на сервере нельзя с панели.