Turn Switch on every hour with conditions

I have 11 zones in my irrigation system and I use this. I water for short amount of time for multiple cycles which helps with water consumption and minimizes. I have input variables that control start and duration of each zone. My maximum zone time is 15 minutes and most are set to 5 minutes. This may be more than you want to do.

- id: 'xxxxxxxxxxxxx'
  alias: Water Lawn with repeat
  description: Water all zones with repeat
  trigger:
  - platform: time
    at:
    - input_datetime.cycle1
    - input_datetime.cycle2
    - input_datetime.cycle3
    - input_datetime.cycle4
    - input_datetime.cycle5
    - input_datetime.cycle6
  condition:
  - condition: state
    entity_id: sensor.watering_days
    state: '0'
  - condition: state
    entity_id: input_boolean.run_irrigation
    state: 'on'
  action:
  - repeat:
      count: '11'
      sequence:
      - variables:
          zone: switch.zone_{{ repeat.index }}
      - service: switch.turn_on
        target:
          entity_id: '{{ zone }}'
      - delay:
          minutes: '{{ states(''input_number.zone'' ~ repeat.index) | int }}'
      - service: switch.turn_off
        target:
          entity_id: '{{ zone }}'
  mode: single

Here is my dashboard:

My zones and other variables are set up like this:

sensor:
# Total cycle watering time
  - platform: template
    sensors:
      total_watering_time:
        friendly_name: "Total Cycle Time"
        unique_id: "Total Cycle Time in Minutes"
        unit_of_measurement: "min"
        value_template: >-
          {% set z1 = states('input_number.zone1') | float %}
          {% set z2 = states('input_number.zone2') | float %}
          {% set z3 = states('input_number.zone3') | float %}
          {% set z4 = states('input_number.zone4') | float %}
          {% set z5 = states('input_number.zone5') | float %}
          {% set z6 = states('input_number.zone6') | float %}
          {% set z7 = states('input_number.zone7') | float %}
          {% set z8 = states('input_number.zone8') | float %}
          {% set z9 = states('input_number.zone9') | float %}
          {% set z10 = states('input_number.zone10') | float %}
          {% set z11 = states('input_number.zone11') | float %}
          {{ (z1 + z2 + z3 + z4 + z5 + z6 + z7 +z8 + z9 + z10 + z11) }} 
#--------------------------------------------------------------------------------------------
#Input Variables
input_datetime:

# Set up the input variables for irrigation cycle start times
  cycle1:
    name: Cycle 1
    has_date: false
    has_time: true
  cycle2:
    name: Cycle 2
    has_date: false
    has_time: true
  cycle3:
    name: Cycle 3
    has_date: false
    has_time: true
  cycle4:
    name: Cycle 4
    has_date: false
    has_time: true
  cycle5:
    name: Cycle 5
    has_date: false
    has_time: true
  cycle6:
    name: Cycle 6
    has_date: false
    has_time: true
  irrigation_valve_on_morning:
    name: Irrigation Valve on Morning
    has_date: false
    has_time: true
  irrigation_valve_on_evening:
    name: Irrigation Valve on Evening
    has_date: false
    has_time: true
  irrigation_valve_off_morning:
    name: Irrigation Valve off Morning
    has_date: false
    has_time: true
  irrigation_valve_off_evening:
    name: Irrigation Valve off Evening
    has_date: false
    has_time: true
input_number:
# Irrigation system zone run time
  zone1:
    name: Zone1
    icon: mdi:clock-start
#   initial: 4
    min: 1
    max: 15
    step: 1
    mode: slider
    unit_of_measurement: min
  zone2:
    name: Zone2
    icon: mdi:clock-start
#   initial: 4
    min: 1
    max: 15
    step: 1
    mode: slider
    unit_of_measurement: min
  zone3:
    name: Zone3
    icon: mdi:clock-start
#   initial: 5
    min: 1
    max: 15
    step: 1
    mode: slider
    unit_of_measurement: min
  zone4:
    name: Zone4
    icon: mdi:clock-start
#   initial: 6
    min: 1
    max: 15
    step: 1
    mode: slider
    unit_of_measurement: min
  zone5:
    name: Zone5
    icon: mdi:clock-start
#   initial: 5
    min: 1
    max: 15
    step: 1
    mode: slider
    unit_of_measurement: min
  zone6:
    name: Zone6
    icon: mdi:clock-start
#   initial: 5
    min: 1
    max: 15
    step: 1
    mode: slider
    unit_of_measurement: min
  zone7:
    name: Zone7
    icon: mdi:clock-start
#   initial: 8
    min: 1
    max: 15
    step: 1
    mode: slider
    unit_of_measurement: min
  zone8:
    name: Zone8
    icon: mdi:clock-start
#   initial: 8
    min: 1
    max: 15
    step: 1
    mode: slider
    unit_of_measurement: min
  zone9:
    name: Zone9
    icon: mdi:clock-start
#   initial: 6
    min: 1
    max: 15
    step: 1
    mode: slider
    unit_of_measurement: min
  zone10:
    name: Zone10
    icon: mdi:clock-start
#   initial: 5
    min: 1
    max: 15
    step: 1
    mode: slider
    unit_of_measurement: min
  zone11:
    name: Zone11
    icon: mdi:clock-start
#   initial: 10
    min: 1
    max: 15
    step: 1
    mode: slider
    unit_of_measurement: min
# Boolean to control irrigation
input_boolean:
  run_irrigation:
   name: irrigation control
#  initial: true  - keep value through reboot so that is why commented out
    icon: mdi:water-pump 

I have a rainmachine that is controlled locally and the switches are named zone[1…11].

I use garbage collection to determine watering days S, T, Th every week between April and October. I also have a shutoff valve that I control with a separate automation.

- id: 'yyyyyyyyyyyyyy'
  alias: 'Water Lawn - Turn on/off main water '
  trigger:
  - platform: time
    at: input_datetime.irrigation_valve_on_morning
  - platform: time
    at: input_datetime.irrigation_valve_on_evening
  - platform: time
    at: input_datetime.irrigation_valve_off_morning
  - platform: time
    at: input_datetime.irrigation_valve_off_evening
  condition:
  - condition: state
    entity_id: sensor.watering_days
    state: '0'
  - condition: state
    entity_id: input_boolean.run_irrigation
    state: 'on'
  action:
  - choose:
    - conditions:
      - condition: time
        after: input_datetime.irrigation_valve_on_morning
        before: input_datetime.irrigation_valve_off_morning
      sequence:
      - service: switch.turn_on
        target:
          entity_id: switch.irrigation_current_value
    - conditions:
      - condition: time
        after: input_datetime.irrigation_valve_on_evening
        before: input_datetime.irrigation_valve_off_evening
      sequence:
      - service: switch.turn_on
        target:
          entity_id: switch.irrigation_current_value
    - conditions:
      - condition: time
        after: input_datetime.irrigation_valve_off_morning
        before: input_datetime.irrigation_valve_on_evening
      sequence:
      - service: switch.turn_off
        target:
          entity_id: switch.irrigation_current_value
    - conditions:
      - condition: time
        after: input_datetime.irrigation_valve_off_evening
      sequence:
      - service: switch.turn_off
        target:
          entity_id: switch.irrigation_current_value
    default:
    - delay:
        hours: 0
        minutes: 0
        seconds: 0
        milliseconds: 10
  mode: single

I do not have much trouble keeping my system alive so the reboots are minimized.

1 Like