Статья

Безумный дом: делаем проточные фильтры воды умными

Вступление

Привет, друзья! 

Многие из нас воодушевляются, увидев на видео или где-то в статье какую-то электронную поделку для дома, или даже просто идею того, что можно самому сделать руками. Но часто возникает множество вопросов по тому, как конкретно это собрать самому. А раз мы говорим об электронной поделке, возникает еще и вопрос - а можно ли её интегрировать в "Умный дом"? 

Проведя не один вечер за обдумыванием этих вопросов и возможных вариантов реализации, и, наконец, доведя некоторые из поделок до успешной реализации, после отбраковки многочисленных прототипов, я решил поделиться с Вами своими наработками. Эта статья открывает цикл статей по DIY поделкам, ориентированным на интеграцию в "Умный дом" на базе системы Home Assistant. 

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

Что мы собираем?

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

В рамках умного дома возникло желание автоматизировать учет расхода ресурса мембраны и доли потерь воды в ходе ее фильтрации. В итоге, был собран агрегат, состоящий из счетчиков воды ("сырой" и "питьевой"), блока съёма данных и беспроводной передачи в Home Assistant, и дэшборда в самом Home Assistant.

Железо

Для сборки нам понадобятся:

В качестве счётчика используем проточный пластиковый сенсор потока YF-S402B, рассчитанный на быстросъёмное подключение типовой 6 мм пластиковой трубки проточного фильтра. Внутри счётчика - крыльчатка с подключенным датчиком Холла, срабатывающим при её вращении. 

Кроме того, в счётчике установлен резистор ограничения тока сигнального вывода, позволяющий подключать его напрямую на входной вывод ESP8266 при питании счётчика от 5В.

Данный счётчик рассчитан на работу с потоком воды от 0.3 до 6 л/мин, т.е. в данный диапазон как раз укладываются средние значения потока как фильтруемой, так и отфильтрованной воды. По спецификации счётчик выдает 2280 импульсов на один литр проходящей через него воды.

Собираем

Подключаем счётчики к проточному фильтру следующим образом:

Первый счетчик - в разрыв трубки между фильтром предварительной очистки и предфильтром (т.е. до мембраны). Лучше ставить его после предварительной очистки воды, а не непосредственно на вводе воды, чтобы уменьшить загрязнение счётчика и избежать его отказа или снижения точности.Второй - в разрыв трубки между мембраной и финальным картриджем солевого обогащения или, если он не используется, то между мембраной и краном чистой воды.
(UPD 2019.11.25) ВАЖНО! Второй счетчик должен устанавливаться, в любом случае, после трубки накопительного бачка, т.е. работать не в процессе накопления питьевой воды в бачке, а в процессе налива воды из питьевого крана. В противном случае, счетчик будет работать в нештатном режиме и показывать некорректные данные.

Подключаем

Теперь подключаем счётчики к ESP8266 с помощью соединителей DuPont по следующей схеме:

NodeMCU имеет 3 вывода 3.3V и 4 GND, благодаря чему можно раздельно подключить оба счётчика. Несмотря на то, что они рассчитаны, по умолчанию, на питание 5В, они прекрасно работают от 3.3В. Саму плату запитываем напрямую от блока питания 5В, через разъём платы MicroUSB.

Собираем прошивку

Прошивку ESP8266 собираем на базе ESPHome. Создаём новый проект в ESPHome 'drink_filter', вставляем текст прошивки ниже:

#=============================================================================== # Счетчик питьевой воды # NodeMCU ESP8266 #=============================================================================== substitutions: device_name: drink_filter #=============================================================================== esphome: name: $ platform: ESP8266 board: nodemcuv2 # Настройки Wi-Fi wifi: networks: - ssid: !secret wifi_ssid password: !secret wifi_pass manual_ip: static_ip: !secret drink_filter_ip gateway: !secret gateway_ip subnet: !secret subnet_mask reboot_timeout: 0s # Отключаем лог logger: baud_rate: 0 api: # Enable Home Assistant API password: !secret api_pwd reboot_timeout: 0s ota: password: !secret drink_filter_ota_pwd web_server: port: 80 #=============================================================================== time: # Время берем из Home Assistant - platform: homeassistant id: homeassistant_time #=============================================================================== binary_sensor: - platform: status name: "state_$" #=============================================================================== sensor: - platform: wifi_signal # Уровень Wi-Fi сигнала положительным числом name: "status_$" update_interval: 60s filters: - lambda: return x * (-1); #------------------------------------------------------------------------------ - platform: uptime # Время работы после последней перезагрузки name: "uptime_$" #------------------------------------------------------------------------------ - platform: pulse_counter # Сенсор "питьевой" воды name: "drink_water_$" id: id_drink_water pin: D3 update_interval: 15s # Время обновления важно оставить таким unit_of_measurement: л filters: # Коэффициент 0.25 из-за обновления 4 раза в мин, 2145 - количество тиков счётчика на литр воды - lambda: |- static float total_drink_value = 0.0; total_drink_value = x * 0.25 / 2145; return total_drink_value; #------------------------------------------------------------------------------ - platform: pulse_counter # Сенсор "сырой" воды name: "raw_water_$" id: id_raw_water pin: D2 update_interval: 15s # Время обновления важно оставить таким unit_of_measurement: л filters: # Коэффициент 0.25 из-за обновления 4 раза в мин, 2145 - количество тиков счётчика на литр воды - lambda: |- static float total_raw_value = 0.0; total_raw_value = x * 0.25 / 2145; return total_raw_value; #=============================================================================== switch: - platform: restart # Переключатель перезагрузки устройства name: "restart_$"

Несмотря на указанное в спецификации счётчика значение 2280 импульсов на литр воды, путём измерения, я получил чуть меньшее значение 2145. Со значением 2280 счётчик слегка занижает объем проходящей воды. Вы можете оставить предложенные выше значения или подобрать точные, путём калибровки вашего экземпляра.

Компилируем прошивку, заливаем в ESP8266 и проверяем работу собранного устройства через его Web-интерфейс.

Если вы хотите получать максимально точные данные, необходимо произвести калибровку счётчиков. Калибровка выполняется следующим образом:

  1. Включаете подачу воды с таким потоком, как вы обычно наливаете питьевую воду
  2. Набираете в емкость воду в течение ровно 1 минуты
  3. Ждете 15-20 секунд, пока показания счетчика в Home Assistant перестанут изменяться
  4. Взвешиваете налитую в ёмкость воду

(UPD 2019.11.25) Итоговый коэффициент, который необходимо будет указать в прошивке вместо числа 2145, вычисляется по следующей формуле (вспоминаем дроби, дамы и господа):

где Кновый - это реальное количество импульсов на литр, а Кстарый - предыдущее значение, которое в начальной прошивке равняется 2145.

Вносите коэффициент в прошивку и перезаливаете ESP8266.

Добавляем счётчики в Home Assistant

После перезагрузки устройства, добавляем его через интеграцию в Home Assistant:

  • Меню -> Настройки -> Интеграции -> Добавить -> ESPHome 

Далее, указываете IP устройства и его API пароль, заданный с помощью !secret api_pwd в прошивке. После этого, в Home Assistant появятся сенсоры sensor.raw_water_drink_filter и sensor.drink_water_drink_filter, отображающие расход воды в литрах, но сбрасывающиеся при потере питания ESP8266. Для того, чтобы данные не терялись и была возможность смотреть расход за вчерашний день, месяц и год, используем компонент Home Assistant Utility Meter:

utility_meter: raw_water_yearly: # Годовое потребление сырой воды source: sensor.raw_water_drink_filter cycle: yearly tariffs: - single drink_water_yearly: # Годовое потребление питьевой воды source: sensor.drink_water_drink_filter cycle: yearly tariffs: - single raw_water_monthly: # Месячное потребление сырой воды source: sensor.raw_water_drink_filter cycle: monthly tariffs: - single drink_water_monthly: # Месячное потребление питьевой воды source: sensor.drink_water_drink_filter cycle: monthly tariffs: - single raw_water_daily: # Дневное потребление сырой воды source: sensor.raw_water_drink_filter cycle: daily tariffs: - single drink_water_daily: # Дневное потребление питьевой воды source: sensor.drink_water_drink_filter cycle: daily tariffs: - single

Для отображения расхода за вчерашний день, добавляем соответствующие template sensors:

sensor: - platform: template sensors: raw_water_yesterday: # Расход сырой воды (вчера) friendly_name: Расход сырой воды (вчера) icon_template: mdi:gauge unit_of_measurement: 'л' value_template: "{{ state_attr('sensor.raw_water_daily_single', 'last_period') | float }}" drink_water_yesterday: # Расход питьевой воды (вчера) friendly_name: Расход питьевой воды (вчера) icon_template: mdi:gauge unit_of_measurement: 'л' value_template: "{{ state_attr('sensor.drink_water_daily_single', 'last_period') | float }}"

Наводим красоту

Добавим в Home Assistant названия сенсоров и иконки:

homeassistant: customize: sensor.raw_water_yearly_single: friendly_name: Расход сырой воды (год) unit_of_measurement: л icon: mdi:chart-histogram sensor.drink_water_yearly_single: friendly_name: Расход питьевой воды (год) unit_of_measurement: л icon: mdi:chart-histogram sensor.raw_water_monthly_single: friendly_name: Расход сырой воды (этот месяц) unit_of_measurement: л icon: mdi:counter sensor.drink_water_monthly_single: friendly_name: Расход питьевой воды (этот месяц) unit_of_measurement: л icon: mdi:counter sensor.raw_water_daily_single: friendly_name: Расход сырой воды (сегодня) unit_of_measurement: л icon: mdi:gauge sensor.drink_water_daily_single: friendly_name: Расход питьевой воды (сегодня) unit_of_measurement: л icon: mdi:gauge

И, финальный шаг - добавляем все наши сенсоры в интерфейс Home Assistant - в lovelace:

views: - title: Счетчики воды id: counters icon: mdi:water-pump cards: - type: entities # Фильтры воды title: Фильтры воды show_header_toggle: false entities: - sensor.raw_water_daily_single - sensor.drink_water_daily_single - type: divider - sensor.raw_water_yesterday - sensor.drink_water_yesterday - type: divider - sensor.raw_water_monthly_single - sensor.drink_water_monthly_single - type: divider - sensor.raw_water_yearly_single - sensor.drink_water_yearly_single

В итоге, получаем такой дэшборд в Home Assistant:

Осталось упаковать плату в корпус и готово!

а ты хакер братец, спасибо за статью

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

Буду делать вторую часть статьи - по автоматизациям и напоминаниям

Отличная статья, продолжай в том же духе! Сам давно хочу сделать такую штуку, даже все купил, но руки так и не доходят 😁

Спасибо! Планирую следующие...



Делал аналогично для проточных фильтров (на входе) по показаниям счетчиков. Фильтр тонкой очистки считается из рекомендации производителя о замене раз в год.

https://sprut.ai/static/media/cache/00/30/34/5/1565245/44571/1000x_image.png?1569917410" alt="1000x_image.png?1569917410" />


Поделитесь опытом, очень интересно, как раз затеял переделку санузла со всеми потрохами!

Поделись конфигом, интересно

Конфиг с яндекса не открывается, видимо, уже потерся. Интересно, как отсыл в ук сделан, как раскрывающиеся списки в ловеласе и как ресурс подсчитывается.

Напиши в личку.

Раскрывающийся список:
https://github.com/thomasloven/lovelace-fold-entity-row">https://github.com/thomasloven...
Ресурс считается на основе показаний счетчиков. При нажатии кнопки "Заменить" запоминается показание соответствующего счетчика воды. В дальнейшем считается разница между текущим показанием счетчика и запомненным. Для холодной воды 20м3, для горячей 12м3 (рекомендация производителя) Как оказалось это какой-то смешной ресурс, у меня он закончился через 2 мес... Ресурс фильтра тонкой очистки считается аналогично, только вместо расхода воды - количество прошедших со дня замены дней. 
Конфиг отправки письма в УК отправил на почту

По списку - спасибо! Уже нашел, добавил в конфиг.

А УК на почту в каком городе принимает?

Москва. Если точнее, у нас ТСЖ

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

Прислали Вам конфиг?
Можете поделиться конфигом? ссылки уе не работают

