Как стать автором
Обновить

ESP32 снимает показания водяных счетчиков и сам передает их «куда надо»

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров35K
Всего голосов 28: ↑26 и ↓2+24
Комментарии86

Комментарии 86

Счетчики, конечно, должны быть оснащены герконами, импульсы которых считывает контроллер.

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

Счетчики с герконом от 700 рублей, камера стоит дороже.

ESP32 с камерой стоит дешевле, с доставкой из РФ

https://www.ozon.ru/product/esp32-cam-397701112/

Примерно столько же будет стоить только пломбировка счётчика. Одного. Это если менять безгерконный.

Если ставить в дополнение к "официальноиу', то во-первых не везде есть место его впихнуть, во-вторых - для целей автоматической передачи показаний его его показаниям на 100℅ доверять нельзя

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

Счётчики стоят в темном месте. Придётся ещё освещение счётчиков проделывать. Причём, желательно, не включённое постоянно, а только в момент считывания.

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

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

Если рядом поработает сварщик, могут как-раз из-за помех придти показания в 100 000 раз больше. Или при обрыве провода и плохом контакте, показания начнут отставать. Распознавание цифр простейшая задача и это реальные показания, а с геркона идет разность, нужно постоянно сверять абсолютные показания иначе можно на штраф попасть. Изображение с камеры на порядок более релевантная информация с юридической точки зрения.

Эээ какой штраф ? Раньше при съёме показаний просто доначисляли по фактическим цифрам, ведь неизвестно может ты в последние три дня кран не закрывал. Что-то изменилось ?

Да, как-то так. В соседних комментариях пишут что проблема только в случае когда данные вообще не передаются 3 месяца, выставят потребление по нормативу.

Согласен с Вами. У проекта с распознаванием картинки есть и очевидный плюс - работает с любым счетчиком, но и минусы тоже есть, изготовление крепежа в первую очередь.

В отношении ошибки в своем проекте я вставил защиту в виде лимита на разницу показаний в 30 единиц. Перед подачей показаний esp ходит на сайт поставщика, считывает последние учтенные там показания и сравнивает с теми которые собирается передать.

Придётся ещё освещение счётчиков проделывать

Камеры видеонаблюдения почти все со встроенным источником света, ИК светодиоды обычно стоят. Вокруг объектива несколько светодиодов и вся подсветка. Время работы равно выдержке на один кадр, 10 мс примерно. Энергии это не потребует особо.

если распознавание ошибется

С чего ему ошибаться? Просто error выдаст. Это геркон может ошибиться, передать 0 просто.

Например, с того, что цифры в счётчике прокручиваются, а не перескакивают так, что всегда целиком видна вся цифра.

Выше есть ссылка на готовый проект AI-on-the-edge-device. У меня такой около полугода стоит на газовом счетчике. На ESP32-cam получается камера с подсветкой и нейронка для распознавания. Тупо раз в 10 минут фоткает счетчик и складывает показания. Умеет понимать, что произошла ошибка (большая разница с предыдущим показанием, новое показание меньше старого и тп)

Это всё решаемо, задача проще, чем распознование рукописных цифр в тысячи раз. Цифры всегда одинаковые, и нужно всего лишь определить положение цилиндра по одной координате - углу поворота. Хватит части цифры вполне.

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

У меня вот проблема банальнее - чтобы можно было присобачить туда конструкцию на счётчик, надо было по-другому всё проектировать. Счётчики находятся за дверцами, и там расстояние от дверцы до счетчика такое маленькое, что ничего туда особо не засунуть. Варианты "убрать дверцу" или "не закрывать её" - не варианты.

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

Проверяльщики такое одобрят? И как в таком случае освещение сделать? Да и какого размера конструкция будет, чтобы цифры счетчика полностью в кадр камеры попадали? Питание откуда подавать, если рядом 220 В нигде нет?

Не одобрят, возможно готовые счетчики есть такие.

Вот пример небольшого модуля без питания от 220В

https://modkam.ru/2021/04/29/schetchik-impulsov-zigbee/?ysclid=lowk093qwy749664478

Устройство имеет два канала для счетчиков и канал для датчика протечки, предназначено для работы в сети zigbee, питается от двух элементов ААА.

Можно на дверцу изнутри поставить зеркало, а камерой снимать отражение

Еще можно световод приделать :-)

У меня со стрелки показания снимает, кратно литру.

Ватериус. Пользуюсь уже несколько лет...

Я его видел, но хотелось руками что-нибудь смастерить, да и получилось дешевле.

Я на основе ватериуса 32 сделал свою прошивку, работает от 3 пальчиковых батареек уже более полугода при этом раз в 8 часов отдаёт показания на сайт ватериуса, и отдельно ещё в homeassistant.. счётчик реализован с помощью еспишного сопроцессора который работает в спячке...

миленько ардуиненько. вообще в esp32 есть счетчик импульсов pcnt с цифровым фильтром, точнее 8, с любого пина. и есть библиотека-две для работы именно с ним. Для энкодеров - тоже есть

про pcnt не знал, изучу. Спасибо.

я сам на днях "открыл"

Проект прикольный, хотя особо и без новизны. А статья слабенькая. Тут бы всё из Гита выложить и описать. Дополнить картинками. А то как будто начало статьи только :)

Исправлюсь. Это моя первая статья здесь и я по правде не ожидал 4.8 К просмотров и 10 комментариев за первые сутки...

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

  • я заранее пору лет назад поставил себе счетчики с герконами в надежде когда-нибудь сделать автоматизацию (и вот это время пришло:) )

  • нужно изготавливать колпак-крепеж для камеры на каждый счетчик

  • не уверен что в один проект одновременно влезет по памяти и распознавание образов и бот и парсинг json. Это нужно проверить

Про блокирующий wifi и перзагрузку я знаю. Я специально использовал WiFiMulti чтобы esp смог подключиться к одному из доступных маршрутизаторов (у меня их 2 :) ). Кроме того, система посылает сообщение в телеграм при каждом рестарте, так я могу контролировать частые программные сбои и факты отключения питания в доме, и по частоте таких сообщений можно понять, что система требует внимания.

Про малый ресурс энергонезависимой памяти я тоже знаю, обещают 100000 циклов и это примерно на 1000 кубометров, если пользоваться "в лоб". Первая мысль была сделать циклический массив на весь размер памяти, при старте искать максимум и следующие показания писать вслед за текущими по кругу. Так ресурс памяти по ячейкам будет использоваться равномерно и кратно увеличится в целом. Но потом нашел библиотеку preferences, и воспользовался ею, в надежде что там реализованы подобные механизмы (честно не проверил, но обещаю это сделать)

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

При отключении электричества

При отключении электричества можно и писать в память последние данные. Хотя ниже в комментариях уже подробно расписали.

Про ресурс флешки. Я применяю такой подход: в пустой флешке (ну или в её части заранее выделенной под хранение) изначально все байты 0xFF. Далее, структура хранимых данных имеет фиксированный размер (кратно, раз в сто меньше выделенной области) и всегда в конце имеет дополнительный crc32 и 0x00. Читаем флешку с конца, встречаем 0x00, вычитываем фиксированную длину, сверяем crc и радуемся. Пишем во флешку сразу после первого с конца 0x00. Если писать новые данные некуда, то только тогда стираем весь выделенный объём (туда попадают 0xFF) и пишем с нуля. Так можно кратно увеличить время жизни флешки.

В данном случае можно и проще, счетчики могут только увеличиваться, значит можно писать в кольцевой буфер или даже в случайную позицию из N а при рестарте просто искать максимум.

Кольцевой буфер норм, только вот нужно помнить, что во флеш можно только сбрасывать биты но не устанавливать: например если байт по какому-то адресу изначально был 0xFF, то туда можно записать число от 0 до 254, (255 это ничего не менять), а вот если число было 0x0F, то числа больше 15 туда никак не запихаешь. А значит, при переходе через 0 нужно не забыть стереть область памяти. Искать максимальное в таком случае не очень умно, зачем, если последнее не 0xFF значение это и будет искомое ( да, нужно не забыть про выравнивание). В случайную позицию писать вот вообще не надо. Только если очень хочется и есть куча свободного времени))

Можно обратное число записывать, и в этом случае наоборот искать минимальное

Ещё вариант: первые 2 байта это стартовое показания. А дальше занулять ПОБИТНО на каждое срабатывание. Причина: ограничение на количество циклов стирание-запись. А писать в одно и тоже место без тирания можно сколько угодно

