Всем привет!
Есть желание подгружать соответствие каналов и функционалов (устройств) из конфига.
Соответственно, захардкорить whenChanged, например, не выйдет. Очевидный путь - переменные = устройства, в них и подгружаем каналы.
А если трекать mqtt через словарь, так не быстрее будет работать?
Заранее извиняюсь за дурацкий вопрос
Продолжение вопроса:
при старте
var неожиданная_хрень = loadFromConfig();
whenChanged(неожиданная_хрень, function(newValue) {
........
});
булькнуло и что-нить мониторит. Если в процессе я перечитываю конфиг и меняю значение переменной, система продолжить долбить по старому пути до рестарта правила, или отреагирует правильно?
Ещё раз извиняюсь
Добрый день.
По первому вопросу: правило продолжит слушать старый топик. whenChanged получает значение переменной в момент вызова defineRule — то есть строку, а не саму переменную. Потом переменная меняется, а правило про это не знает. Чтобы подхватилось новое — надо пересоздать правило: перезаписать (или touch) файл правила, движок сам перечитает скрипт и пересоберёт правила.
По второму: словарь через trackMqtt быстрее не будет, скорее чуть медленнее — там каждое сообщение по маске уезжает в ваш JS-колбэк, тогда как whenChanged фильтруется внутри движка. Но словарь удобнее для вашей задачи: при смене конфига пересобираете только словарь, правила пересоздавать не надо. Так что выбирайте по удобству, разницу в скорости на обычном объекте вы не увидите.
Описание обоих механизмов и примеры: Движок правил wb-rules, готовый пример trackMqtt + словарь + виртуальное устройство — Подключение сторонних устройств по MQTT.