Счетчик импульсов Zigbee

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

Существует множество вариантов таких интерфейсов, как фабричных так и DIY. Очень интересный проект Waterius в котором реализована работа с различными типами устройств и передачей данных через WiFi. Часть этого устройства ответственного за подсчет импульсов я использовал для своего проекта. Устройство имеет два канала для счетчиков и канал для датчика протечки, предназначено для работы в сети zigbee, питается от двух элементов ААА.

Для подсчета импульсов применен микроконтроллер attiny85V (обратите внимание на индекс «V», эта модификация работает от 1,8 вольт). Работа возможна как со счетчиками с «сухими контактами», так и со счетчиками с интерфейсом НАМУР. Датчик протечки в виде двух контактов можно подключить к соответствующему разъему на плате, в прошивке реализован биндинг на это событие, т.е. можно напрямую управлять реле/приводом. За zigbee часть отвечает проверенный модуль E18-MS1-PCB.

На плате предусмотрено место для установки сенсоров DS18B20, BME280 и SHT30. Соответственно если не распаивать часть схемы отвечающую за подсчет импульсов, то плату можно так же использовать например как уличный термометр. Есть возможность использовать держатели ААА батарей с различной полярностью, для этого на плате есть перемычки, которые надо распаять в соответствии с имеющейся у вас моделью.

Плата разработана в EasyEDA и заказана в JLCPCB

Сборка не должна вызвать затруднений, после окончания пайки обязательно тщательно промыть плату, желательно в УЗ ванне. В качестве разъемов можно использовать не только зажимные, но и винтовые клеммы с шагом 2,54мм. или разъемы типа JST

Устройство в режиме счета и спящем модуле zigbee потребляет всего 7 мка.

Прошивку для устройства написал @aggsoft, автор конфигуратора PTVO. Загрузить прошивку в attiny85V можно различными способами, через arduino, USBasp или Pickit. Для этого на плате выведен интерфейс, прошивать с установленными элементами питания.

Правильно собранное устройство после регистрации в сети готово  к эксплуатации. В SLS Gateway стройство выглядит так

Счетчикам можно прописать начальное значение вписав его в поле «Value», так же можно выставить интервал получения данных, выставляется в минутах. Так как модуль zigbee постоянно находится в глубоком сне, после изменения данных в течении 3 секунд его необходимо разбудить с помощью сервисной кнопки, чтобы он получил измененные значения.

В zigbee2mqtt устройство так же поддерживается через внешний конвертер, начальные значения счетчиков можно отправлять через MQTT в топик …./set/l5. Положительное значение изменит состояние счетчика, отрицательное изменит интервал отправки данных.Для изготовления корпуса устройства использовал набор сантехнических изделийВ качестве основы используется муфта для 32мм трубы.Корпус получился дешевым, герметичным и удобным для монтажа прямо на трубы в месте установки счетчиков.

Для желающих повторить, все необходимые файлы в архиве.

Устройство можно обсудить в профильном чате zigbee в телеграм.

Запись опубликована в рубрике handmade, Железо с метками EasyEDA, zigbee, Дом, Самоделка, Электроника. Добавьте в закладки постоянную ссылку.