Год производители и для мембран рекомендуют, но как говорится, из соображений "в среднем по больнице", поскольку у массового пользователя других достоверных ориентиров нет. Но кто-то по 10-15л воды в день пьет, а у кого-то не больше 2л выходит (в чатах обсуждали активно). А разница - в 5 раз получается! Так что с расчетом ресурса, если это возможно, лучший вариант. 


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

Мегакруто! А можно ли купить готовое устройство, чтобы тупо его подключить?

Надо подумать...

Заранее спасибо!

Никто не пробовал на выходе чистовой воды (после 5 ступени:1,2,3 мембрана, постфильтр) поставить не только счётчик но и измеритель качества воды(tds). На али он есть совместно со счетчиком. Стоит ~450.
И ещё я всегда переживаю на счёт протечки(хотя если в первые сутки не обнаружишь, то можно спать спокойно), поэтому всегда хотел поставить управляемый кран на вход до 1 фильтра. И ещё после 5 ступени поставить прерыватель(управляемый «кран» 150 руб. ) для слива воды, когда в отпуске. Т.е подавать команду раз в неделю сливать пол бака, чтобы потом не промывать(оставив кран предварительно открытым). Особенно если уезжаешь на 2-3 недели.

По пунктам:

1) Насчет TDS не уверен, что он точно/адекватно показывать будет в проточной воде. Есть подозрение, что контакты быстро зарастут и показания уплывут. Но попробовать можно. Кинь пример ссылки.

2) Протечки - вопрос отдельный. Не стоит нагружать систему фильтрации не свойственным ей функциям. Просто добавляешь еще датчик протечки к имеющейся системе против протечек и ставишь его на пол рядом с фильтром.

3) Тоже прихожу к выводу, что автопролив системы нужен, иначе за 2 недели бак протухнет совсем. Поскольку тут имеем дело уже с питьевым контуром, делать вывод в слив, как сделано до мембраны, уже нельзя. Есть риск из слива бактерии занести. Пока склоняюсь к варианту поставить в разрыв трубки, идущей на питьевой кран, электровентиль. Уезжаешь в отпуск - открываешь питьевой кран и запускаешь автоматизацию на вентиль. По умолчанию, он закрыт, но периодически открывается, спуская воду через питьевой кран. Кинь тоже ссылку на пример крана. 

Попробую заказать и проверить обе доработки.

Если фильтр работает нормально, то протухать там нечему. H2O + соль , протухнуть не может. 

1) там есть несколько типов, отдельный tds, потом снимаемый, и уже со счетчиком. А есть целая система. 


Ссылки:


Отдельно tds и счётчик


https://s.click.aliexpress.com/e/ceggSL1C



Вся система Water Filter Controller Display+Solenoid Valve+Switch+Flow Sensor+TDS


https://s.click.aliexpress.com/e/csADGOAq



2) всё бы ничего, но у родителей соединение из стены начало капать, горячей воды(отсюда и скорость образования плесени), датчик не сработал конечно(даже несколько). Капал и сразу впитывался в дсп, и он распухал и всю влагу забирал. Уехали на дачу на недели 2-3, приехал я проверить как дела, захожу воняет сыростью, открываю, а там чёрная плесень на стенках под мойкой. Прям на дсп и на стене позади, пришлось всё выбрасывать и дезинфицировать. А капало то чуть-чуть.


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




3) Я тоже думал на счёт него, но тут недавно увидел на али соленоидный прерыватель для системы быстрого подключения. По умолчанию он закрыт, подаёшь, открыто, хотя когда свет отключат, воду не попьёшь, но так как у меня 2 крана(постфильтровая и минерализуемая воды), то можно на 1 повесть, без минерализатора. 



Вот соленоидный


https://s.click.aliexpress.com/e/cLRcfwxC



Ещё какой:


https://s.click.aliexpress.com/e/2snXLAK

1) Интересный вариант, он еще и температуру воды измеряет. Готовая система не так интересна, мы же про DIY говорим, руки чешутся.


2) Капающую протечку, боюсь, никакой системой против протечек не поймать. Она, все таки, не панацея, а скорее вариант, чтобы не затопить соседей. Мелкие протечки не так страшны. Что делать с первой подачей ржавой воды, тоже пока не придумал, есть такая проблема.


