Sprinkler Template Entities


Referring page: Custom Sprinkler Controller


The two entities above were created from the yaml below. These are defined as trigger based template sensors in Home Assistant and are used in the UI for my sprinkler controller.

NOTE: The yaml config below is dependent the existence of a Jinja based custom template. That code is available here.


YAML:

- trigger:
  - id: nightly_reset
    platform: time
    at: '23:59:30'
  - id: off_2on
    platform: state
    entity_id: switch.nachio_zone_1_active
    to: 'on'
    from: 'off'
  - id: on_2off
    platform: state
    entity_id: switch.nachio_zone_1_active
    to: 'off'
    from: 'on'
  sensor:
    - name: Valve Z01 Last Start Time
      unique_id: valve_z01_last_start_time
      state: |
        {% from 'irrigation_time.jinja' import get_last_start_time %}
        {{ get_last_start_time(1, trigger.id) }}
      attributes:
        run_duration: |
          {% from 'irrigation_time.jinja' import get_run_duration %}
          {{ get_run_duration(1, trigger.id) }}
        last_end_time: |
          {% from 'irrigation_time.jinja' import get_last_end_time %}
          {{ get_last_end_time(1, trigger.id) }}
        count_today: |
          {% from 'irrigation_time.jinja' import get_count_today %}
          {{ get_count_today(1, trigger.id) }}
        count_last_week: |
          {% from 'irrigation_time.jinja' import get_count_last_week %}
          {{ get_count_last_week(1, trigger.id) }}
        count_this_week: |
          {% from 'irrigation_time.jinja' import get_count_this_week %}
          {{ get_count_this_week(1, trigger.id) }}
        day1: |
          {% from 'irrigation_time.jinja' import get_run_day_of_week %}
          {{ get_run_day_of_week(1, 0, trigger.id) }}
        day2: |
          {% from 'irrigation_time.jinja' import get_run_day_of_week %}
          {{ get_run_day_of_week(1, 1, trigger.id) }}
        day3: |
          {% from 'irrigation_time.jinja' import get_run_day_of_week %}
          {{ get_run_day_of_week(1, 2, trigger.id) }}
        day4: |
          {% from 'irrigation_time.jinja' import get_run_day_of_week %}
          {{ get_run_day_of_week(1, 3, trigger.id) }}
        day5: |
          {% from 'irrigation_time.jinja' import get_run_day_of_week %}
          {{ get_run_day_of_week(1, 4, trigger.id) }}
        day6: |
          {% from 'irrigation_time.jinja' import get_run_day_of_week %}
          {{ get_run_day_of_week(1, 5, trigger.id) }}
        day7: |
          {% from 'irrigation_time.jinja' import get_run_day_of_week %}
          {{ get_run_day_of_week(1, 6, trigger.id) }}


- trigger:
  - id: nightly_reset
    platform: time
    at: '23:59:30'
  - platform: state
    entity_id: switch.nachio_zone_1_active
    to: 'off'
    from: 'on'
  sensor:
    - name: Valve Z01 Time Today
      unique_id: valve_z01_time_today
      state: |
        {% set date_last_run = (states('sensor.valve_z01_last_start_time') | float(0) | timestamp_custom('%Y-%m-%d')) %}
        {% set date_today = now().date() | string %}
        {% set prev_time = states('sensor.valve_z01_time_today') | default('00:00', true) %}
        {% set parsed_prev = strptime(prev_time, '%M:%S') %}
        {% set seconds_prev_today = parsed_prev.minute * 60 + parsed_prev.second %}        
        {% set seconds_this_run = state_attr('sensor.valve_z01_last_start_time','run_duration') | float(0) %}
        {% if trigger is defined and trigger.id == 'nightly_reset' %}
          {{ '00:00' }}
        {% elif date_last_run == date_today %}
          {{ (seconds_prev_today + seconds_this_run) | timestamp_custom('%M:%S', false) }}
        {% else %}
          {{ seconds_this_run | timestamp_custom('%M:%S', false) }}
        {% endif %}
      attributes:
        time_last_week: |
          {% set time_this_week = state_attr('sensor.valve_z01_time_today', 'time_this_week') | default('00:00:00', true) %}
          {% set time_last_week = state_attr('sensor.valve_z01_time_today', 'time_last_week') | default('00:00:00', true) %}
          {% if trigger.id == "nightly_reset" and (now() + timedelta(seconds=30)).weekday() == 6 %}
            {{ time_this_week }}
          {% else %}
            {{ time_last_week }}
          {% endif %}
        time_this_week: |        
          {% set prev_time = state_attr('sensor.valve_z01_time_today', 'time_this_week') | default('00:00:00', true) %}
          {% set parsed = strptime(prev_time, '%H:%M:%S') %}
          {% set seconds_prev = (parsed.hour * 3600) + (parsed.minute * 60) + parsed.second %}
          {% set seconds_this_run = state_attr('sensor.valve_z01_last_start_time', 'run_duration') | float(0) %}    
          {% if trigger is defined and trigger.id == 'nightly_reset' and (now() + timedelta(seconds=30)).weekday() == 6 %}
            {{ '00:00:00' }}
          {% elif trigger is defined and trigger.id == 'nightly_reset' %}
            {{ seconds_prev | timestamp_custom('%H:%M:%S', false) }}
          {% else %}
            {{ (seconds_prev + seconds_this_run) | timestamp_custom('%H:%M:%S', false) }}
          {% endif %}       
        time_jan: |
          {% from 'irrigation_time.jinja' import get_month_time %}
          {{ get_month_time(1, 1) }}
        time_feb: |
          {% from 'irrigation_time.jinja' import get_month_time %}
          {{ get_month_time(1, 2) }}     
        time_mar: |
          {% from 'irrigation_time.jinja' import get_month_time %}
          {{ get_month_time(1, 3) }}
        time_apr: |
          {% from 'irrigation_time.jinja' import get_month_time %}
          {{ get_month_time(1, 4) }}
        time_may: |
          {% from 'irrigation_time.jinja' import get_month_time %}
          {{ get_month_time(1, 5) }}
        time_jun: |
          {% from 'irrigation_time.jinja' import get_month_time %}
          {{ get_month_time(1, 6) }}
        time_jul: |
          {% from 'irrigation_time.jinja' import get_month_time %}
          {{ get_month_time(1, 7) }}
        time_aug: |
          {% from 'irrigation_time.jinja' import get_month_time %}
          {{ get_month_time(1, 8) }}
        time_sep: |
          {% from 'irrigation_time.jinja' import get_month_time %}
          {{ get_month_time(1, 9) }}
        time_oct: |
          {% from 'irrigation_time.jinja' import get_month_time %}
          {{ get_month_time(1, 10) }}
        time_nov: |
          {% from 'irrigation_time.jinja' import get_month_time %}
          {{ get_month_time(1, 11) }}
        time_dec: |
          {% from 'irrigation_time.jinja' import get_month_time %}
          {{ get_month_time(1, 12) }}