ESPHome Sprinkler - Multi-valve in a group


Got a 18 zone watering system that have been working with dumb automation since 10 years. Now is time to update.

I have installed ESPHome Sprinkler and it is working as manual. My problem is my 18 zones.

I can’t water every zone one by one… I would like to group them in 4 different pack so they could be watering multiple zone at once… I do have enough water supply and pressure to open about 1/2 of the zone, but for my management, 4 groups would be good.

is there a way of grouping the valves/zones into section or open multiple valves at once during the cycle of valves?

just a hint to where to look would be very appreciated.

Thank you from Montréal, Canada

Hi Luc,

Did you ever find an answer to this problem?
I have a similar problem where the main water supply is split in two with ‘zone’ valves and then further upstream in multiple ‘sector’ valves.

Kind regards,



I had the same problem.
Just solved it by using templates:

  - platform: gpio
    id: water_pump0
    # name: ${name}.water-pump0
    icon: mdi:water-pump
    pin: 5
    inverted: true
    restore_mode: ALWAYS_OFF

  - platform: gpio
    id: valve1
    # name: ${name}.valve1
    icon: mdi:pipe-valve
    pin: 16
    inverted: true
    restore_mode: ALWAYS_OFF

  - platform: gpio
    id: valve2
    # name: ${name}.valve2
    icon: mdi:pipe-valve
    pin: 17
    inverted: true
    restore_mode: ALWAYS_OFF

  - platform: template
    id: front_side_lawn_switch
    lambda: |-
      return id(valve1).state || id(valve2).state;
      - switch.turn_on: valve1
      - switch.turn_on: valve2
      - switch.turn_off: valve2
      - switch.turn_off: valve1
  - id: sprinkler_controller
    main_switch: "Sprinklers"
    auto_advance_switch: "Sprinklers Auto Advance"
      - valve_switch: "Front & Side Lawn"
        enable_switch: "Enable Front & Side Lawn"
        valve_switch_id: front_side_lawn_switch
        pump_switch_id: water_pump0
          id: sprinkler_valve1_run_duration
          name: "Front Lawn Duration"
          unit_of_measurement: min
          initial_value: 5
          min_value: 1
          max_value: 30

I am not sure if there is a better way, but for me this works.