Нельзя писать в одно и то же место без стирания. Писать именно во флеш можно только нуль. Единица в ячейку флеш попадает только при стирании.

Думаю, что@kostprof21имел ввиду, что каждый нулевой бит области соотвествует единичному инкременту счетчика. Т. е. если в байте уже записано, например, 0F то туда можно записать 07, потом 03, потом 01 и 00. На мой взгляд хорошоя идея. Но я еще решил поэкспериментировать с ботом и использовать его как энергонезависимое хранилище. Бот к сожалению не может вычитывать историю чата, но у бота есть description до 250 байт и short description до 120 и это для каждого из 189 языков. Суммарно почти 50 кБайт.

проверил на китайском аналоге stm32f4 - отказался писать побитно. Хм... в голове засело, что на каком-то чипе работал такой сценарий. Вывод: надо тестить.

В текущей версии проекта, я выделил большую часть незадействованной flash памяти ( offset: 0x300000 size: 0xF0000) под 3 кольцевых буфера. Размер каждого буфера выбрал пропорционально предполагаемой частоте записи в него. Думаю, что так мне ресурса flash хватит надолго.

Реализованы эти буферы в виде отдельного класса

https://github.com/Ar4w/wc_server/blob/main/saver.h

Но чтобы его использовать, в корень проекта нужно положить файл default.csv

Интересно, как и любой проект по забиванию гвоздей микроскопом.

Но

Не все счетчики оснащены герконами, и не все оснащенные герконами счетчики сертифицированы и проходят поверку.

Не везде счетчики находятся в уютном месте дома. В украинских частных домах, с №-ного года есть предписание ставить счетчики в колодцах. У меня например во дворе находится, на глубине двух метров. В дом переносить запретили.

Две успешных итерации - слишком мало чтобы судить об успешности проекта. Если я правильно понял, то вы сохраняете во флешку каждый импульс. Если вы пользуетесь популярным счетчиком, то это как правило 10 литров \ импульс, то есть каждый кубометр стоит 100 записей. Если вы пользуетесь обыкновенной ESP32, то скорее всего ее энергонезависимая память начнет деградировать уже после сотни кубометров. Обычно в таких решениях ставят батарейку, а в ПЗУ шку записывают при пропадании питания. Плюс ко всему, при пропадании питания, вода все равно будет течь, так что решение лучше переделать.

Судя по вашему коду, вы наступили на мои грабли, а именно сделали функцию подключения к вафле, блокирующей - часть функций выполняется после подключения. А это значит что вашу систему уронит как поломавшийся\потерявший сеть роутер, так и школьник с китайской глушилкой за 10 баксов, действующей в радиусе 50 метров. Еще и ребут каждые 15 с.

За возможность корректировки показаний вручную - плюсек.

Да и вообще хотелось бы более грязных подробностей в статье, а не просто "привет, вот ссылка на мой гитхаб".

Спасибо за аргументированную критику. Статью доработаю.

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

вашу систему уронит как поломавшийся\потерявший сеть роутер, так и школьник с китайской глушилкой за 10 баксов

А хакер с топором не только уронит, но и сломает!

Ну, хакер с топором будет нести уголовную ответственность, а вот школьника с китайской глушилкой - просто не найдут.

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

Да и от вафли я избавился в пользу обычного RF \ 315MHz.

В моем случае без wifi не обойтись. Ведь именно он обеспечивает нкжную мне автонлмность и связь устройства с внешним миром. А за качеством wifi в своем скворечнике я периодически посматриваю. У меня по работе и оборудование для этого есть и в целом базовын понимания принципов работы wifi. Школьник с глушилкой конечно всегда возможен) но ведь и этому школьнику самому рано или поздно вайфаем захочется воспользоваться) вот и выключит.

Обычно в таких решениях ставят батарейку,

Конденсатора хватит, 10-20 мс он питание продержит, этого должно хватить для записи.

Ионистор как вариант

Я старался максимально избавиться от любой обвески.

Хватит. Но определить пропадание питания будет сложнее.

Батарейка, ну т.е. аккум типа 18650, может подключаться через копеечный модуль зарядки\разрядки, там кажется даже алертовый светодиод есть, его можно сразу на цифровой вход цеплять.

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

