Your comments

Да, драйвер работает с оборудованием, а IR.GetDevice() с сервером.

Добрый день, Александр.

Да. К сожалению, в документации этот момент был упущен, но сейчас уже добавили информацию.

По существу:


1) EVENT_TAG_CHANGE реагирует на новое получение данных, даже если новое значение совпадает с уже имеющимся. Это справедливо, если используется IR.GetDevice(). Пример:

IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetDevice("Modbus TCP"), function(name, value)
{  
IR.Log(name + ": " + value);
});


2) EVENT_TAG_CHANGE не реагирует на получение новых данных, если новое значение совпадает с уже имеющимся. Это справедливо, если используется IR.GetServer(). Пример:

IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetServer(), function(name, value) {   IR.Log(name + ": " + value); });

Если новое значение не совпадает с уже имеющимся, то EVENT_TAG_CHANGE срабатывает.


3) EVENT_GLOBAL_TAG_CHANGE реагирует только на изменение и не сработает, если новое значение равно предыдущему.


IR.GetServer() охватывает все фидбэки во всех драйверах Иридиум сервера, но реагирует только на изменения. В этом EVENT_TAG_CHANGE совместно с IR.GetServer похож на EVENT_GLOBAL_TAG_CHANGE.

IR.GetDevice() работает только в пределах конкретного драйвера, но реагирует на любое новое значение. Даже, если новое равно предыдущему.

Рады помочь.

У вас есть ещё вопросы по вашему обращению?

Добрый день.

Если вы хотите отслеживать все получения данных, даже если новые значения совпадают со старыми, то используйте IR.GetDevice(). Примерно так:

IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetDevice("Modbus TCP"), function(name, value)
{  
IR.Log(name + ": " + value);
});


Для нативных драйверов нужно использовать Set, т. е. отправлять команду в драйвер. SetVariable предназначен для виртуальных фидбэков и токенов проекта.

Только что проверили ещё раз. Конструкция:

IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetServer(), function(name, value)
{  
IR.Log(name + ": " + value);
});

получает значения, которые приходят в имеющиеся фидбэки Иридиум сервера и выполняет действие (в данном случае выводит в лог). Если серверный фидбэк удалён, но в драйвере фидбэк остался, то значение не придёт в сервер. Если новое значение равно предыдущему, то EVENT_TAG_CHANGE в IR.GetServer не сработает. Так сделано умышленно, но в справке это не отражено. В документацию мы внесём дополнение. Спасибо, что обратили внимание на это.


Можно вместо IR.GetServer использовать IR.GetDevice, но только для отдельных драйверов. В таком случае, если новое значение равно предыдущему, то EVENT_TAG_CHANGE сработает.

Почему бы тогда не использовать GetFeedback для получения текущего значения из нужных фидбэков?

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

Добрый день.

1) Как вызываете глобальную сцену? Отправляете команду в нативный драйвер?

2) Если значения фидбэков вам не нужны, то значение чего хотите получить в серверном проекте?

Добрый день.


По iRidium Lite: в панельных рутинах можно указать:

1) Если процент заряда батареи больше 90%, то выключить реле.

2) Если заряд батареи меньше 20%, то включить реле.

3) Через реле подключить зарядку планшета.


Нечто подобное можно реализовать и в i3 pro, только через JavaScript, т. к. панельных рутин в pro нет.