3) Про соленоиды в подаче воды слышал много негатива. Не так надежны, как запорные краны. Кроме того, для поддержания состояния требуют постоянного напряжения, это неправильная концепция для фильтра воды. Такой вариант только как аква-стоп для стиральной машинки подходит. Кран, думаю, вешать надо после минерализатора. За 2 недели он тоже протухнет, и его надо прокачивать. Надо искать вентиль с приводом на диаметр трубки.


4) Вот еще, похоже, надо помпу ставить перед мембраной, поскольку цифры показывают соотношение 1:5 воды, а должно быть не хуже 1:3. Давления не хватает в водопроводе. Что-то типа такой https://ru.aliexpress.com/item/32892744512.html">

https://ru.aliexpress.com/item/716849878.html">https://ru.aliexpress.com/item...

1) Какой именно? Капался на али, нашёл аж разных 5 вариантов, где вместе, где раздельно, разных цветов))

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

3) Да, читал что давление не выдерживает, пропускает или наоборот, постоянно уменьшает давление. Вариант с краном лучше конечно. Не находил кран с быстросъёмными. Придется кучу переходников городить..

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

Кстати уф-лампу не стоит? Она не так дорого стоит, как раз решает проблему с бактериями. Я так и не поставил, вечно откладываю, уже 5 лет((

1) Как выберу, закажу - отпишусь.

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

3) Буду пока искать вентили на быстросъемный разъем. Должны же такие быть в природе.

4) Что-то тезис о протечках при высоком давлении заставляет задуматься, может фиг с ним с соотношением 1:5, зато не протекает. Помпы, которые я смотрел, все высокое давление дают, боюсь, проблема будет повторяться.

5) А куда УФ ставить? На входе/выходе/...? Где то есть статьи на эту тему?



1)Ок
2)Если нет никого дома и не будет ближайшее время, то можно через 6 часов(или через день-два, если в отпуске хозяева и мало квартир в доме) запустить после подачи воды например(ржавчина сольётся другими в доме). Даже если человек придёт быстрее - вода в баке есть же, хватит с запасом на суп и чайник)) Увидит уведомление и прочистит вручную через промывочный кран с фильтром(или сольёт ржавчину через обычный кран), включит осмос. А проще всего это запустить воду в осмос после подачи воды и предварительного прогона в автоматическом режиме промывочного крана с фильтром(вот как на фото). 
https://sprut.ai/static/media/cache/00/35/81/5/1615519/44933/1000x_image.jpg?1570544460" alt="1000x_image.jpg?1570544460" />3) Тоже поищу
4) Есть насос с подачей нужного давления на мембрану(в инструкции к моему осмосу так написано, у меня ещё Американский Pentec-Atol) или с регулировкой давления.
5) Он ставится после всех постфильтров, грубо говоря перед краном, чтобы все бактерии "обесплодить". Уф-не убивает, а разрушает днк, останавливая размножение. В интернете есть статьи, также сейчас много обсуждений про титановую мембрану..Но не читал.
Вот выдержки:
Воздействие на микроорганизмы ультрафиолетовых лучей с длиной волны 260,5 нм позволяет уничтожить 99,9% микробов.
Облучение происходит определенное количество времени, за которое
микроорганизмы теряют способность к воспроизводству, вследствие
разрушения структуры их ДНК. 
Вот фото его:


https://sprut.ai/static/media/cache/00/35/81/5/1615519/44935/1000x_image.jpg?1570545552" alt="1000x_image.jpg?1570545552" />

Заказал счётчик потока с измерителем tds и температуры. Про температуру понятно, там терморезистор, под него есть модуль в esphome, а вот под  tds метр в esphome ничего не нашел. Или плохо искал? Пока едет готовлю конфиг

https://esphome.io/components/sensor/adc.html">https://esphome.io/components/...

подключал через это. правда датчик от keystone 

Круто! А как запилить то же самое только на основе квартирных счетчиков воды? У меня сейчас на них повешены датчики дверей Акара, делал на основе этой статьи: https://www.indahomekit.ru/2018/11/03/diy-stchettchik-vod-prodolzhenie/">https://www.indahomekit.ru/201... Хотелось бы что бы еще как у вас показывал показания за день, месяц, год

