Приветствую всех читателей Habr, хочу рассказать вам о своем новом проекте 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.

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

Спасибо за внимание, всем добра!

Комментарии (34)


  1. Zuy
    12.07.2024 02:03

    Скажите это только у меня Zigbee датчики постоянно отваливаются? Сетап у меня на RPi3 + Sonoff Zigbee dongle. Все это под HA крутится. Подключаю, все работает отлично примерно месяц, потом рандомно либо датчик температуры отвалится, либо датчики дверей. Причем иногда они полностью пропадают из HA, а иногда все еще висят там но offline. Я их кучу уже переменял. Причем два датчика у меня лежат в холодильнике и в морозилке, эти работают годами. А точно такие же, в двух метрах от холодильника отваливаются. Батарейки кучу раз по кругу менял. Некоторые датчики с экраном, показывают батарею целой но НА уже не видит его. В сети на небольшой дом еще и 2 репитера есть, но не помогает.


    1. shaggyone
      12.07.2024 02:03

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


    1. blacksoul000
      12.07.2024 02:03

      были похожие проблемы со связкой Sonoff Zigbee dongle + HA (интеграция ZHA). после перехода на интеграцию MQTT проблема ушла


      1. Zuy
        12.07.2024 02:03

        У меня вроде MQTT интеграция. Стоит Zigbee2MQTT и Mosquitto broker.


    1. Soorin
      12.07.2024 02:03

      Иногда помогает перепрошивка донгла на более свежую версию прошивки. Часто помогает смена производителя датчика или версии донгла.

      p.s. Хаотичные отвалы и отказы устройств ZigBee, постоянные проблемы совместимости с донглами и зависания самих донглов - причина, по которой ни для чего критичного устройства ZigBee использовать нельзя/опрометчиво. (Ну и ещё неочевидность плагинов, "квантовая" запутанность настроек, чушь в логах и диагностике... Даже удалить устройство часто по-человечески не получается, только принудительно.)


      1. Lexiff
        12.07.2024 02:03

        Марсоход, обменивающийся картинками с коптером по зигби смотрит на ваш комментарий с легким недоумением


        1. AlexKMK
          12.07.2024 02:03
          +1

          Причем тут проткол, если это меш, а значит каждый рукожопый anusmanus Ляо или Иван имеет не иллюзорную возможность внести свою лепту в повышение кривости сети?

          Чего стоят только датчики качества воздуха от Туи, которые шлют в сеть пакет 2 раза в секунду.


          1. Lexiff
            12.07.2024 02:03

            то есть речь таки о конкретном косожопом использовании, а не о принципиальной неприменимости зигби в критичных решениях?


    1. Iv38
      12.07.2024 02:03
      +1

      Иногда к таким проблемам приводят некорректно работающие зигби-роутеры. Например розетки Aqara до какой-то прошивки могли приводить к таким эффектам для подключенных через них конечных устройств.

      Ну и для Sonoff-донглов имеет значение буковка в конце. От этого зависит какой чип внутри, а от чипа зависит насколько хорошо он поддерживается в z2m. С буквой E (EFR32) всё ещё дела не очень.

      А некоторые датчики просто склонны выпадать. Я так отказался от всех датчиков движения Aqara, которые имеют такую особенность.


      1. Zuy
        12.07.2024 02:03

        У меня розетка от Xiaomi это Aqara? А как-то через HA можно узнать тип этого Sonoff донгла и версию прошивки в нем?


    1. Lexst
      12.07.2024 02:03

      если в городе, то не плохо бы почекать как забиты диапазоны....

      у меня точка доступа видит порядка 400 скрытых сетей в диапазоне 2,4.... это жжжжизнь......

      смена канала помогла домашней zigbee-сетке более мене стабильно заработать

      карта перекрытий zigbee и wifi 2.4:

      https://support.metageek.com/hc/article_attachments/115016951187/Wi-Fi_Channels.png


      1. Zuy
        12.07.2024 02:03

        У меня рядом только 15 сетей 2.4 находит


    1. AlexKMK
      12.07.2024 02:03

      Сделайте авто ребут координатора (zb rst) и z2m раз в несколько часов.

      У меня больше сотни девайсов все работает сравнительно неплохо. Но гораздо хуже чем esphome по wifi.


    1. foxyrus
      12.07.2024 02:03

      Отваливаюшиеся устройства соединены напрямую с донглом или через роутеры?

      Прошивка на донгле последняя?

      Есть ли другие роутеры, например, хаб от акара?


      1. Zuy
        12.07.2024 02:03

        Вот как-то так у меня оно выглядит. Отваливаются датчики открытия дверей и датчики теспературы которые с экранчиками на картинке. Самые надежные датчики что помечены Freezer и Fridge. Но это пока они внутри холодильника, стоит их вынести и оставить на улице в 2-х метрах от холодильника, отвалятся через месяц. А внутир холодильника года два лежали.


        1. foxyrus
          12.07.2024 02:03

          Попробуйте отваливающиеся датчики в Z2M насильно повесить на рипитеры (если конечно они не сильно далеко). У меня такие же датчики отваливались со временем, если они выбирали себе роутер RGB подсветки.

          Hidden text

          Так и не ответили есть ли другие Zigbee роутеры в доме (типа Aqara hub) они могут использоваться тот же канал?

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


          1. AlexKMK
            12.07.2024 02:03

            Разве в этом обычно нет смысла? Сетка сама перестроится со временем.


            1. foxyrus
              12.07.2024 02:03

              Должен выбрать роутер с наиболее сильным сигналом



  1. CitizenOfDreams
    12.07.2024 02:03
    +3

    Мое нелюбимое инженерное решение: батарейки AAA. Цена такая же, как у AA, габариты изделия почти такие же, энергии вдвое меньше.


    1. AlexKMK
      12.07.2024 02:03

      А главное нельзя поставить литиевые 1.5 аккумы на 3400.


  1. gleb_l
    12.07.2024 02:03

    Даже сломанные часы показывают точное время два раза в сутки. Если датчики нужно обложить программными коррекциями со всех сторон, да еще и разными от экземпляра к экземпляру - ну их, может быть? Даже если вы отстроили по эталону - где гарантия долговременной стабильности? Для контроля ввода ХВС подойдут, а вот в качестве дифференциальной диагностики (например до и после фильтра для контроля его засорения) - уже нет.


    1. Berkseo Автор
      12.07.2024 02:03
      +1

      Температура воды это же просто бонус в этом сенсоре. Давление сенсор измеряет точно. Максимальная рзница данных на группе сенсоров составляла 0.05 bar


  1. kvazimoda24
    12.07.2024 02:03
    +1

    Вы выводите давление в барах до третьего знака после запятой и температуру до второго знака. Этот датчик реально измеряет с такой точностью или в младших разрядах шум? Если там шум, то зачем эта фантомная точность?


    1. Berkseo Автор
      12.07.2024 02:03

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


      1. shadrap
        12.07.2024 02:03

        спасибо. интересный датчик,не увидел ссылочку на али или подобное есть?

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


        1. Berkseo Автор
          12.07.2024 02:03

          Извиняюсь за не точность, 3 байта (24бита). Корпус да, нержавейка. Какой там сенсор внутри, тут боюсь не отвечу, наверное даже если датчик вскрыть то это может не гарантировать что в следующем сенсоре будет тоже самое. Отличный пример этого это китайские датчики DHT. Но я покупал эти сенсоры специально у всех продавцов на али и еще несколько локально в России, Давление все измеряют одинаково. Ссылка на лот с сенсором https://aliexpress.ru/item/1005004303637717.html


          1. shadrap
            12.07.2024 02:03
            +1

            спасибо, в любом случае интересный сенсор. Хорошо б эту нержавейку потестить хотяб год - я в своей системе сменил уже много таких "нержавеющих" за 7 лет... Основной трабл - когда система остается без воды - начинается коррозия и потом быстро пробой сенсора . Сейчас стоят https://aliexpress.ru/item/1005004559608411.html . Довольно не плохи , специально оставлял их без воды , признаков коррозии не было, но конечно срок маленький.

            Китайцы заявляют что у них Al2O3-96% ceramic sensor - что есть круто , пром стандарт сенсора для мало агрессивных сред.


            1. AlexKMK
              12.07.2024 02:03

              О как. Спасибо. У меня стоит акваконтролевский контроллер насоса с 4-20 датчиком на полив. Зиму очевидно стоял без воды. Весной датчик послал меня лесом на озон за заменой. Думал не пережил морозы. А оказывается вон что. Надо на зиму маслом их залить что ли.


  1. firehacker
    12.07.2024 02:03

    Как можно было не указать дискретность, цену деления датчика?


  1. serge73
    12.07.2024 02:03

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


    1. AlexKMK
      12.07.2024 02:03

      Долгоиграющий вариант - это modbus и питание от dc.

      Например
      https://sl.aliexpress.ru/p?key=McK4sh7


  1. fLegmatik
    12.07.2024 02:03

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

    Почему PST, а не PTS?


  1. mlnw
    12.07.2024 02:03

    Всё жду нормальных манометров на гидроаккумуляторы, но там под автониппель манометр нужен (или переходник), а тут - банальный дюймовый 1/4", которых и так на алике полно.