Last active
June 19, 2025 18:01
-
-
Save AbleMonster/22ec7cf1339b8a746719c4b016bc67d1 to your computer and use it in GitHub Desktop.
Gartenbewässerung
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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