Automation During Date Range

ah i think i saw my mistake!
the value template line is wrong… oh boy.

Exactly. :+1:

I realize your post is old but I just finished setting up HACS Custom Scheduler Component & Card for my Christmas lighting. It uses From and To dates which I have an automation that will run on January 2nd to change the schedule to the current year.

alias: Christmas Lighting Schedule
description: ''
trigger:
  - platform: time
    at: '00:01:00'
condition:
  - condition: template
    value_template: '{{ now().month == 1 and now().day == 2 }}'
action:
  - service: scheduler.edit
    data:
      entity_id: switch.schedule_december_on
      start_date: '{{ now().year}}-11-30'
      end_date: '{{ now().year}}-12-31'
  - service: scheduler.edit
    data:
      entity_id: switch.schedule_december_off
      start_date: '{{ now().year}}-12-01'
      end_date: '{{ now().year + 1}}-01-01'
mode: single

image


image

I also have a Node-Red flow that does it using bigtimer but the above is prettier in my HA front end!
image

[{"id":"a18db3b210c6710b","type":"bigtimer","z":"b896509c.caf71","outtopic":"","outpayload1":"turn_on","outpayload2":"turn_off","name":"December","comment":"","lat":"49.176400","lon":"-122.970130","starttime":"5005","endtime":"5006","starttime2":0,"endtime2":0,"startoff":0,"endoff":0,"startoff2":0,"endoff2":0,"offs":0,"outtext1":"","outtext2":"","timeout":1440,"sun":true,"mon":true,"tue":true,"wed":true,"thu":true,"fri":true,"sat":true,"jan":false,"feb":false,"mar":false,"apr":false,"may":false,"jun":false,"jul":false,"aug":false,"sep":false,"oct":false,"nov":false,"dec":true,"day1":0,"month1":"0","day2":0,"month2":0,"day3":0,"month3":0,"day4":0,"month4":0,"day5":0,"month5":0,"day6":0,"month6":0,"day7":0,"month7":0,"day8":0,"month8":0,"day9":0,"month9":0,"day10":0,"month10":0,"day11":0,"month11":0,"day12":0,"month12":0,"d1":0,"w1":0,"d2":0,"w2":0,"d3":0,"w3":0,"d4":0,"w4":0,"d5":0,"w5":0,"d6":0,"w6":0,"xday1":0,"xmonth1":0,"xday2":0,"xmonth2":0,"xday3":0,"xmonth3":0,"xday4":0,"xmonth4":0,"xday5":0,"xmonth5":0,"xday6":0,"xmonth6":0,"xday7":0,"xmonth7":0,"xday8":0,"xmonth8":0,"xday9":0,"xmonth9":0,"xday10":0,"xmonth10":0,"xday11":0,"xmonth11":0,"xday12":0,"xmonth12":0,"xd1":0,"xw1":0,"xd2":0,"xw2":0,"xd3":0,"xw3":0,"xd4":0,"xw4":0,"xd5":0,"xw5":0,"xd6":0,"xw6":0,"suspend":false,"random":false,"randon1":false,"randoff1":false,"randon2":false,"randoff2":false,"repeat":true,"atstart":true,"odd":false,"even":false,"x":110,"y":240,"wires":[["d8ed835e6cfce90f"],[],[]]},{"id":"242f814b1a0d7c90","type":"bigtimer","z":"b896509c.caf71","outtopic":"","outpayload1":"turn_on","outpayload2":"turn_off","name":"Jan 1st","comment":"","lat":"49.176400","lon":"-122.970130","starttime":"0","endtime":"5006","starttime2":0,"endtime2":0,"startoff":0,"endoff":0,"startoff2":0,"endoff2":0,"offs":0,"outtext1":"","outtext2":"","timeout":1440,"sun":false,"mon":false,"tue":false,"wed":false,"thu":false,"fri":false,"sat":false,"jan":false,"feb":false,"mar":false,"apr":false,"may":false,"jun":false,"jul":false,"aug":false,"sep":false,"oct":false,"nov":false,"dec":false,"day1":"1","month1":"1","day2":0,"month2":0,"day3":0,"month3":0,"day4":0,"month4":0,"day5":0,"month5":0,"day6":0,"month6":0,"day7":0,"month7":0,"day8":0,"month8":0,"day9":0,"month9":0,"day10":0,"month10":0,"day11":0,"month11":0,"day12":0,"month12":0,"d1":0,"w1":0,"d2":0,"w2":0,"d3":0,"w3":0,"d4":0,"w4":0,"d5":0,"w5":0,"d6":0,"w6":0,"xday1":0,"xmonth1":0,"xday2":0,"xmonth2":0,"xday3":0,"xmonth3":0,"xday4":0,"xmonth4":0,"xday5":0,"xmonth5":0,"xday6":0,"xmonth6":0,"xday7":0,"xmonth7":0,"xday8":0,"xmonth8":0,"xday9":0,"xmonth9":0,"xday10":0,"xmonth10":0,"xday11":0,"xmonth11":0,"xday12":0,"xmonth12":0,"xd1":0,"xw1":0,"xd2":0,"xw2":0,"xd3":0,"xw3":0,"xd4":0,"xw4":0,"xd5":0,"xw5":0,"xd6":0,"xw6":0,"suspend":false,"random":false,"randon1":false,"randoff1":false,"randon2":false,"randoff2":false,"repeat":true,"atstart":true,"odd":false,"even":false,"x":120,"y":312,"wires":[["d8ed835e6cfce90f"],[],[]]},{"id":"d8ed835e6cfce90f","type":"api-call-service","z":"b896509c.caf71","name":"Christmas Lights","server":"c879ac61.99cd1","version":3,"debugenabled":false,"service_domain":"switch","service":"{{payload}}","entityId":"switch.sonoff_10012b7d75, switch.sonoff_10012ef410, switch.sonoff_re5v1c","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":490,"y":264,"wires":[[]]},{"id":"c879ac61.99cd1","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30"}]
1 Like

