Здравствуйте.
Есть wiren board 8, к которому подключен датчик через rs485/modbus. Значения считываются и видны. Но для получения правильного значения нужно применять формулу, см. картинку.
По сути, надо преобразовать полученное значения и записать в топик MQTT новое вычисленное значение.
Как принято решать подобные задачи в wiren board? Есть тут возможность вычисления формул сложнее, чем коэффициент/смещение? Какой инструментарий для этого есть?
Как пример данных, 18089 272.80 46A9 ->4 1705 → 0.01 * (2**4) * 1705==272.80
Добрый день!
Данная задача может быть решена несколькими способами — через Node-RED или с помощью wb-rules с использованием виртуальных устройств.
Выбор зависит от того, какая логика вам удобнее и какая уже используется в системе.
Предположим, в WB8 настроено получение данных в топик “sensor_1/light”. Мы добавляем правило
defineRule("fix_light", {
whenChanged: "sensor_1/light",
then: function (newValue, devName, cellName) {
var v = calcValue(newValue);
...
})
и начинаем получать значения, которые нужно пересчитать по формуле.
Правильно ли я понимаю, что подменить значение топика “sensor_1/light” на вычисленное таким образом мы не можем? И нам надо создать виртуальное устройство с другим топиком, где будет фигурировать наше новое пересчитанное значение?
Или можно подменить значение оригинального топика? Чтобы полученное ранее непересчитанное значение вообще не распространялось по MQTT.
Нет, подменить значение напрямую нельзя — дальше можно только оперировать с новым значением через виртуальное устройство.
Правильно ли я понимаю, что предлагаемый правильный алгоритм таков:
- Мы заводим физическое устройство, которое наполняет топики данными на конкретном WB.
- Мы добавляем wb-rules, формирующие новое виртуальное устройство, и записываем новые топики на основе топиков физического устройства, проводя необходимые вычисления.
- Мы пробрасываем далее по MQTT не всё подряд, а только топики виртуального устройства для дальнейшей обработки и визуализации.
?