101 комментарий на «Счетчик импульсов Zigbee»

  1. Павел Валерьевич Шувалов говорит:

    круто как всегда!

  2. Павел говорит:

    Круто! А устройство с внешним питанием можете сделать? 🙂 Не хочется о батарейках думать.

  3. Александр Серьга говорит:

    А реализацию такой платы не планируете? Какова ее примерная стоимость?

    • Jager говорит:

      Я не собираю на продажу ничего. Но есть люди которые собирают и продают устройства с этого сайта, обитают они здесь https://t.me/zigberu

  4. Иван говорит:

    Отлично! Думаю многие ждали. Возможно ли не отправлять ZigBee модуль в сон , а держать на связи, при условии использования внешнего источника питания? Или сразу передавать данные при изменении значения счётчика ?

    • Jager говорит:

      Вам нужно попробовать собрать самому прошивку из PTVO с нужными вам параметрами.

  5. Петр говорит:

    Как, простите, файл «attiny85_19.hex» прошить в Arduino IDE?

    • Jager говорит:

      Его надо прошивать в attiny, arduino ide один из инструментов для этого.

      • Петр говорит:

        Вы, наверное не поняли вопрос. В среде ардуино конечно же можно написать скетч и залить в Attiny, но .hex файл она не воспринимает. Для этого нужны другие программы. Мне кажется, что фразу про ардуино пока не выложен скетч нужно убрать из текста.

        • Jager говорит:

          Там самое главное как из ардуино сделать isp программатор. Хорошо, что бы было понятнее я обновил линк с инструкцией для ардуино.

  6. Георгий Ткаченко говорит:

    Очень круто, класс, давно ждали.
    А сделаете адаптер со светодиода на ваш модуль, чтобы считать мерцания счётчиков со светодиодом?

    • Jager говорит:

      Не планировал и не тестировал соответственно.

    • Див говорит:

      С вашего комментария много времени прошло. Пробовали сделать такой адаптер, получилось?

  7. Stanislav говорит:

    А можно выложить исходники прошивки под attiny и сс2530 что-бы при необходимости можно было допилить прошивку?

    • Jager говорит:

      Исходники attiny есть на сайте проекта waterius, прошивка для сс2530 закрытая.

  8. user202 говорит:

    Теперь чтобы собрать устройство еще нужно заплатить 200р за прошивку от PTVO? Или прошивку из архива просто заливать в свое устройство?

    • Jager говорит:

      В статье нет ни слова про «заплатить» и при этом приложена прошивка. Но вы делаете какие то свои выводы…

  9. Vladimir говорит:

    спасибо за отличную работу. А с таким будет работать? http://gazovik33.ru/f/schetchik_grand_16_pasport.pdf

    • Jager говорит:

      Нет, в этом счетчике не «сухой контакт».

      • Vladimir говорит:

        А можете поделиться идеей с точки зрения схематики как лучше такой сигнал превратить в подобие сухого контакта? Может транзистор поставить? Там важно чтобы входное сопротивление было высоким для того чтобы батарейка дольше прожила.

        • Jager говорит:

          Сложно что то сказать, не зная как там у вас в счетчике реализовано.

      • Igor говорит:

        То есть счетчики на базе датчиков Холла никак не получится использовать?

  10. Антон говорит:

    а в Z2mqtt на стиках поддерживается уже устройство?

  11. Андрей говорит:

    Добрый день.
    Где можно взять внешний конвертер для Z2M?

  12. Павел говорит:

    Здравствуйте. Подскажите, пожалуйста, а в чём принципиальное отличие от того устройства (waterius), которое взято за основу? Только в том, что вместо модуля wi-fi используется ZigBee?
    Интересует потому что хочу на квартире, которую сдаю, установить подобный модуль. Там, естественно, нет никаких умных домов. Только сетка wi-fi.

    • Jager говорит:

      В вашем вопросе уже содержится ответ. Если нет сети зигби, приобретайте оригинальный ватериус.

  13. Михаил говорит:

    Добрый день!
    Смотрю прошивки сс2530 и attiny поменялись. Что то добавили?

  14. Alleon говорит:

    Подскажите пожалуйста, если нужно переспарить — перепрошивать заново?

    • Jager говорит:

      Нет. Нажать и удерживать кнопку 10 сек. или спять/подать питание 3 раза с интервалом 2 сек.

  15. Oleg Vin говорит:

    Знаю в чатах уже ведутся разговоры, но пока не знаю точно. Есть ли намерение сделать универсальный модуль cc2530 + attiny или что угодно через uart на батарейках. Чтоб можно было делать свои девайсы и писать прошивку по сбору и обработке данных на arduino ide, а передавать данные через zigbee.

  16. Alleon говорит:

    «Положительное значение изменит состояние счетчика, отрицательное изменит интервал отправки данных». Отрицательное в минутах?
    После выхода из сна, модуль передаст показания, которые были изменены в период неактивности?

    • Jager говорит:
      1. Да, в минутах
      2. Конечно передаст, в противном случае какой смысл в этом устройстве.
  17. Alleon говорит:

    В SLS почему-то не появляются counter_1 и counter_2, хотя в HA в Z2M с внешним конвертером есть «l3» и «l5». Не могу здесь прикрепить скрин.

    • Jager говорит:

      Кнопку нажмите

      • Alleon говорит:

        Нажимал неоднократно. Перепрошил attiny, появились counter_1 и counter_2 в SLS. Но изменить показания не даёт, как в SLS, так и в Z2M. Причем в HA сразу ошибка, а в SLS всплывает надпись о завершении. Но числа не появляются. Два устройства.

  18. Андрей говорит:

    Будет ли работать через ZHA? Или обязательно через Z2mqtt

  19. Alleon говорит:

    Вот такая ошибка постоянно:

    Writing | ################################################## | 100% 3.64s
    avrdude: 4052 bytes of flash written
    avrdude: verifying flash memory against attiny85_19.hex:
    avrdude: load data flash data from input file attiny85_19.hex:
    avrdude: input file attiny85_19.hex auto detected as Intel Hex
    avrdude: input file attiny85_19.hex contains 4052 bytes
    avrdude: reading on-chip flash data:
    Reading | ################################################## | 100% 3.25s
    avrdude: verifying …
    avrdude: verification error, first mismatch at byte 0x0000
    0x00 != 0x1e
    avrdude: verification error; content mismatcha

    • Александр говорит:

      Было такое. Решилось подачей питания не с батареек, а от блока питания 3.3 вольта, но и тогда прошилось не с первого раза. Решил, что связано с несоответствием уровней 3 вольта и 5 вольт ардуино (использовался как isp).

  20. Алексей Ежков говорит:

    Шлю в zigbee2mqtt/cold_water/set/l3 значение 36554, но при этом устанавливается {«battery»:100,»device_l3″:»0A»,»device_l5″:»0A»,»l3″:4294938368,»l5″:0,»last_seen»:»2021-06-10T22:16:43+03:00″,»linkquality»:0,»state_l6″:»OFF»,»voltage»:3100}
    Что это за баг такой?

    • Jager говорит:

      Если собирали сами, то обновите прошивку attiny. Если покупали, то обращайтесь к продавцу.

  21. Павел Гельмер говорит:

    Добрый день! подскажите а будет этот счетчик работать с датчиком расхода жидкости YF-S402B?

    • Jager говорит:

      Нет. В нем датчик Холла, и кроме этого огромное количество импульсов на литр (2800) attiny долго не проживет.

  22. Сергей говорит:

    Скажите пожалуйста! Нет в планах добавить к счетчику 2 внешних температурных датчика для контроля t воды?

  23. Руслан говорит:

    Здравствуйте. При запуске в home assistant zigbe2mqtt выдаёт вот такую ошибку :

    (node:330) UnhandledPromiseRejectionWarning: TypeError: e.battery_voltage is not a function
    (Use node --trace-warnings ... to show where the warning was created)
    (node:330) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
    (node:330) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
    Закомментировал в конвертере вот эту строку

    // e.battery_voltage(),

    zigbee2mqtt запустился и счётчик работает. За что она отвечает ?
    И вот эта строка за что отвечает?
    fz.legacy = ptvo_switch.meta.tuyaThermostatPreset;

    • Ptvo говорит:

      Или у вас старая версия z2m, и там нет такой функции. Или наоборот, новая версия где эту функцию убрали.
      Строка отвечает за совместимость конвертера с очень старыми версиями z2m.

  24. Alexandr Shapenkov говорит:

    Подскажите пожалуйста, в оригинальном waterius’e насколько я понял, attiny регулярно просыпается и смотрит потенциал на входах со счетчиков. Раз в сутки она будит esp, которая запрашивает по uart показания у attiny и шлет их на сервер, потом засыпает снова. Причем этот интервал — раз в сутки, в оригинальном вотериусе не настраивается, кроме изменения прошивки. Если часть с attiny взята из вотериуса без изменений, то как происходит взаимодействие с зигби модулем? Точнее, как настраивается интервал передачи показаний. Зигби модуль сам просыпается и запрашивает показания? Или зигби модуль также будится attitny, тогда это должно происходить раз в сутки.

    • Jager говорит:

      Прошивка attiny была модифицирована для управления интервалом пробуждение модуля zigbee для передачи данных.

      • Андрей говорит:

        А можно исходники прошивки для attiny? Хочу реализовать отправку не совсем по расписанию для реализации кейса определения факта использования воды

        • Jager говорит:

          Насколько мне известно ватериус теперь тоже умеет менять интервал 🙂 смотрите с версии 0.10.1 https://github.com/dontsovcmc/waterius/releases

          • Андрей говорит:

            Это мне известно. Мне как бы не интервал поменять а вообще алгоритм выхода на связь.
            У ватериуса код открыт и я могу поправить как мне нужно, только с ESP это будет жутко неэффективно по потреблению.

            Или вы хотите сказать что протокол обмена тиньки не изменен и прошивка от Ватериуса будет работать со схемой ZigBee? Не верится, т.к. протокол у Ватериуса менялся

          • Jager говорит:

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

  25. Александр говорит:

    Спасибо за девайс!
    Подскажите, будет ли он работать со счётчиком газа СГБМ-1,6Д ?
    Там импульс 15мс

    Коротко описание счётчика:
    В конструкции электронного блока применяется оптрон типа KRC357NT, позволяющий применять дистанционный съем показаний, который выдает импульс не менее 15мс во внешнюю сеть учета на каждые 10 литров прошедшего газа со следующими параметрами:

    - ток внешней цепи оптрона не более 3 мА;
    - напряжение на внешней цепи оптрона не более 60 В.

    • Jager говорит:

      Сложно сказать однозначно. По идее счетчику на входе нужен «сухой контакт», например геркон. С оптроном надо пробовать.

  26. Александр Носков говорит:

    а нет ли у кого печатной платы такой, с радостью прикупил бы, а то у китайцев долго ждать (

  27. Александр говорит:

    Возник странный кейс с Zigbee счетчиком импульсов: он не работает с моими счетчиками воды, хотя Waterius работает. Если я понял, то технически Zigbee счетчик основан на Attiny85V, а оригинальный Waterius на Attiny85-20SU (хотя по доке написано, что «Attiny85V тоже ок»). Подскажите, почему с Waterius может работать, а с модкамовским счетчиком — нет. Импульсы просто не инкрементятся. Может слишком быстрое время импульса, что Attiny85V не успевает посчитать, а Attiny85-20SU успевал? Такое гипотетически возможно? В чем еще может быть дело?

    Подробнее:
    — Сам счетчик импульсов работает. Я вставлял куски проводков в клеммы счетчика, а потом их замыкал вручную — инкремент происходил. Проверял оба входа. Вход протечки так же работает
    — Связь с координатором есть, данные обновляются каждую минуту
    — Провода вставляю так же, как и в Waterius, там похожие клеммы. Еще на всякий случай пробовал сильнее зачищать провода от защиты
    — Воды сливаю достаточно, оставлял счетчик подключенным во время приема душа и стирки

    Железо:
    — Стик v4 + zigbee2mqtt + внешний конвертер из статьи
    — Счетчик «Пульс универсальный»

    • Jager говорит:

      В части подсчета импульсов это полный клон ватериуса, как физически так и програмно.

      • Александр говорит:

        Проблема решилась заменой счетчика импульсов. Купил у другого продавца.

  28. Вячеслав говорит:

    Посмотрите http://www.saures.ru, куча фишек и подключение не только счетчиков, еще и прямая интеграция с мосру и мособлеирц

    • Александр Носков говорит:

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

  29. stakly говорит:

    На сайте jlcpcb.com для монтажа элементов трясут CPL файл, не нашел его в архиве. Есть возможность выложить или подсказать как его сгенерить?

  30. Александр говорит:

    Заметил неприятность в прошивке. Если пару дней (у меня 64 часа) не меняются показания (не пользуются водой) или отключены провода счётчиков, то устройство засыпает намертво и кнопка не помогает. Только заново джойнить. У меня sls

    • Jager говорит:

      Меняются показания или нет значения не имеет. По вашему описанию устройство не засыпает, а выпадает из сети. В 99% случаев проблема в плохо отмытой плате, под модулем остается активный флюс. Это уже неоднократно обсуждалось в чате.

  31. Руслан говорит:

    У меня такое происходит тоже иногда.Через две недели бывает, хотя водой пользуемся. Потом заново джойнить приходится, так на связь не выходит и по кнопке тоже.

  32. Александр говорит:

    Вот и у меня проработал 2 месяца без сбоев, уже на радостях второй счётчик заказал.
    Но, на первом счетчике сели батарейки и теперь не передаёт значения + повторно не сопрягается с SLS(прошивка последняя). Джойнить заново пробовал всеми способами: нажал в шлюзе Enable join, и 10 секунд зажимал кнопку, пробовал и снимать/подавать питание 3 раза с интервалом 2 сек и 5 раз кнопку нажимать с интервалом 2 сек. Никак не находит его шлюз SLS. В DEBUG логе на SLS только передача значений от других устройств, визуально не нахожу хоть какого-то намека на попытки сопряжения.

    Подскажите как ещё можно попробовать отладить процесс сопряжения?

    • Jager говорит:

      То что батарейки сели за 2 месяца это не нормально, у меня 4 месяца с интервалом отправки 2 минуты и батарейки все еще 2,8 вольт. Надо отмывать, я свой мыл 3 раза что бы получить 7мка потребления. По поводу джойна в слс, отключите все роутеры в сети и джойн пройдет. Для надежности вытащить/вставить батарейки и сразу нажать кнопку на 10сек.

  33. Андрей говорит:

    Подскажите, прошивка Attiny от ватериуса для этого проекта напрямую не подходит? Надо именно из архива прошивать?

    • Александр говорит:

      Уже в комментариях обсуждали это — прошивка с ватериуса

      • Jager говорит:

        В основе прошивка ватериуса, да. Но оригинальная прошивка от ватериуса работать не будет.

    • Jager говорит:

      Нет, не подходит. Она модифицирована в части работы с зигби модулем.

  34. Andrew говорит:

    У меня газовый счетчик Гранд-4, вроде у него, как пишут, прямой выход от микропроцессора, подскажите, как подключить сей счетчик чтобы батарейку в счетчике не садить.

    • Jager говорит:

      Напрямую никак, можете попробовать через оптрон.

      • Andrew говорит:

        Оптрон не высадит батарейку на счетчике? Там батарейка на 5-6 лет работает.

  35. Андрей говорит:

    А как проверить, что Attiny нормально работает? В z2m залетело нормально с конвертером

  36. Андрей говорит:

    В статье пишите «Соответственно если не распаивать часть схемы отвечающую за подсчет импульсов, то плату можно так же использовать например как уличный термометр». В таком случае, какую прошивку использовать? Просто остались лишние платы, хочу их тоже приспособить.

  37. Дмитрий говорит:

    Вписал в valu начальные значения счетчика, теперь ха выдает вот такое
    Logger: homeassistant.components.mqtt.number
    Source: components/mqtt/number.py:150
    Integration: MQTT (documentation, issues)
    First occurred: 14 октября 2021 г., 12:37:53 (11304 occurrences)
    Last logged: 11:39:39

    Invalid value for number.0x00124b00246de9fb_l3: 69433 (range -65535.0 — 65535.0)
    Invalid value for number.0x00124b00246de9fb_l5: 135797 (range -65535.0 — 65535.0)

    Кто-нибудь сталкивался? Как лечить? z2m и ha крайние актуальные версии.

    • Jager говорит:

      Интересно как к вам попала эта прошивка. Эта проблема (установка значения более 65000) была в самой первой версии которая была заменена в архиве буквально через два дня. Вам необходимо обновить прошивку attiny.

      • Deniz говорит:

        Столкнулся с аналогичной проблемой, не могу установить значение больше 65535. Прошивка тиньки актуальная, из этой статьи.

        Publish ‘set’ ‘l5’ to ‘Vanna’ failed: ‘Error: Write 0x00124b00234d8c66/5 genAnalogInput({«presentValue»:66000}, {«sendWhenActive»:false,»timeout»:10000,»disableResponse»:false,»disableRecovery»:false,»disableDefaultResponse»:true,»direction»:0,»srcEndpoint»:null,»reservedBits»:0,»manufacturerCode»:null,»transactionSequenceNumber»:null,»writeUndiv»:false}) failed (Data request failed with error: ‘MAC transaction expired’ (240))’

        • Alex37 говорит:

          круто! Корпус простое идеальное решение , лучше не придумать.Очень понравилось исполнение устройства . Attiny85v пока в пути… подскажите новичку, будет ли работать с одним датчиком 18b20, показывать температуру(home assistant + usb stick v4+ внешний конвертер ) ? Устройство сбиндилось, но внешний конвертер ещё не разобрался

          • Александр говорит:

            Нет, что-то одно, тут либо счётчик, либо термометр

        • Никита говорит:

          https://github.com/Koenkk/zigbee2mqtt/issues/9012
          в dev версию внесли изменения, такой ошибки больше нет «Invalid value for number.0x00124b00246de9fb_l3: 69433 (range -65535.0 — 65535.0)», теперь другая: «Invalid value for number.toilet_water_counter_l3: 206404 (range 0.0 — 100.0)»

  38. Deniz говорит:

    Солкнулся с ньюансом. Счетчик после сборки не заработал, не считал импульсы, хотя при замыкании пинцетом считал. Оказалось что влиял смотанный в клубок длинный провод от счетчика. Обрезал провод до 20 см и всё нормально заработало. Видимо паразитной ёмкости клубка провода хватало, чтобы стробирующий импульс не успевал подняться. Померял — 200 пикофарад (насколько можно верить тестеру-пробнику).

    Подскажите, как можно во внешнем обработчике zigbee2mqtt разделить передаваемое значение на 100? У меня счетчик дает 100 импульсов на кубометр воды.

  39. Александр говорит:

    Столкнулся с аналогичной проблемой, не могу установить значение больше 65535. И счёт идёт до 65535 дальше останавливается. У кого то получилось выставить значения более 65535 ?

    • Александр говорит:

      разобрался … подтверждаю все работает на отлично!

      • ruslachka говорит:

        Не поделитесь, как разобрались? У меня тоже не устанавливается значение больше 65535. Прошивку тиньки попробовал обновить и з этого поста. В MQTT пишет Дата создания прошивки 2021-05-04. Поделитесь секретом.

        • ruslachka говорит:

          Publish ‘set’ ‘l3’ to ‘0x00124b0022fff898’ failed: ‘Error: Write 0x00124b0022fff898/3 genAnalogInput({«presentValue»:90373}, {«sendWhenActive»:false,»timeout»:10000,»disableResponse»:false,»disableRecovery»:false,»disableDefaultResponse»:true,»direction»:0,»srcEndpoint»:null,»reservedBits»:0,»manufacturerCode»:null,»transactionSequenceNumber»:null,»writeUndiv»:false}) failed (Data request failed with error: ‘Timeout’ (9999))’

  40. Олег говорит:

    Не увидел как установить FUSE при прошивке attiny85

    • Jager говорит:

      Часть отвечающая за подсчет импульсов полностью идентична проекту waterius, ссылка на него есть в статье. Там в WiKi все расписано.

Добавить комментарий