I have simplified how I am using this as part of my reticulation/water routine. Going to expand the automation for seasonal lights in the near future.

Comments have been included in the YAML code below

I had a similar problem for turning on the christmas lights. Came up with the following solution prior finding this thread ,-). I leave this here to my future self … in case I need to find it in one year.

  condition:
    - condition: template
      alias: "Only during Advent and till two weeks after christmas"
      value_template: |-
        {{ -14 <= (now().replace(month=12,day=24,hour=20) - now()).days <= 25 }}

2 Likes

If anyone wants to have a bunch of binary sensor entities for common date evaluations, just add these to your templates YAML.

    # Months
    - name: Is January
      state: >
        {{ now().month == 1 }}

    - name: Is February
      state: >
        {{ now().month == 2 }}

    - name: Is March
      state: >
        {{ now().month == 3 }}

    - name: Is April
      state: >
        {{ now().month == 4 }}

    - name: Is May
      state: >
        {{ now().month == 5 }}

    - name: Is June
      state: >
        {{ now().month == 6 }}

    - name: Is July
      state: >
        {{ now().month == 7 }}

    - name: Is August
      state: >
        {{ now().month == 8 }}

    - name: Is September
      state: >
        {{ now().month == 9 }}

    - name: Is October
      state: >
        {{ now().month == 10 }}

    - name: Is November
      state: >
        {{ now().month == 11 }}

    - name: Is December
      state: >
        {{ now().month == 12 }}

    # Days of Week
    - name: Is Monday
      state: >
        {{ now().isoweekday() == 1 }}

    - name: Is Tuesday
      state: >
        {{ now().isoweekday() == 2 }}

    - name: Is Wednesday
      state: >
        {{ now().isoweekday() == 3 }}

    - name: Is Thursday
      state: >
        {{ now().isoweekday() == 4 }}

    - name: Is Friday
      state: >
        {{ now().isoweekday() == 5 }}

    - name: Is Saturday
      state: >
        {{ now().isoweekday() == 6 }}

    - name: Is Sunday
      state: >
        {{ now().isoweekday() == 7 }}

    # Special Days
    - name: Is First Day of Month
      state: >
        {{ now().day == 1 }}

    - name: Is 15th Day of Month
      state: >
        {{ now().day == 15 }}

    - name: Is Last Day of Month # Credit: https://stackoverflow.com/a/13565185
      state: >
        {%- set next_month = now().replace(day=28) + timedelta(days=4) -%}
        {%- set last_day = next_month - timedelta(days=next_month.day) -%}
        {{ last_day == now().day }}

    # Holidays
    - name: Is New Years Day
      state: >
        {{ now().month == 1 and now().day == 1 }}

    - name: Is Groundhogs Day
      state: >
        {{ now().month == 2 and now().day == 2 }}

    - name: Is Valentines Day
      state: >
        {{ now().month == 2 and now().day == 14 }}

    - name: Is April Fools Day
      state: >
        {{ now().month == 4 and now().day == 1 }}

    - name: Is Earth Day
      state: >
        {{ now().month == 4 and now().day == 22 }}

    - name: Is May Day
      state: >
        {{ now().month == 5 and now().day == 1 }}

    - name: Is Cinco De Mayo
      state: >
        {{ now().month == 5 and now().day == 5 }}

    - name: Is Flag Day
      state: >
        {{ now().month == 6 and now().day == 14 }}

    - name: Is Juneteenth
      state: >
        {{ now().month == 6 and now().day == 19 }}

    - name: Is Independence Day
      state: >
        {{ now().month == 7 and now().day == 4 }}

    - name: Is Veterans Day
      state: >
        {{ now().month == 11 and now().day == 11 }}

    - name: Is Christmas
      state: >
        {{ now().month == 12 and now().day == 25 }}

    - name: Is New Years Eve
      state: >
        {{ now().month == 12 and now().day == 31 }}
2 Likes

I was inspired by Rak’s solution for X-mas lights. However, it was not resolving to TRUE in the first days of January. So I have changed it to:

alias: Only some days before and after X-mas
condition: template
value_template: >-
  {{ (now().month == 1 and now().day < 7) or (now().month == 12 and now().day > 10) }}

5 years gone and still no solution for a date?
I just tried the “time” condition given from hass (without reading the docs: my fault, as it is only comparing the day time and workday and special days, but no dates)

Couldn’t this be enhanced to also look at the date? If 0 is given for year … than it’s not compared? Or duplicate the time condition as “date”?

1 Like

Hello everyone, I had the same needs, and took your insights to create a pull request to add two new conditions: date and datetime.
This way, we would be able to choose to compare “only the date”, “only the time” or the “date and time” !

Please take a look at it Add date and datetime conditions by Passific · Pull Request #128009 · home-assistant/core · GitHub

1 Like

I just used ChatGPT to generate some sensors.

template:
  - binary_sensor:
      # New Year's Day
      - name: New Year's Day
        unique_id: new_years_day
        state: >
          {{ now().strftime('%Y-%m-%d') == (now().year | string) + "-01-01" }}
      # Valentine's Day
      - name: Valentine's Day
        unique_id: valentines_day
        state: >
          {{ now().strftime('%Y-%m-%d') == (now().year | string) + "-02-14" }}
      # St. Patrick's Day
      - name: St. Patrick's Day
        unique_id: st_patricks_day
        state: >
          {{ now().strftime('%Y-%m-%d') == (now().year | string) + "-03-17" }}
      # Easter (calculated dynamically)
      - name: Easter
        unique_id: easter
        state: >
          {% set a = now().year %}
          {% set d = (((a * 19) % 19) + 15) % 30 %}
          {% set e = ((a + (a // 4) + d + 2 - (a // 100) + ((a // 100) // 4)) % 7) %}
          {% set day = 22 + d + e %}
          {% if day > 31 %}
            {{ now().strftime('%Y-%m-%d') == (a | string) + "-04-" + (day - 31) | string }}
          {% else %}
            {{ now().strftime('%Y-%m-%d') == (a | string) + "-03-" + day | string }}
          {% endif %}
      # Independence Day
      - name: Independence Day
        unique_id: independence_day
        state: >
          {{ now().strftime('%Y-%m-%d') == (now().year | string) + "-07-04" }}
      # Halloween
      - name: Halloween
        unique_id: halloween
        state: >
          {{ now().strftime('%Y-%m-%d') == (now().year | string) + "-10-31" }}
      # Thanksgiving (4th Thursday of November)
      - name: Thanksgiving
        unique_id: thanksgiving
        state: >
          {% set nov1 = strptime((now().year | string) + "-11-01", "%Y-%m-%d") %}
          {% set offset = (3 - nov1.weekday()) % 7 %}
          {% set thanksgiving = nov1 + timedelta(days=(offset + 21)) %}
          {{ now().strftime('%Y-%m-%d') == thanksgiving.strftime('%Y-%m-%d') }}
      # Christmas
      - name: Christmas
        unique_id: christmas
        state: >
          {{ now().strftime('%Y-%m-%d') == (now().year | string) + "-12-25" }}

Worked perfect

Outside the US, Independence Day depends on the person and when they got divorced! :wink:

I’m really struggling to understand how this is working for you! But if it somehow is, great! I would think {{ now().month in [1,2,3,4,5,10,11,12] }} would exclude Jun-Sept? My thinking is the automation should look like this to only water on Tuesday & Saturday, June 1 to August 31:

description: ""
mode: single
triggers:
  - trigger: time
    at: "06:00:00"
conditions:
### (when multiple conditions are listed, the default is to 'and' them)
  - condition: time
    weekday:
      - tue
      - sat
  - condition: template
    value_template: "{{ now().month in [6,7,8] }}"
actions:
  - action: scene.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: scene.water_frontard

I’ve read the Winter sprinkler switch-off - Water Corporation, WA and in my mind, the dates are back-asswards! “The Winter Sprinkler Switch-off runs throughout winter from 1 June to 31 August every year”?? Shouldn’t that read “The Winter Sprinkler Switch-off runs throughout winter from 31 August to 1 June every year”??
I’m totally dumbfounded!

PS. It would help everyone trying to read your automation if you posted it as code rather than as a quote.

hardly…

you’re doing string manipulations, where you should really be entering numbers in those date time templates…

state: >
  {{now().month == 7 and now().day == 4}}

would be a better solution

or:

{{(now().month,now().day) == (7,4)}}

please leave ChatGPT out of here

2 Likes

Relax. ChatGPT…worked fine for what I needed to do.

It produced a functional but clumsy solution.

In fairness, based on its track record of producing solutions, that’s better than average. Sometimes its suggestions are simply invalid. FWIW, that’s why the community forum banned the use of ChatGPT as a tool for offering solutions to other users.

1 Like

Well I was not aware of that. Folks simply had to say so versus being rude and dismissive. Thank you for explaining it.

You’re welcome!

Here’s the relevant blog post:

Wonder what makes you say that.
As far as I can find, there have only been helpful responses?

Meh…IMO you were rude. Maybe you didn’t mean to be rude by saying “Leave ChatGPT out of here” but that is how it came off. I am not a regular in this community so I do not follow announcements like that. I tried some of the things mentioned and it did not work for me. Maybe I did something wrong.

Regardless, If ChatGPT is banned all you needed to do is say so. Simple as that.

you forgot to quote the first word of that sentence…

and no, I didnt mean to be rude.
Nor do I appreciate to be called out to be, or to be told to take it easy.

moreover, it was the last sentence in my reply to you. all other stuff was helping you out and showing you how you could solve your issue