Приветствую всех читателей Habr, хочу рассказать вам о своем новом проекте EFEKTA_PST_V1. Это небольшой датчик для измерения давления жидкостей и газов с питанием от двух батареек ААА, работающий по протоколу zigbee. Такие датчики используются в системах отопления для безопасности и обнаружения протечек или необходимости подпитки, простого мониторинга. Так же такие датчики могут отслеживать наполнение накопительных емкостей, работу насосного оборудования и водоподготовки, использоваться в системах автополива для контроля давления и расчета продолжительности полива.
![](https://habrastorage.org/r/w1560/webt/xv/di/fl/xvdiflanbw9xppywdlqmgzvrch8.png)
Сенсор давления, используемый в этом проекте, называется KY-I2C-3V3. Так же его можно найти и под другим названием JHM 1200, но это скорее всего название используемой внутри сенсора микросхемы.
![](https://habrastorage.org/r/w1560/webt/rq/kg/lg/rqkglgavtelmem_4wrxexzqyina.png)
Заинтересовал меня этот сенсор, после того как я ознакомился с его описанием. Была заявлена работа на напряжении 3в, очень низкое потребление, высокая точность, цифровой интерфейс i2c. Так и начался проект длинною в 5 месяцев c перерывами. Несколько стендов, десяток сенсоров, много часов логирования данных в разных температурных условиях, тесты на работающих системах отопления и водоснабжения.
![](https://habrastorage.org/r/w1560/webt/el/t6/6l/elt66lf1hm44k-6ientkubvwl0a.png)
![](https://habrastorage.org/r/w1560/webt/do/r8/gr/dor8gr1u201glkx-mpbpxsveqaw.png)
![](https://habrastorage.org/r/w1560/webt/_v/gg/cc/_vggcc0ctkae7_blqrjqstk1blo.png)
О сенсоре
Информации о сенсоре KY-I2C-3V3 оказалось не так уж и много, я запросил документацию на сенсор у продавцов, все они выслали один и тот же архивчик, с примером кода драйвера для сенсора и даташитом на китайском в формате word. Дополнительный поиск по интернету ничего особо нового не принес.
![](https://habrastorage.org/r/w1560/webt/9n/-t/73/9n-t73kanpn9vfvs6gwwqnqwlze.png)
О датчике
Датчик для работы с данным сенсором я не стал выдумывать новый, взял плату от другого моего проекта TH v2. Подключение сенсора сделал через разъем jack3.5 4p.
![](https://habrastorage.org/r/w1560/webt/ru/hw/ny/ruhwnyfjiwpbuxbazl1yczupohu.png)
Если с измерением давления никаких особых проблем не было, то с температурой все оказалось сложно. Формулы расчета приведенные в даташите оказались абсолютно не рабочие. После того как разобрался с данной проблемой сделав свою формулу расчета, то появилась новая проблема.
При тестах на группе сенсоров оказалось что каждый новый сенсор измеряет температуру по своему. Разброс температур от сенсора к сенсору оказался примерно в диапазоне +15-15°C. Эту проблему получилось решить (надеюсь) смещением прочитанного необработанного значения до входа значения в функцию расчета температуры.
На тему китайской документации очень метко подмечено в статье об этом сенсоре на сайте ab-log.ru
.
Данные передаваемые датчиком:
Конфигурационные свойства:
![](https://habrastorage.org/r/w1560/webt/zc/xk/os/zcxkosrogqwznxo825fitlfbegq.png)
Датчик может передавать напрямую(bind) данные о давлении и температуре на какое то устройства вывода информации
![](https://habrastorage.org/r/w1560/webt/g3/mn/lo/g3mnlorsjjbmpga8gfxdvslyqu4.png)
Ввод в сеть (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, но на виджете все равно это будет выглядеть не информативно, от слова совсем. В яндекс хабе вообще ничего изменить нельзя.
![](https://habrastorage.org/r/w1560/webt/z_/of/2b/z_of2bx6vpp7uluc4u1g82yyz2y.png)
так выглядит датчик в спрутхаб, средний виджет это пересчет в бары
На данный момент датчик отлично работает в Хом Асистенте через zigbee2mqtt, в Хом Асистенте через zha (только основные данные), в спрут хабе (очень не удобно), заявлена поддержка в SLS и Homed в ближайшее время.
![](https://habrastorage.org/r/w1560/webt/pn/cc/i6/pncci6c6xjne7gwbnlyvsgur6dg.png)
![](https://habrastorage.org/r/w1560/webt/zq/ex/yd/zqexydkidyjxftyebfcyaohne4o.png)
![](https://habrastorage.org/r/w1560/webt/ag/ig/ha/agighaow_bvvppdbpvms77i2k94.png)
![](https://habrastorage.org/r/w1560/webt/wy/xv/tq/wyxvtqe7nd9j2pnltpzf7vq82sq.png)
водопровод
![](https://habrastorage.org/r/w1560/webt/l7/1w/b6/l71wb60wwz-d_6up8sz_7kf2uya.png)
отопление
Группа в телеграм DIY DEV. Тут можно пообщаться на тему разработки DIY устройств, рассказать о своих проектах, или поделится интересными открытыми проектами, узнать больше информации о других датчиках Efekta.
Так же приглашаю читателей обсудить это и любые другие устройства, прошивки и прочий софт, работающий с Zigbee, в самое большое русскоязычное сообщество в Телеграм — Вокруг да около Zigbee.
Спасибо за внимание, всем добра!
![](https://habrastorage.org/webt/xv/di/fl/xvdiflanbw9xppywdlqmgzvrch8.png)
Сенсор давления, используемый в этом проекте, называется KY-I2C-3V3. Так же его можно найти и под другим названием JHM 1200, но это скорее всего название используемой внутри сенсора микросхемы.
![](https://habrastorage.org/webt/rq/kg/lg/rqkglgavtelmem_4wrxexzqyina.png)
Заинтересовал меня этот сенсор, после того как я ознакомился с его описанием. Была заявлена работа на напряжении 3в, очень низкое потребление, высокая точность, цифровой интерфейс i2c. Так и начался проект длинною в 5 месяцев c перерывами. Несколько стендов, десяток сенсоров, много часов логирования данных в разных температурных условиях, тесты на работающих системах отопления и водоснабжения.
![](https://habrastorage.org/webt/el/t6/6l/elt66lf1hm44k-6ientkubvwl0a.png)
![](https://habrastorage.org/webt/do/r8/gr/dor8gr1u201glkx-mpbpxsveqaw.png)
![](https://habrastorage.org/webt/_v/gg/cc/_vggcc0ctkae7_blqrjqstk1blo.png)
О сенсоре
Информации о сенсоре KY-I2C-3V3 оказалось не так уж и много, я запросил документацию на сенсор у продавцов, все они выслали один и тот же архивчик, с примером кода драйвера для сенсора и даташитом на китайском в формате word. Дополнительный поиск по интернету ничего особо нового не принес.
![](https://habrastorage.org/webt/9n/-t/73/9n-t73kanpn9vfvs6gwwqnqwlze.png)
- Измеряемое давление 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.
![](https://habrastorage.org/webt/ru/hw/ny/ruhwnyfjiwpbuxbazl1yczupohu.png)
Если с измерением давления никаких особых проблем не было, то с температурой все оказалось сложно. Формулы расчета приведенные в даташите оказались абсолютно не рабочие. После того как разобрался с данной проблемой сделав свою формулу расчета, то появилась новая проблема.
При тестах на группе сенсоров оказалось что каждый новый сенсор измеряет температуру по своему. Разброс температур от сенсора к сенсору оказался примерно в диапазоне +15-15°C. Эту проблему получилось решить (надеюсь) смещением прочитанного необработанного значения до входа значения в функцию расчета температуры.
На тему китайской документации очень метко подмечено в статье об этом сенсоре на сайте ab-log.ru
![](https://habrastorage.org/webt/7f/oz/kr/7fozkr3dmzdjd-tjlnuhiunx0to.png)
Данные передаваемые датчиком:
- 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
![](https://habrastorage.org/webt/zc/xk/os/zcxkosrogqwznxo825fitlfbegq.png)
Датчик может передавать напрямую(bind) данные о давлении и температуре на какое то устройства вывода информации
![](https://habrastorage.org/webt/g3/mn/lo/g3mnlorsjjbmpga8gfxdvslyqu4.png)
Ввод в сеть (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, но на виджете все равно это будет выглядеть не информативно, от слова совсем. В яндекс хабе вообще ничего изменить нельзя.
![](https://habrastorage.org/webt/z_/of/2b/z_of2bx6vpp7uluc4u1g82yyz2y.png)
так выглядит датчик в спрутхаб, средний виджет это пересчет в бары
На данный момент датчик отлично работает в Хом Асистенте через zigbee2mqtt, в Хом Асистенте через zha (только основные данные), в спрут хабе (очень не удобно), заявлена поддержка в SLS и Homed в ближайшее время.
![](https://habrastorage.org/webt/pn/cc/i6/pncci6c6xjne7gwbnlyvsgur6dg.png)
![](https://habrastorage.org/webt/zq/ex/yd/zqexydkidyjxftyebfcyaohne4o.png)
![](https://habrastorage.org/webt/ag/ig/ha/agighaow_bvvppdbpvms77i2k94.png)
![](https://habrastorage.org/webt/wy/xv/tq/wyxvtqe7nd9j2pnltpzf7vq82sq.png)
водопровод
![](https://habrastorage.org/webt/l7/1w/b6/l71wb60wwz-d_6up8sz_7kf2uya.png)
отопление
Группа в телеграм DIY DEV. Тут можно пообщаться на тему разработки DIY устройств, рассказать о своих проектах, или поделится интересными открытыми проектами, узнать больше информации о других датчиках Efekta.
Так же приглашаю читателей обсудить это и любые другие устройства, прошивки и прочий софт, работающий с Zigbee, в самое большое русскоязычное сообщество в Телеграм — Вокруг да около Zigbee.
Спасибо за внимание, всем добра!