Блог

Айтишник на даче. День 3. Технический учет воды. ESP32 и Valtec

Введение

Так как превращение дачи в загородный дом случилось совсем недавно (осенью 2019 года), все коммуникации в порядок привести не удалось. Скважину нам выкопали в сентябре, и только в ноябре удалось найти средства на подводку водоснабжения в дом. Базовые вещи типа насоса, кессона, водонагревателя и обычного фильтра металла, так и остались на зиму до лучших времён. И вот, в конце мая, мы установили стандартную систему очистки воды на основе химического анализа воды из скважины. Я напишу об этом отдельный пост, так как процесс весьма увлекательный.

Виды учета: коммерческий и технический

Это применимо к водо- и электроснабжению. Коммерческий нужен для оплаты по счетам (чтобы до запятой все знаки совпадали и цена ошибки была в миллионных процента). Технический же нужен для наблюдения за общим потреблением ресурсов (порядок потребления, дневной расход и т.д.). Конкретно мне был нужен технический, и вот почему:

  1. У системы фильтрации есть свой ресурс, она автоматически прочищается каждые N тысяч литров воды.
  2. Есть нормативы и рекомендации по обслуживанию очистной станции, например проверка кранов, соединений и других 5 параметров, не требующая высокой точности, но способная напоминать о необходимости таких операций (не на бумажке же всё записывать в 2020 году).
  3. Датчик протечки воды. Сомнительно, но реализуемо.
  4. Мы не знаем глубину выгребной ямы, и если случится такое, что она переполнится, примерно понимать порядок потраченных кубов на её заполнение.
  5. Удобная картинка в системе управления умным домом, чтобы вести исторические данные и подкручивать настройки в системе очистки воды под количество человек, время года, использование стиральной машины или посудомойки.

Водосчетчик Valtec VLF-U

Ещё осенью, при создании водной разводки, нам поставили коллектор (гребенку) от этой фирмы, по весне уже другой мастер её нахваливал, а также была Фум лента от этого производителя. Поэтому, на подсознательном уровне я выбрал счетчик именно Valtec. Он был с импульсным входом, как полагается. Вот тут его паспорт.

По документам счетчик создаёт импульс длительностью 0.6 секунд каждые 10 литров при прохождении через 0. По сути, это простое замыкание геркона. Обычная кнопка с длительностью нажатия 600 миллисекунд. Остаётся только фиксировать эти нажатия и отправлять показания в Home Assistant. Да, о своём выборе именно этой платформы я напишу буквально завтра.

ESP32 и ESPhome

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

ESPHome является прошивкой, тесно интегрированной в Home Assistant. Её плюсы:

  1. Небольшой размер кода программы;
  2. Всё программирование - в yaml файле (не нужно уметь кодить, только писать настройки);
  3. Обновление OTA (по воздуху);
  4. Прямой протокол для управления из Home Assistant;
  5. Стабильность работы прошивки.

Да, никто не запрещает использовать Tasmota, ESPEasy, голый код в Arduino IDE, но мне показалось это весьма изящным и быстрым решением.

esphome: name: bath platform: ESP32 board: nodemcu-32s wifi: ssid: "Ваша сеть" password: "пароль сети" sensor: - platform: pulse_counter pin: 12 id: my_flow_meter unit_of_measurement: 'L' update_interval: 30s name: 'Water Meter House' count_mode: falling_edge: INCREMENT rising_edge: DISABLE filters: - lambda: !lambda |- if (x > 0) { return 10; } else { return 0; } - platform: integration name: "Total Daily Water" sensor: my_flow_meter time_unit: min api: password: "укажите пароль" ota: password: "укажите пароль"

Небольшие пояснения по коду. В ESPHome есть встроенный тип платформы "pulse counter", который считает импульсы. Но максимально возможное время по замеру количества импульсов - 13 микросекунд согласно документации. Поэтому пришлось прибегнуть к хитрости, так как счётчик всегда выдавал то 15, то 45, то 32 импульса - сплошной рандом. Я сделал lambda-фильтр по замерам. Если вода в этот момент текла, и был импульс, то он вернёт 10 (литров), а если нет - 0. И замер оставил раз в 30 секунд. То есть, если за эти 30 секунд был импульс, он засчитает его за один. Казалось бы, такая ситуация может привести к проблеме, когда будет два импульса за такой интервал, но этого удалось исключить чисто физический. Максимального потребления в доме я добился 970 литров в час, а это 16 литров в минуту. Поэтому, двух импульсов удалось избежать благодаря интервалу в 30 секунд.