Уже запилил, именно такой вариант. Ждите статью.

Когда ждать статью?

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

Так в этой статье все для этого написано. Esp для хранения показаний за месяц и более не требуется. В статье пример с utility meter приведен. Добавляйте свои сенсоры и вперёд...

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

Подключай к GPIO малины и делай сенсор по сбору тиков счетчика сразу в Home Assistant

А можно нубский и дурацкий вопрос задать? )

Насколько я понимаю, вот этот код:

# Example configuration entry
sensor:
- platform: pulse_counter
pin: 12
name: "Pulse Counter"

должен возвращать каждый 60 секунд количество импульсов на ноге 12?

По каким то причинам, скармливая "utility meter" данные с предложенного в прошивке кода, на выходе получаю непойми что...


Решил тем, что добавил в прошивку сенсор суммирования, получилось так:


  - platform: pulse_counter # Сенсор "питьевой" воды
name: "drink_water_${device_name}"
id: id_drink_water
pin: D3
update_interval: 15s # Время обновления важно оставить таким
unit_of_measurement: л
filters: # Коэффициент 0.25 из-за обновления 4 раза в мин, 2145 - количество тиков счётчика на литр воды
- lambda: |-
static float total_drink_value = 0.0;
total_drink_value = x * 0.25 / 2145;
return total_drink_value;

- platform: integration
name: "drink_water_integration_${device_name}"
sensor: id_drink_water
integration_method: left
time_unit: min
filters:
- lambda: return x / 0.25;

а вот сенсор  "

drink_water_integration_${device_name}

" можно ставить в "source" utility_meter, после этого начинает корректно считать.


ps: В лямбда: "return total_drink_value; 



" не должно быть пробелов в конце строки, esphome при компиляции выдает предупреждение...

У меня в прошивке "integration" делается сразу внутри лямбды.

А как у вас это внутри лямбды сделано? Этого нет в статье?

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

У него получилось так:

globals:
- id: drink_water_value
type: float
sensor:
- platform: pulse_counter
name: "drink_water_water_drink_filter
id: id_drink_water
pin: D2
update_interval: 15s
unit_of_measurement: л
filters:
- lambda: |-
static float total_drink_value = 0.0;
total_drink_value = x * 0.25 / 2120;
id(drink_water_value) += total_drink_value;
return id(drink_water_value);

спасибо за наводку, повторил, написал свой скетч

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

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

flowRate_1 = ((1000.0 / (millis() - oldTime)) * COUNTER_PULSE_1) / 37; 

flowMilliLitres_1 = (flowRate_1 / 60) * 1000;


totalMilliLitres_1 += flowMilliLitres_1;

Андрей,


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

Делаешь контрольный слив - засекаешь кол-во тактов счетчика и объем слива - делишь одно на другое (с учетом 60 секунд) - получаешь коэффициент (у меня 37).

Питание 5 В и точность повысится. Я мучился долго подбирая коэффициент. Плюнул подключил к 5 В VU и чразу все стало точно. и никаких кривых коэффициентов.

Здравствуйте.


Сделал подобную систему для своего фильтра. Большое спасибо автору! 

За 2 дня эксплуатации возникло несколько вопросов


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

    https://sprut.ai/client/user/profile/1283">Андрей Попов (andreypopov) , ваш пример, как я понимаю, для решения как раз проблемы изменения потока. Как его применить, поясните пожалуйста.
  2. Входной счетчик у меня замеряет в 10 раз меньше чем питьевой. Думаю, что его надо отдельно калибровать. В скетче автора одинаковый коэффициент для обоих счетчиков и судя по скрину Home Assistans все работает нормально. Как так? Настолько сильный поток перед мембраной? Так бывает? Или автор калибровал счетчик сырой воды отдельно но не указал в посте? Как у вас работает? Корректно?

  

Здравствуйте, 

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

- Калибровать нужно оба датчика , конечно. Сделать это не так  сложно - если калибруете датчик сырой воды, подставьте какую-нибудь емкость под трубку слива - замеряйте объем вытекшей воды. У меня датчики из одной серии, практически одинаковые показания дают, так повезло, поэтому коэффициенты одинаковые оставил. Поток перед мембраной ограничивается клапаном слива - он примерно такой же, как и чистой воды при полном баке.

