Приветствую всех читателей 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.
Спасибо за внимание, всем добра!
Не тестировали при каком давлении происходит разрушение датчика и его протечка?
Цена и того и другого риска имхо превышает разницу между китайским датчиком и брендовым.
Тот же Данфосс берем, и видим у датчика на 6 бар — предельное статическое давление 1500, разрушающее 2000. Вот 300-кратный запас по разрушению — вызывает определенное доверие. А 2-кратный (и то, заявленный безымянными китайцами)… это такое… стремное )
Летом в управление каким-нибудь садовым поливом — вообще не вопрос. Но в инженерные системы дома, даже если это свой дом — откровенно стремно.
Там крепкий датчик!
Сорцы есть посмотреть или секрет фирмы? Интересно как правильно делать режим низкого энергопотребления.
Сам нарисовал
Прерывание сна доступно только по сигналу на ногу или скажем можно зарядить аппаратный таймер раз в минуту? Яблин, что-то я в глаза долблюсь. Собственно в какой-то момент хотел заморочиться и сделать что-то типа «волшебного пальца», т е. модуль, умеющий по запросу отправить управляющий сигнал на какую-то другую железку. Пусть не в онлайне а как таймер дотикает, не суть. Но что-то потыкался и забил.github.com/diyruz
Уже поиском по какому ни будь проекту батарейного энда можете найти все что связано с этим дефом github.com/diyruz/flower/blob/04a645101b9411415801fdafb9c8a059c1ae6767/Source/preinclude.h#L60
Понимаю что звучит бредово, но я хочу снимать показания на теплоузле который в подвале,
а там на магистрали температура по 100 бывает