Zigbee датчик давления воды EFEKTA_PST_V1

Приветствую всех читателей Mysku, сегодня хочу рассказать вам о своем новом проекте EFEKTA_PST_V1. Это небольшой датчик для измерения давления жидкостей и газов с питанием от двух батареек ААА, работающий по протоколу zigbee. Такие датчики используются в системах отопления для безопасности и обнаружения протечек или необходимости подпитки, простого мониторинга. Так же такие датчики могут отслеживать наполнение накопительных емкостей, работу насосного оборудования и водоподготовки, использоваться в системах автополива для контроля давления и расчета продолжительности полива.


Сенсор давления, используемый в этом проекте, называется KY-I2C-3V3. Так же его можно найти и под другим названием JHM 1200, но это скорее всего название используемой внутри сенсора микросхемы.


Заинтересовал меня этот сенсор, после того как я ознакомился с его описанием. Была заявлена работа на напряжении 3в, очень низкое потребление, высокая точность, цифровой интерфейс i2c. Так и начался проект длинною в 5 месяцев c перерывами. Несколько стендов, десяток сенсоров, много часов логирования данных в разных температурных условиях, тесты на работающих системах отопления и водоснабжения.





О сенсоре.

Информации о сенсоре KY-I2C-3V3 оказалось не так уж и много, я запросил документацию на сенсор у продавцов, все они выслали один и тот же архивчик, с примером кода драйвера для сенсора и даташитом на китайском в формате word. Дополнительный поиск по интернету ничего особо нового не принес.


  • Измеряемое давление 10 Bar
  • Максимально допустимое давление 15 Bar
  • Разрушающее давление 20 Bar
  • Измеряемая температура 0~60℃ (тестировал на диапазоне -20 +80)
  • Диапазон рабочего напряжения 1.8в-3.6в
  • Рабочая температура -40 +85℃
  • Потребление при измерении 30uA
  • Потребление в режиме ожидания 0.1uA
  • Интерфейс I2C
  • Диаметр резьбы — 1/4"
  • Уровень защиты IP68
  • Максимальное количество измерений 10 000 000


О датчике

Датчик для работы с данным сенсором я не стал выдумывать новый, взял плату от другого моего проекта TH v2. Подключение сенсора сделал через разъем jack3.5 4p.


Если с измерением давления никаких особых проблем не было, то с температурой все оказалось сложно. Формулы расчета приведенные в даташите оказались абсолютно не рабочие. После того как разобрался с данной проблемой сделав свою формулу расчета, то появилась новая проблема.
При тестах на группе сенсоров оказалось что каждый новый сенсор измеряет температуру по своему. Разброс температур от сенсора к сенсору оказался примерно в диапазоне +15-15°C. Эту проблему получилось решить (надеюсь) смещением прочитанного необработанного значения до входа значения в функцию расчета температуры.
На тему китайской документации очень метко подмечено в статье об этом сенсоре на сайте ab-log.ru



Данные передаваемые датчиком:

  • Pressure — измеренное значение в kPa
  • Bar — измеренное значение в Bar (рассчитывается в конвертере на стороне хоста на основе данных в kPa, zigbee2mqtt)
  • Psi — измеренное значение в Psi (рассчитывается в конвертере на стороне хоста на основе данных в kPa, zigbee2mqtt)
  • Temperature — измеренное значение температуры
  • Battery low — флаг разряда батареек
  • Battery — уровень заряда батареек в %
  • Voltage — напряжение на батарейках
  • Uptime — время работы в часах с момента включения или перезагрузки

Конфигурационные свойства:

  • Reading interval — настраиваемый интервал чтения сенсора
  • Tx radio power — настраиваемая мощность радиопередатчика
  • Pool rate on — режим работы датчика в сети с опросом (датчик не нужно будить для приема конфигурационных команд, повышается среднее потребление датчика)
  • Config report enable — включение функционала работы датчика в режиме настраиваемых отчетов, при выключенном функционале датчик отправляет отчеты с заданным интервалом в свойстве Reading interval(работа по таймеру, подходит для систем в которых отсутствует возможность настраивать отчеты, например яндекс zigbee хаб)
  • Comparison previous data — сравнение прочитанных данных с предыдущими на пороги заданные в ПО, и которые нельзя изменить, для давления порог 1 kPa, для температуры 0.25℃ (функционал применяется только при не активированном свойстве Config report enable)
  • Pressure offset — коррекция давления, шаг 1kPa
  • Raw temperature cal — коррекция температуры, вводится в формате raw (не обработанное значение температуры)
  • Raw temperature — не обработанное прочитанное значение температуры
  • Raw temperature recal — скорректированное не обработанное прочитанное значение температуры, на величину записанную в свойство Raw temperature cal


Датчик может передавать напрямую(bind) данные о давлении и температуре на какое то устройства вывода информации



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

Удаление из сети (LEAVE)
Чтобы отключить датчик от сети zigbee, удерживайте нажатой кнопку на датчике около 10 секунд, через 10 секунд загорится светодиод, датчик сотрет всю информацию о сети у себя в памяти, отправит команду о выходе из сети.

Конфигурация отчетов Zigbee2mqtt (Report configuration)
Для конфигурации отчетов необходимо перейти на вкладку «Отчеты», и внести изменение в поля «Мин. интервал отчетов», «Макс. интервал отчетов», «Мин. интервал отчетов при изменении».

Мин. интервал отчетов — время, через которое будет отправлен новый отчет, при условии что новые значение изменилось в любую сторону, на величину указанную в поле «Мин. интервал отчетов при изменении», в сравнении с пердыдушими значениями. Указывется время в секундах.

Макс. интервал отчетов — время, через которое будет отправлен новый отчет, при условии что значения не менялись на величину больщую той которая уазана в поле «Мин. интервал отчетов при изменении». Указывется время в секундах.

Мин. интервал отчетов при изменении — Величина изменения данных. Для каждого типа данных указывается в своем формате, например для температуры 1 отзанчает 0.01°C, так как данные передаются типом интегер16, например температура 22.54°C, будет передана датчиком так 2254.

В процессе разработки также столкнулся с еще одной неожиданной проблемой. Как оказалось в проекте zigbee2mqtt и zha есть только тип атмосферное давление, а вот давление жидкостей и газов нет. В Zigbee Home Automation Profile есть сенсор давления, и мое ПО презентует сенсор как ZCL_HA_DEVICEID_PRESSURE_SENSOR (0х0305 HVAC Device ID), но в системах сенсор определяется только как атмосферное давление, другие варианты не описаны. Подозреваю что это связанно с отсутствием такого рода zigbee датчиков на рынке, и похоже что проблема эта есть у многих систем, например таких, как Спрут Хаб и Яндекс zigbee hab.
В двух последних ввиду низкого уровня доступа через шаблоны (спрутхаб) или полного отсутствия возможности добавить самостоятельно поддержку своего устройства в систему(яндекс Хаб) все еще печальнее. В спрут хабе например нет возможности задать даже единицы измерения отличные от мм рт. ст., но хотя бы можно сделать пересчет данных в шаблоне из мм рт. ст. например в kpa или bar, но на виджете все равно это будет выглядеть не информативно, от слова совсем. В яндекс хабе вообще ничего изменить нельзя.

так выглядит датчик в спрутхаб, средний виджет это пересчет в барытак выглядит датчик в спрутхаб, средний виджет это пересчет в бары

На данный момент датчик отлично работает в Хом Асистенте через zigbee2mqtt, в Хом Асистенте через zha (только основные данные), в спрут хабе (очень не удобно), заявлена поддержка в SLS и Homed в ближайшее время.




водопровод

отопление

Группа в телеграм DIY DEV. Тут можно пообщаться на тему разработки DIY устройств, рассказать о своих проектах, или поделится интересными открытыми проектами, узнать больше информации о других датчиках Efekta.

Спасибо за внимание, всем добра!
Добавить в избранное +51 +76
+
avatar
0
Информация о температуре используется для термокомпенсации канала измерения давления.
+
avatar
+1
Что то не нашел датчик, есть на него ссылка?
+
avatar
+9
Титанический труд. Ловите +.

Не тестировали при каком давлении происходит разрушение датчика и его протечка?
+
avatar
  • berk
  • 13 июля 2024, 11:30
+1
Не тестировал, страшно)). В документации пишут что 2Х от максимального.
+
avatar
+1
Страшно не тестировать, страшно ставить не протестированный. В МКД это означает реальный риск залить десяток-другой квартир, а в своем доме — остаться зимой без отопления.
Цена и того и другого риска имхо превышает разницу между китайским датчиком и брендовым.
+
avatar
+1
я извиняюсь, но в каком частном доме вы видели давления >10 бар в системе водоснабжения или отопления? и то и другое 2-3 бар в норме. а если у вас оно больше 15, то тут уже не за датчик надо беспокоиться.
+
avatar
0
Проблема в том, что у китайского датчика скорее всего «китайские бары», и потечет ли он при 20, или всего при 2 — заранее вы знать не можете.

Тот же Данфосс берем, и видим у датчика на 6 бар — предельное статическое давление 1500, разрушающее 2000. Вот 300-кратный запас по разрушению — вызывает определенное доверие. А 2-кратный (и то, заявленный безымянными китайцами)… это такое… стремное )
+
avatar
0
так у этого датчика и у данфоса несколько разная целевая аудитория. так ДУК в тепловой узел МКД безродный китайский датчик и не будет ставить. в то же время у меня в частном доме вполне себе работает аналогичный — на 3 бар не течет и показывает уж точно не хуже стрелочного. так что почему бы не использовать?
+
avatar
0
Потому что когда он прохудится при -30 на улице, да еще при вашем отсутствии дома, цена сюрприза запросто кратно превысит разницу в цене между китайцем и тем же данфоссом.

Летом в управление каким-нибудь садовым поливом — вообще не вопрос. Но в инженерные системы дома, даже если это свой дом — откровенно стремно.
+
avatar
0
на прямом впрыске автомобиля, бенЗин, установлен датчик давления в рампе. На пике диагностика показывает 200 бар +\- 1%, ну а так рабочее на холостом 100.
Там крепкий датчик!
+
avatar
+1
Не совсем понятно про плату. Это самопал или хак какого-то заводского китая? Прошивка делалась в конструкторе или прям руками код в IDE?
+
avatar
  • berk
  • 13 июля 2024, 11:32
0
Плата, которую использовал, взял от другого своего проекта температурника. Прошивка писалась руками.
+
avatar
0
взял от другого своего проекта
Окей. А плата от температурника откуда взялась
Прошивка писалась руками.
Сорцы есть посмотреть или секрет фирмы? Интересно как правильно делать режим низкого энергопотребления.
+
avatar
  • ploop
  • 13 июля 2024, 16:04
+1
Ну по его температурному он дал ссылку в посте, а там и гитхаб есть: github.com/smartboxchannel/EFEKTA-TH-v2/tree/main
+
avatar
-1
Да я туда ходил. Там ни кода, ни пояснения про плату. Только конвертор для Z2M
+
avatar
  • berk
  • 13 июля 2024, 16:17
+1
Сорцы есть посмотреть или секрет фирмы? Интересно как правильно делать режим низкого энергопотребления.
Если проект открытый, я это обязательно указываю в статьях. Низкое энергопотребление, тут нужно уточнять о чем вы, если о сенсоре, то он сам в режиме ожидания ничего не потребляет почти, если вы о soc то используется один из режимов сна, с пробуждением по таймеру и прерыванию с пина. Никакого волшебства, все мк так умеют так или иначе.

Окей. А плата от температурника откуда взялась
Сам нарисовал
+
avatar
-1
один из режимов сна, с пробуждением по таймеру и прерыванию с пина
Ага, именно об этом. Хотел поразбираться, но не нашёл примеров кода как с этим работать(да и вообще по программированию зигбишных соков очень мало сиатей). Прерывание сна доступно только по сигналу на ногу или скажем можно зарядить аппаратный таймер раз в минуту? Я блин, что-то я в глаза долблюсь. Собственно в какой-то момент хотел заморочиться и сделать что-то типа «волшебного пальца», т е. модуль, умеющий по запросу отправить управляющий сигнал на какую-то другую железку. Пусть не в онлайне а как таймер дотикает, не суть. Но что-то потыкался и забил.
+
avatar
  • berk
  • 13 июля 2024, 17:22
+2
Я начинал свое знакомство отсюда github.com/sigma7i/zigbee-wiki/wiki/zigbee-firmware-install

github.com/diyruz

Уже поиском по какому ни будь проекту батарейного энда можете найти все что связано с этим дефом github.com/diyruz/flower/blob/04a645101b9411415801fdafb9c8a059c1ae6767/Source/preinclude.h#L60
+
avatar
  • berk
  • 13 июля 2024, 17:26
+1
Прерывание сна доступно только по сигналу на ногу или скажем можно зарядить аппаратный таймер раз в минуту?
И по пину и по таймеру можно, по прерыванию от ножки естественно самый экономичный вариант, но не всегда удобный. Я его вообще пару раз использовал, в проекте связанном с детектированием протечки и то по итогу все равно нужно было и по таймеру, так как отчеты о доступности девайса нужны были.
+
avatar
0
А какая максимально допустимая температура без изменений?
+
avatar
  • berk
  • 13 июля 2024, 11:34
0
я тестировал при +85 примерно, если я правильно понял вопрос.
+
avatar
0
Выше не пробовали? Что будет если его сварить?
Понимаю что звучит бредово, но я хочу снимать показания на теплоузле который в подвале,
а там на магистрали температура по 100 бывает