Запитать счетчики от 5 В и проблемы уйдут. Счетчики сразу будут откалиброваны одинаково ))

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

Странно, когда работает счетчик потока сырой воды, за одно меняются и данные по питьевой воде ;( Заметил при очередной переборке фильта и проверке показаний... Все перепроверил, другие ноги в прошивке ставил и менял на плате. Мистика. Попробую на Wemos чтоль собрать....

Это проблема с питанием. Подавайте на счетчики 5 В и все будет ОК. У меня на 3.3 даже без потока воды фантомные миллилитры шли.

формула расчета коэффициента верна походу только для девайса автора

я купил себе крыльчатки с ТДС-метром и по этой формуле получается полная дичь

в итоге подбирал методом тыка опираясь на цифру 2145

тдс заработал с платой-переходником для ардуины (https://aliexpress.ru/item/1005001632535002.html?spm=a2g0o.productlist.0.0.683521cdJbhzu3&algo_pvid=2a5db112-b059-41e9-8d63-369a9191c196&algo_expid=2a5db112-b059-41e9-8d63-369a9191c196-0&btsid=0b8b035c16116122587908485eeb18&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_&sku_id=12000016899752143">tds)

и вот такой сенсор для него

- platform: adc 

pin: A0 

name: "tds_${device_name}" 

unit_of_measurement: "ppm"

icon: "mdi:water-percent" 

update_interval: 60s 

filters: 

- lambda: return (133.42*x*x*x - 255.86*x*x + 857.39*x)*0.5; 

по спецификации платы переходника у нее исходящее напряжение в разбросе 0-2,3 V

ESP8266 насколько  я понимаю на ноге А0 умеет измерять от 0 до 1 V. Нужно делитель ставить, иначе будут некорректные данные. 

Если использовать ESP32 то тогда к вашему коду надо добавлять параметр attenuation что бы считать вольтаж в нужном диапазоне. 

Если использовать Wemos D1 mini

- тогда 

  filters:
- multiply: 3.3

ну и оригинальный пример кода использует вычисление медианного значения из 30 элементов  потом коэффициент в зависимости от температуры среды, правда там всего 2 % при 0 градусов, так что думаю можно пренебречь. 

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

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




Здравствуйте! Хотел бы взять у вас платную консультацию.


Проблема в следующем:


Требуется собрать устройство на базе esp32 + esphome.
Устройство должно показывать ppm( датчик tds)Датчик
Проблема в том что датчик преобразует вольтаж в ppm через adс и не может с точностью определить ppm.


В чистой воде вольтаж отдает 0
А в воде с солями сразу 1.1 v


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

Код автора выше тоже не работает, он взят https://github.com/jcallaghan/home-assistant-config/issues/26">https://github.com/jcallaghan/...

Датчик подключен напрямую к esp32


Свяжитесь со мной по почте или телеграм: omertapiter@gmail.com


telegram: laser_mi


https://sprut.ai/static/media/cache/00/82/58/5/8909104/79296/1000x_image.jpg?1624516608" alt="1000x_image.jpg?1624516608" />
https://sprut.ai/static/media/cache/00/82/58/5/8909104/79297/1000x_image.jpg?1624516609" alt="1000x_image.jpg?1624516609" />
https://sprut.ai/static/media/cache/00/82/58/5/8909104/79298/1000x_image.jpg?1624516609" alt="1000x_image.jpg?1624516609" />
https://sprut.ai/static/media/cache/00/82/58/5/8909104/79299/1000x_image.jpg?1624516610" alt="1000x_image.jpg?1624516610" />


Что-то не работает правильно у меня счетчик чистой воды. Лью больше литра каждый раз, но счетчик показывает 0.96-0.98 литра и никогда не показывает больше этого значения. С чем это может быть связано? 

как исправить. ошибку помогите.

INFO Reading configuration /config/esphome/drink_filter.yaml...
INFO Detected timezone 'MSK' with UTC offset 3
<b>Failed config</b>

<b>sensor.pulse_counter:</b> [source /config/esphome/drink_filter.yaml:57]
platform: pulse_counter
name: drink_water_water
id: id_drink_water

<b>Cannot resolve pin name 'D3' for board esp01_1m.</b>
pin: <b>D3</b> [source /config/esphome/drink_filter.yaml:60]
update_interval: 15s
unit_of_measurement: л
filters:
- lambda: |-
static float total_drink_value = 0.0;
total_drink_value = x * 0.25 / 2120;
return total_drink_value;
id(drink_water_value) += total_drink_value;
return id(drink_water_value);

Прошу совета! Попытался скомпилировать предложенную прошивку в EspHome, обругалась - неправильный синтаксис

ERROR Error while reading config: Invalid YAML syntax:

 Куды бечь - не знаю... Может растолкуете. Я не спец. только учусь. Сижу ни винде, а тут, как понял, спецы по Линуксу. Может поэтому синтаксис не совпадает?

Спасибо автору за отличную разработку!

Собрал по аналогии.

Вывод. Питать такие счетчики только от 5 В иначе подбирать какие-то косые коэффициенты. Вначале помучался с подгонкой, потом зацепил питание на VU и все проблемы ушли. Для моих счетчиков коэффициент 500.



Подскажите пожалуйста настроил себе счетчик воды и TDS метр, по началу все вроде было хорошо, но расходомер начал сам по себе считать расход воды при закрытом кране, может это быть связано с тем что осмос оснащен насосом, то есть вода подкачивается? сам tds + расходомер подключен перед краном питьевой воды, питание подключено к +5V, использую wemos d1 mini (esp8266). 

Настроил бинарный сенсор:

https://sprut.ai/static/media/cache/00/88/02/5/9565032/80976/1000x_image.png?1629141369" alt="1000x_image.png?1629141369" />

Вот мой cards, как видно за сутки 70,15 литров... бак на 8 литров, то есть счетчик намотал сам по себе.

https://sprut.ai/static/media/cache/00/88/02/5/9565032/80977/1000x_image.png?1629141502" alt="1000x_image.png?1629141502" />

Кстати, у вопросу о тдс.


Есл кто хочет точности, то надо подключать через ads1115. 


Тогд сразу показывает нормальные цифры. 


Собсна, датчик стоит уже год, пока не зарос

уважаемый а поподробней о схеме wemos d1 mini  + ads1115 + Analog TDS Sensor




на алишке покупаем измеритель

https://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20220114102507&SearchText=tds+meter+analog">https://www.aliexpress.com/who...

и помесь потока с ТДС

https://www.aliexpress.com/item/32870871997.html?spm=a2g0o.productlist.0.0.3394b751j9ejl5&algo_pvid=973ae7a5-7e6e-49ab-9051-d881f7811f79&algo_exp_id=973ae7a5-7e6e-49ab-9051-d881f7811f79-0&pdp_ext_f=%7B%22sku_id%22%3A%2265562664307%22%7D&pdp_pi=-1%3B213.34%3B-1%3B-1%40salePrice%3BUAH%3Bsearch-mainSearch">https://www.aliexpress.com/ite...

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

эти все поток+ТДС отлично режут трубку внутри себя. поэтому при сборке эту балалайку надо зафиксировать и потом в нее трубку вставить, чтобы она не проворачивалась, а то проворт на половину и сразу течь начинает(

схема 

https://sprut.ai/static/media/cache/00/42/05/5/10959489/84804/1000x_image.jpg?1642185567" alt="1000x_image.jpg?1642185567" />

от датчика потока-тдс штекер кажись прямо в черную плату вставляется. или я пины перекинул с родного датчика.. не помню. 

настройка согласно доке esphome ads1115 ну или чем там вы вемос шьете

так выглядит вода до мембраны

https://sprut.ai/static/media/cache/00/42/05/5/10959489/84805/1000x_image.jpg?1642187064" alt="1000x_image.jpg?1642187064" />

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

https://sprut.ai/static/media/cache/00/42/05/5/10959489/84806/1000x_image.jpg?1642187138" alt="1000x_image.jpg?1642187138" />
а можете обновить ссылки\картинки в комменте? чет все битые и не открываются. планирю так попробовать собрать все и потестить.

спасибо за схему


помогите пожалуйста, не могу понять как прошивку сделать, может кто поделится YAML готовым

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

Устройства


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