Smart Lighting
Outdoor lighting for the garden.
Smart garden irrigation saves up to 50% water by using weather data, soil moisture, and intelligent schedules. Stop watering when it rains, and ensure your plants get exactly the amount of water they need.
| Type | Description | Installation | Price |
|---|---|---|---|
| Sprinkler controller | Replaces existing timer | Electrical work | 💰💰 |
| Hose timer | Mounts on faucet | Simple | 💰 |
| Drip system | For raised beds/pots | DIY | 💰 |
| DIY ESPHome | Full control | Advanced | 💰 |
graph TD A[Do you have existing sprinkler system?] -->|Yes| B[Rachio or B-hyve] A -->|No| C[Watering type?] C -->|Garden hose| D[Orbit B-hyve XD] C -->|Drip system| E[Eve Aqua or Zigbee valve] C -->|DIY| F[OpenSprinkler or ESPHome]Price: ~$180 (8 zones)
Rachio 3 is the market leader in smart irrigation:
Disadvantages:
Models:
| Model | Zones | Price ~ |
|---|---|---|
| Rachio 3 | 8 | $180 |
| Rachio 3 | 16 | $230 |
| Rachio 3e | 8 | $130 |
⚠️ Requires 24V AC transformer (often included)
Pro tip: Take photos of all wires!
Native integration - easy setup:
# Settings → Devices → Rachio# Use your Rachio API key
# Entities:# - switch.rachio_zone_1# - switch.rachio_zone_2# - binary_sensor.rachio_rain_delay# - sensor.rachio_daily_water_usage
# Example: Skip watering on rainautomation: - alias: "Skip watering on rain" trigger: - platform: state entity_id: weather.home attribute: forecast condition: - condition: template value_template: > {{ state_attr('weather.home', 'forecast')[0].precipitation > 0.2 }} action: - service: rachio.set_rain_delay data: entity_id: switch.rachio_zone_1 duration: 86400 # 24 hours
- alias: "Notification on watering" trigger: - platform: state entity_id: switch.rachio_zone_1 to: "on" action: - service: notify.mobile_app data: title: "Garden Irrigation" message: "Zone 1 is watering for 15 minutes"Buy: Amazon, Rachio.com
Price: ~$95 (8 zones)
B-hyve provides nearly the same features at half the price:
Disadvantages:
Models:
| Model | Zones | Location | Price ~ |
|---|---|---|---|
| B-hyve | 6 | Indoor | $80 |
| B-hyve | 12 | Indoor | $100 |
| B-hyve XR | 8 | Outdoor | $120 |
The app guides you through:
Via HACS custom integration:
# HACS → Integrations → B-hyve# Requires Orbit account login
# Entities:# - switch.bhyve_zone_1# - sensor.bhyve_next_watering
# Example: Water based on soil moistureautomation: - alias: "Water on low soil moisture" trigger: - platform: numeric_state entity_id: sensor.garden_soil_moisture below: 30 condition: - condition: time after: "05:00:00" before: "07:00:00" - condition: state entity_id: binary_sensor.rain_today state: "off" action: - service: switch.turn_on entity_id: switch.bhyve_zone_1 - delay: "00:15:00" - service: switch.turn_off entity_id: switch.bhyve_zone_1Buy: Amazon, Home Depot
Price: ~$190 (8 zones)
OpenSprinkler is open source and 100% local:
Disadvantages:
Models:
| Model | Type | Price ~ |
|---|---|---|
| OpenSprinkler 3.2 | Standalone | $190 |
| OSPi | Raspberry Pi HAT | $110 |
| OpenSprinkler DC | 9V battery | $165 |
# Install OpenSprinkler on Picd ~git clone https://github.com/OpenSprinkler/OpenSprinkler-Firmware.gitcd OpenSprinkler-Firmwaresudo ./build.sh ospi# OpenSprinkler integration# Settings → Devices → OpenSprinkler
# Or via MQTT:mqtt: switch: - name: "Garden Zone 1" state_topic: "opensprinkler/zone/1/state" command_topic: "opensprinkler/zone/1/cmd" payload_on: "ON" payload_off: "OFF"
# Example: Advanced watering automationautomation: - alias: "Smart watering with ET" trigger: - platform: time at: "05:00:00" condition: - condition: template value_template: > {{ states('sensor.evapotranspiration') | float > 0.12 }} - condition: template value_template: > {{ states('sensor.soil_moisture') | float < 40 }} action: - service: switch.turn_on entity_id: switch.garden_zone_1 - delay: minutes: > {{ (states('sensor.evapotranspiration') | float * 120) | int }} - service: switch.turn_off entity_id: switch.garden_zone_1Buy: OpenSprinkler.com
For gardens without sprinkler systems - mount directly on faucet:
| Product | Protocol | Price ~ | HA Integration |
|---|---|---|---|
| Orbit B-hyve XD | Bluetooth/WiFi | $65 | Via B-hyve integration |
| Eve Aqua | Thread/HomeKit | $100 | Via HomeKit |
| Zigbee water valve | Zigbee | $40 | Direct |
| Meross Smart Water Timer | WiFi | $55 | Via Meross integration |
# B-hyve integration via HACS# Supports hose timers too
automation: - alias: "Water raised bed every evening" trigger: - platform: sun event: sunset offset: "+01:00:00" condition: - condition: numeric_state entity_id: sensor.openweathermap_precipitation below: 0.1 action: - service: switch.turn_on entity_id: switch.bhyve_hose_timer - delay: "00:15:00" - service: switch.turn_off entity_id: switch.bhyve_hose_timerPrice: ~$20
The popular 4-in-1 plant sensor:
# Via Xiaomi BLE integration# Auto-discovered with Bluetooth
# Or via ESPHome Bluetooth Proxy:esphome: name: ble-proxy
esp32: board: esp32dev
bluetooth_proxy: active: true
# Entities in HA:# - sensor.mi_flora_living_room_moisture# - sensor.mi_flora_living_room_temperature# - sensor.mi_flora_living_room_illuminance# - sensor.mi_flora_living_room_conductivity# - sensor.mi_flora_living_room_battery# configuration.yamlplant: tomato_plant: sensors: moisture: sensor.mi_flora_tomato_moisture temperature: sensor.mi_flora_tomato_temperature conductivity: sensor.mi_flora_tomato_conductivity brightness: sensor.mi_flora_tomato_illuminance min_moisture: 20 max_moisture: 60 min_temperature: 59 # Fahrenheit max_temperature: 95 min_conductivity: 350 max_conductivity: 2000 min_brightness: 2000 max_brightness: 50000
# Automation for thirsty plantautomation: - alias: "Notification - Plant thirsty" trigger: - platform: state entity_id: plant.tomato_plant to: "problem" action: - service: notify.mobile_app data: title: "🌱 Plant needs water" message: "Tomato plant has low soil moisture"| Sensor | Protocol | Features | Price ~ |
|---|---|---|---|
| Xiaomi Mi Flora | BLE | Moisture, temp, light, nutrients | $20 |
| ECOWITT soil sensor | 433MHz | Moisture only | $20 |
| SensorPush | BLE/WiFi | Moisture, temp (precise) | $55 |
| ThirdReality | Zigbee | Moisture only | $20 |
automation: - alias: "Skip watering on rain in forecast" trigger: - platform: time at: "04:00:00" # Check before scheduled watering condition: - condition: template value_template: > {% set dominated = namespace(rain=false) %} {% for forecast in state_attr('weather.home', 'forecast')[:2] %} {% if forecast.precipitation > 0.1 %} {% set dominated.rain = true %} {% endif %} {% endfor %} {{ dominated.rain }} action: - service: input_boolean.turn_on entity_id: input_boolean.skip_watering_today - service: notify.mobile_app data: title: "Watering skipped" message: "Rain expected - skipping watering"automation: - alias: "Intelligent garden watering" trigger: - platform: time at: "05:30:00" condition: - condition: numeric_state entity_id: sensor.garden_soil_moisture below: 35 - condition: state entity_id: input_boolean.skip_watering_today state: "off" - condition: template value_template: > {{ states('sensor.openweathermap_precipitation_probability') | float < 40 }} action: - service: switch.turn_on entity_id: switch.garden_zone_1 - delay: "00:20:00" - service: switch.turn_off entity_id: switch.garden_zone_1 - service: switch.turn_on entity_id: switch.garden_zone_2 - delay: "00:15:00" - service: switch.turn_off entity_id: switch.garden_zone_2automation: - alias: "Vacation - Increased watering" trigger: - platform: state entity_id: input_boolean.vacation_mode to: "on" action: - service: rachio.set_schedule data: entity_id: switch.rachio_zone_1 duration: 1800 # 30 min instead of 15 - service: notify.mobile_app data: title: "Vacation mode activated" message: "Watering time increased to 30 min per zone"# esphome/garden_irrigation.yamlesphome: name: garden-irrigation
esp32: board: esp32dev
wifi: ssid: !secret wifi_ssid password: !secret wifi_password
# 4-channel relay module for valvesswitch: - platform: gpio pin: GPIO16 name: "Garden Zone 1 - Lawn" id: zone_1
- platform: gpio pin: GPIO17 name: "Garden Zone 2 - Flower bed" id: zone_2
- platform: gpio pin: GPIO18 name: "Garden Zone 3 - Raised bed" id: zone_3
- platform: gpio pin: GPIO19 name: "Garden Zone 4 - Hedge" id: zone_4
# Soil moisture sensor (capacitive)sensor: - platform: adc pin: GPIO34 name: "Lawn Soil Moisture" update_interval: 60s unit_of_measurement: "%" filters: - calibrate_linear: - 0.0 -> 100.0 # Wet - 3.3 -> 0.0 # Dry - sliding_window_moving_average: window_size: 5 send_every: 5
# Auto-off after 30 min (safety)script: - id: auto_off_zone_1 then: - delay: 30min - switch.turn_off: zone_1Smart Lighting
Outdoor lighting for the garden.
Energy Management
Monitor garden water usage.
Last updated: December 2025