Good day!
First of all, thank you for this amazing integration – it is incredibly powerful and well-structured.
This is not a bug report, but rather a request for guidance or clarification.
I have read through the documentation (especially section 9.2 regarding HAsmartirrigation integration) and tried several approaches, but I can’t seem to get everything working as intended.
The concept
- Smart Irrigation sensors calculate durations.
- These durations should be passed to the respective IU zones via
adjust_time.
- If conditions are met (bucket below threshold and duration > 0),
adjust_time should update the IU zones.
- After the scheduled run, the Smart Irrigation bucket should be reset.
- The scheduled run should appear in the timeline (status:
scheduled), not only when manually started.
Problems I’m encountering
adjust_time is executed correctly at 23:15, but IU does not apply the schedule – no next_duration, no scheduled run in the timeline.
load_schedule is called right after, but it has no visible effect. The sequence remains inactive.
manual_run on the sequence (c1_s1) does not start anything, even when durations were adjusted correctly.
- The 04:30 automation that checks
next_duration and should trigger the run never fires, because no schedule is created.
irrigation_unlimited_finish (used to trigger the bucket reset) has never fired, because the sequence has never completed.
- Only the daily reset automation at 12:00 (resetting all zones to
"00:00") is confirmed to work reliably.
- No errors in logs – but IU stays "empty" despite automation logic working correctly.
I would really appreciate if someone from the community could have a look at my setup and help me figure out if I’m missing something fundamental. Thanks again for this amazing project!
Version of the custom_component
Version: 2025.6.0
Configuration
# ========================================================================
# 🔧 Irrigation Unlimited Konfiguration
# Diese Datei wird in der configuration.yaml referenziert über:
# irrigation_unlimited: !include irrigation_unlimited.yaml
# ========================================================================
# 💡 Die Granularität gibt die kleinste Zeiteinheit für Planberechnung an.
# 60 Sekunden bedeutet: Werte werden auf volle Minuten gerundet.
granularity: 60
# 💡 Wie oft IU den Zeitplan aktualisiert. Zu niedrige Werte erhöhen Systemlast.
# 30 Sekunden ist ein guter Wert für dynamisch gesetzte Zeitpläne.
refresh_interval: 30
# =========================================================================
# 🌿 Controller: eine logische Einheit, die Zonen steuert.
# Du hast hier nur einen Controller für deine RainBird-Ventile.
# =========================================================================
controllers:
- name: "RainBird Steuerung" # Anzeigename des Controllers im UI
enabled: true # Muss aktiv sein, damit IU diesen Controller verwendet
queue_manual: true # Manuelle Aktionen werden ordentlich eingeordnet (Warteschlange)
preamble: "00:00:05" # Vorbereitungszeit vor Start (z. B. Druckaufbau)
postamble: "00:00:10" # Nachlaufzeit nach Stopp (z. B. Leitung leerlaufen lassen)
# 🔧 Globale Voreinstellungen für ALLE Zonen dieses Controllers
all_zones_config:
allow_manual: true # Manueller Start/Stopp über UI erlaubt
show:
timeline: true # Zeige geplante Zeiten in der Timeline-Karte
user:
actuator: RainBird-ESP # Freie Beschreibung (z. B. Modell, Steuerung)
# =========================================================================
# 💧 Zonen: Jede Zone ist ein Bereich im Garten mit einem eigenen Ventil
# =========================================================================
zones:
- name: Rasen Groß # Beschriftung für das UI
zone_id: "1" # WICHTIG: Muss als String angegeben sein
entity_id: switch.rasenflache_gros # Schaltentität in Home Assistant
enabled: true # Zone ist aktiv
schedules:
- name: Smart IR Dummy # Zeitplan-Name (frei wählbar)
time: "00:00" # Uhrzeit – Dummy (niemals aktiv)
duration: "00:00" # Dummy-Dauer, wird durch adjust_time ersetzt
enabled: true # Muss aktiv sein, sonst wird Plan ignoriert
day: [30] # 30. Tag → nicht existent im Februar = nie aktiv
month: [feb] # Kombination macht Plan inaktiv
schedule_id: smart_ir_z1 # Eindeutige ID für diesen Zeitplan
- name: Rasen Klein
zone_id: "2"
entity_id: switch.rasen_klein
enabled: true
schedules:
- name: Smart IR Dummy
time: "00:00"
duration: "00:00"
enabled: true
day: [30]
month: [feb]
schedule_id: smart_ir_z2
- name: Beet Eingang + Feige
zone_id: "3"
entity_id: switch.hecke_und_beet_eingang
enabled: true
schedules:
- name: Smart IR Dummy
time: "00:00"
duration: "00:00"
enabled: true
day: [30]
month: [feb]
schedule_id: smart_ir_z3
- name: Kiwi Terrasse
zone_id: "4"
entity_id: switch.kiwi_terasse
enabled: true
schedules:
- name: Smart IR Dummy
time: "00:00"
duration: "00:00"
enabled: true
day: [30]
month: [feb]
schedule_id: smart_ir_z4
# =========================================================================
# 🔁 Sequenzen: Definieren die Reihenfolge und den Ablauf mehrerer Zonen
# =========================================================================
sequences:
# ✅ Hauptsequenz – wird täglich per adjust_time und load_schedule befüllt
- name: Smart Irrigation Sequenz # Anzeigename im UI
sequence_id: "1" # Eindeutige ID (wichtig für load_schedule & manual_run)
duration: "00:00" # Dummy – Laufzeit wird per adjust_time gesetzt
delay: "00:00:10" # Verzögerung zwischen Zonen (z. B. Druckangleich)
# 🌿 Ablaufreihenfolge der Zonen (wie bewässert wird)
zones:
- zone_id: "1" # Rasen Groß
duration: "00:00" # Dummy – wird ersetzt
- zone_id: "2" # Rasen Klein
duration: "00:00"
- zone_id: "3" # Beet Eingang + Feige
duration: "00:00"
- zone_id: "4" # Kiwi Terrasse
duration: "00:00"
# 📅 Dummy-Zeitplan, notwendig damit IU die Sequenz überhaupt akzeptiert
# Dieser Plan wird NIE ausgelöst, aber ohne ihn funktioniert manual_run nicht.
schedules:
- name: Dummy
time: "01:00"
day: [30]
month: [feb]
# 🧪 Zusätzliche Dummy-Sequenz (optional, z. B. für Testläufe)
- name: Dummy Sequenz
sequence_id: "999" # Dummy-ID
duration: "00:00"
delay: "00:00:10"
zones:
- zone_id: "1"
duration: "00:00"
- zone_id: "2"
duration: "00:00"
- zone_id: "3"
duration: "00:00"
- zone_id: "4"
duration: "00:00"
schedules:
- name: Dummy
time: "02:00"
day: [30]
month: [feb]
Automationen
alias: Smart Irrigation – IU adjust_time täglich 23:15 Uhr (nur bei Bedarf)
description: Übergibt berechnete Laufzeiten nur bei Bedarf und lädt Zeitplan
triggers:
- at: "23:15:00"
trigger: time
actions:
- repeat:
for_each: "{{ sensor_zonen }}"
sequence:
- variables:
dauer: "{{ states(repeat.item.sensor) | int(0) }}"
bucket: "{{ state_attr(repeat.item.sensor, 'bucket') | float(0) }}"
- if:
- condition: template
value_template: "{{ dauer > 0 and bucket < repeat.item.bucket_limit }}"
then:
- data:
entity_id: "{{ repeat.item.zone }}"
zones: "{{ repeat.item.zone_nr }}"
actual: "{{ dauer | timestamp_custom('%H:%M:%S', false) }}"
action: irrigation_unlimited.adjust_time
- variables:
aktive_zonen: "{{ aktive_zonen + [repeat.item] }}"
- choose:
- conditions:
- condition: template
value_template: "{{ aktive_zonen | length > 0 }}"
sequence:
- data:
schedule_id: "1"
action: irrigation_unlimited.load_schedule
- data:
message: >
[IU Planung 23:15] ✅ Folgende Zonen wurden eingeplant:\n {% for
z in aktive_zonen %} - {{ z.name }} ({{ (states(z.sensor) |
int(0)) // 60 }} min)\n {% endfor %}
action: notify.notify
default:
- data:
message: >-
[IU Planung 23:15] ❌ Keine Bewässerung geplant (alle Zonen Dauer = 0
min)
action: notify.notify
variables:
sensor_zonen:
- sensor: sensor.smart_irrigation_rasen_gross
zone: binary_sensor.irrigation_unlimited_c1_z1
zone_nr: 1
name: 🌾 Rasen Groß
bucket_limit: -20
- sensor: sensor.smart_irrigation_rasen_klein
zone: binary_sensor.irrigation_unlimited_c1_z2
zone_nr: 2
name: 🌱 Rasen Klein
bucket_limit: -20
- sensor: sensor.smart_irrigation_efeu_feige_beet
zone: binary_sensor.irrigation_unlimited_c1_z3
zone_nr: 3
name: 🌿 Beet Eingang + Feige
bucket_limit: -8
- sensor: sensor.smart_irrigation_kiwi_beet
zone: binary_sensor.irrigation_unlimited_c1_z4
zone_nr: 4
name: 🥝 Kiwi Terrasse
bucket_limit: -8
aktive_zonen: []
mode: queued
max: 10
alias: Smart Irrigation – IU Sequenzplan laden (23:16 Uhr)
triggers:
- at: "23:16:00"
trigger: time
actions:
- target:
entity_id: irrigation_unlimited.c1_s1
data:
schedule_id: 1
action: irrigation_unlimited.load_schedule
- data:
message: |
[IU LoadSchedule 23:16] ✅ Sequenzplan „Smart Irrigation“ wurde geladen.
action: notify.notify
mode: single
alias: Smart Irrigation – IU Sequenz starten bei Bedarf (04:30 Uhr)
description: Startet IU-Sequenz nur bei Bedarf – manuell und automatisch nutzbar
triggers:
- at: "04:30:00"
trigger: time
conditions:
- condition: template
value_template: "{{ soll_starten }}"
actions:
- data:
message: |
[IU-Start 04:30] ✅ Geplante Bewässerung wird gestartet
Laufzeiten:
{% for z in zonen_info %}
{{ z }}
{% endfor %}
Gesamt: {{ gesamt_dauer }} Minuten
Ende ca. {{ endzeit }}
action: notify.notify
- data:
entity_id: binary_sensor.irrigation_unlimited_c1_s1
action: irrigation_unlimited.manual_run
variables:
zonen:
- name: 🌾 Rasen Groß
sensor: binary_sensor.irrigation_unlimited_c1_z1
- name: 🌱 Rasen Klein
sensor: binary_sensor.irrigation_unlimited_c1_z2
- name: 🌿 Beet Eingang & Feige
sensor: binary_sensor.irrigation_unlimited_c1_z3
- name: 🥝 Kiwi Terrasse
sensor: binary_sensor.irrigation_unlimited_c1_z4
zonen_info: |
{% set info = [] %} {% for z in zonen %}
{% set sek = state_attr(z.sensor, 'next_duration') | int(0) %}
{% if sek > 0 %}
{% set min = (sek / 60) | round(1) %}
{% set eintrag = z.name ~ ": " ~ min ~ " min" %}
{% set info = info + [eintrag] %}
{% endif %}
{% endfor %} {{ info }}
gesamt_dauer: >
{% set sek = zonen | map(attribute='sensor') | map('state_attr',
'next_duration') | map('int', 0) | sum %} {{ (sek / 60) | round(1) }}
endzeit: >
{% set sek = zonen | map(attribute='sensor') | map('state_attr',
'next_duration') | map('int', 0) | sum %} {{ (now() +
timedelta(seconds=sek)).strftime('%H:%M') }}
soll_starten: >
{% set sek = zonen | map(attribute='sensor') | map('state_attr',
'next_duration') | map('int', 0) | sum %} {{ sek > 0 }}
mode: single
alias: Smart Irrigation – Bucket Reset nach Sequenz-Ende
description: >
Setzt alle Buckets nach erfolgreichem Abschluss der IU-Sequenz zurück und
sendet eine Übersicht mit Endzeit und Laufzeiten je Zone.
triggers:
- event_type: irrigation_unlimited_finish
trigger: event
conditions:
- condition: template
value_template: >
{{ trigger.event.data.entity_id ==
'binary_sensor.irrigation_unlimited_c1_s1' }}
actions:
- variables:
reset_mapping:
irrigation_unlimited.c1.z1: sensor.smart_irrigation_rasen_gross
irrigation_unlimited.c1.z2: sensor.smart_irrigation_rasen_klein
irrigation_unlimited.c1.z3: sensor.smart_irrigation_efeu_feige_beet
irrigation_unlimited.c1.z4: sensor.smart_irrigation_kiwi_beet
zone_names:
irrigation_unlimited.c1.z1: 🌾 Rasen Groß
irrigation_unlimited.c1.z2: 🌱 Rasen Klein
irrigation_unlimited.c1.z3: 🌿 Beet Eingang + Feige
irrigation_unlimited.c1.z4: 🥝 Kiwi Terrasse
reset_zonen: []
- repeat:
for_each: "{{ reset_mapping.items() | list }}"
sequence:
- variables:
zone: "{{ repeat.item[0] }}"
sensor: "{{ repeat.item[1] }}"
dauer: "{{ states(sensor) | int(0) }}"
- condition: template
value_template: "{{ dauer > 0 }}"
- data:
entity_id: "{{ sensor }}"
action: smart_irrigation.reset_bucket
- variables:
reset_zonen: >
{{ reset_zonen + [ { "name": zone_names[zone], "dauer": dauer } ]
}}
- data:
message: >
[IU Abschluss] 🌱 Bewässerung beendet um {{ now().strftime('%H:%M') }}
Uhr
{% for z in reset_zonen %} ✅ {{ z.name }}: {{ (z.dauer / 60) | round(0)
}} min {% endfor %}
action: notify.notify
mode: parallel
alias: AAAAA Smart Irrigation – Reset IU-Zeiten täglich 12:00
triggers:
- at: "12:00:00"
trigger: time
actions:
- data:
entity_id: binary_sensor.irrigation_unlimited_c1_z1
actual: "00:00"
action: irrigation_unlimited.adjust_time
- data:
entity_id: binary_sensor.irrigation_unlimited_c1_z2
actual: "00:00"
action: irrigation_unlimited.adjust_time
- data:
entity_id: binary_sensor.irrigation_unlimited_c1_z3
actual: "00:00"
action: irrigation_unlimited.adjust_time
- data:
entity_id: binary_sensor.irrigation_unlimited_c1_z4
actual: "00:00"
action: irrigation_unlimited.adjust_time
- delay: "00:00:01"
- data:
schedule_id: "1"
action: irrigation_unlimited.load_schedule
mode: single
Good day!
First of all, thank you for this amazing integration – it is incredibly powerful and well-structured.
This is not a bug report, but rather a request for guidance or clarification.
I have read through the documentation (especially section 9.2 regarding HAsmartirrigation integration) and tried several approaches, but I can’t seem to get everything working as intended.
The concept
adjust_time.adjust_timeshould update the IU zones.scheduled), not only when manually started.Problems I’m encountering
adjust_timeis executed correctly at 23:15, but IU does not apply the schedule – nonext_duration, noscheduledrun in the timeline.load_scheduleis called right after, but it has no visible effect. The sequence remains inactive.manual_runon the sequence (c1_s1) does not start anything, even when durations were adjusted correctly.next_durationand should trigger the run never fires, because no schedule is created.irrigation_unlimited_finish(used to trigger the bucket reset) has never fired, because the sequence has never completed."00:00") is confirmed to work reliably.I would really appreciate if someone from the community could have a look at my setup and help me figure out if I’m missing something fundamental. Thanks again for this amazing project!
Version of the custom_component
Version: 2025.6.0
Configuration