| blueprints/automation/kleckerbox | ||
| .gitignore | ||
| README.md | ||
🌿 Smarte Gartenbewässerung — Home Assistant Blueprint
Automatisierungs-Blueprint für eine mehrstufige Gartenbewässerung mit 6 Zonen, Bodenfeuchte-Steuerung, Wettervorhersage, Hardware-Failsafes und Not-Aus.
Aktuelle Version: V4.1 · Home Assistant 2024.4+
Inhalt
- Features
- Installation
- Einstellungs-Referenz
- Ablauf eines Durchlaufs
- Benachrichtigungen
- Troubleshooting
- Bekannte Einschränkungen
- Changelog
Features
🗺️ 6 Zonen, unabhängig konfigurierbar
Rasen · Hochbeet · Gemüse · Sträucher · Vorgarten · Kräuter — jede als auf-/zuklappbare Section:
- Aktiv-Toggle — Zone deaktivieren ohne die Konfiguration zu verlieren
- Ventile & Schalter gemischt —
valve.*peropen_valve/close_valve,switch.*perturn_on/turn_off(automatischer Domain-Split) - Eigener Bodenfeuchte-Sensor + eigene Schwelle (%)
- Dauer (0 = automatisch) und Max. Dauer im Automatikmodus
- Wasserquelle Leitungswasser / Regenwasser mit ↳ 🪣 Füllstand-Sensor, Mindestfüllstand, Pumpe und Pumpen-Vorlaufzeit
- Ventil-Timer — Hardware-Failsafe, siehe unten
- Wasserverbrauch (L/min) für den Bericht
💧 Bodenfeuchte-Logik
Schwelle pro Zone (Default 30 %) — zugleich Start-Kriterium und Zielwert zum Abschalten im Automatikmodus.
| Situation | Verhalten |
|---|---|
| Feuchte ≥ Schwelle beim Start | Zone übersprungen — auch bei manueller Dauer |
| Dauer > 0 | Feste Laufzeit |
| Dauer = 0 + Sensor | Bewässern bis Schwelle erreicht, max. „Max. Dauer" |
| Dauer = 0 ohne Sensor | Fallback 10 min |
Sensor unavailable/unknown |
Fallback 10 min + ⚠️ Warnmeldung |
🌤️ Wetterprüfung (UND-Logik)
Abbruch ⟺ Niederschlag ≥ mm-Schwelle UND Wahrscheinlichkeit ≥ %-Schwelle
- Daily-Forecast über N+1 Tage — der heutige Rest-Tag wird immer mitgeprüft, da dessen Restmenge abends nahe 0 liegt
- %-Schwelle 0 = deaktiviert (nur mm zählt)
- Fehlt
precipitation_probability, wird 100 % angenommen — die mm-Prüfung bleibt so wirksam - OpenWeatherMap liefert beide Werte (empfohlen); Met.no liefert im daily-Forecast keine Wahrscheinlichkeit
- Retry bei API-Fehlern über konfigurierbares Zeitbudget; danach wahlweise ohne Wetterprüfung fortsetzen (Default) oder Tag überspringen
🌡️ Temperatur-Schutz
Min/Max gegen die aktuelle Temperatur. Quelle: Temperatur-Sensor, sonst
Fallback auf state_attr(wetter_entity, 'temperature') — ein eigener Sensor
ist also optional.
🌧️ Regen-Sensoren
Regenmenge-Sensor (historisch, z. B. Tagesregen der Wetterstation) mit Schwelle sowie optionaler Live-Regensensor (Binärsensor).
🕐 Flexible Startzeit
Feste Zeit · Nachts (02:00) · Sonnenauf-/-untergang mit Offset (HH:MM,
negativ = früher). Trigger-IDs + Condition sorgen dafür, dass nur die gewählte
Option auslöst. Manueller Start über den „Ausführen"-Button funktioniert immer.
🔁 Robustheit gegen Geräte- und Cloud-Fehler
Cloud-gebundene Ventile (Tuya u. ä.) werfen sporadisch Fehler wie
network error (-9999999). Das Blueprint fängt das ab:
continue_on_errorauf allen Geräte-Aufrufen — ein Fehler bricht die Automation nicht mehr ab- Retry für Ventile, Timer und Pumpen; wiederholt wird nur für Entities, die noch nicht den Zielzustand melden
- Pause zwischen Befehlen (Default 1 s) gegen Rate-Limits
- Timer-Clamping — Werte werden auf
min/maxder Number-Entity begrenzt
✅ Ventil-Verifikation
Prüft nach konfigurierbarer Wartezeit (Default 15 s), ob Ventile wirklich
open melden. Bei Abweichung ⚠️ Push-Warnung; die Bewässerung läuft weiter
(falsch-negative Zustandsmeldungen sind bei Funk-Geräten möglich).
🛡️ Ventil-Timer als Hardware-Failsafe
Unterstützt das Ventil einen eigenen Zeitschalter (z. B.
number.rf_wasseruhr_bewasserungsdauer_1), wird dieser vor jedem Öffnen auf
geplante Dauer + 60 s gesetzt. Das Ventil schließt dann selbst, falls HA
ausfällt oder der Schließbefehl verloren geht.
⚠️ Liegt das Maximum der Number-Entity unter dem berechneten Wert, greift das Clamping — die Hardware schließt dann vor dem Blueprint. Zonen-Dauer entsprechend unter das Hardware-Maximum setzen.
🛑 Not-Aus
mode: restart bricht einen laufenden Durchlauf sofort ab, schließt alle
Ventile, schaltet Schalter-Zonen und Pumpen aus und meldet, was aktiv war.
Auslöser: input_button oder input_boolean.
Installation
- Datei kopieren nach:
config/blueprints/automation/kleckerbox/Gartenbewässerung.yaml - Entwicklerwerkzeuge → YAML → Automatisierungen neu laden
- Einstellungen → Automatisierungen & Szenen → Automatisierung erstellen → Blueprint → „Smarte Gartenbewässerung V4.1"
Update einer bestehenden Automation
Nach dem Ersetzen der Datei: Automationen neu laden, dann die Automation öffnen und erneut speichern — erst dabei kompiliert HA neue Trigger und Inputs. Neue Felder müssen einmalig gesetzt werden.
Verwaiste Einträge aus älteren Versionen können in der YAML-Ansicht der
Automation gelöscht werden, z. B. bodenfeuchte_schwelle (jetzt pro Zone),
max_bewaesserungsdauer (jetzt pro Zone).
Not-Aus einrichten
- Einstellungen → Geräte & Dienste → Helfer → Taster anlegen
(z. B.
input_button.bewaesserung_stop) - In der Automation: ⚙️ Allgemein → „Not-Aus aktivieren" an, Taster als Auslöser wählen, speichern
- Dashboard-Button:
type: button name: Bewässerung STOP icon: mdi:water-off tap_action: action: call-service service: input_button.press target: entity_id: input_button.bewaesserung_stop
Einstellungs-Referenz
Pro Zone
| Feld | Default | Bedeutung |
|---|---|---|
| Zone aktiviert? | an | Deaktivierte Zonen werden komplett übersprungen |
| Zonen-Entities | – | Ventile und/oder Schalter (gemischt erlaubt) |
| Dauer | 0 | Minuten; 0 = Automatikmodus |
| Max. Dauer im Automatikmodus | 30 | Obergrenze wenn Dauer = 0 |
| Bodenfeuchte-Sensor | – | Optional |
| ↳ Bodenfeuchte-Schwelle | 30 % | Start-Kriterium und Abschalt-Ziel |
| Ventil-Timer | – | Number-Entity(s) für Hardware-Failsafe |
| 🚰 Wasserquelle | Leitungswasser | Leitungswasser / Regenwasser |
| ↳ 🪣 Füllstand-Sensor | – | Nur bei Regenwasser ausgewertet |
| ↳ 🪣 Mindestfüllstand | 100 | Darunter wird die Zone übersprungen |
| ↳ 🪣 Pumpe | – | Auch bei Leitungswasser nutzbar (Druckerhöhung) |
| ↳ 🪣 Pumpenverzögerung | 5 s | Vorlauf bevor die Ventile öffnen |
| Wasserverbrauch | 0 | L/min für den Bericht |
Global
| Sektion | Feld | Default |
|---|---|---|
| 💧 Bodenfeuchte | Bodenfeuchte verwenden? | aus |
| 🌡️ Temperatur | Sensor · aktiv · Min · Max | – · aus · 5 °C · 38 °C |
| 🌤️ Wetter | Entity · aktiv · Zeitraum · mm · % | – · aus · 1 Tag · 5 mm · 0 % |
| 🌤️ Wetter | Retry-Dauer · Intervall · Fehlerverhalten | 10 min · 60 s · fortsetzen |
| 🌧️ Regen | Regenmenge-Sensor · Schwelle · Live-Sensor | – · 10 mm · – |
| 🕐 Startzeit | Option · Feste Zeit · Offset | feste_zeit · 06:00 · 00:00 |
| ⚙️ Allgemein | Parallelbewässerung | an |
| ⚙️ Allgemein | Wasserverbrauch-Bericht | aus |
| ⚙️ Allgemein | Benachrichtigungs-Gerät / -Label | – |
| ⚙️ Allgemein | Pause zwischen Geräte-Befehlen | 1 s |
| ⚙️ Allgemein | Wiederholversuche · Wartezeit | 3 · 10 s |
| ⚙️ Allgemein | Ventil-Verifikation | 15 s |
| ⚙️ Allgemein | Not-Aus aktivieren · Auslöser | aus · – |
Ablauf eines Durchlaufs
Trigger (Zeit / Sonne / manuell / Not-Aus)
│
├─ Not-Aus? ──► alles schließen, melden, Ende
│
├─ Wettervorhersage (mit Retry) ──► Abbruch bei mm UND %
├─ Regenmenge gemessen ──► Abbruch bei ≥ Schwelle
├─ Live-Regensensor ──► Abbruch wenn aktiv
├─ Temperatur ──► Abbruch außerhalb Min/Max
│
├─ Dauer je Zone berechnen (aktiv? Füllstand? Feuchte? Dauer?)
├─ Alle Zonen übersprungen? ──► Meldung, Ende
├─ Tote Sensoren? ──► ⚠️ Warnung, weiter
│
├─ PARALLEL: Timer setzen → Pumpen an → alle Zonen an →
│ Verifikation → Minuten-Schleife (Zonen einzeln aus) →
│ Sicherheits-Aus → Pumpen aus
│
└─ SEQUENZIELL: je Zone: Timer → Pumpe → an → Verifikation →
wait_template/Delay → aus → Pumpe aus (falls
keine spätere Zone sie braucht)
│
└─ Bericht (opt-in)
Benachrichtigungen
Ziele: Gerät (Device-Picker, mobile_app) und/oder Label (alle Geräte
mit diesem Label), dedupliziert, Fallback notify.notify.
| Typ | Anlass |
|---|---|
| Abbruch | Regen vorhergesagt · Regenmenge gemessen · Live-Regen · Temperatur außerhalb · alle Zonen übersprungen |
| ⚠️ Warnung | Bodenfeuchte-Sensor nicht verfügbar · Ventil meldet nicht open · Vorhersage nicht abrufbar |
| 🛑 Not-Aus | Bestätigung mit Liste der gestoppten Geräte |
| ✅ Bericht | Nach dem Lauf (opt-in): Zonen, Laufzeiten, Verbrauch getrennt nach Leitungs-/Regenwasser |
Nicht gemeldet werden: einzelne Schaltvorgänge und der Start eines Laufs.
Label-Auflösung prüfen
{% set ns = namespace(s=[]) %}
{% for d in label_devices('dein_label') %}
{% set ns.s = ns.s + ['notify.mobile_app_' ~ device_attr(d, 'name') | slugify] %}
{% endfor %}
Geräte: {{ label_devices('dein_label') | length }}
Services: {{ ns.s }}
label_devices() erwartet die Label-ID (Slug), nicht den Anzeigenamen.
Das Label sollte nur Companion-App-Geräte enthalten.
Troubleshooting
„Es wird nicht bewässert, obwohl es trocken ist"
Trace öffnen (Automation → ⋮ → Traces) und den stop-Grund lesen. Häufig:
- Feuchte ≥ Zonenschwelle — gilt seit V2.6 auch bei manueller Dauer
- Zone nicht aktiv oder ohne zugewiesene Entities
- Temperatur-Min zu hoch — 15 °C blockiert kühle Sommernächte; für reinen Frostschutz reichen 3–5 °C
- Füllstand unter Mindestwert (nur bei Regenwasser)
Sensorwerte prüfen:
{% for s in ['sensor.beispiel_1', 'sensor.beispiel_2'] %}
{{ s }}: {{ states(s) }}
{% endfor %}
„Der Wetter-Zweig wird übersprungen (bypassed)"
Das ist korrekt, wenn keine der Schwellen erreicht ist — bei 0 mm Vorhersage soll bewässert werden. Vorhersagewerte einsehen:
action: weather.get_forecasts
target:
entity_id: weather.openweathermap
data:
type: daily
network error (-9999999) Remote api run unknown failed
Cloud-gebundene Ventil-Integration. Prüfreihenfolge:
- Einzelaufrufe testen —
valve.open_valve, dannnumber.set_valuemit dem tatsächlich berechneten Wert (Dauer × 60 + 60), nicht nur einem kleinen min/maxder Number-Entity in Entwicklerwerkzeuge → Zustände prüfen- Schlägt nur die Schnellfolge fehl → Pause auf 2–3 s erhöhen
- Vollständiges Log: Einstellungen → System → Protokolle → „Vollständiges Protokoll"
Funktionieren Einzelaufrufe und tritt der Fehler nur sporadisch auf, ist es ein
transienter Cloud-Aussetzer — genau dafür sind Retry und continue_on_error
gedacht. Dauerlösung wäre eine lokale Anbindung (LocalTuya, Zigbee2MQTT).
„Not-Aus-Button tut nichts"
In der YAML-Ansicht der Automation prüfen, ob beide Inputs gesetzt sind:
notaus_aktivieren: true
notaus_ausloeser:
- input_button.bewaesserung_stop
Fehlen sie, wurde die Automation nach dem Blueprint-Update nicht neu gespeichert. Bei leerem Auslöser feuert der Trigger nie.
„Keine Benachrichtigungen"
- Service direkt testen:
action: notify.mobile_app_dein_geraet data: message: Test - Label-Auflösung prüfen (siehe oben)
- Prüfen, ob überhaupt ein Anlass bestand — bei problemlosem Lauf und deaktiviertem Bericht ist Stille das erwartete Verhalten
Bekannte Einschränkungen
- Kein bedingtes Ausblenden von Feldern — das Blueprint-Schema unterstützt
es nicht. Zusammengehörige Felder sind mit
↳ 🪣gekennzeichnet. - Keine verschachtelten Sections — nur eine Ebene möglich.
- Verbrauchsbericht rechnet bei Automatikzonen mit der Max-Dauer, nicht der tatsächlichen Laufzeit.
mode: restart— ein regulärer Trigger während eines laufenden Durchlaufs startet diesen neu (bei einer Startzeit pro Tag irrelevant).- Minuten-Granularität im Parallelmodus: Zonen werden auf Minutengrenzen abgeschaltet.
Jinja2- und HA-Fallstricke
Im Blueprint bewusst berücksichtigt:
| Thema | Umsetzung |
|---|---|
list.append() blockiert die Sandbox |
namespace()-Pattern |
sun-Trigger-Offset akzeptiert keine Templates |
fester HH:MM-String |
float() wandelt unavailable still zu 0.0 |
explizite Zustandsprüfung vorher |
valve kennt kein turn_on/turn_off |
open_valve/close_valve |
Verschachtelte repeat überschreiben repeat.item |
vorher in Variablen sichern |
Manueller Start hat kein trigger-Objekt |
trigger is not defined in der Condition |
Changelog
| Version | Änderung |
|---|---|
| V4.1 | Toggle "Ventil-Timer setzen?" — abschaltbar bei Integrationsfehlern |
| V4.0 | Timer-Call entfällt wenn der Wert bereits ausreicht (weniger API-Last) |
| V3.9 | Timer-Werte auf Entity-Bereich begrenzt; Pause zwischen Geräte-Befehlen |
| V3.8 | Fix: Geräte-/Cloud-Fehler brechen die Automation nicht mehr ab; Retry für Ventile, Timer, Pumpen |
| V3.7 | Retry bei Wetter-API-Fehlern (Dauer, Intervall, Fehlerverhalten konfigurierbar) |
| V3.6 | Bodenfeuchte-Schwelle pro Zone statt global |
| V3.5 | Hardware-Ventil-Timer pro Zone (Failsafe, Dauer + 60 s Puffer) |
| V3.4 | Ventil-Verifikation nach Öffnen-Befehl mit ⚠️ Warnung |
| V3.3 | Not-Aus integriert (mode: restart, Toggle + Auslöser in Allgemein) |
| V3.2 | Pumpenfelder visuell zur Wasserquelle gruppiert |
| V3.1 | Regenwasser-Felder visuell gruppiert (↳ 🪣) |
| V3.0 | Max. Automatik-Dauer pro Zone statt global |
| V2.9 | Schutz vor unavailable/unknown Sensoren + Warnmeldung |
| V2.8 | Fix: valve-Domain korrekt per open_valve/close_valve — vorher öffneten Ventile nie |
| V2.7 | Wetterprüfung als UND-Verknüpfung (mm UND %) |
| V2.6 | Feuchte-Schwelle gilt immer; Automatik bewässert bis Schwelle |
| V2.5 | Benachrichtigung zusätzlich per Label |
| V2.4 | 24-h-Fenster per Zeitstempel statt Eintragszahl |
| V2.3 | Temperatur mit Wetter-Entity-Fallback |
| V2.2 | Forecast-Fenster N+1; mm-Slider 0–30 |
| V2.1 | Benachrichtigungs-Gerät als Device-Picker |
| V2.0 | Zone Kräuter |
| V1.9 | Fix: manueller Start; leere Zonen; Pumpen-Schonung; Notify konfigurierbar |
| V1.8 | Fix: namespace statt list.append() (Sandbox) |
| V1.7 | Zone Vorgarten |
| V1.6 | Aktiv-Toggle pro Zone |
| V1.5 | Input-Selects entfernt (manueller Start über HA) |
| V1.4 | Fix: Sun-Offset-Format; Trigger-IDs + Condition; Temperatur-Schutz |
| V1.3 | Wettervorhersage; Wasserquelle & Pumpe pro Zone; Verbrauch je Quelle |
| V1.2 | Sections (auf-/zuklappbar); Bodenfeuchte-Sensor pro Zone |
| V1.0 | Ursprungsversion |