Так выглядит момент сопряжения устройства в Home Assistant. Для того, чтобы устройство нашлось, мне потребовалось перезагрузить ядро, зайти в раздел Integrations и добавить появившееся устройство оттуда (введя пароль от api)
Так выглядит интерфейс и графики отчета устройства. Планирую скрыть Water Meter House, так как сложно привязать потребление ко времени с таким рваным приходом показаний.
Вот такую коробочку я собрал. ESP32 просто подключил к телефонной зарядке, которую, в свою очередь, подключил в сеть 220. Да, колхоз, но для старта пойдёт.

Заключение

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

Что в планах по этому устройству:

  1. Облагородить и сделать нормальное питание, а не вот это вот всё...
  2. Сейчас устройство никуда не записывает исторические показания, и после рестарта системы всё просто возвращается в 0. Надо бы это сделать и синхронизировать литры со счётчиком, для простоты.
  3. И самое главное - сделать отправку уведомлений о необходимости ТО системы очистки. Уведомления слать в Home Assistant и Telegram. Тогда точно ничего не пропущу.
  4. Исключить моменты, когда устройство неверно считает воду. Это связано с тем, что геркон может остановиться в месте с остановкой потребления в своей стадии замыкания.

А еще можно посадить на импульсном выходе счетчика простой сяомишный датчик двери. И все. Никаких esp, блоков питания и прочее. Каждые 10 литров датчик отправляет импульс в HA, который дальше суммирует и иже с ними.

да, видел такое решение в тематических чатах по Zigbee. Как придёт датчик - пересажу :)

А можно ссылку на такую реализацию с датчиком двери. Спасибо

На коммюнити можно найти много интересного по этой теме. Все просто. Берете датчик двери/окна от Xiaomi. Здесь на портале десятки тем с описанием переделки данного датчика. Вся суть это просто припаять к геркону 2 провода и вывести их из корпуса. Подключаете эти 2 провода к проводам импульсного счетчика. Счетчик может иметь и 4 проводка. Смотреть нужно по описанию. У меня 4. Я запаралелил 2на 2.  В любом случае там все просто. 

Для начала создаете Input number где задаете кол-во литров за один импульс (обычно 10 литров):

  water_counter:
min: 0
max: 1000000
step: 10
unit_of_measurement: liter
mode: box
icon: mdi:water

Затем прописываете автоматизацию с инкрементом:

- alias: Increase water counter
initial_state: true
trigger:
- platform: state
entity_id: binary_sensor.door_window_sensor_158d0001a21c8d
to: 'on'
action:
- service: input_number.increment
data:
entity_id: input_number.water_counter

В configuration.yaml прописываем статистику сбора (кому как нужно и сколько нужно):

# Utility_meter
utility_meter:
hourly_water:
source: input_number.water_counter
cycle: hourly
daily_water:
source: input_number.water_counter
cycle: daily
monthly_water:
source: input_number.water_counter
cycle: monthly
yearly_water:
source: input_number.water_counter
cycle: yearly

Ну и в конце я создал сенсор, который корректирует начальные показания счетчика.

  - platform: template
sensors:
water_total:
friendly_name: "Счетчик воды"
value_template: "{{ states('sensor.yearly_water')|int + 3423 }}"

Заметьте это все в литрах. Мне так удобнее. Хотите в кубах - делите на 1000.

А сколько живет батарейка в датчике Xiaomi в таком режиме?

В принципе при желании можно вычислить.  Грубо на куб воды датчик должен передать 100 импульсов. Это как 100 открытий двери.  Умножайте на кол-во кубов, которые ваша семья потребляет ежемесячно. 

Ну предположим - кубов 10 в месяц. В итоге около 1000 срабатываний в месяц. И сколько месяцев проживет батарейка в датчике?
В одной https://sprut.ai/client/article/1732">статье в комментах человек писал, что около полугода, не уточняя расход воды.

"Но максимально возможное время по замеру количества импульсов - 13 микросекунд https://esphome.io/components/sensor/pulse_counter.html">согласно документации." где это там такое написано?


Вернуться назад
Вернуться назад