Китайский датчик жидкости (наполнения) xkc-y25-rs485

С коварным замыслом контролировать наполнение ванны с помощью «умного дома», заказал такой вот бесконтактный датчик воды с поддержкой RS-485. Его предполагается прилепить с внешней стороны резервуара (при условии, что стенки из диэлектрика и толщиной не больше 2 см) — и он по изменению ёмкости будет определять наличие воды за стенкой.

Датчик компактный, имеет индикатор (который тоже показывает, задетектил он воду или нет) и регулятор чувствительности. Что самое парадоксальное — относительно неплохо (для китайца) поддерживает Modbus, и дружит с Wirenboard. Правда, документации в интернете по нему немного, поэтому я поделюсь тем, что удалось собрать.

С некоторым трудом удалось добыть его описание на китайском в виде doc-файла. В принципе, всё необходимое там есть, но нужно переводить. Краткое резюме ниже.

Подключение такое: коричневый провод к +5-24V, синий — земля, чёрный — A, жёлтый — B (они идут в порядке коричневый, жёлтый, синий, чёрный).

По умолчанию девайс работает на 9600 бод, без бита чётности, 1 стоп-бит. Modbus-адрес по умолчанию — 1. Естественно, это не очень удобно, поэтому первым делом адрес стоит поменять.

Устройство имеет 4 holding-регистра (спорный выбор типа регистров, но что с китайцев взять):
01 (только чтение): 1 или 0, в зависимости от того, «видит» датчик воду или нет
02 (только чтение): число от 0 до примерно 5000, это грубо говоря «уровень сигнала» (RSSI) — чем больше в непосредственной близости от датчика проводящего материала, тем выше это значение. Когда превышает 4100, датчик срабатывает, когда падает ниже 3900 — выключается (меняет значение в первом регистре).
03: адрес устройства на шине. По умолчанию 1. Первым делом надо послать команду на перезапись и дальше общаться по новому адресу.
04: baud rate, одно из предустановленных значений, по умолчанию 7 (соответствует 9600 бод). Другие значения: 5 (2400), 6 (4800), 7 (9600), 8 (14400), 9 (19200), 10 (28800), 12 (57600), 13 (115200), 14 (128000), 15 (256000). Значения 1, 2, 3, 4 и 11 не поддерживаются. Говорят, что при отключении питания эта настройка не сохраняется. Я не проверял.

Для Wirenboard я написал шаблон этого устройства — если закинуть его в /usr/share/wb-mqtt-serial/templates/, добавить датчик будет проще простого.

P. S. А дайте доступ к вики? Вижу много вещей, которые можно было бы подправить (битые ссылки, сбивающиеся с русского на английские версии страниц и тому подобное).

3 Likes

Добрый день!

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

Я купил такие, но с открытым коллектором, на бутылке протестировал, на толстой пластиковой бочке еще нет. Фактически тут можно подстраивать RSSI к реальным условиям, это, конечно интересно!

Спасибо!

Пожалуйста, расскажите как перезаписать адрес устройства.

Извините, очень запоздало увидел вопрос.

Про команды Modbus можно почитать в местной Вики, первый же пример там — про перезапись адреса устройства:

modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a0x00 -t0x06 -r0x80 0x02

Только обратите внимание на параметры: у данной железки один стоп-бит, и адрес лежит в регистре 0x03, а не 0x80, поэтому команда будет выглядеть скорее как-то так:

modbus_client --debug -mrtu -pnone -s1 /dev/ttyAPP1 -a0x01 -t0x06 -r0x03 0x02

(тут записывается 0x02 в качестве адреса)

Ещё я не помню, может ли железка принимать бродкасты (-a0x00), поэтому надёжнее посылать на её текущий адрес (если по умолчанию, то -a0x01).

Это не ёмкостной датчик, а ультразвуковой. Подскажите, по итогам работы за полгода, полёт нормальный?

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