Спасти рядового Кактуса. Интеграция фикуса в Home Assistant
В доме живёт фикус по имени Кактус. Почему он, будучи фикусом, имеет собственное имя Кактус история долгая и к этому рассказу отношения не имеющая. Факт в том, что дерево заслуженное, с историей.
В общем он жил, не тужил, но случилось, так, что нам пришлось надолго уехать. Поливать фикус некому, таскать с собой двухметровое дерево как-то неловко, а обречь его на верную погибель рука не поднялась.
Быстро пробежав по рынку систем автополива понял, что ни одна из них меня, по большому счёту, не устраивает. Подключать к водопроводу было боязно — случись что — зальёт весь дом. Сколько льют — непонятно. С какой частотой настраивать полив — хорошо бы мерять влажность почвы и т.д.
Тут взгляд упал на стоящую без дела 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: "Поливалка выключилась"