В доме живёт фикус по имени Кактус. Почему он, будучи фикусом, имеет собственное имя Кактус история долгая и к этому рассказу отношения не имеющая. Факт в том, что дерево заслуженное, с историей.

В общем он жил, не тужил, но случилось, так, что нам пришлось надолго уехать. Поливать фикус некому, таскать с собой двухметровое дерево как-то неловко, а обречь его на верную погибель рука не поднялась.

Быстро пробежав по рынку систем автополива понял, что ни одна из них меня, по большому счёту, не устраивает. Подключать к водопроводу было боязно - случись что - зальёт весь дом. Сколько льют - непонятно. С какой частотой настраивать полив - хорошо бы мерять влажность почвы и т.д.

Тут взгляд упал на стоящую без дела 19 литровую бутылку из-под питьевой воды. Решил констрyировать поливалку из того, что было под руками и палок.

«Под руками», кроме вышеупомянутой бутыли оказались:

  1. Электрическая помпа от него — 300 рублей

  2. Плата Wemos D1 mini  — $ 2

  3. Самая мелкая из нашедшихся в доме автомобильная кнопка

  4. Датчик влажности почвы YL-38

  5. Клеммники 2.54

  6. Провода цветные 0.35

  7. Опционально: Датчик BME260

Все фото из интернета.

Верхняя белая крышка насоса закреплена на двух винтах и одной защелке. Сняв, её мы видим плату, аккумулятор и водяную помпу. На аккумуляторе 4.6В. Опытным путём выяснилось, что Вемосу это более, чем достаточно.

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

Плата управления помпой

Настоящий схемотехник сделал бы собственную плату. Поскольку «я не настоящий сварщик»® я воткнул ESP8266 и первое попавшееся реле.

Удивительно, но Wemos с припаянными клеммниками встала, как родная между помпой и аккумулятором. Для реле нашлось место внизу. Питание взято от аккумулятора. Дополнительно, из обрезков макетки была спаяна плата коммутации. Просто по пять клеммников 3.3v и Gnd  для того, чтобы уменьшить количество «соплей».

На клемму En заведена кнопка для принудительной перезагрузки, на A0 — датчик влажности почвы. На GPIO 4 и 5 I2C датчик температуры BMP280. Мне как раз не хватало датчика температуры в этой комнате.

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

В родной крышке сзади было просверлено два отверстия - 8 мм под кнопку и 4 мм под провод датчика влажности почвы. После установки крышки на место всего этого безобразия не видно. Только сзади выходит аккуратный тонкий провод и идет в горшок к датчику. В Leroy Merlin был куплен метровый отрезок пласткового шланга для полива внутренним диаметром 8мм. Шланг одним концом надел на железный излив помпы, другой конец закрепил в горшке.

Прошито Esphome. Что это такое и как с ним работать - есть куча статей. Лично для меня наиболее понятные статьи у Павла Пшенникова и у Ивана Бессарабова.

В Home Assistant в интерации Esphome появились три сенсора, один бинарный сенсор и переключатель помпы. Влажность меряется в вольтах. :). 1 вольт обозначает, что всё сыро, как в тропическом лесу. Собираюсь написать скрит перевода в человеческие единицы, но никак не соберусь. Раз в неделю заглядываю посмотреть, как дела дома и, при необходимости, поливаю заслуженное дерево.

JAML конфиг:

esphome:
  platform: ESP8266
  board: d1_mini                    # Модель ESP, в данном случае WEMOS D1 mini
  name: "132-pompa-fikus-kaktus"    # имя
  name_add_mac_suffix: false       
# автоматизация выключения помпы при загрузке на всякий случай
  on_boot:     
  - priority: 600                   # При загрузке 
    then:
      - switch.turn_off: pompa
  - priority: 200                   # При включении Wifi контрольный
    then:
      - switch.turn_off: pompa

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:     # Закрепленный IP используется, в том числе, как ID устройства в таблицах
    static_ip: 192.168.1.132
    gateway: 192.168.1.1
    subnet: 255.255.255.0

logger:   

api:
  password: "12345"

web_server: 
  port: 80 

ota:
  password: "12345"
  on_progress:
    then:
      - logger.log:
          format: "OTA progress %0.1f%%"
          args: ["x"]

# Инициализация I2C шины
i2c:
  sda: D2    # GPIO 5
  scl: D1    # GPIO 4
  scan: True
  id: bus_a

#   Универсальный сенсор BMP280 на I2c
sensor:           
  - platform: bmp280
    temperature:
      name: "132 Temperature"
      oversampling: 16x
    pressure:
      name: "132 Pressure"
    address: 0x76
    update_interval: 20s

#  Аналоговый сенсор влажности почвы
  - platform: adc
    pin: A0
    name: "132 Terra Humidity"
    update_interval: 60s
    id: terrahumidity

# Цифровой сенсор влажности да\нет пороговое значение настроивается на плате. Пусть будет
binary_sensor:
  - platform: gpio
    name: "132_Humidity_D"
    pin: 
      number: D6  #  GPIO 12
      mode:
        input: true
#       pullup: true
      inverted: false    
    id: ficusgrowhumiditydigit

#
switch:
  - platform: gpio
    name: "132_pompa"
    icon: "mdi:sprinkler"
    pin:
      number: D5  # GPIO 14
    id: pompa
    inverted: True           # При подаче 0 реле включается, поэтому инверт
    restore_mode: ALWAYS_OFF # При перезагрузке всегда выключен
    on_turn_on:
     - logger.log: "Поливалка включилась"
     - delay: 30s            # Ради безопасности при случайном включении
     - switch.turn_off: pompa
    on_turn_off:
     - logger.log: "Поливалка выключилась"