В доме живёт фикус по имени Кактус. Почему он, будучи фикусом, имеет собственное имя Кактус история долгая и к этому рассказу отношения не имеющая. Факт в том, что дерево заслуженное, с историей.
В общем он жил, не тужил, но случилось, так, что нам пришлось надолго уехать. Поливать фикус некому, таскать с собой двухметровое дерево как-то неловко, а обречь его на верную погибель рука не поднялась.
Быстро пробежав по рынку систем автополива понял, что ни одна из них меня, по большому счёту, не устраивает. Подключать к водопроводу было боязно - случись что - зальёт весь дом. Сколько льют - непонятно. С какой частотой настраивать полив - хорошо бы мерять влажность почвы и т.д.
Тут взгляд упал на стоящую без дела 19 литровую бутылку из-под питьевой воды. Решил констрyировать поливалку из того, что было под руками и палок.
«Под руками», кроме вышеупомянутой бутыли оказались:
Электрическая помпа от него — 300 рублей
Плата Wemos D1 mini — $ 2
Самая мелкая из нашедшихся в доме автомобильная кнопка
Датчик влажности почвы YL-38
Клеммники 2.54
Провода цветные 0.35
Опционально: Датчик 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: "Поливалка выключилась"
