Высокоточный датчик воды: 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