Подключение датчика дождя и снега

Доброго времени суток господа.

Приобрел датчик определения дождя и снега, работающего по RS485, вытряс с китайских друзей сопроводительную документацию по подключению и регистрам.
Читал подобные темы с подключениями китайских датчиков, но мне не стало понятно, что за команды при этом использовать, и какие шаблоны при этом задействовать.
Rain and Snow Sensor.docx (595,5 КБ)
Мой вариант датчика с 6 проводами, по идее он содержит в себе еще возможность подогрева, но я не понял назначение нормально разомкнутого контакта (желтый и зеленый провод), какую функцию он выполняет, по идее в описании было написано, подогрев сам должен включаться при срабатывании.

Как я понимаю, в данном случае нужно идти примерно по такому пути:

  1. Понять какие регистры за что отвечают.
  2. Поменять ID устройства (как это правильно сделать)
  3. Воспользоваться рыбой шаблона, и прописать его в WB, WB если что 7.3

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

Резюмируя,
Наставьте на путь истинный, где смотреть информацию (или помочь с командами), как менять с помощью предоставленной информации от производителя ID устройства, температуру окончания нагрева.
Показать на примере, как пользоваться добавлением подобных устройств в WB с помощью шаблонов. Если в кратком описании напишите как это правильно сделать на примере, буду очень благодарен.

Спасибо заранее.

Добрый день
Вам потребуется данная статья для написания шаблона.

Спасибо конечно за статью, я ее уже видел, но пока до шаблона далеко, нужно поменять ID для начала, и понять, какой регистр за что отвечает. Я пока в форуме подобной информации не нашел, поэтому и обратился к Вам. Если есть статьи, как это правильно “понимать”, буду благодарен, или нативно помочь, с учетом документа который удалось добыть.
Спасибо заранее.

Добрый день!

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

Доброго, ошибок пока никаких нет, так как я еще не уверен в подключении, для чего зеленый и белый вывод может быть, какой функционал за собой несет.
Подключить без них?
Что же касается команд смены адреса, я не понимаю, какими командами воспользоваться, и как правильно понять, какие регистры за что отвечают, поэтому и попросил нативной помощи от Вас, чтобы не напортачить, и помочь с учетом документа, который у меня есть.
Направить на путь истинный, или скинуть ссылку, где это обсуждалось. Знаний по данному вопросу пока минимум.

Добрый день!

Рекомендую для начала воспользоваться данной статьёй для проверки работы устройства по Modbus, смущают регистры и скорость работы устройства, возможно там не классический модбас.
Для уточнения цветовой маркировки проводов лучше дополнительно обратиться к производителю.

Также, согласно схемам, данное устройство можно подключить по интерфейсу 4–20 мА с использованием модуля WB-MAI6, что, по сути, не потребует значительных трудозатрат на написание шаблона, так как шаблон нужен только для rs-485.

Видимо речь о белый и зеленый?

Если верить описанию, то это ВЫХОД (“output signal”- т.е. информация от датчика) - контакт разомкнут когда датчик сухой и замкнут когда датчик мокрый (дождь)

Проверить это несложно:

  • подключите к белому и зеленому провода тестер (мультиметр) в режиме прозвонки или измерения сопротивления
  • подайте на датчик питание (коричневый и черный провода)
  • намочите датчик (должно сработать встроенное реле и замкнуть свои контакты = замкнуть белый и зеленый провода). По писанию - это нормально открытый выход - сухо=разомкнут, мокро = замкнут

Подогрев, скорее всего (информации недостаточно), работает “сам по себе” (автоматически). Через регистры modBus можно задать пороги включения/выключения подогрева (см. пункты 8.3.1 и 8.3.2)

Аналогично можно проверить встроенный подогрев (есть он или его нет и работает ли он “сам”):

  • подключите питание датчика через тестер в режиме измерения тока.
  • охладите датчик (например, путем помещения его в холодильник)
  • в какой-то момент времени, при достижении пороговой температуры, ток потребления датчиком должен ступенчато вырасти (включится подогрев). Поместите датчик в тепло и спустя какое-то время (при достижении верхней пороговой температуры) ток потребления датчика должен вновь уменьшиться (нагреватель отключится)
1 лайк

Да, вы правы, сослепу описался, белый/зеленый. Я понимал, что это сухой контакт, но боялся сказать глупость ) Проверю обязательно, так ли это.
Пошел читать статью для проверки работы modbus. Подобная скорость работы наверное стандартная для многих китайских шедевров (видел статьи по датчикам с такими же характеристиками), к сожалению аналогов у них почти нет, как например у этого датчика. Хотелось бы заранее просто знать при поездке за город, как там с погодой. Просто брать датчик воды, у которого на замыкание дорожки отслоились через сезон, уже не хочется (проходили), а этот вариант прямо заточен под данный функционал. Так что допинать подключение хочется.

Добрый день,
Удалось ли решить вопрос?

Доброго. Вчера пытался подключиться (найти) датчик, чего то с напрыгу не получилось. Сегодня буду вечером еще пробовать.

