Считывание показаний счетчиков воды с помощью 1-wire и Raspberry Pi

Считывание показаний счетчика воды - подсчет импульсов

В статье описывается:

  • Типы водосчетчиков
  • Принцип работы импульсных выходов на счетчиках
  • Cпособы автоматического получения показаний расхода воды со счетчиков
  • Устройство для считывания показаний с использованием 1-wire
  • Сохранение показаний в базе данных и графическое отображение данных о расходе воды
  • Передача показаний в управляющую компанию (теория)

Введение

В настоящее время широкое распространение получили универсальные квартирные водосчетчики. Если отойти от темы домашней автоматизации, я считаю это очень хорошей тенденцией — ведь ведение учета расхода воды (да и не только воды) достаточно эффективная мера, способствующая сбережению ресурсов. Конечно, в современных Российских реалиях (низкая стоимость воды, электричества, наш менталитет) это звучит весьма странно, но где-то в душе я убежден, что обращать внимание на сбережение ресурсов нужно начинать уже сегодня. А если мыслить не так глобально, то сегодня счетчики, как минимум, позволяют экономить на счетах за коммунальные услуги. Что-то я отвлекся…

Типы бытовых счетчиков воды

Современные счетчики воды, по показаниям которых мы затем оплачиваем счет за ЖКУ, бывают в основном двух видов (с точки зрения домашней автоматизации):

  • Без выходов
  • С импульсным выходом
  • Цифровой выход RS 485 (в рамках этой статьи не рассматриваются)
  • С радиовыходом (в рамках этой статьи не рассматриваются)

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

Рассмотрим подробнее счетчики с импульсным выходом. Общий принцип работы очень прост: датчик отдает один полный импульс при прохождении определенного количества жидкости (зависит от характеристик конкретного счетчика).

Импульсный выход основан на воздействии магнитного поля постоянного магнита на геркон, при котором происходит чередующееся замыкание и размыкание контактов геркона. Геркон формирует пассивный выходной сигнал («сухой контакт»), который может считываться любым счетчиком импульсом.

Задача сводится к подсчету импульсов в единицу времени и умножению их на «цену» одного импульса. Как правило 1 импульс = 10 литров, в некоторых счетчиках это значение равно 1 литру. Какая цена импульса у вашего счетчика можно посмотреть в техническом паспорте. Такая информация иногда бывает на самом счетчике.

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

В моей реализации Умного дома почти все сенсоры подключены к шине 1-wire и счетчики импульсов для учета расхода воды не стали исключением. Я использовал готовое устройство от магазина radioseti — «Модуль счетчик с буферной памятью 2 канала». Как видно из названия, устройство позволит считывать показания с двух счетчиков. Устройство основано на чипе Maxim DS2423 и при наличии определенных умений, не составит труда спаять такое устройство самостоятельно.

1-wire модуль счетчик с буферной памятью 2 канала

Во встроенной памяти устройства есть две целочисленные переменные Counters.A и Counters.B,  в которых хранится количество «подсчитанных» импульсов на каждом входе (горячая и холодная вода). Каждой переменной выделено 32 байта — этого хватит с огромным запасом на много лет, даже при цене импульса в 1 литр.

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

К общей 1-wire шине наше устройство подключается стандартным образом через коннектор типа RG-11 (6p4c): DATA, GND, +12V (в схеме датчика встроен стабилизатор напряжения с 12В).

Счетчики подключаются тоже достаточно просто, но крепление уже «под винт» (советую обзавестись комплектом хороших маленьких отверток, чтобы не повредить разъем устройства). Один разъем общий (GND), в него нужно подключить контакты от обоих счетчиков. И два входных для каждого из счетчиков раздельно.

Подключение счетчиков воды

Стабильность работы, пропуски импульсов и ложные срабатывания

Устройство работает на удивление стабильно. За более чем пол года эксплуатации расхождение «считанных» фактических показаний составило порядка 20 литров на горячую и 40 литров на холодную воду в меньшую сторону. При среднем расходе воды в месяц 4 и 6 кубометров соответственно это всего около 0,1% — не много. Раз в пару лет можно «откорректировать» значения в памяти устройства вручную.

На стабильность работы могут влиять следующие факторы:

  • Качество самих счетчиков воды (в моем случае со счетчиками Valtec повезло)
  • Наличие неподалеку источника сильных магнитных полей (силовая проводка, всевозможные источники электромагнитных помех)
  • Надежность фиксации выходов счетчика в разъеме устройства
  • Качество установленной батарейки (и нужно следить за ее напряжением)

Аналоги устройству от Radioseti можно найти  в интернете (например от HobbyBoards за 30$ без учета доставки из США) или спаять самому, но, если честно, то по соотношению цена/качество лучшего устройства я не пока видел.

Сохранение показаний со счетчика в базу данных

На сервере Умного дома (я использую Raspberry Pi с ОС Raspbian и USB мастером 1-wire сети DS9490R) по расписанию каждые N-минут (задается по желанию) запускается скрипт, который с помощью библиотеки OWFS считывает показания с 1-wire счетчика импульсов и сохраняет их в СУБД.

Общая схема подключения представлена ниже:

архитектура

Более подробно про считывание значений с устройств 1-wire и управление ими при помощи библиотеки OWFS будет посвящена отдельная статья.

В консоли Linux считывание показаний выглядит примерно так:

А графики, полученные на основе данных с 1-wire счетчика импульсов выглядят примерно так:

График расхода горячей и холодной воды в течении суток

Один день из жизни: показания расхода воды за сутки.
Для построения графиков используется библиотека Highcharts.

Автоматическая передача показаний со счетчиков воды в управляющую компанию

При наличии в БД актуальных данных о расходе воды, можно подсчитать ее расход за месяц и передать в управляющую компанию.

На сегодняшний день (по крайней мере в Москве) многие УК принимают показания с помощью:

  • Смс сообщения (реализуемо)
  • E-mail (реализуемо и очень просто)
  • Через сайт УК (реализуемо, но придется разобраться как устроен их сайт и научиться эмулировать с помощью скрипта «ручную» передачу показаний)
  • API сервисов ЖКХ (пока не реализуемо, но чувствую что скоро они появятся)

Но это тема следующих статей.

Выводы

С доступными на сегодняшний день решениями (как аппаратными, так и софтовыми)  считать показания со счетчика воды, сохранить их в БД, а затем визуализировать, использовать для статистических расчетов, передать в управляющую компанию очень просто — даже если вы не умеете пользоваться паяльником и не являетесь гуру-программирстом. Нужно лишь немного терпения, желание и не бояться нового 🙂

Считывание показаний счетчиков воды с помощью 1-wire и Raspberry Pi: 5 комментариев

    1. dvp_admin Автор записи

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

Добавить комментарий для alex Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *