Датчик температуры-влажности SHT20 RS485

А где добавили фильтры? У меня выбросы наоборот внизу идут по температуре, а по влажности и вверх и вниз.

При получении значения по mqtt фильтрую данные.
Верхний график требует медианного фильтра, а нижний только отбрасывания физически неверных значений. Видимо датчики глючат по-разному )

Получается вот такой график:
image

А где фильтруете то? Прямо на wirenboard? Если да, то не поделитесь техническими подробностями как можно откинуть кривое значение, да и вообще любое, на уровне mqtt?
У меня контроллер используется как брокер, а вся автоматизация на homeassistant, который общается с контроллером через mqtt, поэтому в идеале на контроллере бы это все делать.

Нет, не на wirenboard.

Схема такая: на удаленном сервере запущен скрипт, который подписан на mqtt по сети (напрямую через OpenVPN, без брокера). Этот скрипт получает данные и записывает их в базу данных на сервере. В этот момент как раз и можно применить фильтр. Далее вы уже можете делать, что хотите с этими данными.

Таким датчикам доверия особо нет. Как мне кажется, лучший вариант – это его замена.

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

Нашел похожую тему про оригинальный датчик от ВБ, там тоже про провалы, но с другим контроллером:

не, в той теме контроллер от конкурентов рисовал на графике 0, если датчик не отвечал вовремя. А не отвечал вовремя он, потому что в контроллере не сделали failsafe bias на RS-485.

Протокол там Modbus, и в нём есть контрольная сумма. Т.е. получить какие-то не те данные, чтобы при этом сошлась контрольная сумма - это что-то очень фантастически невероятное. Можно включить режим отладки в настройках wb-mqtt-serial и посмотреть на сырые посылки по шине и на то, как контроллер их преобразовывает в данные.

Изучаю раздел history в веб интерфейсе контроллера для показаний датчика влажности.
Вот такие там величины:
|2021-03-02 08:37:43|43.6|
|2021-03-02 08:39:43|43.1428571428572|
|2021-03-02 08:41:44|42.58|
|2021-03-02 08:43:43|42.2833333333333|

Подскажите, пожалуйста, как могут получиться числа с такими большими и случайными мантиссами, если контроллер получает два байта и умножает его на 0,1?

Кстати из вывода логов явно видно, что данные, которые пишутся в топик имеют нормальный вид:
Mar 2 04:03:31 wirenboard-ATU5SBN user.notice serial: modbus: read 2 input(s) @ 1 of device modbus:101
Mar 2 04:03:31 wirenboard-ATU5SBN user.notice serial: Write: 65 04 00 01 00 02 28 2f
Mar 2 04:03:31 wirenboard-ATU5SBN user.notice serial: ReadFrame: 65 04 04 00 C1 01 9E 0F 86
Mar 2 04:03:31 wirenboard-ATU5SBN user.notice serial: new val for <modbus:101:input: 2>: 19e
Mar 2 04:03:31 wirenboard-ATU5SBN user.notice serial: register value change: <modbus:101:input: 2> ← 41.4
Mar 2 04:03:31 wirenboard-ATU5SBN user.notice serial: channel Humidity device id: th1 – topic: /devices/th1/controls/Humidity ← 41.4

Поймал выброс.

Mar  2 04:27:58 wirenboard-ATU5SBN user.notice serial: modbus: read 2 input(s) @ 1 of device modbus:101
Mar  2 04:27:58 wirenboard-ATU5SBN user.notice serial: Write: 65 04 00 01 00 02 28 2f
Mar  2 04:27:58 wirenboard-ATU5SBN user.notice serial: ReadFrame: 65 04 04 00 C3 02 16 AE D0
Mar  2 04:27:58 wirenboard-ATU5SBN user.notice serial: new val for <modbus:101:input: 2>: 216
Mar  2 04:27:58 wirenboard-ATU5SBN user.notice serial: register value change: <modbus:101:input: 2> <- 53.4
Mar  2 04:27:58 wirenboard-ATU5SBN user.notice serial: channel Humidity device id: th1 -- topic: /devices/th1/controls/Humidity <-- 53.4

Вроде, ничего криминального нет. Похоже, что датчик отправляет такое значение.

В истории хранятся еще и “средние” значения, так что оно получается математически.

Всем привет!
Вот конкретно эти датчики - совсем никакие. На Али есть датчики поприличнее. Они выглядят так же, только не 4 а 5 винтиков на колодке. Другая фирма и совершенно другое качество. Шаблон придётся поменять, т.к. у них первая выдаётся влажность.
И про фильтрацию: не надо привязываться к “железу”. Сделайте виртуальной устройство, в котором можете просто игнорить фантастические значения и уже в него качайте всё со своих датчиков. Поскольку лично у меня время от времени случаются припадки “всё криво, надо переделать”, я делаю логику и интерфейс виртуальными, а “железки” цепляю по настроению. Таким образом припадок не влечет за собой глобального перекапывания кода.

Всем удачи!

2 лайка