1 лайк

Доброго дня всем.

Удалось добраться сегодня раньше чем планировал, по итогу собрав скудное понимание, что делаю, и данные из статьи получил вот какой результат:

  1. Подключил датчик только один на RS485-1
  2. Остановил на всякий случай systemctl stop wb-mqtt-serial
  3. Почитал статью, что по дефолту как правило используется r128, и судя по описанию девайса он a1, и запрос можно сделать по функциональному коду 0х03, применил команду
    modbus_client --debug -mrtu -b4800 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r128
    получил ответ
    Opening /dev/ttyRS485-1 at 4800 bauds (N, 8, 2)
    [01][03][00][80][00][01][85][E2]
    Waiting for a confirmation…
    <01><03><02><00><00><44>
    SUCCESS: read 1 of elements:
    Data: 0x0000
    Вроде по итогу, это честный RS485 получается, если я правильно понимаю.

Обрадовавшись, я попробовал для начала поменять его ID на 5 воспользовавшись функциональным кодом из описания девайса 0х06
modbus_client --debug -mrtu -b4800 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r128 5
Получил ответ:
Data to write: 0x5
Opening /dev/ttyRS485-1 at 4800 bauds (N, 8, 2)
[01][06][00][80][00][05][48][21]
Waiting for a confirmation…
<01><06><00><80><00><05><48><21>
SUCCESS: written 1 elements!

Попробовал обратиться к девайсу уже по новому ID 5, но получил отлуп
modbus_client --debug -mrtu -b4800 -pnone -s2 /dev/ttyRS485-1 -a5 -t0x03 -r128
Ответ:
Opening /dev/ttyRS485-1 at 4800 bauds (N, 8, 2)
[05][03][00][80][00][01][84][66]
Waiting for a confirmation…
ERROR Connection timed out: select
ERROR occured!

Попробовал снова обратиться по дефолтному ID1, и он ответил
root@wirenboard-AJ73OF2N:~# modbus_client --debug -mrtu -b4800 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x03 -r128
Opening /dev/ttyRS485-1 at 4800 bauds (N, 8, 2)
[01][03][00][80][00][01][85][E2]
Waiting for a confirmation…
<01><03><02><00><00><44>
SUCCESS: read 1 of elements:
Data: 0x0000

Тут я уже слегка озадачен, почему ID не сменился, хотя он сообщил, что записано?
Подскажите, все таки как правильно воспользоваться моим мануалом, и на что обратить внимание?
Спасибо заранее.

Добрый день!

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

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

modbus_client --debug -mrtu -b4800 -pnone -s2 /dev/ttyRS485-1 -a1 -t6 -r2000 5

Спасибо, сработало. Адрес сменился.
Можете пояснить для бестолковых магию этой строки?
-t6 -r2000 в данном случае

И почему не сработало, если обращаться конкретно по t0x06?
Я же правильно понял это из мануала, или нет?

t6 = функция modBus 6

https://wiki.wirenboard.com/wiki/Modbus-client#Аргументы_командной_строки

“Дословно” эта строка “звучит” так:
В устройство с адресом 1 (a1), запиши число 5 в регистр 2000 (r2000) с помощью функции 6 (t6)

1 лайк

использование параметров командной строки: так, наверное, нагляднее

Теперь, если вы захотите сменить адрес устройства, на пример, на 3-й, то

modbus_client --debug -mrtu -b4800 -pnone -s2 /dev/ttyRS485-1 -a5 -t6 -r2000 3

т.е. -a5 (ваш текущий адрес равен = 5), новое значение в регистр 2000 - 3

Доброго.
Позволю себе немного потупить с вашего разрешения.
Хотелось бы для себя понять, а не тупо копировать команды.

Про общую канву смены ID я понял, спасибо )
Поэтому и спрашивал про -t6 -r2000

В написанной вами команде складывается RAH и RAL это правильная практика для всех устройств? Можно использовать в команде вместо десятичного, 16ричное представление, или правильно всегда переводить?
-t6 если я правильно понял, это перевод 0х06 в десятичное значение?

HSA и LSA это я правильно понимаю весь пул регистров доступных на этом девайсе?
Его можно просканировать и получить все доступные регистры?
А как правильно весь пул сканировать?
Простите за попытки возможно узнать у Вас очевидные вещи…

Если я еще все таки немного понимаю, судя по мануалу Stop bit у девайса 1, и правильней использовать команду смены ID в таком виде:
modbus_client --debug -mrtu -b4800 -pnone -s1 /dev/ttyRS485-1 -a5 -t6 -r2000 3
Интересно, почему девайс проглотил эту команду, даже с ошибочным параметром -s2?
Или он не настолько критичен?

Далее )
Теперь самое интересное, как понять, какие состояния у данного устройства есть.
Я в принципе догадываюсь, что в таблицах в мануале уже указаны значения, но я пока принцип не понял, и для меня эти значения как китайская грамота.
Ну и в принципе, если следовать логике, их два:

  1. Есть дождь (снег) + он автоматически должен подогрев если что включить
  2. Нет дождя (снега)

Так же можно менять значения самонагрева, правильно ли я понимаю логику работы (на примере), что до 15 градусов он включается, когда срабатывает датчик присутствия воды, а после 10 он уже перестает его греть согласно пункту 8.3.1-8.3.2?
Просто тут смущает описание про 25 градусов, наверное китайцы ошиблись в примере и имеется ввиду диапазон 10-15 градусов? Как думаете? Короче запутался )
Это правильно описанные команды?
#Нижний порог срабатывания подогрева
modbus_client --debug -mrtu -b4800 -pnone -s1 /dev/ttyRS485-1 -a5 -t6 -r49 15
#Верхний порог отключения подогрева
modbus_client --debug -mrtu -b4800 -pnone -s1 /dev/ttyRS485-1 -a5 -t6 -r50 10

Если я правильно опять же понимаю, эти значения можно сообщать на лету (в описании шаблона) при необходимости устройству через WB (поправьте меня, если я ошибаюсь).
Боюсь просто накосячить на ровном месте…

Добрый день!

Да, всё верно. modbus_client принимает только десятичные значения, поэтому и адреса регистров, и типы функций нужно передавать в десятичном виде.

Здесь, скорее, сработало везение, а не правило.
Я бы рекомендовал использовать только корректные параметры порта.
Некоторые устройства действительно могут принять запрос даже при неправильных стоп-битах, но рассчитывать на это нельзя — поведение непредсказуемое.

Да, всё верно, как указано в пункте 8.2 документации.
По сути датчик является бинарным:
— значение «1» — есть дождь;
— значение «0» — дождя нет.

Самонагрев, судя по мануалу, включается автоматически при низкой температуре или при попадании осадков.

Спасибо за комментарий.
Так все таки, касаемо нагрева, это пределы нагрева или при какой температуре он включается/выключается? c 25 градусами это ошибка, или это температура до какой он нагревается? Как думаете?
И правильно ли я интерпретировал команды смены температуры?

И там я задал вопрос касаемо HSA и LSA, можете прокомментировать?

Позволю себе поправить коллегу.
modbus_client позволяет в своих параметрах использовать любые допустимые в операционной системе представления значений. И десятичные - тоже. Они не очень удобны, особенно когда операции с битами. Но допустимы.
Для примера, поднимаю биты регистра:

modbus_client --debug -mrtu -b115200 -pnone -s1 /dev/ttyRS485-1 -a0xd -t0x06 -r 0x1400 b011
Data to write: 0x453000
Opening /dev/ttyRS485-1 at 115200 bauds (N, 8, 1)
[0D][06][14][00][30][00][98][F6]
Waiting for a confirmation...
<0D><06><14><00><30><00><98><F6>
SUCCESS: written 1 elements!

Обратите внимание, в запросе:
“-a0xd”=[0D][06][14][00][30][00][98][F6]
-t0x6 = =[0D][06][14][00][30][00][98][F6]
“-r 0x1400” =[0D][06][14][00][30][00][98][F6]
“0b011” =[0D][06][14][00][30][00][98][F6]

Можно. Вопрос удобства в конкретной задаче.

Регистры имеют 16-разрядный адрес. Да, стандарт для всех един.

Нет, это количество запрашиваемых этой операцией регистров. Или значения записвываемые, тут от функции зависит. Modbus RTU не может передать за одну операцию больше 128 регистров.
Про “сканировать” - да, можно. например просто перебором. Пример
Но возможны нюансы. Например устройство возвращает из какого-то регистра значение. Что это за значение - точно можно узнать только из его документации. К тому же из одного и того же регистра в разных режимах может быть получено значение для разных параметров.

До чего приятно общаться с искренне желающим научиться. Респект!

1 лайк

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

modbus_client -mrtu -d8 -s1 -pnone -t3 -a1 -b4800 /dev/ttyRS485-1

максимум 12 регистров за запрос

r2000 - address
r2001 - скорость (0=2400, 1=4800, 2=9600, 3=19200)


/± EH_SensorSnow_v3.pdf/
0 - состояние реле

2 - mode (1,2) == 2 при сработке
3 - temperture 0.1C
4 - нагреватель включен (?)
5 - влажность датчика 0..3000 (?)
6 - сопротивление датчика температуры (?)
7 - 0
8 - 0
9 - 771 (какое-то число, не меняется, в ПДФ-е другое)
10 - 512 (какое-то число)

48 - Темп. отклю нагрева, 0.1С // 35
49 - темп вкл нагрева, 0.1С    // 15
50 - Задержка откл нагрева, сек // 50
51 - задержка вкл-откл реле, сек (0..15) // 1  !!! работает в обе стороны на вкл и откл
52 - порог влажности для вкл. реле // 148

UPD: Пишут, что температуры вкл-откл нагрева должны быть заметно больше 0, ибо в районе 0 логика включения нагревателя начинает глючить. Не проверял пока