Your comments

Добрый день, 

вы пишите правильные вещи. Но немного не о том. Здесь ключевое слово - ПЕРЕЗАГРУЗКА. Программа на js прекрасно ведет себя в продолжительной работе, но что происходит при перезаливке проекта или перезагрузке по питанию?


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

  1. дано - модбас дрв:  переменная HR со значением 55. 
  2. к тагу на сервере прикручиваем модификатор "*0,1"
  3. делаем global tag change
  4. подписываемся на 2 переменных на tag в сервере и на tag в modbus дрв
  5. заливаем проект. 
  6. получаем в логах: первое - по каналу сервера приходит ноль обязательно ( а значение у нас в модбасе 55). ЭТО ОЧЕНЬ ВАЖНЫЙ МОМЕНТ! выполняется все что должно выполниться по значению переменной 0. ОШИБКА!!!
  7. приходит значение по каналу сервера 5,5 ( - сработал модификатор. если без модификатора, то пришло бы 55) - тоже изменение. Сработает и по этому значению. ТОЖЕ ОШИБКА!
  8. приходит значение по каналу модбам дрв - 55. тут все ок логично, вопросов нет. круто сделано

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

Решение: Подписываемся на переменные с задержкой - зависит от шины: модбас секунды, Knx  - минуты. Тогда запуск сервера проходит без изменений по этой переменной и не будет ложных tag change.


Тот же эксперимент, но с битовой переменной на модбасе. 

Результат - при запуске сервера global tag change получает сначала 1, потом 0, если был 0 в переменной. ВСЕГДА сначала проходит 1. Если сеттаймаутом не убрать это значение - будет ошибка!

брррр... непоняток стало больше - не вижу логики пока. 

у нас есть feedback по KNX драйверу Outside light value. на него стоит модификатор "умножить на 10". 

по каналу приходит значение 100. Что и в каком случае мы получим? Рассматриваем только серверный проект. 

по вашему утверждению любой листенер передает value "сырое", до модификатора, так?

IR.AddListener(IR.EVENT_TAG_CHANGE, IR.GetDevice("KNX IP Router"), function(name, value) 
{  
IR.Log(name + ": " + value);    //100 - (* спорно, думаю здесь модифицированное значение 1000 должно быть*)
});

а если мы считаем feedback:

IR.GetVariable("Server.Tags.KNX IP Router.Outside light value");  - это tag сервера, он ДОЛЖЕН быть обработан модификатором. те значение 1000

IR.GetVariable("Drivers.KNX IP Router.Tags.Outside light value"); - а здесь я так понимаю драйверный feedback, он не обработан модификатором, те значение 100

ведь модификатор указан на серверном теге. сервер должен "увидеть" его уже модифицированным 

я так думаю. прав - неправ?

тогда вообще непонятно, в листенере до модификации, а в переменых, которые на кнопки приклеены - уже модифицированы. где этот неуловимый момент модификации?

нет, вопрос немного другой:

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


value в логе будет до модификации или после? судя по всему до модификатора.


а в варианте:

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


Value в логе  будет уже модифицированным?





тогда вопрос встречный - если мы слушаем драйвер, а не сервер, то value в листенере будет до применения модификаторов?

это очень важное дополнение, комуто может  быть и так понятно с начала, но не мне. теперь яснее стало

прошу резюмировать: я правильно понял,  что работа листенера IR.EVENT_TAG_CHANGE отличается в зависимости от того на что подписаны?

до этого я имел информацию, что только Global_Tag_Change реагирует на новые значения, а для Event мы даже писали код с запоминаем прошлого значения. оказывается надо было на сервер подписываться?

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