substitutions: node_name: front-yard node_friendly_name: Front Yard sprinklers_zone_1_name: Lower sprinklers_zone_1_duration: '15' sprinklers_zone_2_name: Upper sprinklers_zone_2_duration: '30' drip_zone_1_name: Wall drip_zone_1_duration: '0' drip_zone_2_name: Unused drip_zone_2_duration: '0' esphome: platformio_options: upload_speed: '115200' name: front-yard on_boot: - priority: -100.0 then: - text_sensor.template.publish: id: sprinklers_status state: Idle - text_sensor.template.publish: id: drip_status state: Idle build_path: .esphome/build/front-yard friendly_name: '' includes: [] libraries: [] name_add_mac_suffix: false min_version: 2023.2.4 esp32: board: esp32dev framework: version: 2.0.5 source: ~3.20005.0 platform_version: platformio/espressif32 @ 5.2.0 type: arduino variant: ESP32 status_led: pin: number: 2 inverted: true mode: output: true input: false open_drain: false pullup: false pulldown: false drive_strength: 20.0 switch: - platform: gpio id: relay1 name: Relay 1 internal: true restore_mode: RESTORE_DEFAULT_OFF pin: number: 25 mode: output: true input: false open_drain: false pullup: false pulldown: false inverted: false drive_strength: 20.0 disabled_by_default: false interlock_wait_time: 0ms - platform: gpio id: relay2 name: Relay 2 internal: true restore_mode: RESTORE_DEFAULT_OFF pin: number: 26 mode: output: true input: false open_drain: false pullup: false pulldown: false inverted: false drive_strength: 20.0 disabled_by_default: false interlock_wait_time: 0ms - platform: gpio id: relay3 name: Relay 3 internal: true restore_mode: RESTORE_DEFAULT_OFF pin: number: 33 mode: output: true input: false open_drain: false pullup: false pulldown: false inverted: false drive_strength: 20.0 disabled_by_default: false interlock_wait_time: 0ms - platform: gpio id: relay4 name: Relay 4 internal: true restore_mode: RESTORE_DEFAULT_OFF pin: number: 32 mode: output: true input: false open_drain: false pullup: false pulldown: false inverted: false drive_strength: 20.0 disabled_by_default: false interlock_wait_time: 0ms - platform: template id: sprinklers_zone_1_valve name: Front Yard Sprinkler Lower Valve turn_on_action: then: - switch.turn_on: id: relay1 turn_off_action: then: - switch.turn_off: id: relay1 lambda: !lambda |- return id(relay1).state; disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF optimistic: false assumed_state: false restore_state: false - platform: template id: sprinklers_zone_2_valve name: Front Yard Sprinkler Upper Valve turn_on_action: then: - switch.turn_on: id: relay2 turn_off_action: then: - switch.turn_off: id: relay2 lambda: !lambda |- return id(relay2).state; disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF optimistic: false assumed_state: false restore_state: false - platform: template id: drip_zone_1_valve name: Front Yard Drip Wall Valve turn_on_action: then: - switch.turn_on: id: relay3 turn_off_action: then: - switch.turn_off: id: relay3 lambda: !lambda |- return id(relay3).state; disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF optimistic: false assumed_state: false restore_state: false - platform: template id: drip_zone_2_valve name: Front Yard Drip Unused Valve turn_on_action: then: - switch.turn_on: id: relay4 turn_off_action: then: - switch.turn_off: id: relay4 lambda: !lambda |- return id(relay4).state; disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF optimistic: false assumed_state: false restore_state: false binary_sensor: - platform: gpio id: button1 name: Button 1 internal: true pin: number: 34 mode: input: true output: false open_drain: false pullup: false pulldown: false inverted: true drive_strength: 20.0 disabled_by_default: false - platform: gpio id: button2 name: Button 2 internal: true pin: number: 35 mode: input: true output: false open_drain: false pullup: false pulldown: false inverted: true drive_strength: 20.0 disabled_by_default: false - platform: gpio id: button3 name: Button 3 internal: true pin: number: 36 mode: input: true output: false open_drain: false pullup: false pulldown: false inverted: true drive_strength: 20.0 disabled_by_default: false - platform: gpio id: button4 name: Button 4 internal: true pin: number: 39 mode: input: true output: false open_drain: false pullup: false pulldown: false inverted: true drive_strength: 20.0 disabled_by_default: false wifi: use_address: front-yard.km6g.us fast_connect: true networks: - ssid: km6g-iot password: !secret 'km6g-iot-password' priority: 0.0 domain: .local reboot_timeout: 15min power_save_mode: LIGHT sensor: - platform: wifi_signal name: front-yard WiFi Signal update_interval: 60s disabled_by_default: false force_update: false unit_of_measurement: dBm accuracy_decimals: 0 device_class: signal_strength state_class: measurement entity_category: diagnostic - platform: uptime name: front-yard Uptime disabled_by_default: false force_update: false unit_of_measurement: s icon: mdi:timer-outline accuracy_decimals: 0 device_class: duration entity_category: diagnostic update_interval: 60s logger: baud_rate: 115200 tx_buffer_size: 512 deassert_rts_dtr: false hardware_uart: UART0 level: DEBUG logs: {} api: services: - service: start_full_cycle_sprinklers then: - sprinkler.start_full_cycle: id: sprinklers variables: {} - service: start_full_cycle_drip then: - sprinkler.start_full_cycle: id: drip variables: {} port: 6053 password: '' reboot_timeout: 15min ota: safe_mode: true port: 3232 reboot_timeout: 5min num_attempts: 10 mdns: disabled: true services: [] time: - platform: homeassistant id: homeassistant_time timezone: EST5EDT,M3.2.0,M11.1.0 update_interval: 15min text_sensor: - platform: version name: front-yard ESPHome Version disabled_by_default: false icon: mdi:new-box entity_category: diagnostic hide_timestamp: false - platform: template id: sprinklers_status name: Front Yard Sprinkler Status update_interval: 4294967295 icon: mdi:information-variant disabled_by_default: false - platform: template id: sprinklers_progress name: Front Yard Sprinkler Progress % update_interval: 60s icon: mdi:progress-clock lambda: !lambda |- auto ctrl = id(sprinklers); auto active = ctrl->active_valve(); if (!active.has_value()) { return std::string("--"); } auto time_remaining = ctrl->time_remaining_active_valve(); if (!time_remaining.has_value()) { return std::string("00"); } auto duration_adjusted = ctrl->valve_run_duration_adjusted(active.value()); return std::to_string((uint32_t)(100.0 * (duration_adjusted - time_remaining.value())) / duration_adjusted); disabled_by_default: false - platform: template id: drip_status name: Front Yard Drip Status update_interval: 4294967295 icon: mdi:information-variant disabled_by_default: false - platform: template id: drip_progress name: Front Yard Drip Progress % update_interval: 60s icon: mdi:progress-clock lambda: !lambda |- auto ctrl = id(drip); auto active = ctrl->active_valve(); if (!active.has_value()) { return std::string("--"); } auto time_remaining = ctrl->time_remaining_active_valve(); if (!time_remaining.has_value()) { return std::string("00"); } auto duration_adjusted = ctrl->valve_run_duration_adjusted(active.value()); return std::to_string((uint32_t)(100.0 * (duration_adjusted - time_remaining.value())) / duration_adjusted); disabled_by_default: false web_server: local: true include_internal: true port: 80 version: 2 ota: true css_url: '' js_url: https://oi.esphome.io/v2/www.js external_components: - source: url: https://github.com/esphome/esphome ref: dev type: git components: - sprinkler refresh: 1d - source: url: https://github.com/esphome/esphome ref: dev type: git components: - sprinkler refresh: 1d sprinkler: - id: sprinklers main_switch: name: Front Yard Sprinkler Start/Resume/Stop disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF auto_advance_switch: name: Front Yard Sprinkler Auto-Advance disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF entity_category: config multiplier_number: name: Front Yard Sprinkler Multiplier mode: BOX icon: mdi:timer-cog-outline initial_value: 1.0 min_value: 0.0 max_value: 6.0 step: 0.1 restore_value: true disabled_by_default: false entity_category: config valves: - valve_switch: name: Front Yard Sprinkler Lower on_turn_on: - then: - text_sensor.template.publish: id: sprinklers_status state: Lower Active on_turn_off: - then: - text_sensor.template.publish: id: sprinklers_status state: Idle disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF enable_switch: name: Front Yard Enable Sprinkler Lower disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF entity_category: config run_duration_number: name: Front Yard Sprinkler Lower Duration unit_of_measurement: min mode: BOX icon: mdi:timer-outline initial_value: 15 min_value: 0 max_value: 120 step: 1 restore_value: true disabled_by_default: false entity_category: config valve_switch_id: relay1 - valve_switch: name: Front Yard Sprinkler Upper on_turn_on: - then: - text_sensor.template.publish: id: sprinklers_status state: Upper Active on_turn_off: - then: - text_sensor.template.publish: id: sprinklers_status state: Idle disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF enable_switch: name: Front Yard Enable Sprinkler Upper disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF entity_category: config run_duration_number: name: Front Yard Sprinkler Upper Duration unit_of_measurement: min mode: BOX icon: mdi:timer-outline initial_value: 30 min_value: 0 max_value: 120 step: 1 restore_value: true disabled_by_default: false entity_category: config valve_switch_id: relay2 next_prev_ignore_disabled: false disabled_by_default: false - id: drip main_switch: name: Front Yard Drip Start/Resume/Stop disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF auto_advance_switch: name: Front Yard Drip Auto-Advance disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF entity_category: config multiplier_number: name: Front Yard Drip Multiplier mode: BOX icon: mdi:timer-cog-outline initial_value: 1.0 min_value: 0.0 max_value: 6.0 step: 0.1 restore_value: true disabled_by_default: false entity_category: config valves: - valve_switch: name: Front Yard Drip Wall on_turn_on: - then: - text_sensor.template.publish: id: drip_status state: Wall Active on_turn_off: - then: - text_sensor.template.publish: id: drip_status state: Idle disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF enable_switch: name: Front Yard Enable Drip Wall disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF entity_category: config run_duration_number: name: Front Yard Drip Wall Duration unit_of_measurement: min mode: BOX icon: mdi:timer-outline initial_value: 0 min_value: 0 max_value: 120 step: 1 restore_value: true disabled_by_default: false entity_category: config valve_switch_id: relay3 - valve_switch: name: Front Yard Drip Unused on_turn_on: - then: - text_sensor.template.publish: id: drip_status state: Unused Active on_turn_off: - then: - text_sensor.template.publish: id: drip_status state: Idle disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF enable_switch: name: Front Yard Enable Drip Unused disabled_by_default: false restore_mode: RESTORE_DEFAULT_OFF entity_category: config run_duration_number: name: Front Yard Drip Unused Duration unit_of_measurement: min mode: BOX icon: mdi:timer-outline initial_value: 0 min_value: 0 max_value: 120 step: 1 restore_value: true disabled_by_default: false entity_category: config valve_switch_id: relay4 next_prev_ignore_disabled: false disabled_by_default: false button: - platform: template id: sprinklers_pause name: Front Yard Sprinkler Pause on_press: - then: - sprinkler.pause: id: sprinklers disabled_by_default: false - platform: template id: drip_pause name: Front Yard Drip Pause on_press: - then: - sprinkler.pause: id: drip disabled_by_default: false number: []