Добрый день!
Есть виртуальное устройство (defineVirtualDevice) и внешний Python-драйвер, который обновляет его контролы. Контролы хочется оставить readonly: true и при этом получать whenChanged.
Как корректно обновить значения в топиках? Можно ли напрямую писать в ячейку без /on или wb-rules будет работать не корректно?
Добрый день.
Нет, readonly значения только пишутся в виртуальные устройства и только тем сервисом который их создал.
Для связи с внешним скриптом имеет смысл использовать trackMqtt() и читать отдельные (можно не соответствующие конвенции) топики, в которые публикует Python. Ну и прочитанное - выводить уже в контролы виртуального устройства.
Я немного опишу подробнее, на всякий случай.
wb-rules создает какой-то readonly топик.
Значение в нем лежит в MainGate/position например.
То есть полный путь /devices/MainGate/controls/position
На публикацию в /devices/MainGate/controls/position чем-то сторонним wb-rules не реагируют, (оно ж только для чтения). Публикация из самого движка правил обрабатывается внутри движка.
И тут может быть такое:
На топик кроме самого wb-rules подписан еще какой-то сервис. Например NodeRed. Он - будет реагировать на публикацию из стороннего скрипта в движок правил - нет. То есть можно получить неожиданное поведение.