Skip to content

Instantly share code, notes, and snippets.

@AbleMonster
Last active June 20, 2025 05:26
Show Gist options
  • Select an option

  • Save AbleMonster/612e524d8d53737581b9a24362c5f359 to your computer and use it in GitHub Desktop.

Select an option

Save AbleMonster/612e524d8d53737581b9a24362c5f359 to your computer and use it in GitHub Desktop.
Bewässerung 1.1
blueprint:
name: Smarte Gartenbewässerung V1.0 beta
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. Flexible Startzeit (fest, nachts, Sonnenuntergang/-aufgang mit Offset)
oder manuell über Input Select.
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 (Ventil oder Schalter)
default: []
selector:
entity:
multiple: true
filter:
- domain: switch
- domain: valve
manuell_hochbeet_select:
name: Manuelle Hochbeetsteuerung (Input Select)
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 (Ventil oder Schalter)
default: []
selector:
entity:
multiple: true
filter:
- domain: switch
- domain: valve
manuell_gemuese_select:
name: Manuelle Gemüsesteuerung (Input Select)
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 (Ventil oder Schalter)
default: []
selector:
entity:
multiple: true
filter:
- domain: switch
- domain: valve
manuell_straeucher_select:
name: Manuelle Sträuchersteuerung (Input Select)
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: 50000
# 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_grenze:
name: Regenmenge Schwelle (mm)
default: 10
selector:
number:
min: 0
max: 100
regen_sensor:
name: Regenmenge Sensor (optional)
default: null
selector:
entity:
domain: sensor
regen_live_sensor:
name: Regensensor (optional, aktiv = Regen erkannt)
default: null
selector:
entity:
domain: binary_sensor
# Wasserverbrauch pro Minute (optional)
wasserverbrauch_pro_minute:
name: Wasserverbrauch pro Minute (Liter)
default: 0
description: "Optional: Verbrauch in Litern pro Minute für Berechnung Gesamtverbrauch."
selector:
number:
min: 0
max: 100
step: 0.1
wasserverbrauch_aktivieren:
name: Wasserverbrauch Berechnung aktivieren?
default: false
selector:
boolean: {}
# Flexible Startzeit
startzeit_option:
name: Startzeit Option wählen
default: feste_zeit
selector:
select:
options:
- label: Feste Zeit (manuelle Eingabe)
value: feste_zeit
- label: Nachts (02:00 Uhr)
value: nachts
- label: Sonnenuntergang mit Offset
value: sonnenuntergang
- label: Sonnenaufgang mit Offset
value: sonnenaufgang
startzeit_fest:
name: Feste Startzeit (wenn 'Feste Zeit' gewählt)
default: null
selector:
time: {}
startzeit_offset:
name: Offset für Sonnenaufgang/-untergang (Minuten, positiv = später, negativ = früher)
default: 0
selector:
number:
min: -120
max: 120
# Parallel oder sequentiell
bewasserung_parallel:
name: Bewässerung parallel oder sequentiell? (aktiv = alle Zonen gleichzeitig)
default: true
selector:
boolean: {}
trigger:
- platform: state
entity_id:
- !input manuell_rasen_select
- !input manuell_hochbeet_select
- !input manuell_gemuese_select
- !input manuell_straeucher_select
to: "Start"
- platform: time
at: !input startzeit_fest
- platform: time
at: "02:00:00"
- platform: sun
event: sunset
offset: "{{ states('input_number.startzeit_offset')|default(0)|int }}m"
condition:
condition: template
value_template: "{{ is_state(input_select.startzeit_option, 'sonnenuntergang') }}"
- platform: sun
event: sunrise
offset: "{{ states('input_number.startzeit_offset')|default(0)|int }}m"
condition:
condition: template
value_template: "{{ is_state(input_select.startzeit_option, 'sonnenaufgang') }}"
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
regen_live_entity: !input regen_live_sensor
wasserquelle_typ: !input wasserquelle
bewasserung_parallel_val: !input bewasserung_parallel
wasserverbrauch_pro_minute_val: !input wasserverbrauch_pro_minute
wasserverbrauch_aktivieren_val: !input wasserverbrauch_aktivieren
zonen:
- name: "Rasen"
liste: !input zonen_rasen
dauer: !input manuelle_dauer_rasen
- name: "Hochbeet"
liste: !input zonen_hochbeet
dauer: !input manuelle_dauer_hochbeet
- name: "Gemüse"
liste: !input zonen_gemuese
dauer: !input manuelle_dauer_gemuese
- name: "Sträucher"
liste: !input zonen_straeucher
dauer: !input manuelle_dauer_straeucher
action:
- 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"
- 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"
- 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"
- choose:
- conditions:
- condition: template
value_template: >
{{ regen_live_entity != none and is_state(regen_live_entity, 'on') }}
sequence:
- service: notify.notify
data:
message: "Bewässerung abgebrochen: Es regnet aktuell ({{ regen_live_entity }})."
- stop: "Aktueller Regen erkannt"
- choose:
- conditions:
- condition: template
value_template: "{{ pumpe_entity != none }}"
sequence:
- service: switch.turn_on
target:
entity_id: "{{ pumpe_entity }}"
- delay:
seconds: !input pumpenverzoegerung
- variables:
dauer_liste: >
{% set result = [] %}
{% for z in zonen %}
{% set dauer = z.dauer %}
{% if dauer == 0 %}
{% if bodenfeuchte_nutzen and bodenfeuchte_entity != none %}
{% set feuchte = states(bodenfeuchte_entity)|float(0) %}
{% set adj_dauer = (10 * (1 - (feuchte/100)*0.7))|round(0,'ceil') %}
{% else %}
{% set adj_dauer = 10 %}
{% endif %}
{% else %}
{% set adj_dauer = dauer %}
{% endif %}
{% set _ = result.append(adj_dauer) %}
{% endfor %}
{{ result }}
- choose:
- conditions:
- condition: template
value_template: "{{ bewasserung_parallel_val }}"
sequence:
- service: homeassistant.turn_on
target:
entity_id: >
{% set list=[] %}
{% for z in zonen %}
{% for e in z.liste %}
{% set _ = list.append(e) %}
{% endfor %}
{% endfor %}
{{ list|join(',') }}
- delay:
minutes: "{{ dauer_liste|max }}"
- service: homeassistant.turn_off
target:
entity_id: >
{% set list=[] %}
{% for z in zonen %}
{% for e in z.liste %}
{% set _ = list.append(e) %}
{% endfor %}
{% endfor %}
{{ list|join(',') }}
- conditions:
- condition: template
value_template: "{{ not bewasserung_parallel_val }}"
sequence:
- repeat:
count: "{{ zonen|length }}"
sequence:
- service: homeassistant.turn_on
target:
entity_id: "{{ zonen[repeat.index-1].liste|join(',') }}"
- delay:
minutes: "{{ dauer_liste[repeat.index-1] }}"
- service: homeassistant.turn_off
target:
entity_id: "{{ zonen[repeat.index-1].liste|join(',') }}"
- choose:
- conditions:
- condition: template
value_template: "{{ pumpe_entity != none }}"
sequence:
- service: switch.turn_off
target:
entity_id: "{{ pumpe_entity }}"
- choose:
- conditions:
- condition: template
value_template: >
{{ wasserverbrauch_aktivieren_val and wasserverbrauch_pro_minute_val>0 }}
sequence:
- variables:
gesamt_dauer: "{{ dauer_liste|sum }}"
gesamt_verbrauch: "{{ (gesamt_dauer*wasserverbrauch_pro_minute_val)|round(1) }}"
- service: notify.notify
data:
message: >
Bewässerung beendet. Gesamtverbrauch: {{ gesamt_verbrauch }} Liter.
mode: single
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment