Подключение датчика влажности земли

Добрый день! Пытаюсь подключить датчик влажности земли по RS-485, но не имею достаточно знаний, как его завести в WB. Родные модули залетели без проблем, а вот со сторонним устройством начались проблемы. Все данные по датчику, которые смог найти:

скорость передачи 4800 бит/с, стартовый бит, 8 бит, без контроля чётности, 1 стоповый бит. Адрес действительно 0х01. Влажность в регистре 0х00 (х10), температура в регистре 0х01 (х10) Работает от 5в и от 25в.

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

Добрый день!

А сложности с физическим подключением или с настройкой в контроллере?
Смотрите, если настройки коммуникационных параметров датчика поменять не получится, то датчик надо подключить на отдельный порт (чтобы не тормозить остальные устройства).
Если 24 В питания на датчик по документации можно подать, то можно взять прямо с Vout контроллера (он запитан от 24 В у вас?). С питанием важно не ошибиться!
Там отдельные линии питания от 5 вольт и от 25 вольт? Или это диапазон допустимых значений, от пяти до двадцати пяти?

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

В качестве образца, посомтрел, можно будет использовать шаблон для IVTM-7M-3 с минимальными правками (на контроллере он находится в файле /usr/share/wb-mqtt-serial/templates/config-ivtm-7m-3.json).

А как датчик называется? С неизвестными устройствами с Али бывают, конечно, сюрпризы, когда протокол RS485 реализуется упрощенно и не соответствуют стандартам. Но, конечно, только экспериментальным путем можно будет понять, заработает или нет.

Благодарю за быстрый ответ!
Датчик ноунейм совсем:

https://aliexpress.ru/item/1005004013362017.html?spm=a2g2w.orderlist.0.0.87794aa6zJhYXt&sku_id=12000027740296415

Кинул его на отдельный порт и прописал значения и выбрал просто датчик из списка, чтобы хотя бы проверить живой он или нет. Он отобразился и меняет показания при воздействии на него. Теперь вопрос заключается в том, как выводить именно правильные значения влажности и температуры

Поменял в настройках устройство со скрина на датчик IVTM-7M-3, теперь есть два показателя, но красным цветом, то есть не заработал.

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

Отлично, физически вам удалось его подключить, это уже полдела!
Готового шаблона для него, скорее всегон нет, поэтому я предложил написать шаблон по нашей документации.

Теперь надо понять, какие значения возвращает в регистрах датчик. Я в ответе выше привел ссылку на документацию к modbus_client: прочтите с ее помощью содержимое регистров температуры и влажности и покажите тут, что вы получили – исходя из результатов можно будт делать предположение, в каком формате данные передаются и, соостветственно, потом вы сможете правильно сделать шаблон.

В общем я нашел подобную задачу в другом вопросе из форума

Попытался повторить алгоритм действий, в putty, но поменяв на свой адрес 0х01.

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

этот же запрос через командную строку. mqtt заранее отключил, как рекомендовалось в настройках.

Ко второму дню прочитал значения регистров

Opening /dev/ttyS4 at 4800 bauds (N, 8, 1)
[01][03][00][00][00][02][C4][0B]
Waiting for a confirmation…
<01><03><04><02><00><22>
SUCCESS: read 2 of elements:
** Data: 0x02a1 0x00e4**

Итоговые показания, если верить расшифровке нейросети. :

*** Влажность: 67.3%**
*** Температура: 22.8°C**

Установил WinSCP, загрузил json файл в указанную директорию
{
** “device”: {**
** “device_type”: “modbus_rtu”,**
** “enabled”: true,**
** “slave_id”: 1,**
** “path”: “/dev/ttyS4”,**
** “baudrate”: 4800,**
** “parity”: “N”,**
** “data_bits”: 8,**
** “stop_bits”: 1,**
** “poll_interval”: 30**
** },**
** “channels”: [**
** {**
** “name”: “Temperature”,**
** “type”: “temperature”,**
** “enabled”: true,**
** “address”: 1,**
** “format”: “s16”,**
** “scale”: 0.1,**
** “order”: “be”**
** },**
** {**
** “name”: “Humidity”,**
** “type”: “rel_humidity”,**
** “enabled”: true,**
** “address”: 0,**
** “format”: “s16”,**
** “scale”: 0.1,**
** “order”: “be”**
** }**
** ]**
}

Теперь, как я понял, мне нужно добавить правило:
{
** “device_type”: “soil_sensor”,**
** “group”: “g-climate-sensor”,**
** “device”: {**
** “name”: “Датчик почвы”,**
** “id”: “soil_sensor”,**
** “protocol”: “modbus”,**
** “response_timeout_ms”: 300,**
** “frame_timeout_ms”: 0,**
** “channels”: [**
** {**
** “name”: “Temperature”,**
** “reg_type”: “holding”,**
** “address”: 1,**
** “format”: “s16”,**
** “scale”: 0.1,**
** “type”: “temperature”,**
** “order”: “be”**
** },**
** {**
** “name”: “Humidity”,**
** “reg_type”: “holding”,**
** “address”: 0,**
** “format”: “s16”,**
** “scale”: 0.1,**
** “type”: “rel_humidity”,**
** “order”: “be”**
** }**
** ]**
** }**
}

Но в правиле находит ошибку, а новый шаблон, что я загрузил, не вижу тоже.

Что-то не совсем так: в шаблоне точно не должно быть настроек порта (это в том, что у вас названо “json файл”, вот этого не должно "path": "/dev/ttyS4" и всего, что связано с настройками порта). По какому пути лежит этот (какой) файл? Возможно, его надо будет удалить.

Лучше действовать прямо как в документе написано, на который я ссылался.
Как и куда (в папку /etc/wb-mqtt-serial.conf.d/templates) загружать, там описано в разделе " Загрузка шаблона на контроллер".

То, что теперь очень похоже на шаблон, называется у вас “правило”. Вот его надо исправить и положить в папку /etc/wb-mqtt-serial.conf.d/templates.
"order": "be" не нужен, нужно добавить "scale": 0.1 (делим на десять), поскольку
0x02A1 = 673, а не 67.3 и 0x00E4 = 228, а не 22.8
Поскольку вляжность не бывает отрицательной, то тип регистра влажности должен иметь
"format": "u16",то есть “unsigned”.

Удалил и все начал заново. Я не понял, что шаблон и правило - это разные вещи
В соответствии с указаниями сделал шаблон

и положил его в соответствующую директорию

Далее сделал правило:

{
“device_type”: “soil_sensor”,
“group”: “g-climate-sensor”,
“device”: {
“name”: “Датчик почвы”,
“id”: “soil_sensor”,
“protocol”: “modbus”,
“channels”: [
{
“name”: “Temperature”,
“reg_type”: “holding”,
“address”: 1,
“format”: “s16”,
“scale”: 0.1,
“type”: “temperature”
},
{
“name”: “Humidity”,
“reg_type”: “holding”,
“address”: 0,
“format”: “u16”,
“scale”: 0.1,
“type”: “rel_humidity”
}
]
}
}

Сохраняю его в Правила через веб интерфейс и у меня редактор ругается на ошибки в синтаксисе.

Смотрите: вам сейчас – для коммуникации с датчиком – нужен только шаблон, правила не нужны. Правила могут быть нужны потом, для обработки полученных значений.

Шаблон устройства вы, на первый взгляд, верно описали в конфигурационном файле, но сохранили не там. Вы сохранили его как правило в файл rules.js, то есть в наборе правил для движка правил.

То, что сейчас у вас в файле rules.js, должно быть в файле soil_sensor.conf, надо заменить. То, что сейчас в soil_sensor.conf, можно просто удалить.

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

Я вот очень-очень рекомендую нашу документацию и очень-очень не рекомендую полагаться на ИИ! Он часто хорошо отвечает на конкретные вопросы, связанные с нашим контроллером, но галлюцинации никто не отменял).

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


Ура! Я победил эту штуку. Благодарю за участие!

2 лайка

Ура! Ну, мы тут как раз для того, чтобы помогать!
А что в итоге победило проблему?
Скажите, а вы могли бы показать фотографию устройства, точное (насколько можно) название и приаттачить в виде файла итоговый шаблон – это бы помогло всем, кто пойдет по вашему пути!

Здравствуйте! Хотелось бы начать по порядку и ответить чуть подробнее, может, это в какой то степени облегчит жизнь таким же начинающим, как и я.

  1. При прочтении вашей статьи Утилита «modbus_client» может возникнуть путаница в том, что вы рекомендуете писать опрос регистров по команде modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a178 -t0x03 -r128 , хотя опрос регистров надо делать через пробелы, то есть modbus_client --debug -m rtu -b 9600 -p none -s 2 /dev/ttyRS485-1 -a 178 -t 0x03 -r 128

В моем случае это был адрес modbus-client --debug -m rtu -t 0x03 -0 -r 0 -c 2 -a 1 -b 4800 -p none -s 1 /dev/ttyS4

  1. Так же замечу, что в инструкции прописан адрес /dev/ttyRS485-2 (я заменил только номер порта), а по факту он называется /dev/ttyS4
    Достаточно долго тоже с этим провозился, так как по указанному порту регистры не считывались
  2. Оказывается ПРАВИЛО и ШАБЛОН - это не одно и то же :smiley: :smiley: :smiley:
  3. Создание шаблона мне удалось при помощи нейросетки: нужно ей скормить считанные регистры с адресами и какой нибудь из шаблонов схожего по принципам устройства.
  4. Создав шаблон и загрузив его в нужную директорию /etc/wb-mqtt-serial.conf.d/templates не произойдет ровным счетом ничего. И не появится в вываливающемся списке устройств добавленное устройство. Оказалось, прогулявшись по форуму, что я не один был в своих ожиданиях. Надо выбирать в списке Устройство с протоколом Modbus и уже там вводить параметры устройства: адреса показателей и так далее.
  5. Кстати говоря /etc/wb-mqtt-serial.conf.d/templates не полный адрес, полный /mnt/data/etc/wb-mqtt-serial.conf.d/templates По моему у меня с этим тоже возникли проблемы в работе через Putty. Вообще, что касается переносов файлов на контроллер, то лучше это делать через WinSCP, а не через команды в консоли.
  6. Сам шаблон теперь выглядит так
    soil_sensor.conf (771 байт)
  7. Ссылка на датчик почвы https://aliexpress.ru/item/1005004013362017.html?spm=a2g2w.orderdetail.0.0.2e024aa6wNMPjG&sku_id=12000027740296415&_ga=2.55389739.1422888860.1758135829-1427012877.1754595965

Вроде Все!)) Решил мою проблему пункт номер 5 :smiley: Отдаю себе отчет, что мои поиски и открытия в полной мере дилетантские, но и повторюсь, что мои проблемы были похожи на проблемы формучан, а значит, делаю вывод, что путь познания примерно у всех одинаков на начальном этапе, так что буду рад, если это кому нибудь поможет. Техподдержке большая благодарность за быстрые ответы!

1 лайк

Огромное спасибо за такое развернутое описание!
И мы тоже для себя тут найдем, что-то, что поможет улучшить нашу документацию.
Удачи вам в ваших проектах! Обращайтесь – всегда готовы помочь!

1 лайк

Добрый день! Сегодня, продолжая эксперименты с подключением сторонних устройств по шине RS485, подключил еще один датчик влажности воздуха и температуры. Не загружая никаких шаблонов просто настроил все характеристики через веб-интерфейс и все заработало и отобразилось во вкладке Устройства. Отсюда начинаю подозревать, что все мои пляски с бубном с созданием шаблона были бессмысленны. Отсюда вопрос теперь, а зачем вообще тогда шаблоны? Для более сложных устройств? Но так и кучу каналов вроде можно добавить так же через веб интерфейс. К полноте картины, созданный мной шаблон soil_sensor я нигде в списках и не увидел, после того как закинул его в требуемую директорию из переписки выше.

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

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