Прокачиваем насос с помощью ESPHome и реле от Sonoff

e8af314eac1794fbfa93a085cbea57b8.png

Жила была у меня насосная станция Grandfar 125С и было у неё два недостатка:

  • нет защиты от сухого хода;

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

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

Да, я слышал про гидрокомпенсаторы, чтобы давление на входе не так сказывалось на работе станции, но во первых — места в квартире под него у меня нет, а во-вторых — защиту от сухого хода всё равно хочется. Также рабочее давление у моего насоса небольшое — 2.5 Бар, поэтому я не стал делать защиту по давлению — он просто не сможет создать давление в системе водоснабжения квартиры, которое её разрушит.

Итак, полез я в интернет и принялся искать готовое решение своей задачи и, к своему удивлению, не нашёл. Да, есть прекрасное электронное устройство WPC-10, которое по давлению включает насос, но включение защиты от сухого хода через две минусы после работы в сухую — это ни в какие ворота. Отдельно покупать защиту от сухого хода я не захотел.

Ну что же, придётся собрать своё устройство, задача вроде простая: кран открыт, качай, кран закрыт — не качай. Ну и если воды на входе нет, то и насосу работать незачем — сгорит ещё. Также это устройство станет частью насоса и не будет беспокоить пользователя регулировками, сбросом ошибок и прочей магией.

После недолгого поиска и недели ожиданий посылок я обзавёлся:

  • Датчиком расхода воды YF-B10 — в отличие от датчика давления, по нему можно понять, что на входе нет воды и защитить насос от сухого кода.

  • Реле Sonoff Mini R2 — не самое компактное, но самое недорогое (~ 600 ₽), что я нашёл. Максимальный коммутируемый ток 10А, что при мощности насоса 125 Вт хватает с большим запасом даже с учетом пусковых токов. А ещё эта модель с изолированным от высоковольтной части входом, куда мы и подключим датчик после небольшой доработки реле.

  • Трехконтактным разъёмом KF301–3PIN — чтобы подключать датчик расхода к нашему реле.

  • Программатором для ESP — да, в Sonoff Mini R2 вроде как можно залить прошивку в режиме DIY, но он у меня был и не зря.

  • Огромным желание мыться в любое время суток и не сжечь ненароком насос, если отключат воду.

Сразу скажу, что статья подразумевает знакомство с ESPHome, паяльником и базовыми знаниями электрики. Руководствуйтесь здравым смыслом, если что-то сломаете — я отвечать не буду. Это не готовое руководство к действию, а скорее рассказ об опыте.

Итак, расчехляем паяльник, прогоняем со стола кошку и начинаем творить.

Выводим питание для датчика

Датчик расхода требует низковольтное питание, в самом реле источник есть, но наружу он не выведен — исправим это:

  1. Разбираем корпус реле и выпаиваем двухпиновый разъём.

  2. Просверливаем в углу отверстие под третью ножку нового разъёма.

  3. Запаиваем трёхпиновый разъём.

  4. Оставшуюся свободной ножку соединяем проводком с точкой 3V на плате реле.

  5. Собираем корпус назад, по пути подрезав уголок.

Новый разъём установлен на место, но ещё не припаянНовый разъём установлен на место, но ещё не припаянЧёрный проводок вдоль платы — это питание для датчикаЧёрный проводок вдоль платы — это питание для датчикаСобранное реле — уголок корпуса пришлось подрезать, чтобы третья клемма была доступнаСобранное реле — уголок корпуса пришлось подрезать, чтобы третья клемма была доступна

Готовим прошивку

Программист из меня плохой, поэтому я использовал знакомую прошивку ESPHome, которая основана на фреймворке Ардуино и довольно просто настраивается в yaml файле.

Про установку ESPHome я рассказывать не буду, по ссылке выше всё расписано довольно подробно, поэтому сразу перейду к конфигурированию прошивки.

Опишем выход для управления реле (pump_relay) и сенсор на платформе pulse_counter. Также не забудем про обновление по воздуху, чтобы оперативно вносить изменения.

Итоговый код получился такой:

# esp-pump-r2.yaml
# Константы для удобства настроек.
substitutions:
  name: esp-pump-r2
  friendly_name: pump-r2
  project: Sonoff Mini R2  
  sensor_gpio: GPIO04 # GPIO, к которому подключен датчик расхода воды  
  relay_gpio: GPIO12 # GPIO к которому подключено реле

# Описание платы, в моём реле стоит esp8285.
esphome:
  name: ${name}
  platform: ESP8266
  board: esp8285

# Чтобы обновлять прошивку по воздуху.
ota:
  password: "ваш_пароль_ota"

# Подключение к Wi-Fi
wifi:
  ssid: "WB-LAB"
  password: "ваш_пароль_wifi"
  ap:
    ssid: Fallback ${name}
    password: "ваш_пароль_резервная_точка_доступа"

# Если не получится подключиться к Wi-Fi, 
# то поднять свой веб-интерфейс с логином 
# и паролем указанным выше в разделе «ap:».
captive_portal:

# Датчик расхода воды
sensor:
  - platform: pulse_counter
    name: "Flow Sensor"
    id: flow_sensor
    pin:
      number: $sensor_gpio
      mode: INPUT_PULLUP
    unit_of_measurement: "impulses"
    update_interval: 500ms
# Если датчик расхода присылает больше 100 имульсов,
# то включаем реле, иначе — выключаем.
    on_value:
      if:
        condition:
          sensor.in_range:
            id: flow_sensor
            above: 100.0
        then:
          - output.turn_on: pump_relay
        else:
          - output.turn_off: pump_relay           

# Выход реле
output:
  - platform: gpio
    id: pump_relay
    pin: $relay_gpio