Мне кажется батарейка не только проще, но и эффективнее, и позволит некоторое время работать в блекауте.

Заодно и заставит автора задуматься о энергосбережении, например делать вафельное соединение раз в три часа.

Периодическая активация wifi это идея интересная но тоже иммет свои минусы. В моем случае телеграм бот станет не таким отзывчивым. Но над периодическим отключением wifi я полумаю. Спасибо за идею. Правда это меня больше интересует не с точки зрения энергопотребления, а с точки зрегия загруженности wifi в B диапазоне. Дело в том что fastbot который я использую, общается с сервером телеграм посредством полинга, раз в секуду он делает запросы чтобы проврить наличие новых сообщений.

городить дополнительную схему

Достаточно на вход АЦП подать напряжение питания через делитель. Это с батарейкой добавляется сама батарейка и контроллер питания.

делать вафельное соединение раз в три часа

Это само собой. Следующий этап переход с WiFi на Zigbee.

Нет, не достаточно. И дело не в делителе.

Дело в том, что падение измеряемого напряжения будет синхронно с падением питающего напряжения.

Это вызовет как глюки АЦП из-за падения опорного напряжения, так и мизер времени между определением, что напряжение падает и между реакцией на это. Особенно учитывая авторские "delay(1000);//allow the cpu to switch to other tasks"

Однозначно большое спасибо Вам за проект. Давно хочу реализовать что-то подобное, но все времени не хватает. Теперь будет с чего начать.

Плюс планирую еще с электросчетчика снимать показания.

Да, электричество мне тоже интересно. У меня счетчик стоит совсем умный, у него и оптопорт и PLC модем внутри есть. Он на очереди). Вот тут интересная идея, https://habr.com/ru/companies/samsung/articles/768864 но к сожалению ребята не поделились как сделали дешевый оптопорт ((.

В репозитории определённо не хватает инструкции по компиляции.

Исправлю. Но там я просто arduino ide использую

А зачем в хабах статьи указан хаб "Расширения для браузеров", если в данном материале ничего про них собственно не говорится?

Ошибка. Исправил

Счетчики, конечно, должны быть оснащены герконами, импульсы которых считывает контроллер.

Любая ошибка счета на порту или плановая/внеплановая перезагрузка ESP32 и начинает копиться расхождение счетчика импульсов в ESP с реальными показателями

100% достоверности показаний обеспечить не получится.

А раз так, нужны периодические корректировки показания счетчика в ESP. И сразу пропадает полностью весь смысл такой автоматизации, так как счетчик проще вбивать прямо на сайте )))

И сразу пропадает полностью весь смысл такой автоматизации

Нет, полностью не пропадает. Для дома отличное решение. Вот мне когда лень идти смотреть показания счетчика прибавляю примерный расход за предыдущие месяцы, например 20 кубов воды и 100 кубов газа. И оно примерно совпадает и какое-то отклонение набегает месяца через 3. И так делают многие, подсматривал в одной базе данных платежки абонентов физлиц, и многие из головы пишут круглые цифры, например месяц за месяцем те же 20 и 100 единиц потребления. Им тоже лень смотреть счетчики. И округляют показания до двух нулей в конце, проще считать так.

Если процесс передачи данных хоть немного автоматизируется, вообще хорошо, разница будет мизерной, можно игнорировать. Потребление плюс минус неделя вообще никого не интересует даже теоретически. Пара месяцев тоже не проблема для физлиц. Все равно в показаниях не указывается точное время съема показаний в формате YYDDMM HHMMSS, а это делает их весьма формальными. Днем раньше или позже снял и совсем другие цифры. Как-раз геркон поднимет точность раз в 1000, даже если пропустит пару импульсов.

Вот мне когда лень идти смотреть показания счетчика прибавляю примерный расход за предыдущие месяцы, например 20 кубов воды и 100 кубов газа

Дарю лайфхак: если вы не передадите данные по расходу, управляйка (или кто там вам считает) сама прибавит примерный расход по вашему среднему потреблению. И какое-то осмысленное отклонение там накопится только через год.

Это работает только 3 месяца (в нашей УК так), потом будут по нормативам начислять.

Если процесс передачи данных хоть немного автоматизируется, вообще хорошо, разница будет мизерной, можно игнорировать. Потребление плюс минус неделя вообще никого не интересует даже теоретически. Пара месяцев тоже не проблема для физлиц.

