А где добавили фильтры? У меня выбросы наоборот внизу идут по температуре, а по влажности и вверх и вниз.
При получении значения по mqtt фильтрую данные.
Верхний график требует медианного фильтра, а нижний только отбрасывания физически неверных значений. Видимо датчики глючат по-разному )
Получается вот такой график:
А где фильтруете то? Прямо на 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 винтиков на колодке. Другая фирма и совершенно другое качество. Шаблон придётся поменять, т.к. у них первая выдаётся влажность.
И про фильтрацию: не надо привязываться к “железу”. Сделайте виртуальной устройство, в котором можете просто игнорить фантастические значения и уже в него качайте всё со своих датчиков. Поскольку лично у меня время от времени случаются припадки “всё криво, надо переделать”, я делаю логику и интерфейс виртуальными, а “железки” цепляю по настроению. Таким образом припадок не влечет за собой глобального перекапывания кода.
Всем удачи!