Сохраняем файл и собираем прошивку, проще всего использовать docker и запускать ESPHome в режиме dashboard, инструкция — так вы получите простой веб-интерфейс для компиляции прошивок и управления устройствами.

Прошиваем

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

Картинку взял из документации Tasmota, она немного от другой версии реле (с внешней антенной), но расположение нужных контрольных точек аналогичное: GND, 3V3, TX, RX, GPIO0 (KEY_IN).

На рисунке плата Sonoff Mini, расположение контрольных точек в Sonoff Mini R2 такое же.На рисунке плата Sonoff Mini, расположение контрольных точек в Sonoff Mini R2 такое же.

Собираем автоматику на насосе

Реле подготовлено и прошито, настало время всё собрать. Монтируем на выходе насоса датчик расхода воды. Обратите внимание на стрелку — она указывает направление движения воды. Коннектор на другом конце провода можно отрезать, он не пригодиться.

Датчик расхода водыДатчик расхода воды

Снимаем чёрную коробочку с корпуса насоса, там нас ожидают три провода и конденсатор.

Снял чёрную пластиковую крышку, под ней оказалось три провода и конденсатор (серый внизу)Снял чёрную пластиковую крышку, под ней оказалось три провода и конденсатор (серый внизу)

Приспосабливаем на место старой коробки новую, побольше. Её я нашёл в ближайшем строймагазине в отделе с электрикой и прикрутил на старые болты к корпусу насоса.

Автоматика в собранном виде, я использовал клеммники WAGOАвтоматика в собранном виде, я использовал клеммники WAGO

Соединяем всё по схеме ниже.

Схема подключенияСхема подключения

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

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

Интеграция в систему автоматизации

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

Хочется видеть: время работы, уровень сигнала Wi-Fi, текущий статус реле, значение с датчика расхода воды в попугаях и состояние самого устройства.

В моём контроллере есть MQTT-брокер, поэтому всё, что нам надо — прокинуть в него нужные данные. Я не буду расписывать каждую строчку кода, просто опишу изменение в нём словами и приведу код с комментариями ниже. Добавляем:

  • mqtt — описываем подключение к брокеру.

  • binary_sensor — сенсор состояния реле.

  • wifi_signal и uptime — сенсоры уровня Wi-Fi и времени работы.

# esp-pump-r2-mqtt.yaml
# Константы для удобства настроек.
substitutions:
  name: esp-pump-r2
  friendly_name: pump-r2
  project: Sonoff Mini R2  
  sensor_gpio: GPIO04 # GPIO, к которому подключен датчик расхода воды 
  relay_gpio: GPIO12 # GPIO к которому подключено реле
  # Префикс для топиков с текущим статусом
  prefix: "esphome/${name}"

# Описание платы, в моём реле стоит esp8285.
esphome:
  name: ${name}
  platform: ESP8266
  board: esp8285

# Отключаем сторожевой таймер, чтобы контроллер 
# реле не перезапускадся каждые 15 минут из-за того, 
# что нет подключений по API
api:
  reboot_timeout: 0s

# Чтобы обновлять прошивку по воздуху.
ota:
  password: "ваш_пароль_ota"

# Подключение к Wi-Fi
wifi:
  ssid: "WB-LAB"
  password: "ваш_пароль_wifi"
  ap:
    ssid: Fallback ${name}
    password: "ваш_пароль_резервная_точка_доступа"

# Если не получится подключиться к Wi-Fi, 
# то поднять свою точку доступа с логином 
# и паролем указанным выше в разделе «ap:».
captive_portal:

# Подключение к MQTT
mqtt:
  broker: wirenboard-ascmdm6q.local
  port: 1883
  username: ''
  password: ''
  discovery: false
  id: mqtt_client
  topic_prefix: "${prefix}"
# Сообщения с текущим статусом устройства
  birth_message:
      topic: "${prefix}/text_sensor/status/state"
      payload: online

  will_message:
      topic: "${prefix}/text_sensor/status/state"
      payload: offline

  shutdown_message :
      topic: "${prefix}/text_sensor/status/state"
      payload: shutdown

# Датчик расхода воды
sensor:
  - platform: wifi_signal
    name: "WiFi Signal"
    update_interval: 60s

  - platform: uptime
    name: "Uptime"
    update_interval: 5s

  - platform: pulse_counter
    name: "Flow Sensor"
    id: flow_sensor
    pin:
      number: $sensor_gpio
      mode: INPUT_PULLUP
    unit_of_measurement: "impulses"
    update_interval: 500ms
# Если датчик расхода присылает больше 100 имульсов,
# то включаем реле, иначе — выключаем.
    on_value:
      if:
        condition:
          sensor.in_range:
            id: flow_sensor
            above: 100.0
        then:
          - output.turn_on: pump_relay
        else:
          - output.turn_off: pump_relay           

# Состояние выхода реле, для MQTT
binary_sensor:
  - platform: gpio
    pin: $relay_gpio
    name: "State"
    id: pump_state

# Выход реле
output:
  - platform: gpio
    id: pump_relay
    pin: $relay_gpio

Собираем прошивку и заливаем её одной кнопкой по воздуху — вот и пригодился настроенный ранее OTA.

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

Представление реле в MQTT-брокере контроллераПредставление реле в MQTT-брокере контроллера

У меня контроллер Wiren Board, для которого я когда-то писал конвертер esphome2wb, поэтому новое устройство автоматически появилось в веб-интерфейсе контроллера.

Представление в веб-интерфейсе контроллераПредставление в веб-интерфейсе контроллера

Вместо заключения

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

Файлы из статьи положил в репозиторий esphome-pump-r2, чтобы не потерялось.

© Habrahabr.ru