Умна оранжерия с Home Assistant
Свързваш сензори към ESP32, описваш ги в ESPHome, виждаш всичко в Home Assistant и оставяш вентилатор, светлина и напояване да се управляват по правила — локално, без месечна такса и с предпазители срещу най-честите грешки.
esphome config (ESPHome 2026.9.1, в пясъчник, не на платка) — отговор „Configuration is valid!“; YAML за Home Assistant е проверен само като синтаксис (не е зареждан в HA). Не е тествано на хардуер. Версии към 01.10.2026: Home Assistant 2026.9, ESPHome 2026.9. Поправено: „Добавки → Магазин за добавки“ → Приложения (apps) от HA 2026.2; ESPHome ползва Device Builder; !secret беше в кавички и не работеше; ota: изисква platform: esphome; блокът automation: в ESPHome е невалиден и е заменен с твърд таймер на помпата; новият синтаксис на автоматизациите на HA (triggers / actions); „YL-69 е капацитивен“ — не е, YL-69 е резистивен; Gravity DFR0300 е EC сензор, не pH; коефициентът на YF-S201 беше 0,0045, правилният е 1/450 ≈ 0,002222; DHT22 и SHT31 вече нямат обща „точност“; MH-Z19B не е за „самокалибриране в оранжерия“; „Lovelace“ → табла (Dashboards); „от 80 €“ не съвпадаше с бюджета от ~98 €. Махнато: процентите „−40% вода“, „+20–35% растеж“ и др. (без източник), автоматизацията с CO₂ клапан (опасна за хората) и измислената визуализация на таблото. Непроверено ⚠️: цените в евро и диапазоните за отделните култури са пренесени от старата версия.
01Какво ще научиш
- Кои сензори си струва да вземеш първи и кои са за по-късно.
- Как ESP32 с ESPHome става устройство в Home Assistant, описано с един YAML файл.
- Как се пишат автоматизации с ограничители, за да не залее помпата оранжерията.
- Как да направиш табло със стрелки, история и бутони за ръчно управление.
- Къде са опасностите (мрежово напрежение, вода, CO₂) и как да ги избегнеш.
02Преди да започнеш
- Home Assistant OS 🔒 локално на Raspberry Pi 5 или 4 (поне 2 GB RAM, карта поне 32 GB, по възможност Ethernet кабел), на стар компютър или във виртуална машина.
- ESP32 платка (например „DevKit“ с чип ESP32), USB кабел с данни, бредборд и джъмпъри.
- Минимален набор сензори: DHT22 (въздух), капацитивен сензор за почва и BH1750 (светлина). Останалите са по желание.
- Един нисковолтов актуатор за тест: помпа 5–12 V през MOSFET или релеен модул. Не започвай с мрежово напрежение.
- Познание от урока Arduino и умен дом: пинове, резистори, сериен монитор.
Помпата не бива да зависи от един компютър. Ако Home Assistant се рестартира по средата на „включи, изчакай, изключи“, помпата остава включена. Затова в кода има твърд таймер в самото устройство.
CO₂. В този урок само мерим CO₂. Автоматично подаване от бутилка не е за начинаещи: NIOSH дава граница 5 000 ppm за работна смяна, 30 000 ppm за 15 минути и „непосредствена опасност за живота“ при 40 000 ppm.
03Стъпки
-
Избери сензорите
Защо? Всеки сензор е нова връзка, която може да се развали. Започни с малко, за да виждаш какво мериш.
Какво мерим Сензор Връзка Бележка Температура и влажност на въздуха DHT22 (по-прецизен: SHT31) 1 пин + резистор 10 kΩ към 3,3 V DHT22 е евтин и достатъчен за старт; SHT31 (I2C) е по-стабилен във влага. Влажност на почвата Капацитивен сензор, аналогов изход ADC YL-69/YL-38 са резистивни и корозират. Калибрирай сам. Светлина BH1750 I2C Мери lux (за хора), не PAR. Добро за тенденции. CO₂ MH-Z19B (по-точен: SCD40) UART / I2C SCD40: ±(50 ppm + 5%) в 400–2000 ppm по данните на Sensirion. Температура на водата DS18B20 (водоустойчив) 1-Wire + резистор 4,7 kΩ Един пин за няколко сензора. Разход на вода YF-S201 импулси Обхват 1–30 L/min; малка капкова помпа може да тече под това. pH и EC на хранителния разтвор Atlas Scientific EZO или Gravity I2C / аналогово За по-късно. Gravity DFR0300 е EC сензор, не pH. 💡Капацитивен или резистивенКапацитивният сензор не прекарва ток през почвата, затова не корозира по електродите. Срокът на живот зависи от запечатването на краищата — обещание „3+ години“ от старата версия не успяхме да потвърдим. -
Захранване, релета и свързване
Защо този ред? Първо захранването и защитите, после сигналите. Повечето повреди идват от захранването.
- ESP32: 5 V USB захранване, добре със запас; всички сензори — към 3,3 V, освен ако изрично изискват 5 V.
- Помпа 12 V: MOSFET модул или релеен модул, с диод срещу обратно напрежение върху двигателя, отделно захранване и обща маса с ESP32.
- Много релейни модули са с активно ниско управление — тогава в ESPHome добавяш
inverted: true. - За кутията ползвай IP65; кабелите влизат отдолу, с „водно коляно“.
Пин на ESP32 (примерен) Какво свързва GPIO21 / GPIO22 I2C: BH1750 (SDA / SCL) GPIO13 DHT22 (данни) GPIO34 Сензор за почва (ADC1, само вход) GPIO4 DS18B20 (1-Wire) GPIO16 / GPIO17 UART: MH-Z19B (RX / TX) GPIO18 Разходомер YF-S201 (импулси) GPIO26 / GPIO27 / GPIO25 Помпа / вентилатор / светлина ⚠️Капан: не всички пинове са равниПиновете се различават между платките — провери схемата на твоята. За аналогови сензори ползвай ADC1 (като GPIO34): ADC2 пиновете не работят надеждно при включен Wi-Fi. Разходомерът YF-S201 се захранва с 4,5 V и повече; сигналът към ESP32 трябва да е най-много 3,3 V — сверяване със схемата на модула ⚠️ (не е пробвано на платка). -
Инсталирай Home Assistant OS
Следвай официалната инсталация за твоя хардуер (образ за Raspberry Pi 4 или 5 — две различни връзки). Защо OS? Само тази инсталация ти дава приложенията (apps), включително ESPHome. След старта отвори адреса, показан от инсталатора (по подразбиране
homeassistant.local:8123), и създай потребител.Ако нямаш устройство: Home Assistant Green е готова кутия; виртуална машина на стар компютър също върши работа.
-
Инсталирай ESPHome и първото устройство
В Home Assistant: Settings → Apps → Install app → ESPHome Device Builder (в българския интерфейс: Настройки → Приложения; превода не сме сверявали ⚠️). Стартирай приложението и натисни New device. Първото качване става по USB (през браузъра Chrome или Edge, или с web.esphome.io); следващите — по въздуха (OTA).
Парола за Wi-Fi? Не в YAML файла, а в
secrets.yaml— виж долу. -
Опиши платката в YAML
Защо YAML? Един текстов файл описва цялата платка — сензори, превключватели и защити. Файлът по-долу е валидиран с
esphome config(ESPHome 2026.9.1); на платка не е пускан. Имената са на английски нарочно — така идентификаторите в Home Assistant са предвидими (sensor.greenhouse_node_1_air_temperature).YAML · secrets.yaml (примерни стойности — сложи свои)wifi_ssid: "име-на-твоята-мрежа" wifi_password: "твоята-парола-за-wifi" fallback_password: "друга-дълга-парола" api_key: "ключ, генериран от ESPHome при създаване на устройство" ota_password: "трета-дълга-парола"YAML · greenhouse.yaml — ESPHomeesphome: name: greenhouse-node-1 friendly_name: Greenhouse node 1 esp32: board: esp32dev framework: type: esp-idf logger: api: encryption: key: !secret api_key ota: - platform: esphome password: !secret ota_password wifi: ssid: !secret wifi_ssid password: !secret wifi_password ap: ssid: "Greenhouse Fallback" password: !secret fallback_password # I2C bus: BH1750 light sensor i2c: sda: GPIO21 scl: GPIO22 scan: true # 1-Wire bus: DS18B20 water temperature (4.7 kOhm pull-up to 3.3 V) one_wire: - platform: gpio pin: GPIO4 # UART: MH-Z19B CO2 sensor uart: id: mhz_uart tx_pin: GPIO17 rx_pin: GPIO16 baud_rate: 9600 sensor: - platform: dht pin: GPIO13 # DHT22 data pin + 10 kOhm pull-up to 3.3 V model: DHT22 temperature: name: "Air temperature" humidity: name: "Air humidity" update_interval: 30s - platform: mhz19 uart_id: mhz_uart co2: name: "CO2" update_interval: 30s automatic_baseline_calibration: false - platform: bh1750 name: "Light" address: 0x23 update_interval: 30s - platform: adc # capacitive soil sensor, analogue output pin: GPIO34 # ADC1 pin: works while Wi-Fi is on id: soil_moisture name: "Soil moisture" attenuation: 12db update_interval: 60s unit_of_measurement: "%" accuracy_decimals: 0 filters: - calibrate_linear: # EXAMPLE values: measure your own dry / wet - 2.80 -> 0 # sensor in air - 1.20 -> 100 # sensor in a glass of water - clamp: min_value: 0 max_value: 100 - platform: dallas_temp name: "Water temperature" update_interval: 30s - platform: pulse_counter # YF-S201 flow meter (1-30 L/min) pin: GPIO18 name: "Water flow" unit_of_measurement: "L/min" accuracy_decimals: 2 filters: - multiply: 0.002222 # 1/450 (450 pulses per litre) total: name: "Water used" unit_of_measurement: "L" accuracy_decimals: 2 filters: - multiply: 0.002222 - platform: wifi_signal name: "Wi-Fi signal" update_interval: 60s binary_sensor: - platform: status name: "Status" switch: - platform: gpio pin: GPIO26 id: irrigation_pump name: "Irrigation pump" restore_mode: ALWAYS_OFF # inverted: true # uncomment for active-low relay modules on_turn_on: - delay: 3min # hard stop on the device, even if Home Assistant is down - switch.turn_off: irrigation_pump - platform: gpio pin: GPIO27 name: "Fan" restore_mode: ALWAYS_OFF - platform: gpio pin: GPIO25 name: "Grow light" restore_mode: ALWAYS_OFF✅Три правила в този файл1)!secretсе пише без кавички — в кавички става обикновен текст. 2) Стойностите за почвения сензор (2,80 V → 0% и 1,20 V → 100%) са пример: измери сензора на въздух и в чаша вода. 3) Разходомерът: 450 импулса на литър е данни на типа YF-S201; тоест 1/450 ≈ 0,002222. Разликите между екземплярите са значителни — сверявай с мерителна кана.💡Защо MH-Z19B е с изключена автоматична калибровкаАвтоматичната корекция на нулата (ABC) приема, че поне веднъж на ден сензорът вижда чист въздух (около 400 ppm). В затворена оранжерия растенията през деня свалят CO₂ и такава предпоставка не е гарантирана, затова я изключваме. Ако искаш ръчна калибровка, ESPHome изисква 20 минути стабилна среда от около 400 ppm навън. -
Приеми устройството в Home Assistant
След качването устройството се появява под Settings → Devices & services като открито ESPHome устройство — потвърди и въведи ключа за шифроване. Всеки сензор и превключвател става обект (entity). Провери идентификаторите им в списъка с обекти — в автоматизациите по-долу се предполага името „Greenhouse node 1“.
-
Автоматизации — с ограничители
Защо? Правило „тригер → условие → действие“ е лесно; трудното е да не остави нещо включено. Тук: вентилатор с хистерезис (включва се при 30 °C, изключва при 26 °C), напояване най-много два пъти на ден, твърд таймер на помпата в устройството и известие при изчезнал контролер.
YAML · automations.yaml — Home Assistant- alias: "Greenhouse: fan on when hot" triggers: - trigger: numeric_state entity_id: sensor.greenhouse_node_1_air_temperature above: 30 for: minutes: 2 conditions: - condition: time after: "07:00:00" before: "21:00:00" actions: - action: switch.turn_on target: entity_id: switch.greenhouse_node_1_fan - action: notify.mobile_app_your_phone data: title: "Greenhouse: high temperature" message: "Air temperature is {{ states('sensor.greenhouse_node_1_air_temperature') }} °C" - alias: "Greenhouse: fan off when cool" triggers: - trigger: numeric_state entity_id: sensor.greenhouse_node_1_air_temperature below: 26 for: minutes: 2 actions: - action: switch.turn_off target: entity_id: switch.greenhouse_node_1_fan - alias: "Greenhouse: watering (max twice a day)" mode: single triggers: - trigger: time at: "07:00:00" - trigger: time at: "17:00:00" conditions: - condition: numeric_state entity_id: sensor.greenhouse_node_1_soil_moisture below: 35 actions: - action: switch.turn_on target: entity_id: switch.greenhouse_node_1_irrigation_pump - delay: minutes: 2 - action: switch.turn_off target: entity_id: switch.greenhouse_node_1_irrigation_pump - alias: "Greenhouse: sensor offline" triggers: - trigger: state entity_id: binary_sensor.greenhouse_node_1_status to: "off" for: minutes: 10 actions: - action: notify.mobile_app_your_phone data: title: "Greenhouse: node offline" message: "The greenhouse controller has been offline for 10 minutes."⚠️Капан: известията и идентификаторитеУслугата за известия се казваnotify.mobile_app_<име-на-телефона>— замениyour_phoneсъс своето, като инсталираш приложението Companion. Идентификаторите на обектите провери в Home Assistant, преди да пуснеш правило. Напояването по график е с праг 35% — той е пример; настрой го според калибровката.✅Правило: два слоя защита на помпатаСлой 1: в Home Assistant —mode: single, най-много две включвания на ден (в 07:00 и 17:00, по 2 минути) и условие за влажност. Слой 2: в самото устройство — помпата се изключва сама след 3 минути, дори Home Assistant да не работи. Първия тест прави с празна чаша вода и гледаш с очи.💡Осветление и сезониСветлина по прагове на lux (например включване под 2000 lx между 05:00 и 22:00) добавяш по същия модел. Прагове за лято и зима можеш да държиш в помощник „Input select“. Числата са примери — настрой ги според културата и според твоя BH1750. -
Направи табло
Начин 1: в Home Assistant отвори Settings → Dashboards, създай табло и добави карти от интерфейса (карта с уред, история, плочка, списък с обекти). Начин 2: Edit dashboard → ⋮ → Raw configuration editor и постави YAML. Вградените карти са достатъчни; общностният магазин HACS 🌐 глобален добавя карти като Mini Graph Card и Mushroom (неофициални; внимавай какво инсталираш).
YAML · dashboard — Home Assistanttitle: Greenhouse views: - title: Overview icon: mdi:greenhouse cards: - type: gauge entity: sensor.greenhouse_node_1_air_temperature name: Air temperature min: 0 max: 50 severity: green: 0 yellow: 30 red: 38 - type: gauge entity: sensor.greenhouse_node_1_soil_moisture name: Soil moisture min: 0 max: 100 - type: history-graph title: CO2 and light, last 24 h hours_to_show: 24 entities: - sensor.greenhouse_node_1_co2 - sensor.greenhouse_node_1_light - type: entities title: Controls entities: - switch.greenhouse_node_1_irrigation_pump - switch.greenhouse_node_1_fan - switch.greenhouse_node_1_grow_lightОтдалечен достъп. Не отваряй Home Assistant директно към интернет. Варианти: Home Assistant Cloud от Nabu Casa (платена; в ЕС около €7,50 на месец или €75 на година — сверявай на официалната страница ⚠️) или собствен VPN.
-
Бюджет и параметри по култури — ориентири ⚠️
Числата в тази стъпка са пренесени от старата версия и не са сверени с източник на 01.10.2026. Ползвай ги като отправна точка, не като факт. Цените на Raspberry Pi през 2026 г. се вдигнаха заради цената на паметта — виж текущата преди покупка.
Ниво Какво включва Ориентир (€) Начинаещ Raspberry Pi 4 (2 GB) + карта, 2 × ESP32, 2 × DHT22, 3 капацитивни сензора за почва, BH1750, релеен модул, помпа 5 V, захранвания ~98 (сума на старите цени) Средно Raspberry Pi 5 + NVMe, 3 × ESP32-S3, 3 × SHT31, MH-Z19B, 2 × DS18B20, pH сензор, Wi-Fi релета, разходомер, LED светлина 45 W, шкаф ~299 Напреднал Home Assistant Green или мини компютър, 6 × ESP32-S3, SCD40, Atlas pH и EC, Zigbee, капкова система, LED 200 W, UPS и IP65 шкаф, таблет ~977 Култура Т° ден (°C) Т° нощ (°C) Влажност (%) pH на водата Домати 22–26 16–18 60–70 6,0–6,5 Краставици 24–28 18–20 70–80 6,0–7,0 Пипер 23–27 16–18 60–70 6,0–6,8 Маруля и листни 18–22 12–15 50–70 6,0–7,0 Билки (босилек, магданоз) 20–24 15–18 50–65 6,0–7,0 Ягоди 18–24 10–14 60–75 5,5–6,5 Броколи и зеле 15–20 8–12 60–80 6,0–7,5 Орхидеи 18–25 14–18 60–80 5,5–6,5 📈Какво да очакваш от резултатитеСтарият урок обещаваше „−35–40% вода“ и „+20–35% растеж“. Без източник не ги повтаряме. Измери сам: разходомерът дава литрите, таблото — историята. Сравни две седмици преди и след автоматизацията.
04Проверка
Чеклист
- Home Assistant OS работи; ESPHome Device Builder е инсталирано като приложение.
esphome config greenhouse.yamlказва „Configuration is valid“.- Устройството се вижда в Home Assistant и всеки сензор показва правдоподобна стойност.
- Сензорът за почва е калибриран (измерени са стойности на сухо и във вода).
- Помпата се изключва сама след 3 минути, когато спреш Home Assistant.
- Има правило за изключване на вентилатора и известие при изчезнал контролер.
- Нищо мрежово не е в мократа зона; помпата е нисковолтова.
Тест
1. Как се записва паролата за Wi-Fi в YAML на ESPHome?
2. Защо помпата има таймер в самото устройство?
3. Кой сензор за почва е резистивен и корозира?
4. Как се казват „добавките“ в Home Assistant от версия 2026.2?
05Какво следва
06Източници
- Home Assistant: installation — Типове инсталация.
- Home Assistant on Raspberry Pi — Pi 4 или 5, поне 2 GB, карта поне 32 GB.
- Home Assistant Apps — Приложенията (по-рано add-ons).
- Home Assistant Dashboards и Gauge — Таблата и картата с уред.
- Automations — Тригери, условия, действия.
- Companion app — Известия
notify.mobile_app_…. - Home Assistant Cloud — Платеният отдалечен достъп.
- ESPHome: Getting started with Home Assistant — Device Builder.
- DHT · MH-Z19 · BH1750 · ADC · Dallas · Pulse counter · GPIO switch — Документацията на компонентите.
- ESPHome Web — Първо качване от браузъра.
- Sensirion SCD40 — Точност ±(50 ppm + 5%) в 400–2000 ppm.
- DFRobot Gravity Analog EC Meter — DFR0300 е EC сензор.
- NIOSH: Carbon dioxide — Граници на експозиция.
- HACS — Общностен магазин за карти (неофициален).