SHOW:
|
|
- or go back to the newest paste.
| 1 | dst: | |
| 2 | friendly_name: Daylight Savings Times | |
| 3 | unique_id: f2a8791bf12449c4a67d149c609c21c4 | |
| 4 | - | value_template: > |
| 4 | + | |
| 5 | - | {%- set ns = namespace(previous = 2, spring=none, fall=none) %}
|
| 5 | + | value_template: >- |
| 6 | - | {%- set today = strptime(states('sensor.date'), '%Y-%m-%d').astimezone().replace(hour=ns.previous) %}
|
| 6 | + | {%- set ns = namespace(spring = none, fall = none) %}
|
| 7 | - | {%- for i in range(365) %}
|
| 7 | + | {%- set today = strptime(states('sensor.date'), '%Y-%m-%d') %}
|
| 8 | - | {%- set day = (today + timedelta(days=i)).astimezone() %}
|
| 8 | + | {%- for i in range(365) if (today + timedelta(days = i)).timetuple().tm_mon in [3, 10] and (today + timedelta(days = i)) | as_timestamp | timestamp_custom("%w") | int == 0 %}
|
| 9 | - | {%- if ns.previous - day.hour == -1 %}
|
| 9 | + | {%- set day = (today + timedelta(days = i)).astimezone() %}
|
| 10 | - | {%- set ns.spring = today + timedelta(days=i) | timestamp_local %}
|
| 10 | + | {%- if day.timetuple().tm_mon == 3 %}
|
| 11 | - | {%- elif ns.previous - day.hour == 1 %}
|
| 11 | + | {%- set ns.spring = day.replace(hour = 2) %}
|
| 12 | - | {%- set ns.fall = today + timedelta(days=i) | timestamp_local %}
|
| 12 | + | {%- else %}
|
| 13 | {%- set ns.fall = day.replace(hour = 3) %}
| |
| 14 | - | {%- set ns.previous = day.hour %}
|
| 14 | + | |
| 15 | {%- endfor %}
| |
| 16 | {{ [ns.spring, ns.fall] | min }}
| |
| 17 | attribute_templates: | |
| 18 | - | is_dst_active: > |
| 18 | + | next_spring: >- |
| 19 | - | {{ now().timetuple().tm_isdst > 0 }}
|
| 19 | + | {%- set ns = namespace(spring = none) %}
|
| 20 | - | dst_change_tomorrow: > |
| 20 | + | {%- set today = strptime(states('sensor.date'), '%Y-%m-%d') %}
|
| 21 | - | {% set dt = now() + timedelta(days=1) %}
|
| 21 | + | {%- for i in range(365) if (today + timedelta(days = i)).timetuple().tm_mon == 3 and (today + timedelta(days = i)) | as_timestamp | timestamp_custom("%w") | int == 0 %}
|
| 22 | - | {{ now().astimezone().tzinfo != dt.astimezone().tzinfo }}
|
| 22 | + | {%- set ns.spring = (today + timedelta(days = i)).astimezone().replace(hour = 2) %}
|
| 23 | - | next: > |
| 23 | + | |
| 24 | - | {%- set ns = namespace(previous = 2, spring=none, fall=none) %}
|
| 24 | + | {{ ns.spring }}
|
| 25 | - | {%- set today = strptime(states('sensor.date'), '%Y-%m-%d').astimezone().replace(hour=ns.previous) %}
|
| 25 | + | next_fall: >- |
| 26 | - | {%- for i in range(365) %}
|
| 26 | + | {%- set ns = namespace(fall = none) %}
|
| 27 | - | {%- set day = (today + timedelta(days=i)).astimezone() %}
|
| 27 | + | {%- set today = strptime(states('sensor.date'), '%Y-%m-%d') %}
|
| 28 | - | {%- if ns.previous - day.hour == -1 %}
|
| 28 | + | {%- for i in range(365) if (today + timedelta(days = i)).timetuple().tm_mon == 10 and (today + timedelta(days = i)) | as_timestamp | timestamp_custom("%w") | int == 0 %}
|
| 29 | - | {%- set ns.spring = today + timedelta(days=i) %}
|
| 29 | + | {%- set ns.fall = (today + timedelta(days = i)).astimezone().replace(hour = 3) %}
|
| 30 | - | {%- elif ns.previous - day.hour == 1 %}
|
| 30 | + | |
| 31 | - | {%- set ns.fall = today + timedelta(days=i) %}
|
| 31 | + | {{ ns.fall }}
|
| 32 | - | {%- endif %}
|
| 32 | + | is_dst: >- |
| 33 | - | {%- set ns.previous = day.hour %}
|
| 33 | + | {{ now().timetuple().tm_isdst == 1 }}
|
| 34 | dst_change_tomorrow: >- | |
| 35 | - | {%- set next = [ns.spring, ns.fall] | min %}
|
| 35 | + | {{ now().astimezone().tzinfo != (now() + timedelta(days = 1)).astimezone().tzinfo }}
|
| 36 | - | {%- set phrase = 'lose an hour' if next == ns.spring else 'gain an hour' %}
|
| 36 | + | days_to_event: "{{ ((strptime(states('sensor.dst'), '%Y-%m-%d') | as_timestamp - strptime(states('sensor.date'), '%Y-%m-%d') | as_timestamp) / 86400) | int }}"
|
| 37 | - | {"spring": "{{ns.spring}}", "fall": "{{ns.fall}}", "event": "{{next}}", "days_to_event":{{(next-today).days}}, "phrase": "{{phrase}}"} |
| 37 | + | phrase: "{{ 'lose' if states('sensor.dst') == state_attr('sensor.dst', 'next_spring') else 'gain' }} an hour" |