Skip to content

Instantly share code, notes, and snippets.

@AbleMonster
Last active June 19, 2025 18:01
Show Gist options
  • Select an option

  • Save AbleMonster/22ec7cf1339b8a746719c4b016bc67d1 to your computer and use it in GitHub Desktop.

Select an option

Save AbleMonster/22ec7cf1339b8a746719c4b016bc67d1 to your computer and use it in GitHub Desktop.
Gartenbewässerung
blueprint:
name: Smarte Gartenbewässerung komplett (ohne Skripte)
description: >
Steuerung der Gartenbewässerung mit optionaler Pumpe, Füllstandskontrolle, Bodenfeuchte- und Regenprüfung,
Zonensteuerung für Rasen, Hochbeet, Gemüse und Sträucher sowie manuelle Steuerung über Input Selects.
Automatische oder manuelle Dauer möglich. Startzeit optional oder manuell über Input Select.
Wasserverbrauch wird optional berücksichtigt und am Ende gemeldet.
domain: automation
input:
# Zonen + manuelle Steuerung + Dauer
zonen_rasen:
name: Rasen-Zonen (Ventil oder Schalter)
default: []
selector:
entity:
multiple: true
filter:
- domain: switch
- domain: valve
manuell_rasen_select:
name: Manuelle Rasensteuerung (Input Select)
selector:
entity:
domain: input_select
manuelle_dauer_rasen:
name: Manuelle Dauer Rasen (Minuten, 0 = automatisch)
default: 0
selector:
number:
min: 0
max: 120
zonen_hochbeet:
name: Hochbeet-Zonen
default: []
selector:
entity:
multiple: true
filter:
- domain: switch
- domain: valve
manuell_hochbeet_select:
name: Manuelle Hochbeetsteuerung
selector:
entity:
domain: input_select
manuelle_dauer_hochbeet:
name: Manuelle Dauer Hochbeet (Minuten, 0 = automatisch)
default: 0
selector:
number:
min: 0
max: 120
zonen_gemuese:
name: Gemüse-Zonen
default: []
selector:
entity:
multiple: true
filter:
- domain: switch
- domain: valve
manuell_gemuese_select:
name: Manuelle Gemüsesteuerung
selector:
entity:
domain: input_select
manuelle_dauer_gemuese:
name: Manuelle Dauer Gemüse (Minuten, 0 = automatisch)
default: 0
selector:
number:
min: 0
max: 120
zonen_straeucher:
name: Sträucher-Zonen
default: []
selector:
entity:
multiple: true
filter:
- domain: switch
- domain: valve
manuell_straeucher_select:
name: Manuelle Sträuchersteuerung
selector:
entity:
domain: input_select
manuelle_dauer_straeucher:
name: Manuelle Dauer Sträucher (Minuten, 0 = automatisch)
default: 0
selector:
number:
min: 0
max: 120
# Wasserquelle
wasserquelle:
name: Wasserquelle auswählen
default: "leitungswasser"
selector:
select:
options:
- label: Leitungswasser
value: leitungswasser
- label: Regenwasser / Zisterne
value: regenwasser
min_fuellstand:
name: Mindestfüllstand für Pumpenstart (nur bei Regenwasser relevant)
default: 100
selector:
number:
min: 0
max: 10000
# Pumpe
pumpe:
name: Pumpe (optional)
default: null
selector:
entity:
domain: switch
pumpenverzoegerung:
name: Pumpenverzögerung (Sekunden)
default: 5
selector:
number:
min: 1
max: 60
# Füllstand
fuellstand:
name: Füllstand Sensor (optional, nur bei Regenwasser auswählen)
default: null
selector:
entity:
domain: sensor
# Bodenfeuchte
bodenfeuchte_sensor:
name: Bodenfeuchte Sensor (optional)
default: null
selector:
entity:
domain: sensor
bodenfeuchte_verwenden:
name: Bodenfeuchte verwenden?
default: false
selector:
boolean: {}
bodenfeuchte_schwelle:
name: Bodenfeuchte Schwellenwert (%)
default: 30
selector:
number:
min: 0
max: 100
# Regen
regen_sensor:
name: Regenmenge letzte 3 Tage
default: null
selector:
entity:
domain: sensor
regen_grenze:
name: Regenmenge Schwelle (mm)
default: 10
selector:
number:
min: 0
max: 100
# Zeit
startzeit:
name: Startzeit (optional)
default: null
selector:
time: {}
# Parallel oder sequentiell
bewasserung_parallel:
name: Bewässerung parallel oder sequentiell? (aktiv = parallel alle Zonen)
default: true
selector:
boolean: {}
# Optionaler Wasserverbrauch (Liter pro Minute)
wasserverbrauch_l_pm_aktiv:
name: Wasserverbrauch pro Minute angeben?
default: false
selector:
boolean: {}
wasserverbrauch_l_pm:
name: Wasserverbrauch (Liter pro Minute)
default: 10
selector:
number:
min: 0
max: 1000
trigger:
- platform: time
at: !input startzeit
- platform: state
entity_id: !input manuell_rasen_select
to: "Start"
- platform: state
entity_id: !input manuell_hochbeet_select
to: "Start"
- platform: state
entity_id: !input manuell_gemuese_select
to: "Start"
- platform: state
entity_id: !input manuell_straeucher_select
to: "Start"
variables:
pumpe_entity: !input pumpe
fuellstand_entity: !input fuellstand
min_fuellstand_val: !input min_fuellstand
bodenfeuchte_entity: !input bodenfeuchte_sensor
bodenfeuchte_nutzen: !input bodenfeuchte_verwenden
bodenfeuchte_grenze: !input bodenfeuchte_schwelle
regen_entity: !input regen_sensor
regen_limit: !input regen_grenze
wasserquelle_typ: !input wasserquelle
bewasserung_parallel_val: !input bewasserung_parallel
wasserverbrauch_aktiv: !input wasserverbrauch_l_pm_aktiv
wasserverbrauch_l_pm_val: !input wasserverbrauch_l_pm
zonen:
- name: "Rasen"
liste: !input zonen_rasen
dauer: !input manuelle_dauer_rasen
manuell_select: !input manuell_rasen_select
- name: "Hochbeet"
liste: !input zonen_hochbeet
dauer: !input manuelle_dauer_hochbeet
manuell_select: !input manuell_hochbeet_select
- name: "Gemüse"
liste: !input zonen_gemuese
dauer: !input manuelle_dauer_gemuese
manuell_select: !input manuell_gemuese_select
- name: "Sträucher"
liste: !input zonen_straeucher
dauer: !input manuelle_dauer_straeucher
manuell_select: !input manuell_straeucher_select
action:
# 1. Füllstand prüfen (nur bei Regenwasser und wenn Sensor gesetzt)
- choose:
- conditions:
- condition: template
value_template: >
{{ wasserquelle_typ == "regenwasser" and fuellstand_entity != none and (states(fuellstand_entity) | float(0)) < min_fuellstand_val }}
sequence:
- service: notify.notify
data:
message: >
Bewässerung abgebrochen: Füllstand zu niedrig ({{ states(fuellstand_entity) }} < {{ min_fuellstand_val }}).
- stop: "Füllstand zu niedrig"
# 2. Bodenfeuchte prüfen
- choose:
- conditions:
- condition: template
value_template: >
{{ bodenfeuchte_nutzen and bodenfeuchte_entity != none and (states(bodenfeuchte_entity) | float(100)) >= bodenfeuchte_grenze }}
sequence:
- service: notify.notify
data:
message: >
Bewässerung abgebrochen: Bodenfeuchte ausreichend ({{ states(bodenfeuchte_entity) }}%).
- stop: "Bodenfeuchte ausreichend"
# 3. Regen prüfen (wenn Sensor gesetzt)
- choose:
- conditions:
- condition: template
value_template: >
{{ regen_entity != none and (states(regen_entity) | float(0)) >= regen_limit }}
sequence:
- service: notify.notify
data:
message: >
Bewässerung abgebrochen: Zu viel Regen in den letzten Tagen ({{ states(regen_entity) }} mm).
- stop: "Regenmenge überschritten"
# 4. Dauer pro Zone bestimmen (unter Berücksichtigung Bodenfeuchte)
- variables:
zonen_mit_dauer: >
{% set result = [] %}
{% for z in zonen %}
{% set auto_dauer = 10 %}
{% set dauer = z.dauer | int %}
{% if dauer == 0 %}
{% if bodenfeuchte_nutzen %}
{% set feuchte = states(bodenfeuchte_entity) | float(100) %}
{% set auto_dauer = (10 * (1 - (feuchte / 100) * 0.7)) | round(0, 'ceil') %}
{% if auto_dauer < 3 %}
{% set auto_dauer = 3 %}
{% endif %}
{% endif %}
{% else %}
{% set auto_dauer = dauer %}
{% endif %}
{% set _ = result.append({'name': z.name, 'liste': z.liste, 'dauer': auto_dauer, 'manuell_select': z.manuell_select}) %}
{% endfor %}
{{ result }}
# 5. Pumpe einschalten (optional)
- choose:
- conditions:
- condition: template
value_template: "{{ pumpe_entity != none }}"
sequence:
- service: switch.turn_on
target:
entity_id: "{{ pumpe_entity }}"
- delay:
seconds: !input pumpenverzoegerung
# 6. Bewässerung starten (parallel oder sequenziell)
- choose:
- conditions:
- condition: template
value_template: "{{ bewasserung_parallel_val }}"
sequence:
# Parallel: alle Zonen zusammen einschalten
- service: homeassistant.turn_on
target:
entity_id: >
{{ zonen_mit_dauer
| selectattr('liste', '!=', [])
| map(attribute='liste')
| flatten
| join(',') }}
- delay:
minutes: >
{% set max_dauer = zonen_mit_dauer | map(attribute='dauer') | max %}
{{ max_dauer if max_dauer > 0 else 10 }}
- service: homeassistant.turn_off
target:
entity_id: >
{{ zonen_mit_dauer
| selectattr('liste', '!=', [])
| map(attribute='liste')
| flatten
| join(',') }}
- conditions:
- condition: template
value_template: "{{ not bewasserung_parallel_val }}"
sequence:
# Sequenziell: jede Zone einzeln bewässern
- repeat:
for_each: "{{ zonen_mit_dauer }}"
sequence:
- choose:
- conditions:
- condition: template
value_template: "{{ repeat.item.liste | length > 0 }}"
sequence:
- service: homeassistant.turn_on
target:
entity_id: "{{ repeat.item.liste }}"
- delay:
minutes: "{{ repeat.item.dauer if repeat.item.dauer > 0 else 10 }}"
- service: homeassistant.turn_off
target:
entity_id: "{{ repeat.item.liste }}"
# 7. Wasserverbrauch berechnen und Warnung ausgeben (optional)
- variables:
gesamt_dauer: >
{% if bewasserung_parallel_val %}
{% set max_dauer = zonen_mit_dauer | map(attribute='dauer') | max %}
{{ max_dauer if max_dauer > 0 else 10 }}
{% else %}
{% set sum_dauer = zonen_mit_dauer | map(attribute='dauer') | sum %}
{{ sum_dauer if sum_dauer > 0 else 10 }}
{% endif %}
gesamt_verbrauch: >
{% if wasserverbrauch_aktiv %}
{{ (gesamt_dauer | float) * wasserverbrauch_l_pm_val | round(1) }}
{% else %}
0
{% endif %}
- choose:
- conditions:
- condition: template
value_template: "{{ wasserverbrauch_aktiv and gesamt_verbrauch > 0 }}"
sequence:
- service: notify.notify
data:
message: >
Bewässerung abgeschlossen. Gesamtwasserverbrauch: {{ gesamt_verbrauch }} Liter.
# 8. Warnung bei Regenwasser & niedrigem Füllstand (während Bewässerung)
- choose:
- conditions:
- condition: template
value_template: >
{{ wasserquelle_typ == "regenwasser" and fuellstand_entity != none and (states(fuellstand_entity) | float(0)) < min_fuellstand_val }}
sequence:
- service: notify.notify
data:
message: >
Warnung: Regenwasser wird bewässert, aber Füllstand ist niedrig ({{ states(fuellstand_entity) }} Liter).
# 9. Pumpe ausschalten (optional)
- choose:
- conditions:
- condition: template
value_template: "{{ pumpe_entity != none }}"
sequence:
- service: switch.turn_off
target:
entity_id: "{{ pumpe_entity }}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment