Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2021
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. dst:
  2. friendly_name: Daylight Savings Times
  3. device_class: timestamp
  4. value_template: >
  5. {%- set ns = namespace(previous = 2, spring=none, fall=none) %}
  6. {%- set today = strptime(states('sensor.date'), '%Y-%m-%d').astimezone().replace(hour=ns.previous) %}
  7. {%- for i in range(365) %}
  8. {%- set day = (today + timedelta(days=i)).astimezone() %}
  9. {%- if ns.previous - day.hour == -1 %}
  10. {%- set ns.spring = today + timedelta(days=i) | timestamp_local %}
  11. {%- elif ns.previous - day.hour == 1 %}
  12. {%- set ns.fall = today + timedelta(days=i) | timestamp_local %}
  13. {%- endif %}
  14. {%- set ns.previous = day.hour %}
  15. {%- endfor %}
  16. {{ [ns.spring, ns.fall] | min }}
  17. attribute_templates:
  18. is_dst_active: >
  19. {{ now().timetuple().tm_isdst > 0 }}
  20. dst_change_tomorrow: >
  21. {% set dt = now() + timedelta(days=1) %}
  22. {{ now().astimezone().tzinfo != dt.astimezone().tzinfo }}
  23. next: >
  24. {%- set ns = namespace(previous = 2, spring=none, fall=none) %}
  25. {%- set today = strptime(states('sensor.date'), '%Y-%m-%d').astimezone().replace(hour=ns.previous) %}
  26. {%- for i in range(365) %}
  27. {%- set day = (today + timedelta(days=i)).astimezone() %}
  28. {%- if ns.previous - day.hour == -1 %}
  29. {%- set ns.spring = today + timedelta(days=i) %}
  30. {%- elif ns.previous - day.hour == 1 %}
  31. {%- set ns.fall = today + timedelta(days=i) %}
  32. {%- endif %}
  33. {%- set ns.previous = day.hour %}
  34. {%- endfor %}
  35. {%- set next = [ns.spring, ns.fall] | min %}
  36. {%- set phrase = 'lose an hour' if next == ns.spring else 'gain an hour' %}
  37. {"spring": "{{ns.spring}}", "fall": "{{ns.fall}}", "event": "{{next}}", "days_to_event":{{(next-today).days}}, "phrase": "{{phrase}}"}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement