Skip to content

Instantly share code, notes, and snippets.

@AbleMonster
Created June 23, 2025 20:24
Show Gist options
  • Save AbleMonster/7b06e8ba431c4162eedd830216ce5835 to your computer and use it in GitHub Desktop.
Save AbleMonster/7b06e8ba431c4162eedd830216ce5835 to your computer and use it in GitHub Desktop.
Bewässerung V1.1 Eng.
blueprint:
name: Smart Garden Irrigation V1.0 beta
description: >
Controls garden irrigation with optional pump, water level monitoring, soil moisture and rain check,
zone control for lawn, raised beds, vegetables, and shrubs, plus manual control via input selects.
Duration can be automatic or manual. Flexible start time (fixed, night, sunset/sunrise with offset)
or manually via input select.
domain: automation
input:
# Zones + manual control + duration
zonen_rasen:
name: Lawn Zones (Valve or Switch)
default: []
selector:
entity:
multiple: true
filter:
- domain: switch
- domain: valve
manuell_rasen_select:
name: Manual Lawn Control (Input Select)
selector:
entity:
domain: input_select
manuelle_dauer_rasen:
name: Manual Lawn Duration (Minutes, 0 = automatic)
default: 0
selector:
number:
min: 0
max: 120
zonen_hochbeet:
name: Raised Bed Zones (Valve or Switch)
default: []
selector:
entity:
multiple: true
filter:
- domain: switch
- domain: valve
manuell_hochbeet_select:
name: Manual Raised Bed Control (Input Select)
selector:
entity:
domain: input_select
manuelle_dauer_hochbeet:
name: Manual Raised Bed Duration (Minutes, 0 = automatic)
default: 0
selector:
number:
min: 0
max: 120
zonen_gemuese:
name: Vegetable Zones (Valve or Switch)
default: []
selector:
entity:
multiple: true
filter:
- domain: switch
- domain: valve
manuell_gemuese_select:
name: Manual Vegetable Control (Input Select)
selector:
entity:
domain: input_select
manuelle_dauer_gemuese:
name: Manual Vegetable Duration (Minutes, 0 = automatic)
default: 0
selector:
number:
min: 0
max: 120
zonen_straeucher:
name: Shrub Zones (Valve or Switch)
default: []
selector:
entity:
multiple: true
filter:
- domain: switch
- domain: valve
manuell_straeucher_select:
name: Manual Shrub Control (Input Select)
selector:
entity:
domain: input_select
manuelle_dauer_straeucher:
name: Manual Shrub Duration (Minutes, 0 = automatic)
default: 0
selector:
number:
min: 0
max: 120
# Water source
wasserquelle:
name: Select Water Source
default: "tap_water"
selector:
select:
options:
- label: Tap Water
value: tap_water
- label: Rainwater / Cistern
value: rainwater
min_fuellstand:
name: Minimum Fill Level for Pump Activation (only relevant for rainwater)
default: 100
selector:
number:
min: 0
max: 50000
# Pump
pumpe:
name: Pump (optional)
default: null
selector:
entity:
domain: switch
pumpenverzoegerung:
name: Pump Delay (Seconds)
default: 5
selector:
number:
min: 1
max: 60
# Fill level
fuellstand:
name: Fill Level Sensor (optional, select only for rainwater)
default: null
selector:
entity:
domain: sensor
# Soil moisture
bodenfeuchte_sensor:
name: Soil Moisture Sensor (optional)
default: null
selector:
entity:
domain: sensor
bodenfeuchte_verwenden:
name: Use Soil Moisture?
default: false
selector:
boolean: {}
bodenfeuchte_schwelle:
name: Soil Moisture Threshold (%)
default: 30
selector:
number:
min: 0
max: 100
# Rain
regen_grenze:
name: Rain Amount Threshold (mm)
default: 10
selector:
number:
min: 0
max: 100
regen_sensor:
name: Rain Amount Sensor (optional)
default: null
selector:
entity:
domain: sensor
regen_live_sensor:
name: Rain Sensor (optional, active = rain detected)
default: null
selector:
entity:
domain: binary_sensor
# Water consumption per minute (optional)
wasserverbrauch_pro_minute:
name: Water Consumption per Minute (Liters)
default: 0
description: "Optional: Consumption in liters per minute for total usage calculation."
selector:
number:
min: 0
max: 100
step: 0.1
wasserverbrauch_aktivieren:
name: Enable Water Consumption Calculation?
default: false
selector:
boolean: {}
# Flexible start time
startzeit_option:
name: Choose Start Time Option
default: fixed_time
selector:
select:
options:
- label: Fixed Time (manual input)
value: fixed_time
- label: Night (02:00 AM)
value: night
- label: Sunset with Offset
value: sunset
- label: Sunrise with Offset
value: sunrise
startzeit_fest:
name: Fixed Start Time (if 'Fixed Time' selected)
default: null
selector:
time: {}
startzeit_offset:
name: Offset for Sunrise/Sunset (Minutes, positive = later, negative = earlier)
default: 0
selector:
number:
min: -120
max: 120
# Parallel or sequential
bewasserung_parallel:
name: Irrigation Parallel or Sequential? (true = all zones at once)
default: true
selector:
boolean: {}
trigger:
- platform: time
at: !input startzeit_fest
id: fixed_time
- platform: sun
event: sunset
offset: !input startzeit_offset
id: sunset
- platform: sun
event: sunrise
offset: !input startzeit_offset
id: sunrise
- platform: time
at: "02:00:00"
id: night
variables:
water_source: !input wasserquelle
min_level: !input min_fuellstand
use_soil: !input bodenfeuchte_verwenden
soil_sensor: !input bodenfeuchte_sensor
soil_threshold: !input bodenfeuchte_schwelle
rain_sensor: !input regen_sensor
rain_live_sensor: !input regen_live_sensor
rain_threshold: !input regen_grenze
zones_lawn: !input zonen_rasen
zones_raised: !input zonen_hochbeet
zones_veg: !input zonen_gemuese
zones_shrub: !input zonen_straeucher
manual_lawn: !input manuell_rasen_select
manual_raised: !input manuell_hochbeet_select
manual_veg: !input manuell_gemuese_select
manual_shrub: !input manuell_straeucher_select
pump: !input pumpe
pump_delay: !input pumpenverzoegerung
fill_sensor: !input fuellstand
water_calc: !input wasserverbrauch_aktivieren
water_rate: !input wasserverbrauch_pro_minute
parallel: !input bewasserung_parallel
condition:
- condition: or
conditions:
- condition: template
value_template: "{{ trigger.id == startzeit_option }}"
- condition: template
value_template: >
{{ manual_lawn is defined and states(manual_lawn) != 'off' or
manual_raised is defined and states(manual_raised) != 'off' or
manual_veg is defined and states(manual_veg) != 'off' or
manual_shrub is defined and states(manual_shrub) != 'off' }}
action:
- choose:
- conditions:
- condition: template
value_template: >
{{ water_source == 'rainwater' and fill_sensor is defined and
(fill_sensor | float(0)) < min_level }}
sequence:
- service: persistent_notification.create
data:
title: Irrigation blocked
message: Fill level too low for pump!
- conditions:
- condition: template
value_template: >
{{ use_soil and soil_sensor is defined and
(states(soil_sensor) | float(0)) > soil_threshold }}
sequence:
- service: persistent_notification.create
data:
title: Irrigation not necessary
message: Soil moisture above threshold.
- conditions:
- condition: template
value_template: >
{{ rain_sensor is defined and (states(rain_sensor) | float(0)) > rain_threshold }}
sequence:
- service: persistent_notification.create
data:
title: Irrigation skipped
message: Rain amount above threshold.
- conditions:
- condition: template
value_template: >
{{ rain_live_sensor is defined and is_state(rain_live_sensor, 'on') }}
sequence:
- service: persistent_notification.create
data:
title: Irrigation stopped
message: Rain detected by live sensor.
- conditions: []
sequence:
- if:
- condition: template
value_template: "{{ pump is defined }}"
then:
- service: switch.turn_on
target:
entity_id: !input pumpe
- delay:
seconds: !input pumpenverzoegerung
- choose:
- conditions:
- condition: template
value_template: "{{ parallel }}"
sequence:
- service: homeassistant.turn_on
target:
entity_id: "{{ zones_lawn + zones_raised + zones_veg + zones_shrub }}"
- conditions: []
sequence:
- service: homeassistant.turn_on
target:
entity_id: "{{ zones_lawn }}"
- delay:
minutes: "{{ manuelle_dauer_rasen if manuelle_dauer_rasen > 0 else 10 }}"
- service: homeassistant.turn_off
target:
entity_id: "{{ zones_lawn }}"
- service: homeassistant.turn_on
target:
entity_id: "{{ zones_raised }}"
- delay:
minutes: "{{ manuelle_dauer_hochbeet if manuelle_dauer_hochbeet > 0 else 5 }}"
- service: homeassistant.turn_off
target:
entity_id: "{{ zones_raised }}"
- service: homeassistant.turn_on
target:
entity_id: "{{ zones_veg }}"
- delay:
minutes: "{{ manuelle_dauer_gemuese if manuelle_dauer_gemuese > 0 else 5 }}"
- service: homeassistant.turn_off
target:
entity_id: "{{ zones_veg }}"
- service: homeassistant.turn_on
target:
entity_id: "{{ zones_shrub }}"
- delay:
minutes: "{{ manuelle_dauer_straeucher if manuelle_dauer_straeucher > 0 else 7 }}"
- service: homeassistant.turn_off
target:
entity_id: "{{ zones_shrub }}"
- if:
- condition: template
value_template: "{{ pump is defined }}"
then:
- service: switch.turn_off
target:
entity_id: !input pumpe
- if:
- condition: template
value_template: "{{ water_calc and water_rate > 0 }}"
then:
- service: persistent_notification.create
data:
title: Water usage
message: >
Water used: {{
( (manuelle_dauer_rasen if manuelle_dauer_rasen > 0 else 10) +
(manuelle_dauer_hochbeet if manuelle_dauer_hochbeet > 0 else 5) +
(manuelle_dauer_gemuese if manuelle_dauer_gemuese > 0 else 5) +
(manuelle_dauer_straeucher if manuelle_dauer_straeucher > 0 else 7)
) * water_rate
}} liters.
mode: single
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment