Написание функции, высчитывающей корректную температуру

Здравствуйте! Читаю температуру по modbus с контроллера отопления Uponor. Температуру он отдаёт в фаренгейтах, да плюс ко всему с десятичными значениями вместе.

Для вычисления корректной температуры в цельсиях, необходимо воспользоваться формулой:

Celcius = ((data value – 320)/1.8)/10

Как мне лучше всего совершить такую конвертацию на стороне WB? Заранее благодарю!

Добрый день!

https://wirenboard.com/wiki/Драйвер_wb-mqtt-serial:Примеры_написания_шаблонов

Celcius = ((data value – 320)/1.8)/10 = (1/1.8/10)*data value - (320/1.8/10)=0,055555556*data value-17,777778

Поэтому в шаблоне у значения используйте параметры как в примере ниже, но замените на то, что получилось в выражении выше:

// коэффициент, на который умножается значение регистра перед публикацией в MQTT
“scale”: 0.5,
// значение, которое прибавляется к значению регистра перед публикацией в MQTT
“offset”: -12.5,

(подробнее здесь: GitHub - wirenboard/wb-mqtt-serial: wb-mqtt-serial)

Почему-то, если указать offset с десятыми долями, ничего не работает(

Подскажите, пожалуйста, как с этим быть?

Только что проверил, работает.
Приложите файл шаблона, который вы создали, посмотрим.

Вот так работает:

Если написать вот так:

То показания на вкладке “Devices” перестают обновляться, хотя топики не “краснеют”

Что с этим делать?

Напшите пожалуйста версию wb-mqtt-serial

Можете подсказать, как проверить версию?

dpkg -s wb-mqtt-serial

root@wirenboard-ACF6YBP3:~# dpkg -s wb-mqtt-serial
Package: wb-mqtt-serial
Status: install ok installed
Priority: optional
Section: misc
Installed-Size: 1679
Maintainer: Evgeny Boger boger@contactless.ru
Architecture: armhf
Version: 2.6.3
Replaces: wb-homa-modbus (<< 1.14.1)
Depends: libc6 (>= 2.4), libgcc1 (>= 1:3.5), libjsoncpp1 (>= 1.7.4), libstdc++6 (>= 6), libwbmqtt1 (>= 1.0.4), init-system-helpers (>= 1.18~), ucf, bsdutils
Breaks: wb-homa-modbus (<< 1.14.1), wb-mqtt-confed (<< 1.0.2), wb-mqtt-homeui (<< 1.7)
Conffiles:
/etc/wb-configs.d/11wb-mqtt-serial 25dea7134dcb1cd4ec4e4f33524635e0
/etc/wb-mqtt-serial.conf.sample c8c1adbf630e6fd7ec871b1b5c4a5e0f
/etc/init.d/wb-mqtt-serial 1f6938ea476ac51c4b845327d5e40f03 obsolete
Description: Wiren Board Smart Home MQTT serial protocol driver.
root@wirenboard-ACF6YBP3:~#

Версия свежая, воспроизводится. Будем фиксить.

Прошу прощения, забыл вылозжить методику воспроизведения:
Добавляем в любой шаблон устройства со 121 регистром следующее:

            {
                "name": "test",
                "type": "value",
                "reg_type": "input",
                "address": 121,
                "format": "u16",
                "scale": 0.555555,
                "offset": -17.333
            }

При запуске в логе:

wb-mqtt-serial[25370]: ERROR: [serial] offset is not a int value

Так что поведение корректное, но оффсет только целый.

Исправлено в версии 2.6.6.

1 симпатия

Подскажите пожалуйста, как мне её установить? И когда будет исправлено в стабильных версиях?

sed -i 's/^#deb/deb/g' /etc/apt/sources.list.d/wb-unstable.list 
apt update
apt install wb-mqtt-serial=2.6.8
1 симпатия

А когда будет исправлено в стабильных версиях?

Сейчас вот такая фигня вылезла при добавлении множества каналов у устройства: https://youtu.be/NH4Shbo6aHY

Если выключить устройство и оставить такое же, но с меньшим числом каналов- всё ок.

Что в логе wb-mqtt-serial?

journalctl -u wb-mqtt-serial --no-pager > log.txt