Уже задавал когда-то вопрос, но не могу добиться все равно стабильной работы сценария.
Есть физическое устройство и виртуальное. Задача - синхронизировать два свойства типа range. То есть меняю в физическом устройстве, и значение range синхронно меняется в виртуальном, и наоборот.
Если коротко - это виртуальное устройство “светильник”, у которого есть свойство “яркость” и реальный шлюз ecoDim, со своей яркостью. Просто мой виртуальный светильник имеет дополнительные свойства, то есть он агрегирует разные устройства.
Я уже как только не извращался. Меняю в виртуальном яркость, меняется значение в физическом, на нем срабатывает правило изменения, которое меняет яркость опять в виртуальном. Наступает зацикливание.
Я пробовал enableRule/disableRule с задержкой на disable 200 мс, и в целом это работает. Но иногда тупит или mqtt, или шлюз, и происходит так:
меняю яркость на виртуальном, срабатывает правило
в правиле выключаю правило для яркости физического
меняю яркость на физическом устройстве
жду 200 мс
включаю правило обратно.
В 80% случаев все работает норм. Но в 20% уже позже 200 мс, происходит изменение на шине физического устройства, и начинает работать “обратная” логика, когда срабатывает правило на физическом устройстве, и оно начинает менять виртуальное.
Я наверное, уже пару недель пытаюсь найти гарантированную схему. Но все равно как-то нестабильно и криво.
Неужели нет нормального и проверенного механизма синхронизации значений в виртуальных и физических устройствах?
Вот пример. Я меняю яркость в виртуальном устройстве dali-kabinet-lustra. Шлюз тупит, и не отвечает. Я вновь меняю яркость, и тут спустя 24 секунды шлюз решил отработать, и установить у себя внутри значения яркости. И тут вызывается правило изменения “обратно” в сторону виртуального устройства. ui-элемент range прыгает, лампа моргает. Но еще спустя 4 секунды вновь шлюз просыпается, и отрабатывает мое второе действие, вновь меняя яркость лампы. С точки зрения пользователя это выглядит очень трешово.
А затем, то ли контроллер что-то внутри себя разгребает, то ли еще что, и начинает работать корректно. То есть я меняю параметр виртуального устройства, делая перед этим disableRule, а через 200 мс enableRule, правило на стороне физического устройства не выполняется, что соответствует ожиданию.
июн 23 07:34:52 wirenboard-ALLE5D4S wb-rules[2261]: INFO: [rule info] dali-kabinet-lustra: brightness changed to 37% (recalc to dali 219)
июн 23 07:34:56 wirenboard-ALLE5D4S wb-rules[2261]: INFO: [rule info] dali-kabinet-lustra: brightness changed to 82% (recalc to dali 247)
июн 23 07:35:06 wirenboard-ALLE5D4S wb-rules[2261]: INFO: [rule info] dali-kabinet-lustra: brightness changed in real device 'Device 3': was 247, new 219
июн 23 07:35:10 wirenboard-ALLE5D4S wb-rules[2261]: INFO: [rule info] dali-kabinet-lustra: brightness changed in real device 'Device 3': was 219, new 247
июн 23 07:35:53 wirenboard-ALLE5D4S wb-rules[2261]: INFO: [rule info] dali-kabinet-lustra: brightness changed to 52% (recalc to dali 230)
июн 23 07:35:56 wirenboard-ALLE5D4S wb-rules[2261]: INFO: [rule info] dali-kabinet-lustra: brightness changed to 92% (recalc to dali 251)
июн 23 07:36:03 wirenboard-ALLE5D4S wb-rules[2261]: INFO: [rule info] dali-kabinet-lustra: brightness changed to 29% (recalc to dali 210)
июн 23 07:36:04 wirenboard-ALLE5D4S wb-rules[2261]: INFO: [rule info] dali-kabinet-lustra: brightness changed to 0% (recalc to dali 0)
июн 23 07:36:06 wirenboard-ALLE5D4S wb-rules[2261]: INFO: [rule info] dali-kabinet-lustra: brightness changed to 77% (recalc to dali 245)
Идеально было бы не эти извращения с enableRule/disableRule, а что-то вроде команды changeTopic(devName, cellName, newValue, tempCancelRules), где последний аргумент - запрет вызывать rule для изменений, вызванной именно этой командой.
Добрый день.
К сожалению, я не понял корня проблемы. Все описано на словах, но я не вижу ни правил, ни видео, например, веб-интерфейса и как это в живую выглядит.
Что за правило на физическом устройстве? Сценарий? Покажите видео.