Kan tydligen inte hålla fingrarna i styr direkt, så jag har redan hackat om denna snurra. Konstigt, den har varit statisk i säkert ett halvår eller något, så postar jag här och då skall jag direkt in och pilla i den....
För att använda denna version så får man börja med att skapa en hjälpare som heter "Offset_Time" och ge den datum/tid typ. Sedan är det praktiskt att sätta denna Offset_Time i en separat automatisering:
Code: Select all
alias: System - Set Offset Time
description: ""
trigger:
- platform: time
at: "00:01:00"
- platform: time
at: "12:01:00"
condition: []
action:
- service: input_datetime.set_datetime
metadata: {}
data:
time: "{{ timedelta(minutes=range(0, 30) | random) }}"
target:
entity_id: input_datetime.offset_time
mode: single
Som synes sätter jag offset två gånger per dygn, men det är ju valfritt såklart. Och den slumpar fram värden mellan -15 och +16, minuter då.
Sedan då definitionen i configure.yaml som är lite mera komplex och utökad:
Code: Select all
## TOD - Time Of Day
- platform: template
sensors:
time_of_day2:
friendly_name: TOD@Home
value_template: >
{% set t = now() %}
{% if (as_timestamp(t) - state_attr('input_datetime.offset_time', 'timestamp')) | timestamp_custom('%Hh:%Mm') < as_timestamp(states.sensor.date.state ~ " 07:00:00") | timestamp_custom('%Hh:%Mm') %} Night
{% elif (as_timestamp(t) - state_attr('input_datetime.offset_time', 'timestamp')) | timestamp_custom('%Hh:%Mm') < as_timestamp(states.sensor.date.state ~ " 08:00:00") | timestamp_custom('%Hh:%Mm') %} Early Morning
{% elif (as_timestamp(t) - state_attr('input_datetime.offset_time', 'timestamp')) | timestamp_custom('%Hh:%Mm') < as_timestamp(states.sensor.date.state ~ " 10:00:00") | timestamp_custom('%Hh:%Mm') %} Morning
{% elif (as_timestamp(t) - state_attr('input_datetime.offset_time', 'timestamp')) | timestamp_custom('%Hh:%Mm') < as_timestamp(states.sensor.date.state ~ " 19:00:00") | timestamp_custom('%Hh:%Mm') %} Day
{% elif (as_timestamp(t) - state_attr('input_datetime.offset_time', 'timestamp')) | timestamp_custom('%Hh:%Mm') < as_timestamp(states.sensor.date.state ~ " 21:30:00") | timestamp_custom('%Hh:%Mm') %} Evening
{% elif (as_timestamp(t) - state_attr('input_datetime.offset_time', 'timestamp')) | timestamp_custom('%Hh:%Mm') < as_timestamp(states.sun.sun.attributes.next_setting) | timestamp_custom('%Hh:%Mm') %} Evening
{% elif (as_timestamp(t) - state_attr('input_datetime.offset_time', 'timestamp')) | timestamp_custom('%Hh:%Mm') < as_timestamp(states.sensor.date.state ~ " 23:00:00") | timestamp_custom('%Hh:%Mm') %} Turn Down
{% else %} Night
{% endif %}
Tänk på två saker:
1) Tiden som jämför är alltid mindre än, så att det blir Turn Down efter 21.30 eller när solen går ned på sommaren
2) För den som undrar varför det finns två "Evening" så är det för att hantera när solen går ned efter i mitt fall 21.30 (plus/minus Offset_Time). Dvs Turn Down kan det inte bli förrns båda dessa inte är uppfyllda. Det är en lång IF struktur....
EDIT: Det visade sig att HA inte klarar negativa minutrar, det fungerar utmärkt i utvecklingspanelen, men i vekliga livet inte. Så jag ändrade från +/-15 minuter till 0-30 minuter - ingen större skillnad således, bara annat sätt att räkna typ. Typiskt.