Примерные цифры к учету не имеют никакого отношения. Я и так знаю примерное месячное потребление с точностью до 10%. А корректирующее значение могу раз в год подать. А немного автоматизированный, это как немного беременный )))

Но DIY к целесообразности вообще не имеет отношения. Нравится - творите!

Кстати бот подавальщик показаний нормальная идея.

Отличная, если точно определить, кто будет нести ответственность за подачу неправильных показаний. Причем как в большую, так и меньшую сторону.
Если пользователь, то можно подавать сведения через кого угодно - Телеграм, Алису и даже робата пылесоса )))

А немного автоматизированный, это как немного беременный )))

Тут достаточно много автоматизированный )

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

Тревога на протечку - это совсем другая система. Она должна обнаружить воду на полу и перекрыть краны. И только потом подавать какие то сигналы. К вашему счетчику это не имеет никакого отношения. Так же как пожарная и охранные сигнализации.

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

И часто вы забываете закрыть кран?

Тогда уж на электричество делать. Утюги чаще оставляют включенными. Только вот у утюга потребление прерывистое и его трудно по профилю отличить от нагревателя или электропечи

За 10 лет было несколько случаев. Обрыв трубы, правда до счетчика, за несколько часов 3-4 кубометра вытекло и затопило подвал размером 5*10 метров, воды по колено было. Часто бывает что в унитазах запорная арматура клинит и они постоянно протекать начинают. После отключения воды домашние крутят краны во все стороны и не возвращают в исходное состояние. Потом подают воду и она течет несколько часов.

Утюг можно вычислить. Электропечь имеет 2 нагревателя они мощнее утюга и более инерционны. Утюг включается на 5 секунд раз в минуту, в электродуховка включаются на минуту и 3 минуты она остывает. Но тут конечно ручная настройка нужна. Проще утюг купить который сам отключается.

На самом деле у меня рядом стоит neptun base и я подумываю подключить этот esp к шине датчиков. Брать оттуда питание и ацп детектировать срабатывание датчиков. Так совсем базовый нептун превратится в весьма продвинутый)

Пока эксплуатирую пару месяцев с текущим алгроитмом подсчета импульсов и отклонения пока не выявлены. +- 10л на десятки кубов. Электричесиво за этот период отключали пару раз. Меня такая точность устраивает. За гды эксплуатации погрешность накопится в единицы кубов.

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

А через год управляйка заменит поставит все счетчики с LoRaWAN и будет снимать показания без всяких костылей )))

ZigBee в моде, меш сети всякие )

Только не у ЖКХ
Там в моде LoRaWAN И MB-IOT. А Zigbee из подвала будет долго пробивать сигнал

За Лору вы не волнуйтесь, пока ее двигают такие локомотивы как Р-Телеком, она будет внедряться, даже если технология будет совсем никакая. А технология там довольно продвинутая. Так же как и NB-IOT которую тащат наши сотовые операторы.

У вас вот http, а мне надо фото контролеру в вотсцап отправлять.

Если бы в телеграм то бы без проблем, а так ходи фотай в телеге, обрезай и после корректировки затем в вацап, в котором даже фоторедактора путнего нету, отправляй.

Скажите ему, что вы военный и вам запрещено воцаб.

При замене счётчиков обнаружил подключение каждого из них к коробочке. В коробочке плата с антенной и литиевая батарейка 373. Интересно было бы узнать, оно реально работало или это наследие очередного попила в ЖКХ

@ar4w у вас используются библиотеки FastBot и NTP - от последней можно избавляться. Когда отправляете первое сообщение после перезагрузки устройства, можно получить unix-время этого сообщения (выдает Telegram). Ну, а дальше в FastBot есть удобные инструменты для вытаскивания отдельных часов, минут и тд. Там же есть человекочитаемые ЧЧ:ММ:СС и ДД.ММ.ГГГГ

Не заметил, что в статье это упомянуто

Я просто поставил Saures R1 за 5тр (на авито бываеют и по 3тр), подключение элементарное двумя проводами от каждого счётчика (10 лет болтались почём зря), настройки в ЛК простые. Само отправляет раз в месяц показания мосеирц/мособлеирц, строит графики.

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории