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

2 сообщения было перенесено в новую тему: Китайские DS18B20 через WB-M1W2

Попробовал с guard_interval_us, стало получше, но ошибки есть все равно. И самое странное – подключаю датчик к китайскому usb-rs485, запускаю циклический опрос на 100мс в проге Termite и ни одной ошибки не вижу, скорость та же 9600. А в контроллере даже при 1000мс часто бывают, при 5000 бывает неск штук за сутки. Может несовместимость какая? Когда вместо верной температуры 19гр, показывает неверную, то ответ принимается контроллером, значит crc верная.

И еще попутно вопрос: если отключать/подключать датчики rs485 и 1wire не отключая питания контроллера – можно так? Т.е. с контроллера проводка идет на клеммные колодки и на лету я туда подключаю датчики. Питание от +5В контроллера. А то почему-то 1wire датчики перестали контроллером определяться, пробовал подключать и к 1 и ко 2 входу. Питание 5в точно рабочее, т.к. rs485 работают.

В общем нежелательно. И если rs485 еще более терпим к подобному - то нежные 1wire могут не перенести.
Кстати, выход 5Vout (и Vout тоже) можно же программно отключить https://wirenboard.com/wiki/Wiren_Board_6

Несколько за сутки - на том же проводе, и при тех же условиях?

Понял, буду выключать программно. Забыл про этот функционал. А то контроллеру тоже, наверное, не полезно выкл/вкл кнопкой. А программно выключить не всегда возможно.

Я точно не считал еще. Но даже когда было подключено к вб короткими проводами на тестовом стенде это было, часто моргало красным в devices при частом опросе (выше переписка), решил тут проверить с адаптером usb – не увидел такого. На чистоту эксперимента не претендую, но погонял несколько минут датчик с адаптером – все значения ровные. Питание адаптера от usb, питание датчика от адаптера +5В. На контроллере датчик тоже подключен к +5В адаптеру, на тестовой сборке датчик был подключен к БП +24В – картина была одинаковая.

Добрый день!
Я настроил
Desired poll interval (ms) 1000
Delay before accessing the device (ms) 500

И у меня этот датчик перестал моргать красным, исчезли ошибки опроса.

Не знаю, как с выбросами температуры, нужно будет ещё посмотреть.

Мне так не помогло ((
Все равно датчики возвращает периодически -3276.8, что по темп, что по влажности.
У вас один датчик? У меня 3 таких висят на шине.
Интересно, можно как-то игнорировать кривые значения программно и возвращать предыдущее или вообще не посылать в mqtt?
Пока знаний хватило сделать так, но по факту не работает (видимо бесполезно менять newValue):

defineRule(“corr_sens_temp_21”, {
whenChanged: “sens_temp_humid_21/temp”,
then: function (newValue, devName, cellName) {
if (newValue < -50) {
log("sens temp 21 value = " + newValue);
newValue = 0;
}
}
});

Еще такой момент с этими датчиками: сначала они у меня висели на +5В от контроллера, врали на +2-3 градуса (в них есть регистр корректировки, но я не заморачивался пока). Повесил на +12В от отдельного БП, стали показывать точнее, в пределах +1гр. Хочу еще попробовать на +24В повесить, может точность еще возрастет :grinning:

У меня два датчика на напряжении 24 В. Я их тарировал по китайскому цифровому термометру. Оба одинаково от него врали: температура – на 4 градуса, влажность – на 10%. Прописал эти значения в корректирующие регистры и всё – теперь совпадают %)

Нашел раздел “History” в веб-интерфейсе, и понял, как построить график. Оказалось, что у меня тоже были выбросы, причём довольно частые -3276,8.

Сегодня поигрался с параметрами опроса, и, как ни странно, выбросы пропали. Вот таки параметры установил (всё остальное по умолчанию):
Desired poll interval (ms) 60000
Delay before accessing the device (ms) 500

Буду следить дальше.

Опрос раз в минуту? Долговато для меня. Хотелось бы почаще. понятно, что при таком редком опросе вероятность ошибки минимальна. Как-то бы игнорировать эти значения в mqtt. Сами по себе они мне не мешают, а вот график из-за них кривой получается и статистика сбивается.
А вот верить китайскому цифровому термометру тоже не надо )) Он сам может врать. Хотя я сам сейчас сравниваю с температурой оригинального 1-wire ds18b20.

Ну, я не вижу смысла делать опрос чаще, это ж температура в комнате, а не в атомном реакторе %)

Сделал ещё один эксперимент. Подключил датчик через китайский Serial<->USB converter на чипе ch341. Питание 12 В. Частота опроса — 2 раза в секунду по протоколу MODBUS. Получился вот такой график

plot

Видно, что по влажности присутствуют выбросы. Причём они не выбиваются за пределы измерения (от 0 до 100 %), а по температуре всё в порядке. С чем связано, не могу понять.

Также у этого датчика есть опрос просто через UART. Т.е. я пишу ему
$ echo READ > /dev/ttyUSB0
$ cat /dev/ttyUSB0
27.5 23.4
^^^^^^^
Что-то в таком духе…

Вопрос такой: может ли это повлиять или вызывать несогласованность работы через протокол MODBUS? Могут ли эти два варианта конфликтовать?

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

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

При получении значения по 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 лайка