• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Снятие показаний с импульсных счетчиков воды в ESPHome. Подключение модуля счетчика воды YF-S402 к ESPHome и Home Assistant.

21 июня, 2024

Высокоточный датчик воды: https://alii.pub/6z8gkl?erid=2SDnjek3Tra

ESP32 nodemcu: https://alii.pub/6zcfv7?erid=2SDnjcbXBXY

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.

 

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

Зная что импульс подаётся каждые 10 литров, то мы можем считая импульсы, понимать сколько у нас расход воды в литрах.

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

Например устройство Whaterius:

Так-же делал обзор на Zigbee версию устройства:

 

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

Вот для решения таких “хотелок” есть бюджетные счетчики воды с Aliexpress. Они действительно стоят не дорого и вполне себе так-же имеют импульсные выходы и по ним можем удобно снимать показания воды.

Собственно рассмотрим датчик YF-S402: https://alii.pub/6z8gkl?erid=2SDnjek3Tra Он имеет вход и выход воды для подключения типа 6мм быстросъемной проточной трубки проточного фильтра.

Внутри счётчика – крыльчатка с подключенным датчиком Холла, срабатывающим при её вращении.

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

Точность данного расходомера 2280 импульсов на литр. Что действительно его делает высокоточным.

Вот так схематически выглядит расходомер внутри:

 

Таких расходомеров к ESP можно подключить несколько штук одновременно. Вот так например выглядит подключение трубок фильтра к расходомеру и подключение их к esp плате.

 

 

 

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

Будем подключать 2 расходомера. Оба будем питать от 5 вольт платы ESP32, а пины вывода импульса будем подключать один к 17 пину GPIO, второй к 16 пину GPIO.

 

ESP32 будет программировать в ESPHome и добавлять в Home Assistant. По сути данный пример подойдёт и для импульсных счетчиков, которые ставятся для учета воды.


#===============================================================================
# Счетчик воды 
#===============================================================================
substitutions:
  device_name: esp32-water
#===============================================================================  
esphome:
  name: ${device_name}
  #name_add_mac_suffix: true
  #  project:
  #   name: esphome.bluetooth-proxy
  #  platform: ESP32
  #  board: nodemcu-32s

esp32:
  board: esp32dev
  framework:
    #type: arduino
    type: esp-idf
# Отключаем лог
logger:
  level: WARN
  baud_rate: 0



# Enable Home Assistant API
api:
  encryption:
    key: !secret api_key
#  reboot_timeout: 0s 

ota:
  password: !secret ota_pwd

wifi:
  ssid: !secret wifi_ssid2
  password: !secret wifi_pass
  fast_connect: true
  reboot_timeout: 5min
  ap:
    ssid: ${device_name}
    password: "12345678"

captive_portal:

#===============================================================================
time: # Время берем из Home Assistant
  - platform: homeassistant
    id: homeassistant_time
#===============================================================================


sensor: 

  - platform: pulse_counter 
    # Сенсор "питьевой" воды 
    name: "drink_water_${device_name}" 
    id: id_drink_water 
    pin: GPIO16
    update_interval: 15s 
    accuracy_decimals: 2
    # это нужно, чтобы HA воспринимал текущее значение расхода, если оно равно предшествующему, как новое,
    # а не как будто бы оно не поменялось force_update
    force_update: True
    # Время обновления важно оставить таким 
    unit_of_measurement: L
    device_class: water
    state_class: total
    filters:
        # Коэффициент 0.25 из-за обновления 4 раза в мин, 2145 - количество тиков счётчика на литр воды
      - lambda: |- 
          static float total_drink_value = 0.0; 
          total_drink_value = x * 0.25 / 2164; 
          return total_drink_value;
  # ------------------------------------------------------------------------------ 
  - platform: pulse_counter 
    # Сенсор "сырой" воды 
    name: "raw_water_${device_name}" 
    id: id_raw_water 
    pin: GPIO17
    update_interval: 15s
    accuracy_decimals: 2
    # это нужно, чтобы HA воспринимал текущее значение расхода, если оно равно предшествующему, как новое,
    # а не как будто бы оно не поменялось force_update    
    force_update: True
    # Время обновления важно оставить таким 
    unit_of_measurement: L
    device_class: water
    state_class: total
    filters: 
          # Коэффициент 0.25 из-за обновления 4 раза в мин, 2145 - количество тиков счётчика на литр воды 
      - lambda: |- 
          static float total_raw_value = 0.0; 
          total_raw_value = x * 0.25 / 2164; 
          return total_raw_value; 
#=============================================================================== 

#-------------------------------------------------------------------------------
  - platform: uptime # Время работы после последней перезагрузки
    name: "uptime_${device_name}"
#-------------------------------------------------------------------------------

#===============================================================================
switch:
  - platform: restart # Переключатель перезагрузки устройства
    name: "restart_${device_name}" 
#===============================================================================
binary_sensor:
  - platform: status
    name: "Status_${device_name}"
#===============================================================================
esp32_ble_tracker:
  scan_parameters:
    interval: 1100ms
    window: 1100ms
    active: true
#===============================================================================
bluetooth_proxy:
  active: true
       

Бонусом так как в ESP32 имеется блютуз, еще включена функция Bluetooth_proxy, чтоб покрыть сеть Bluetoth больше и добавлять блютуз устройства в Home Assistant.

 

Иногда бывает, что код со страницы копируется не корректно и с другими символами. И собственно появляется куча ошибок. Так что еще оставляю ссылку на этот же код, но в текстовом документе: https://disk.yandex.ru/d/WxWjmFbyLbAmwA

 

Primary Sidebar

Поиск

Новые записи

  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC
  • Заставляем Bluetooth датчики температуры tuya и xiaomi отправлять данные по Zigbee в Home Assistant.

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·