I’ve a “small” problem, the " input_select.irrigation_unlimited_entities’ is empty.
I put the required files (packages/py) into the right DIR, and it worked for a while, but now it isn’t. I can’t see anything in the log. The integration is working (irrigation is running well…)
Hi, I’m wondering if it’s possible to create, remove, or adjust schedules for each zone directly through the frontend? I’m looking for similar functionality to generic physical irrigation controllers, where you can set a schedule per zone with parameters like those in your Irrigation Unlimited Schedule object. Alternatively, can scheduling and zone durations be managed using templating in the configuration? I’ve read the wiki but I’m still a bit unclear—sorry for any confusion!
You would have to make the overlap 20 seconds for the main valve to remain open all the time (pre + post amble periods).
Alternatively you could create an automation that controls the master valve. Turn on the main valve when zone 1 is running and master turns on and turn off when master turns off and zone 5 is running.
Hi I use irrigation unlimited and find it great. I have a problem with the irrigation chart. It has no data and stays with loading. Can you manage to help me?
Thanks for the reply. Heres my code, can you help me understand what I need to change? I want the zone (1) to open its valve, then the main controller valve to open 10 seconds later. Then all 5 zones open sequentially and then finally close the main valve a few seconds before the last Zone completes its watering. What is currently happening is the main valve opens and closes for each zone activation which is what I want to avoid. (ideally i’d like to avoid using an automation if possible)…
irrigation_unlimited:
controllers:
- name: "Back Garden Irrigation"
entity_id:
- switch.sonoffgardenwatervalve
preamble: '-00:00:10' #Setting to a minus means it open 10 secs after the valve has opened
postamble: '-00:00:10' # Setting to minus means it will close 10 secs before the valve closes
enabled: true
zones:
- entity_id: "switch.sprinkler_relay_right_side_l2"
name: "Right Hand Not Laurels"
- entity_id: "switch.sprinkler_relay_left_side_l1"
name: "Bottom Bed Laurels"
- entity_id: "switch.sprinkler_relay_left_side_l2"
name: "Bottom Bed Flowers"
- entity_id: "switch.sprinkler_relay_left_side_l3"
name: "Raised Beds"
- entity_id: "switch.sprinkler_relay_right_side_l1"
name: "Right Hand Lower Flower Bed"
sequences: # Finish a watering run 10 minutes before sunrise
- name: "Hot Days Watering"
duration: "00:05"
delay: "-00:00:10" # A minus Delay should mean the next valve opens before the last closes
repeat: 2
schedules:
- name: "Before dawn"
time:
sun: "sunrise"
before: "00:10"
anchor: finish
zones:
- zone_id: 1
- zone_id: 2
- zone_id: 3
- zone_id: 4
- zone_id: 5
I am using irrigation unlimited and thx for that. It works well with one controllers. But how to manage multiples controllers ? here is my YAML:
irrigation_unlimited:
controllers:
- name: “Jardin”
all_zones_config:
future_span: 7
show:
timeline: true
zones:
- name: “Pelouse avant 1”
entity_id: “switch.pelouse_avant_1”
- name: “Pelouse avant 2”
entity_id: “switch.pelouse_avant_2”
- name: “Pelouse arrière 1”
entity_id: “switch.pelouse_arriere_3”
- name: “Pelouse arrière 2”
entity_id: “switch.pelouse_arriere_4”
- name: “Pelouse coté”
entity_id: “switch.fleurs_avant”
- name: “Fleurs autour”
entity_id: “switch.pelouse_autour”
- name: “Fleurs Terrase”
entity_id: “switch.pelouse_terrasse”
- name: “Fleurs Entrée”
entity_id: “switch.fleurs_entree”
sequences:
- delay: “00:01”
schedules:
- name: “After sunset”
time:
sun: “sunset”
after: “01:00”
day:
every_n_days: 2
zones:
- zone_id: 1
duration: “00:10”
- zone_id: 2
duration: “00:10”
- zone_id: 3
duration: “00:20”
- zone_id: 4
duration: “00:20”
- zone_id: 5
duration: “00:10”
To avoid the master coming off and on between zones the delay:
must be a minimum of the preamble
plus the postamble
values.
Therefore the delay:
line needs to be a minimum of -20 seconds. Or, keep the delay at -10 seconds and reduce the preamble:
and postamble:
to -5 seconds.
irrigation_unlimited:
controllers:
- name: "Back Garden Irrigation"
...
preamble: '-00:00:10' #Setting to a minus means it open 10 secs after the valve has opened
postamble: '-00:00:10' # Setting to minus means it will close 10 secs before the valve closes
...
# This value needs to be the minimum sum of preamble and postamble settings
delay: "-00:00:20" # A minus Delay should mean the next valve opens before the last closes
...
At the end of the configuration, start the next controller. Controllers is a list.
irrigation_unlimited:
controllers:
- name: “Jardin”
all_zones_config:
future_span: 7
show:
timeline: true
zones:
- name: “Pelouse avant 1”
entity_id: “switch.pelouse_avant_1”
...
- name: "Controller 2"
all_zones_config:
future_span: 7
show:
timeline: true
zones:
...
That’s apex charts-card and it looks like a problem with the configuration. You get that message if you have errors particularly in the data_generator
section.
Thx for your reply !
Worked perfect today - Thank you!!
I’m looking for ideas on how to handle low water pressure.
I’m on a community well and pressure is dependent on what my neighbors are doing with their irrigation.
Currently, I can disable my controller when pressure drops and enable it when the pressure restores. But, I can then miss sequences running. And if the pressure happens to drop at the same time every day, right before my sequence is scheduled to run, then it is skipped often.
If I was running the irrigation manually I’d just delay running the sequence (or sequences) until the pressure is restored (i.e. water later in the day). But that’s only if the pressure is low for a short amount of time.
I want to either be notified that a sequence was skipped due to low pressure – or delay starting sequences until pressure is restored.
Ideas?
There is the pause
and resume
actions but these only operate while a sequence is on. Perhaps rather than disable the controller when the pressure drops just let the sequence start. If the pressure is too low when the sequence starts (hint: there is a notification) then issue a pause
action. Once the pressure is restored then perform a resume
.
Thanks. I considered using pause/resume but that will require a lot more logic, I think. What happens if, over a period of low pressure, a number of sequences end up paused? Do I restart when pressure resumes, but only restart one of the paused sequences and then each time a sequence finishes then look for another paused sequence to resume?
Probably better to focus on fixing the pressure issue and then use notifications if pressure drops for an unusual amount of time and use manual intervention to deal with it.
Hard to say this on the HA forum, but maybe don’t need to automate everything…
I assume you have a sensor that signals the pressure is low. You would need two automations say iu_pause and iu_resume.
The pause bit is easier. Run the automation when a sequence starts (trigger) and the pressure is low (condition) or the pressure goes form normal to low (trigger). Perform a pause
action but here is the trick, aim it at the controller/master entity and specify sequence_id
= [0]
. This will pause all running sequences. If the sequence is not running or already paused it will be ignored.
Now for the resume. Trigger when the pressure goes from low to normal or a sequence ends. You probably don’t want to do a global resume like the pause so the sequence will have to be targeted. The simplest method would be a if-then-else list testing each sequence in some order of priority to see if the status
was paused and resuming it.
The kids are fighting in the lounge room using siri to change the colour of the lights. The cats have learnt to open the curtains by running up them and then going for a ride. I have to adjust the heating because my wife is cold and doesn’t want to put on a jumper. And you say you don’t need to automate everything - this is making life easier.
Help! I have a sequence running and I’m unable to cancel it:
(The running zone is valve #20 in images below)
When I hit Cancel
on the sequence I get this in the logs:
2025-06-06 08:10:29.701 INFO (MainThread) [custom_components.irrigation_unlimited] CALL [2025-06-06 08:10:29] service: cancel, controller: 1, zone: 0, sequence: 1, data: {"entity_id": ["binary_sensor.irrigation_unlimited_c1_s1"]}
But it continues to run.
-
Pause/Resume on the sequence works as expected.
-
If I disable the Controller the valve turns off. (And will resume when I turn it back on.)
-
If I disable the Sequence it says it is stopped but the valve does not turn off.
-
If I click on
Cancel
on the Controller the valve turns off but the sequence is still counting down (but the individual zone is not counting down).
-
if I then hit
Cancel
on the sequence the valve turns back on! -
Pause on the controller gives:
I restarted Home Assistant and when I reenabled the controller the sequence started back up again. I then disabled that one zone in the sequence, and it looks like it is off (but the sequence time is still counting down), AND the valve is still on:
What can I do to debug this, and how to stop it?
Logs of toggling enable
2025-06-06 08:10:29.701 INFO (MainThread) [custom_components.irrigation_unlimited] CALL [2025-06-06 08:10:29] service: cancel, controller: 1, zone: 0, sequence: 1, data: {"entity_id": ["binary_sensor.irrigation_unlimited_c1_s1"]}
2025-06-06 08:11:48.087 INFO (MainThread) [custom_components.irrigation_unlimited] CALL [2025-06-06 08:11:48] service: toggle, controller: 1, zone: 0, sequence: 0, data: {"entity_id": ["binary_sensor.irrigation_unlimited_c1_m"]}
2025-06-06 08:11:48.093 INFO (MainThread) [custom_components.irrigation_unlimited] EVENT [2025-06-06 08:11:48] controller: 1, zone: 20, state: 0
2025-06-06 08:11:48.094 INFO (MainThread) [custom_components.irrigation_unlimited] EVENT [2025-06-06 08:11:48] controller: 1, zone: 0, state: 0
2025-06-06 08:11:53.618 INFO (MainThread) [custom_components.irrigation_unlimited] CALL [2025-06-06 08:11:53] service: toggle, controller: 1, zone: 0, sequence: 0, data: {"entity_id": ["binary_sensor.irrigation_unlimited_c1_m"]}
2025-06-06 08:11:53.633 INFO (MainThread) [custom_components.irrigation_unlimited] EVENT [2025-06-06 08:11:53] controller: 1, zone: 0, state: 1
2025-06-06 08:11:53.634 INFO (MainThread) [custom_components.irrigation_unlimited] EVENT [2025-06-06 08:11:53] controller: 1, zone: 20, state: 1, data: 20.1.1.2.2
2025-06-06 08:12:49.238 INFO (MainThread) [custom_components.irrigation_unlimited] CALL [2025-06-06 08:12:49] service: cancel, controller: 1, zone: 0, sequence: 0, data: {"entity_id": ["binary_sensor.irrigation_unlimited_c1_m"]}
2025-06-06 08:12:49.254 INFO (MainThread) [custom_components.irrigation_unlimited] EVENT [2025-06-06 08:12:49] controller: 1, zone: 20, state: 0
2025-06-06 08:12:49.254 INFO (MainThread) [custom_components.irrigation_unlimited] EVENT [2025-06-06 08:12:49] controller: 1, zone: 0, state: 0
2025-06-06 08:13:00.809 INFO (MainThread) [custom_components.irrigation_unlimited] CALL [2025-06-06 08:13:00] service: toggle, controller: 1, zone: 0, sequence: 0, data: {"entity_id": ["binary_sensor.irrigation_unlimited_c1_m"]}
2025-06-06 08:13:02.664 INFO (MainThread) [custom_components.irrigation_unlimited] CALL [2025-06-06 08:13:02] service: toggle, controller: 1, zone: 0, sequence: 0, data: {"entity_id": ["binary_sensor.irrigation_unlimited_c1_m"]}
2025-06-06 08:13:02.676 INFO (MainThread) [custom_components.irrigation_unlimited] EVENT [2025-06-06 08:13:02] controller: 1, zone: 0, state: 1
2025-06-06 08:13:02.677 INFO (MainThread) [custom_components.irrigation_unlimited] EVENT [2025-06-06 08:13:02] controller: 1, zone: 20, state: 1, data: 20.1.1.2.2
2025-06-06 08:13:28.736 INFO (MainThread) [custom_components.irrigation_unlimited] CALL [2025-06-06 08:13:28] service: toggle, controller: 1, zone: 0, sequence: 1, data: {"entity_id": ["binary_sensor.irrigation_unlimited_c1_s1"]}
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 – nonext_duration
, noscheduled
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!
My GitHub post including irrigation_unlimited.yaml and automations
Hi there,
I am sorry, I know this is a sort of stupid question but I cannot figure this out myself although I did try really hard. I might just be too limited for irrigation unlimited
All I want is to put the - with the smart irrigation integration - calculated duration (in seconds) to use in irrigation unlimited which requires the duration to be in the hh:mm:ss format.
I googled, read and tried and failed. Neither with a template nor other methods I could get it to work. Irrigation unlimited just doesn’t like my converted hh:mm:ss formats.
So, the blunt question: how can I convert my sensor.smart_irrigation_duration to something I can use within irrigation unlimited?
Cheers for any hint!
The easiest way I have found to convert seconds to hh:mm:ss format is with a little template. For example to convert 90 seconds:
{{ timedelta(seconds=90) }}
To take the value from a sensor try this:
{{ timedelta(seconds=states('sensor.my_sensor') | int(0)) }}
Hint: You may want to look at section 9.2 in the readme as it has an example automation for integrating Smart Irrigation with Irrigation Unlimited
Hi rgc99,
I much appreciate your response but I cannot get it to work.
This is what I am trying:
- a template sensor which translates the seconds from HA smart irrigation to the h:mm:ss format (I use a template.yaml):
- name: Smart Irrigation Balkon [hour]
unique_id: smart_irrigation_balkon_hour
state: "{{ timedelta(seconds=states('sensor.smart_irrigation_balkon') | int(0)) }}"
This works and I get 0:04:47 for the 287s in the sensor.smart_irrigation_balkon.
- I include the template sensor in irrigation unlimited as
duration: "{{ states('sensor.smart_irrigation_balkon_hour')}}"
But this fails and I get the following error message:
Invalid config for 'irrigation_unlimited' at configuration.yaml, line 106: offset {{ states('sensor.smart_irrigation_balkon_hour')}} should be format 'HH:MM', 'HH:MM:SS' or 'HH:MM:SS.F' for dictionary value 'irrigation_unlimited->controllers->0->zones->0->schedules->0->duration', got None
What am I doing wrong?
I actually saw section 9.2 but it was/is too complicated to understand as I just started with irrigation unlimited and at this point just want to use the calculated time as duration in irrigation unlimited.
It feels unnecessarily complicated to time the calculation within smart irrigation, then time the conversion from smart to unlimited irrigation and then adjust the duration in irrigation unlimited