Шлюз mgate публикует не верное значение float при рестарте serial

приложен диагностический архив, доступен только сотрудникам поддержки
(2,9 МБ)
Добрый день. Сразу сказу что такое поведение появилось с релиза 2606. До этого все работало без ошибок.
Суть проблемы такая. Есть сенсор уличной температуры который один единственный на порту rs485-1. Читаются три регистра. Значение трех регистров публикуется шлюзом mgate в формате float

 "enabled": true,
                "topic": "sht3x_10/Humidity",
                "unitId": 4,
                "address": 10,
                "format": "float",
                "size": 4,
                "scale": 1,
                "byteswap": true,
                "wordswap": true
            },
            {
                "enabled": true,
                "topic": "sht3x_10/Temperature",
                "unitId": 4,
                "address": 12,
                "format": "float",
                "size": 4,
                "scale": 1,
                "byteswap": true,
                "wordswap": true
            },
            {
                "enabled": true,
                "topic": "sht3x_10/Devpoint",
                "unitId": 4,
                "address": 14,
                "format": "float",
                "size": 4,
                "scale": 1,
                "byteswap": true,
                "wordswap": true

Стороння автоматика читает температуру, обрабатывает и расчитывает средную температуру для ПЗА. Проблема в том что когда выполняешь обновление (связанное с serial) шлюз mgate публикует кратковременно мусор вместо последнего или нулевого показания. Это попадает в автоматику ПЗА и падает расчет средней температуры. С датчиком проблем нет, такая проблема именно при рестарте сервиса serial. Есть выход из этой проблемы?

Для пояснения. На скрине WB уже расчитанные данные ПЗА сторонней автоматикой полученные по MQTT.

Добрый день.

Что публикует сервис wb-mqtt-serial в процессе перезапуска в топик, который сконфигурирован в wb-mqtt-mbgate? То есть подпишитесь на него пожалуйста и покажите.

Подскажите как это поймать? На самом графике WB этих аномалий нет, да и в работе с датчиком проблем нет от слова совсем. Это какой то краткосрочный баг, который ловит сторонний CodeSYS и пишет в свои регистры.

Вот тут описано.

Вот, где значение null там serial перезагрузался

root@wirenboard-AXEJVKTS:~# mosquitto_sub -t '/devices/sht3x_10/controls/Temperature' -v
/devices/sht3x_10/controls/Temperature 10.3
/devices/sht3x_10/controls/Temperature 10.2
/devices/sht3x_10/controls/Temperature 10.3
/devices/sht3x_10/controls/Temperature 10.2
/devices/sht3x_10/controls/Temperature 10.3
/devices/sht3x_10/controls/Temperature 10.2
/devices/sht3x_10/controls/Temperature (null)
/devices/sht3x_10/controls/Temperature 10.2
/devices/sht3x_10/controls/Temperature 10.2
/devices/sht3x_10/controls/Temperature 10.3
/devices/sht3x_10/controls/Temperature 10.2
/devices/sht3x_10/controls/Temperature 10.3
/devices/sht3x_10/controls/Temperature 10.2
/devices/sht3x_10/controls/Temperature 10.3
/devices/sht3x_10/controls/Temperature 10.2
/devices/sht3x_10/controls/Temperature 10.3
/devices/sht3x_10/controls/Temperature 10.2
^Croot@wirenboard-AXEJVKTS:~mosquitto_sub -t '/devices/sht3x_10/controls/#' -v
/devices/sht3x_10/controls/Humidity 51.8
/devices/sht3x_10/controls/Humidity/meta {"order":1,"readonly":true,"title":{"ru":"\u0412\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c"}                                                                   ,"type":"value","units":"%, RH"}
/devices/sht3x_10/controls/Humidity/meta/order 1
/devices/sht3x_10/controls/Humidity/meta/readonly 1
/devices/sht3x_10/controls/Humidity/meta/type value
/devices/sht3x_10/controls/Temperature 10.2
/devices/sht3x_10/controls/Temperature/meta {"order":2,"readonly":true,"title":{"ru":"\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u044                                                                   3\u0440\u0430"},"type":"value","units":"deg C"}
/devices/sht3x_10/controls/Temperature/meta/order 2
/devices/sht3x_10/controls/Temperature/meta/readonly 1
/devices/sht3x_10/controls/Temperature/meta/type value
/devices/sht3x_10/controls/Devpoint 0.7
/devices/sht3x_10/controls/Devpoint/meta {"order":3,"readonly":true,"title":{"ru":"\u0422\u043e\u0447\u043a\u0430 \u0440\u043e\u0441\u044b"                                                                   },"type":"value","units":"deg C"}
/devices/sht3x_10/controls/Devpoint/meta/order 3
/devices/sht3x_10/controls/Devpoint/meta/readonly 1
/devices/sht3x_10/controls/Devpoint/meta/type value
/devices/sht3x_10/controls/Humidity 51.9
/devices/sht3x_10/controls/Humidity 51.8
/devices/sht3x_10/controls/Temperature/meta (null)
/devices/sht3x_10/controls/Temperature/meta/order (null)
/devices/sht3x_10/controls/Temperature/meta/readonly (null)
/devices/sht3x_10/controls/Temperature/meta/type (null)
/devices/sht3x_10/controls/Temperature (null)
/devices/sht3x_10/controls/Devpoint/meta (null)
/devices/sht3x_10/controls/Devpoint/meta/order (null)
/devices/sht3x_10/controls/Devpoint/meta/readonly (null)
/devices/sht3x_10/controls/Devpoint/meta/type (null)
/devices/sht3x_10/controls/Devpoint (null)
/devices/sht3x_10/controls/Humidity/meta (null)
/devices/sht3x_10/controls/Humidity/meta/order (null)
/devices/sht3x_10/controls/Humidity/meta/readonly (null)
/devices/sht3x_10/controls/Humidity/meta/type (null)
/devices/sht3x_10/controls/Humidity (null)
/devices/sht3x_10/controls/Humidity/meta {"order":1,"readonly":true,"title":{"ru":"\u0412\u043b\u0430\u0436\u043d\u043e\u0441\u0442\u044c"},"type":"value","units":"%, RH"}
/devices/sht3x_10/controls/Humidity/meta/error (null)
/devices/sht3x_10/controls/Humidity/meta/order 1
/devices/sht3x_10/controls/Humidity/meta/readonly 1
/devices/sht3x_10/controls/Humidity/meta/type value
/devices/sht3x_10/controls/Humidity 51.8
/devices/sht3x_10/controls/Temperature/meta {"order":2,"readonly":true,"title":{"ru":"\u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430"},"type":"value","units":"deg C"}
/devices/sht3x_10/controls/Temperature/meta/error (null)
/devices/sht3x_10/controls/Temperature/meta/order 2
/devices/sht3x_10/controls/Temperature/meta/readonly 1
/devices/sht3x_10/controls/Temperature/meta/type value
/devices/sht3x_10/controls/Temperature 10.2
/devices/sht3x_10/controls/Devpoint/meta {"order":3,"readonly":true,"title":{"ru":"\u0422\u043e\u0447\u043a\u0430 \u0440\u043e\u0441\u044b"},"type":"value","units":"deg C"}
/devices/sht3x_10/controls/Devpoint/meta/error (null)
/devices/sht3x_10/controls/Devpoint/meta/order 3
/devices/sht3x_10/controls/Devpoint/meta/readonly 1
/devices/sht3x_10/controls/Devpoint/meta/type value
/devices/sht3x_10/controls/Devpoint 0.7
/devices/sht3x_10/controls/Humidity 51.8
/devices/sht3x_10/controls/Temperature 10.2
/devices/sht3x_10/controls/Devpoint 0.7

Ровно такое же поведение у штатного устройства WB

root@wirenboard-AXEJVKTS:~# mosquitto_sub -t '/devices/wb-map3e_12/controls/Irms L1' -v
/devices/wb-map3e_12/controls/Irms L1 1.417
/devices/wb-map3e_12/controls/Irms L1 1.3908
/devices/wb-map3e_12/controls/Irms L1 1.3895
/devices/wb-map3e_12/controls/Irms L1 1.3965
/devices/wb-map3e_12/controls/Irms L1 1.396
/devices/wb-map3e_12/controls/Irms L1 1.3955
/devices/wb-map3e_12/controls/Irms L1 (null)
/devices/wb-map3e_12/controls/Irms L1 1.3955
/devices/wb-map3e_12/controls/Irms L1 1.3968
/devices/wb-map3e_12/controls/Irms L1 1.4105
/devices/wb-map3e_12/controls/Irms L1 1.3928
/devices/wb-map3e_12/controls/Irms L1 1.389
/devices/wb-map3e_12/controls/Irms L1 1.3973
/devices/wb-map3e_12/controls/Irms L1 1.3863
^Croot@wirenboard-AXEJVKTS:~#

Да, неопределенные значения когда в исходном топике null - ожидаемы.

17:36:37.466  raw=3333 4123   T=10.2
17:36:37.667  raw=6554 706D   T=2.939e+29   <пока null
17:36:40.882  raw=CCCD 4124   T=10.3

Воспроизвел. Спрошу разработчиков - считать ли это багом, поскольку процесс перезапуска и старта/рестарта - относится к переходным.
Предлагаю исключить неожиданный диапазон значений уже в принимающй стороне.

Да что же мне везет на баги. Считаю что это баг. Шлюз предназначен для стороних устройств и не должен передавать не достоверные данные,даже из-за переходных процессов.Либо ноль либо последнее значение.В моем случае это оказалось критично. Я пока перекину физически опрос на сторонее устройство.

Остановил сервис serial и шлюз mgate публикует недостоверные данные постоянно, причем не только в float. Так что баг однозначно на исправление,так быть не должно.
Скрин когда сервис serial запущен


Здесь сервис serial остановлен

Если в процессе работы сервис serial зависнет и прекратит работать, то значения будут null?