mirror of
https://github.com/CeeWeasel/fresh-home.git
synced 2026-08-09 18:40:14 -04:00
773 lines
29 KiB
YAML
773 lines
29 KiB
YAML
input_boolean:
|
|
sprinkler_is_winterized:
|
|
name: "Sprinkler: Is Winterized"
|
|
icon: mdi:sprinkler
|
|
|
|
log_precipitation:
|
|
name: "Log Precipitation"
|
|
icon: mdi:file
|
|
|
|
log_soil_moisture:
|
|
name: "Log Soil Moisture"
|
|
icon: mdi:file
|
|
|
|
input_datetime:
|
|
sprinkler_last_reset:
|
|
name: "Sprinkler: Last Reset"
|
|
icon: mdi:calendar
|
|
has_date: true
|
|
has_time: false
|
|
|
|
sprinkler_last_run:
|
|
name: "Sprinkler: Last Run"
|
|
icon: mdi:calendar
|
|
has_date: true
|
|
has_time: false
|
|
|
|
sprinkler_next_dawn:
|
|
name: "Sprinkler: Next Dawn"
|
|
icon: mdi:weather-sunset-up
|
|
has_date: true
|
|
has_time: true
|
|
|
|
input_number:
|
|
sprinkler_days_before_high_run:
|
|
name: "Sprinkler: Days Before High Run"
|
|
icon: mdi:calendar
|
|
min: 0
|
|
max: 10
|
|
step: 1
|
|
mode: box
|
|
|
|
sprinkler_days_before_medium_run:
|
|
name: "Sprinkler: Days Before Medium Run"
|
|
icon: mdi:calendar
|
|
min: 0
|
|
max: 10
|
|
step: 1
|
|
mode: box
|
|
|
|
sprinkler_days_before_low_run:
|
|
name: "Sprinkler: Days Before Low Run"
|
|
icon: mdi:calendar
|
|
min: 0
|
|
max: 10
|
|
step: 1
|
|
mode: box
|
|
|
|
sprinkler_days_before_reset:
|
|
name: "Sprinkler: Days Before Reset"
|
|
icon: mdi:calendar
|
|
min: 0
|
|
max: 20
|
|
step: 1
|
|
mode: box
|
|
|
|
sprinkler_precipitation_below_high_run:
|
|
name: "Sprinkler: Precipitation Below - High Run"
|
|
icon: mdi:water
|
|
min: 0
|
|
max: 50
|
|
step: 0.1
|
|
unit_of_measurement: mm
|
|
mode: box
|
|
|
|
sprinkler_precipitation_below_medium_run:
|
|
name: "Sprinkler: Precipitation Below - Medium Run"
|
|
icon: mdi:water
|
|
min: 0
|
|
max: 50
|
|
step: 0.1
|
|
unit_of_measurement: mm
|
|
mode: box
|
|
|
|
sprinkler_precipitation_below_low_run:
|
|
name: "Sprinkler: Precipitation Below - Low Run"
|
|
icon: mdi:water
|
|
min: 0
|
|
max: 50
|
|
step: 0.1
|
|
unit_of_measurement: mm
|
|
mode: box
|
|
|
|
sprinkler_temp_above_high_run:
|
|
name: "Sprinkler: Temp Above - High Run"
|
|
icon: mdi:thermometer-high
|
|
min: 50
|
|
max: 90
|
|
step: 1
|
|
unit_of_measurement: °F
|
|
|
|
sprinkler_temp_above_medium_run:
|
|
name: "Sprinkler: Temp Above - Medium Run"
|
|
icon: mdi:thermometer
|
|
min: 50
|
|
max: 90
|
|
step: 1
|
|
unit_of_measurement: °F
|
|
|
|
sprinkler_temp_above_low_run:
|
|
name: "Sprinkler: Temp Above - Low Run"
|
|
icon: mdi:thermometer-low
|
|
min: 50
|
|
max: 90
|
|
step: 1
|
|
unit_of_measurement: °F
|
|
|
|
sprinkler_maximum_temperature_measured:
|
|
name: "Sprinkler: Maximum Temperature Measured"
|
|
icon: mdi:thermometer
|
|
min: -20
|
|
max: 150
|
|
step: 0.01
|
|
unit_of_measurement: °F
|
|
mode: box
|
|
|
|
sprinkler_repeat_program_amount:
|
|
name: "Sprinkler: Repeat Program Amount"
|
|
icon: mdi:pound
|
|
min: 0
|
|
max: 10
|
|
step: 1
|
|
|
|
sprinkler_high_water_level:
|
|
name: "Sprinkler: High Water Level"
|
|
icon: mdi:water-plus
|
|
min: 0
|
|
max: 300
|
|
step: 1
|
|
mode: box
|
|
|
|
sprinkler_medium_water_level:
|
|
name: "Sprinkler: Medium Water Level"
|
|
icon: mdi:water
|
|
min: 0
|
|
max: 300
|
|
step: 1
|
|
mode: box
|
|
|
|
sprinkler_low_water_level:
|
|
name: "Sprinkler: Low Water Level"
|
|
icon: mdi:water-minus
|
|
min: 0
|
|
max: 300
|
|
step: 1
|
|
mode: box
|
|
|
|
template:
|
|
- trigger:
|
|
- platform: state
|
|
entity_id:
|
|
- input_number.sprinkler_maximum_temperature_measured
|
|
- sensor.sprinkler_total_rain_fallen_plus_expected
|
|
- sensor.sprinkler_days_since_last_watering
|
|
- input_number.sprinkler_temp_above_high_run
|
|
- input_number.sprinkler_temp_above_medium_run
|
|
- input_number.sprinkler_temp_above_low_run
|
|
- input_number.sprinkler_precipitation_below_high_run
|
|
- input_number.sprinkler_precipitation_below_medium_run
|
|
- input_number.sprinkler_precipitation_below_low_run
|
|
- input_number.sprinkler_days_before_high_run
|
|
- input_number.sprinkler_days_before_medium_run
|
|
- input_number.sprinkler_days_before_low_run
|
|
- switch.opensprinkler_enabled
|
|
not_to: "unavailable"
|
|
|
|
- platform: event
|
|
event_type: event_template_reloaded
|
|
id: "reload"
|
|
|
|
- platform: homeassistant
|
|
event: start
|
|
|
|
sensor:
|
|
- name: "Sprinkler: Current Status"
|
|
unique_id: "custom_sensor.sprinkler_current_status"
|
|
icon: mdi:sprinkler-variant
|
|
state: >
|
|
{%- if is_state('input_boolean.sprinkler_is_winterized','on') %}
|
|
Sprinkler is winterized
|
|
{%- else %}
|
|
{%- if is_state('switch.opensprinkler_enabled','on') %}
|
|
{%- if states('input_number.sprinkler_maximum_temperature_measured') | int(default=0) > states('input_number.sprinkler_temp_above_low_run') | int(default=0) %}
|
|
{%- if states('input_number.sprinkler_maximum_temperature_measured') | int(default=0) > states('input_number.sprinkler_temp_above_medium_run') | int(default=0) %}
|
|
{%- if states('input_number.sprinkler_maximum_temperature_measured') | int(default=0) > states('input_number.sprinkler_temp_above_high_run') | int(default=0) %}
|
|
{%- if states('sensor.sprinkler_total_rain_fallen_plus_expected') | float(default=0) < states('input_number.sprinkler_precipitation_below_high_run') | float(default=0.0) -%}
|
|
{%- if states('sensor.sprinkler_days_since_last_watering') | float(default=0) > states('input_number.sprinkler_days_before_high_run') | float(default=10.0) -%}
|
|
High
|
|
{%- else %}
|
|
Too Soon
|
|
{% endif %}
|
|
{%- else %}
|
|
Too Wet
|
|
{% endif %}
|
|
{%- else %}
|
|
{%- if states('sensor.sprinkler_total_rain_fallen_plus_expected') | float(default=0) < states('input_number.sprinkler_precipitation_below_medium_run') | float(default=0.0) %}
|
|
{%- if states('sensor.sprinkler_days_since_last_watering') | float(default=0) > states('input_number.sprinkler_days_before_medium_run') | float(default=10.0) %}
|
|
Medium
|
|
{%- else %}
|
|
Too Soon
|
|
{% endif %}
|
|
{%- else %}
|
|
Too Wet
|
|
{%- endif %}
|
|
{% endif %}
|
|
{%- else %}
|
|
{%- if states('sensor.sprinkler_total_rain_fallen_plus_expected') | float(default=0) < states('input_number.sprinkler_precipitation_below_low_run') | float(default=0.0) %}
|
|
{%- if states('sensor.sprinkler_days_since_last_watering') | float(default=0) > states('input_number.sprinkler_days_before_low_run') | float(default=10.0) %}
|
|
Low
|
|
{%- else %}
|
|
Too Soon
|
|
{% endif %}
|
|
{%- else %}
|
|
Too Wet
|
|
{% endif %}
|
|
{% endif %}
|
|
{%- else %}
|
|
Too Cold
|
|
{% endif %}
|
|
{%- else %}
|
|
Off
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
- trigger:
|
|
- platform: state
|
|
entity_id: sensor.sprinkler_recent_rain_precipitation
|
|
|
|
- platform: event
|
|
event_type: event_template_reloaded
|
|
id: "reload"
|
|
|
|
- platform: homeassistant
|
|
event: start
|
|
|
|
sensor:
|
|
- name: "Sprinkler: Total Rain Fallen Plus Expected"
|
|
unique_id: "custom_sensor.sprinkler_total_rain_fallen_plus_expected"
|
|
icon: mdi:weather-pouring
|
|
unit_of_measurement: mm
|
|
availability: "{{ states('sensor.sprinkler_recent_rain_precipitation') not in ['unknown', 'unavailable'] }}"
|
|
state: >
|
|
{{ (states('sensor.sprinkler_recent_rain_precipitation') | float + states('sensor.sprinkler_total_expected_precipitation') | float(default=100.0) ) | round(2) }}
|
|
|
|
- trigger:
|
|
- platform: state
|
|
entity_id: sensor.sun_next_rising
|
|
|
|
- platform: event
|
|
event_type: event_template_reloaded
|
|
id: "reload"
|
|
|
|
- platform: homeassistant
|
|
event: start
|
|
|
|
sensor:
|
|
- name: "Sprinkler: One Hour Before Sunrise"
|
|
unique_id: "custom_sensor.sprinkler_one_hour_before_sunrise"
|
|
icon: mdi:clock
|
|
device_class: timestamp
|
|
state: >
|
|
{{ (( as_timestamp(states('sensor.sun_next_rising')) - 3600) | timestamp_utc) }}
|
|
|
|
- trigger:
|
|
- platform: state
|
|
entity_id:
|
|
- sensor.opensprinkler_water_level
|
|
- input_number.front_yard_station_minutes
|
|
- input_number.east_side_station_minutes
|
|
- input_number.back_yard_station_minutes
|
|
- input_number.west_side_station_minutes
|
|
- input_number.sprinkler_repeat_program_amount
|
|
|
|
- platform: event
|
|
event_type: event_template_reloaded
|
|
id: "reload"
|
|
|
|
- platform: homeassistant
|
|
event: start
|
|
|
|
sensor:
|
|
- name: "Sprinkler: Expected Run Length"
|
|
unique_id: "custom_sensor.sprinkler_expected_run_length"
|
|
icon: mdi:clock
|
|
unit_of_measurement: seconds
|
|
availability: >
|
|
{{ states('sensor.opensprinkler_water_level') not in ['unknown', 'unavailable'] and
|
|
states('input_number.front_yard_station_minutes') not in ['unknown', 'unavailable'] and
|
|
states('input_number.east_side_station_minutes') not in ['unknown', 'unavailable'] and
|
|
states('input_number.back_yard_station_minutes') not in ['unknown', 'unavailable'] and
|
|
states('input_number.west_side_station_minutes') not in ['unknown', 'unavailable'] and
|
|
states('input_number.sprinkler_repeat_program_amount') not in ['unknown', 'unavailable'] }}
|
|
state: >
|
|
{{ states("sensor.opensprinkler_water_level")| float(default=0) | multiply(0.01) | multiply(states("input_number.front_yard_station_minutes") | multiply(60)) | float(default=0) +
|
|
states("sensor.opensprinkler_water_level")| float(default=0) | multiply(0.01) | multiply(states("input_number.east_side_station_minutes") | multiply(60)) | float(default=0) +
|
|
states("sensor.opensprinkler_water_level")| float(default=0) | multiply(0.01) | multiply(states("input_number.back_yard_station_minutes") | multiply(60)) | float(default=0) +
|
|
states("sensor.opensprinkler_water_level")| float(default=0) | multiply(0.01) | multiply(states("input_number.west_side_station_minutes") | multiply(60)) | float(default=0) *
|
|
states("input_number.sprinkler_repeat_program_amount") | float(default=0) }}
|
|
|
|
attributes:
|
|
front_yard: "{{ states('sensor.opensprinkler_water_level')| float(default=0) | multiply(0.01) | multiply(states('input_number.front_yard_station_minutes') | multiply(60)) | float(default=0) }} seconds"
|
|
east_side: "{{ states('sensor.opensprinkler_water_level')| float(default=0) | multiply(0.01) | multiply(states('input_number.east_side_station_minutes') | multiply(60)) | float(default=0) }} seconds"
|
|
back_yard: "{{ states('sensor.opensprinkler_water_level')| float(default=0) | multiply(0.01) | multiply(states('input_number.back_yard_station_minutes') | multiply(60)) | float(default=0) }} seconds"
|
|
west_side: "{{ states('sensor.opensprinkler_water_level')| float(default=0) | multiply(0.01) | multiply(states('input_number.west_side_station_minutes') | multiply(60)) | float(default=0) }} seconds"
|
|
water_level: "{{ states('sensor.opensprinkler_water_level') | float(default=0) }}%"
|
|
run_cycle: "{{ states('input_number.sprinkler_repeat_program_amount') | float(default=0) }} time(s)"
|
|
|
|
- trigger:
|
|
- platform: time_pattern
|
|
minutes: "/5"
|
|
|
|
- platform: state
|
|
entity_id: input_datetime.sprinkler_last_reset
|
|
|
|
- platform: state
|
|
entity_id: input_datetime.sprinkler_next_dawn
|
|
|
|
- platform: event
|
|
event_type: event_template_reloaded
|
|
id: "reload"
|
|
|
|
- platform: homeassistant
|
|
event: start
|
|
|
|
sensor:
|
|
- name: "Sprinkler: Days Since Last Watering"
|
|
unique_id: "custom_sensor.sprinkler_days_since_last_watering"
|
|
icon: mdi:calendar
|
|
state: >
|
|
{{ ((as_timestamp(states('sensor.sprinkler_one_hour_before_sunrise')) - as_timestamp(states('input_datetime.sprinkler_last_reset'))) / 86400 | float) | round(2) }}
|
|
|
|
# This really isn't needed. It just checks the trend binary_sensor.is_raining, and keeps it 'on' an extra 15 minutes
|
|
- trigger:
|
|
- platform: state
|
|
entity_id: binary_sensor.is_raining
|
|
not_from:
|
|
- "unknown"
|
|
- "unavailable"
|
|
|
|
binary_sensor:
|
|
- name: "Sprinkler: Raining"
|
|
unique_id: "custom_binary_sensor.sprinkler_raining"
|
|
device_class: moisture
|
|
delay_off:
|
|
minutes: 15
|
|
# availability: "{{ states('sensor.rain_quarter_hourly_precipitation') not in ['unknown', 'unavailable'] }}"
|
|
# state: >
|
|
# {{ states('sensor.rain_quarter_hourly_precipitation') | float(default=0) > 0.0 }}
|
|
availability: "{{ states('binary_sensor.is_raining') not in ['unknown', 'unavailable'] }}"
|
|
state: >
|
|
{{ states('binary_sensor.is_raining') }}
|
|
|
|
- trigger:
|
|
# - platform: homeassistant
|
|
# event: start
|
|
|
|
# - platform: time
|
|
# at: '01:00:00'
|
|
|
|
# - platform: state
|
|
# entity_id: input_boolean.sprinkler_is_winterized
|
|
|
|
binary_sensor:
|
|
- name: "Sprinkler: In Season"
|
|
unique_id: "custom_binary_sensor.sprinkler_in_season"
|
|
device_class: moisture
|
|
state: "{{ now().month > 4 and now().month < 10 }}"
|
|
|
|
# - trigger:
|
|
# - platform: homeassistant
|
|
# event: start
|
|
# - platform: time
|
|
# at: '01:00:00'
|
|
# - platform: state
|
|
# entity_id: input_boolean.sprinkler_is_winterized
|
|
# - platform: event
|
|
# event_type: event_template_reloaded
|
|
# id: "reload"
|
|
# binary_sensor:
|
|
# - name: "Sprinkler: Should Winterize"
|
|
# unique_id: "custom_binary_sensor.sprinkler_should_winterize"
|
|
# device_class: problem
|
|
# state: "{{ iif(is_state('binary_sensor.sprinkler_in_season', 'off'), iif(is_state('input_boolean.sprinkler_is_winterized', 'off'), 'on', 'off'), 'off') }}"
|
|
# - trigger:
|
|
# - platform: homeassistant
|
|
# event: start
|
|
# - platform: time
|
|
# at: '01:00:00'
|
|
# - platform: state
|
|
# entity_id: input_boolean.sprinkler_is_winterized
|
|
# - platform: event
|
|
# event_type: event_template_reloaded
|
|
# id: "reload"
|
|
# binary_sensor:
|
|
# - name: "Sprinkler: Should Dewinterize"
|
|
# unique_id: "custom_binary_sensor.sprinkler_should_dewinterize"
|
|
# device_class: problem
|
|
# state: "{{ iif(is_state('binary_sensor.sprinkler_in_season', 'on'), iif(is_state('input_boolean.sprinkler_is_winterized', 'on'), 'on', 'off'), 'off') }}"
|
|
|
|
automation:
|
|
- alias: "Log Precipitation"
|
|
id: 1f133cd1-7e69-4eb9-ba5f-7fa967dd869d
|
|
trigger:
|
|
- platform: state
|
|
entity_id: input_boolean.log_precipitation
|
|
from: "off"
|
|
to: "on"
|
|
|
|
- platform: state
|
|
entity_id: sensor.ecowitt_wh40_21917_precipitation
|
|
not_to:
|
|
- "unknown"
|
|
- "unavailable"
|
|
|
|
- platform: state
|
|
entity_id: binary_sensor.is_raining
|
|
|
|
condition:
|
|
- condition: state
|
|
entity_id: input_boolean.log_precipitation
|
|
state: "on"
|
|
action:
|
|
- service: notify.send_message
|
|
target:
|
|
entity_id: notify.precipitation
|
|
data:
|
|
message: "{{now().strftime('%Y-%m-%d')}}T{{now().strftime('%H:%M:%S.%f')}},{{states('sensor.ecowitt_wh40_21917_precipitation')}},{{states('binary_sensor.is_raining')}},{{state_attr('binary_sensor.is_raining','sample_count')}},{{state_attr('binary_sensor.is_raining','sample_duration')}},{{state_attr('binary_sensor.is_raining','min_gradient')}},{{state_attr('binary_sensor.is_raining','gradient')}}"
|
|
|
|
- alias: "Log Soil Moisture"
|
|
id: 362fbc8d-64f1-47dd-a686-e460e9c18690
|
|
trigger:
|
|
- platform: state
|
|
entity_id: input_boolean.log_soil_moisture
|
|
from: "off"
|
|
to: "on"
|
|
|
|
- platform: state
|
|
entity_id: sensor.fineoffset_wh51_00f935_moisture
|
|
not_to:
|
|
- "unknown"
|
|
- "unavailable"
|
|
|
|
- platform: state
|
|
entity_id: sensor.fineoffset_wh51_0ce593_moisture
|
|
not_to:
|
|
- "unknown"
|
|
- "unavailable"
|
|
|
|
- platform: state
|
|
entity_id: sensor.fineoffset_wh51_0d1e11_moisture
|
|
not_to:
|
|
- "unknown"
|
|
- "unavailable"
|
|
|
|
condition:
|
|
- condition: state
|
|
entity_id: input_boolean.log_soil_moisture
|
|
state: "on"
|
|
action:
|
|
- service: notify.send_message
|
|
target:
|
|
entity_id: notify.soil_moisture
|
|
data:
|
|
message: "{{now().strftime('%Y-%m-%d')}}T{{now().strftime('%H:%M:%S.%f')}},{{states('sensor.fineoffset_wh51_00f935_moisture')}},{{states('sensor.fineoffset_wh51_0ce593_moisture')}},{{states('sensor.fineoffset_wh51_0d1e11_moisture')}}"
|
|
|
|
- alias: "Sprinkler: Reset After Automatic Run"
|
|
id: automation_sprinkler_reset_after_automatic_run
|
|
trigger:
|
|
- platform: state
|
|
entity_id: binary_sensor.automatic_run_program_running
|
|
from: "on"
|
|
to: "off"
|
|
action:
|
|
- service: script.sprinkler_reset_helper_values
|
|
|
|
- service: input_datetime.set_datetime
|
|
target:
|
|
entity_id: input_datetime.sprinkler_last_run
|
|
data:
|
|
timestamp: "{{ as_timestamp(now()) }}"
|
|
|
|
- alias: "Sprinkler: Update Next Dawn"
|
|
id: automation_sprinkler_update_next_dawn
|
|
trigger:
|
|
- platform: state
|
|
entity_id: sensor.sun_next_dawn
|
|
condition: "{{ states('sensor.sun_next_dawn') not in ['unknown', 'unavailable'] }}"
|
|
action:
|
|
- service: input_datetime.set_datetime
|
|
target:
|
|
entity_id: input_datetime.sprinkler_next_dawn
|
|
data:
|
|
timestamp: "{{ as_timestamp(states('sensor.sun_next_dawn')) }}"
|
|
|
|
- alias: "Sprinkler: Check Maximum Temperature When Temperature Changes"
|
|
id: automation_sprinkler_check_maximum_temperature_when_temperature_changes
|
|
trigger:
|
|
- platform: state
|
|
entity_id: sensor.outdoors_mean_temperature
|
|
condition:
|
|
- condition: numeric_state
|
|
entity_id: sensor.outdoors_mean_temperature
|
|
above: input_number.sprinkler_maximum_temperature_measured
|
|
action:
|
|
service: input_number.set_value
|
|
target:
|
|
entity_id: input_number.sprinkler_maximum_temperature_measured
|
|
data:
|
|
value: "{{ states('sensor.outdoors_mean_temperature') | float(default=50) }}"
|
|
|
|
- alias: "Sprinkler: Stop Watering If Starts Raining"
|
|
id: 74ef91ed-6665-4e24-a817-c1a3540d2e3d
|
|
trigger:
|
|
- platform: state
|
|
entity_id: binary_sensor.is_raining
|
|
to: "on"
|
|
|
|
condition:
|
|
condition: or
|
|
conditions:
|
|
- condition: state
|
|
entity_id: binary_sensor.back_yard_station_running
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: binary_sensor.front_yard_station_running
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: binary_sensor.east_side_station_running
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: binary_sensor.west_side_station_running
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: binary_sensor.s05_station_running
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: binary_sensor.s06_station_running
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: binary_sensor.s07_station_running
|
|
state: "on"
|
|
- condition: state
|
|
entity_id: binary_sensor.master_station_running
|
|
state: "on"
|
|
|
|
action:
|
|
service: opensprinkler.stop
|
|
data:
|
|
entity_id: switch.opensprinkler_enabled
|
|
|
|
- alias: "Sprinkler: Check If Yard Needs to Be Watered"
|
|
id: automation_sprinkler_check_if_yard_needs_to_be_watered
|
|
description: "If OpenSprinkler is enabled and the sprinkler system is not winterized, then check if the grass should be watered"
|
|
mode: queued
|
|
trigger:
|
|
- platform: sun
|
|
event: sunrise
|
|
offset: "-01:15:00"
|
|
- platform: state
|
|
entity_id: sensor.sprinkler_total_rain_fallen_plus_expected
|
|
- platform: state
|
|
entity_id: input_number.sprinkler_maximum_temperature_measured
|
|
- platform: state
|
|
entity_id: sensor.sprinkler_days_since_last_watering
|
|
- platform: state
|
|
entity_id: input_number.sprinkler_temp_above_high_run
|
|
- platform: state
|
|
entity_id: input_number.sprinkler_temp_above_medium_run
|
|
- platform: state
|
|
entity_id: input_number.sprinkler_temp_above_low_run
|
|
|
|
condition:
|
|
- condition: state
|
|
entity_id: switch.opensprinkler_enabled
|
|
state: "on"
|
|
|
|
- condition: state
|
|
entity_id: input_boolean.sprinkler_is_winterized
|
|
state: "off"
|
|
|
|
action:
|
|
- choose:
|
|
# Check for High run
|
|
- conditions:
|
|
- condition: numeric_state
|
|
entity_id: input_number.sprinkler_maximum_temperature_measured
|
|
above: input_number.sprinkler_temp_above_high_run
|
|
- condition: numeric_state
|
|
entity_id: sensor.sprinkler_days_since_last_watering
|
|
above: input_number.sprinkler_days_before_high_run #0
|
|
- condition: numeric_state
|
|
entity_id: sensor.sprinkler_total_rain_fallen_plus_expected
|
|
below: input_number.sprinkler_precipitation_below_high_run #20.1
|
|
sequence:
|
|
- service: input_number.set_value
|
|
target:
|
|
entity_id: input_number.sprinkler_repeat_program_amount
|
|
data:
|
|
value: 1
|
|
- service: opensprinkler.set_water_level
|
|
data:
|
|
entity_id: sensor.opensprinkler_water_level
|
|
water_level: "{{ states('input_number.sprinkler_high_water_level') | int }}"
|
|
|
|
# Check for Medium run
|
|
- conditions:
|
|
- condition: numeric_state
|
|
entity_id: sensor.sprinkler_days_since_last_watering
|
|
above: input_number.sprinkler_days_before_medium_run #2
|
|
- condition: numeric_state
|
|
entity_id: input_number.sprinkler_maximum_temperature_measured
|
|
above: input_number.sprinkler_temp_above_medium_run
|
|
below: input_number.sprinkler_temp_above_high_run
|
|
- condition: numeric_state
|
|
entity_id: sensor.sprinkler_total_rain_fallen_plus_expected
|
|
below: input_number.sprinkler_precipitation_below_medium_run #15.1
|
|
sequence:
|
|
- service: input_number.set_value
|
|
target:
|
|
entity_id: input_number.sprinkler_repeat_program_amount
|
|
data:
|
|
value: 1
|
|
- service: opensprinkler.set_water_level
|
|
data:
|
|
entity_id: sensor.opensprinkler_water_level
|
|
water_level: "{{ states('input_number.sprinkler_medium_water_level') | int }}"
|
|
|
|
# Check for Low run
|
|
- conditions:
|
|
- condition: numeric_state
|
|
entity_id: sensor.sprinkler_days_since_last_watering
|
|
above: input_number.sprinkler_days_before_low_run #3
|
|
- condition: numeric_state
|
|
entity_id: input_number.sprinkler_maximum_temperature_measured
|
|
above: input_number.sprinkler_temp_above_low_run
|
|
below: input_number.sprinkler_temp_above_medium_run
|
|
- condition: numeric_state
|
|
entity_id: sensor.sprinkler_total_rain_fallen_plus_expected
|
|
below: input_number.sprinkler_precipitation_below_low_run #10.1
|
|
sequence:
|
|
- service: input_number.set_value
|
|
target:
|
|
entity_id: input_number.sprinkler_repeat_program_amount
|
|
data:
|
|
value: 1
|
|
- service: opensprinkler.set_water_level
|
|
data:
|
|
entity_id: sensor.opensprinkler_water_level
|
|
water_level: "{{ states('input_number.sprinkler_low_water_level') | int }}"
|
|
|
|
# Check for reset
|
|
- conditions:
|
|
- condition: numeric_state
|
|
entity_id: sensor.sprinkler_days_since_last_watering
|
|
above: input_number.sprinkler_days_before_reset #4
|
|
sequence:
|
|
- service: script.sprinkler_reset_helper_values
|
|
data: {}
|
|
|
|
default:
|
|
- service: input_number.set_value
|
|
target:
|
|
entity_id: input_number.sprinkler_repeat_program_amount
|
|
data:
|
|
value: 0
|
|
- service: opensprinkler.set_water_level
|
|
data:
|
|
entity_id: sensor.opensprinkler_water_level
|
|
water_level: 0
|
|
|
|
script:
|
|
sprinkler_reset_helper_values:
|
|
alias: "Sprinkler: Reset Helper Values"
|
|
icon: mdi:refresh
|
|
sequence:
|
|
- service: input_number.set_value
|
|
target:
|
|
entity_id: input_number.sprinkler_maximum_temperature_measured
|
|
data:
|
|
value: "{{ states('sensor.outdoors_mean_temperature') | float(default=50) }}"
|
|
|
|
- service: input_datetime.set_datetime
|
|
target:
|
|
entity_id: input_datetime.sprinkler_last_reset
|
|
data:
|
|
timestamp: "{{ as_timestamp(now()) }}"
|
|
|
|
- service: utility_meter.reset
|
|
data: {}
|
|
target:
|
|
entity_id: select.sprinkler_recent_rain
|
|
|
|
sprinkler_start_scripted_watering:
|
|
alias: "Sprinkler: Start Scripted Watering"
|
|
icon: mdi:sprinkler-variant
|
|
sequence:
|
|
- alias: "Run the sprinkler program the appropriate number of times"
|
|
repeat:
|
|
count: "{{states('input_number.sprinkler_repeat_program_amount') | int }}"
|
|
sequence:
|
|
- service: opensprinkler.run
|
|
data:
|
|
entity_id: switch.opensprinkler_enabled
|
|
run_seconds:
|
|
- '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.front_yard_station_minutes") | multiply(60)) | int }}'
|
|
- '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.east_side_station_minutes") | multiply(60)) | int }}'
|
|
- '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.back_yard_station_minutes") | multiply(60)) | int }}'
|
|
- '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.west_side_station_minutes") | multiply(60)) | int }}'
|
|
|
|
- delay: '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.front_yard_station_minutes") | multiply(60)) | int }}'
|
|
- delay: '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.east_side_station_minutes") | multiply(60)) | int }}'
|
|
- delay: '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.back_yard_station_minutes") | multiply(60)) | int }}'
|
|
- delay: '{{ states("sensor.opensprinkler_water_level") | multiply(0.01) | multiply(states("input_number.west_side_station_minutes") | multiply(60)) | int }}'
|
|
|
|
utility_meter:
|
|
rain_quarter_hourly:
|
|
unique_id: utility_meter_rain_quarter_hourly
|
|
name: "Rain: Quarter Hourly"
|
|
source: sensor.ecowitt_wh40_21917_precipitation
|
|
cycle: quarter-hourly
|
|
tariffs:
|
|
- Precipitation
|
|
|
|
rain_hourly:
|
|
unique_id: utility_meter_rain_hourly
|
|
name: "Rain: Hourly"
|
|
source: sensor.ecowitt_wh40_21917_precipitation
|
|
cycle: hourly
|
|
tariffs:
|
|
- Precipitation
|
|
|
|
rain_daily:
|
|
unique_id: utility_meter_rain_daily
|
|
name: "Rain: Daily"
|
|
source: sensor.ecowitt_wh40_21917_precipitation
|
|
cycle: daily
|
|
offset: "12:00"
|
|
tariffs:
|
|
- Precipitation
|
|
|
|
rain_monthly:
|
|
unique_id: utility_meter_rain_monthly
|
|
name: "Rain: Monthly"
|
|
source: sensor.ecowitt_wh40_21917_precipitation
|
|
cycle: monthly
|
|
tariffs:
|
|
- Precipitation
|
|
|
|
rain_yearly:
|
|
unique_id: utility_meter_rain_yearly
|
|
name: "Rain: Yearly"
|
|
source: sensor.ecowitt_wh40_21917_precipitation
|
|
cycle: yearly
|
|
tariffs:
|
|
- Precipitation
|
|
|
|
sprinkler_recent_rain:
|
|
unique_id: utility_meter_sprinkler_recent_rain
|
|
name: "Sprinkler: Recent Rain"
|
|
source: sensor.ecowitt_wh40_21917_precipitation
|
|
cycle: yearly
|
|
tariffs:
|
|
- Precipitation
|