Спасти рядового Кактуса. Интеграция фикуса в Home Assistant

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

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

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

Тут взгляд упал на стоящую без дела 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.

e0af4117247398e14a13cba43495b073.jpg

В родной крышке сзади было просверлено два отверстия — 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: "Поливалка выключилась"

© Habrahabr.ru