Can now override certain schedule parameters for manual settings

This commit is contained in:
2023-03-22 13:53:03 -04:00
parent 41f780b4e9
commit 665d5f7d83
2 changed files with 306 additions and 200 deletions

View File

@ -11,6 +11,8 @@ input_datetime:
icon: mdi:weather-night icon: mdi:weather-night
input_boolean: input_boolean:
# Turned on when scheduling automations run, reset at midnight
# This tracks whether scheduling has already been run, to be used as conditions in automations/scripts
work_today_ran: work_today_ran:
name: Work Today Ran name: Work Today Ran
icon: mdi:clock-outline icon: mdi:clock-outline
@ -41,6 +43,41 @@ input_boolean:
master_bedroom_scheduling_evening_ran: master_bedroom_scheduling_evening_ran:
name: Master Bedroom Scheduling Evening Ran name: Master Bedroom Scheduling Evening Ran
icon: mdi:clock-outline icon: mdi:clock-outline
# Overrides
# These will prevent certain schedules from being modified by the scripts, in case you want to set them yourself
kallen_wakeup_override:
name: Kallen Wakeup Override
icon: mdi:plus-circle-outline
kallen_bedtime_override:
name: Kallen Bedtime Override
icon: mdi:plus-circle-outline
emma_wakeup_override:
name: Emma Wakeup Override
icon: mdi:plus-circle-outline
emma_bedtime_override:
name: Emma Bedtime Override
icon: mdi:plus-circle-outline
master_bedroom_wakeup_override:
name: Master Bedroom Wakeup Override
icon: mdi:plus-circle-outline
tina_work_schedule_override:
name: Tina Work Schedule Override
icon: mdi:plus-circle-outline
house_briefing_times_override:
name: House Briefing Times Override
icon: mdi:plus-circle-outline
kallen_briefing_times_override:
name: Kallen Briefing Times Override
icon: mdi:plus-circle-outline
master_bedroom_climate_override:
name: Master Bedroom Climate Override
icon: mdi:plus-circle-outline
kallen_bedroom_climate_override:
name: Kallen Bedroom Climate Override
icon: mdi:plus-circle-outline
emma_bedroom_climate_override:
name: Emma Bedroom Climate Override
icon: mdi:plus-circle-outline
################################################ ################################################
# Current order of operations is as follows: # # Current order of operations is as follows: #
@ -170,19 +207,24 @@ script:
{% endif %} {% endif %}
- delay: - delay:
seconds: 1 seconds: 1
- service: input_datetime.set_datetime - if:
entity_id: input_datetime.kallen_wakeup_time - condition: state
data: entity_id: input_boolean.kallen_wakeup_override
time: > state: 'off'
{% if is_state('input_boolean.kallen_school_today', 'on') %} then:
{% if is_state('input_boolean.two_hour_delay','on') %} - service: input_datetime.set_datetime
09:30 entity_id: input_datetime.kallen_wakeup_time
data:
time: >
{% if is_state('input_boolean.kallen_school_today', 'on') %}
{% if is_state('input_boolean.two_hour_delay','on') %}
09:30
{% else %}
{{ (state_attr('input_datetime.kallen_school_day_start','timestamp') - 5400) | timestamp_custom('%H:%M', false) }}
{% endif %}
{% else %} {% else %}
{{ (state_attr('input_datetime.kallen_school_day_start','timestamp') - 5400) | timestamp_custom('%H:%M', false) }} 10:00
{% endif %} {% endif %}
{% else %}
10:00
{% endif %}
- service: input_select.select_option - service: input_select.select_option
target: target:
entity_id: input_select.kallen_morning_briefing_location entity_id: input_select.kallen_morning_briefing_location
@ -197,19 +239,24 @@ script:
{% else %} {% else %}
Common Areas Common Areas
{% endif %} {% endif %}
- service: input_datetime.set_datetime - if:
entity_id: input_datetime.kallen_morning_briefing - condition: state
data: entity_id: input_boolean.kallen_briefing_times_override
time: > state: 'off'
{% if is_state('input_boolean.kallen_school_today', 'on') %} then:
{% if is_state('input_boolean.two_hour_delay','on') %} - service: input_datetime.set_datetime
09:40 entity_id: input_datetime.kallen_morning_briefing
data:
time: >
{% if is_state('input_boolean.kallen_school_today', 'on') %}
{% if is_state('input_boolean.two_hour_delay','on') %}
09:40
{% else %}
{{ (state_attr('input_datetime.kallen_school_day_start','timestamp') - 4800) | timestamp_custom('%H:%M', false) }}
{% endif %}
{% else %} {% else %}
{{ (state_attr('input_datetime.kallen_school_day_start','timestamp') - 4800) | timestamp_custom('%H:%M', false) }} 10:00
{% endif %} {% endif %}
{% else %}
10:00
{% endif %}
- service: input_datetime.set_datetime - service: input_datetime.set_datetime
entity_id: input_datetime.kallen_school_day_start_reminder entity_id: input_datetime.kallen_school_day_start_reminder
data: data:
@ -235,43 +282,58 @@ script:
kallen_scheduling_evening: kallen_scheduling_evening:
alias: 'Kallen Scheduling Evening' alias: 'Kallen Scheduling Evening'
sequence: sequence:
- service: input_datetime.set_datetime - if:
entity_id: input_datetime.kallen_bedtime - condition: state
data: entity_id: input_boolean.kallen_bedtime_override
time: > state: 'off'
{% if is_state('sensor.kallen_school_tomorrow', 'on') %} then:
21:00 - service: input_datetime.set_datetime
{% else %} entity_id: input_datetime.kallen_bedtime
22:00 data:
{% endif %} time: >
{% if is_state('sensor.kallen_school_tomorrow', 'on') %}
21:00
{% else %}
22:00
{% endif %}
- delay: - delay:
seconds: 1 seconds: 1
- service: input_datetime.set_datetime - if:
entity_id: input_datetime.kallen_nightly_briefing - condition: state
data: entity_id: input_boolean.kallen_briefing_times_override
time: "{{ (state_attr('input_datetime.kallen_bedtime','timestamp') - 1200) | timestamp_custom('%H:%M', false) }}" state: 'off'
- service: input_select.select_option then:
target: - service: input_datetime.set_datetime
entity_id: input_select.scheduled_climate_mode_kallen_fan entity_id: input_datetime.kallen_nightly_briefing
data: data:
option: > time: "{{ (state_attr('input_datetime.kallen_bedtime','timestamp') - 1200) | timestamp_custom('%H:%M', false) }}"
{% if is_state('input_boolean.kallen_overnight','on') %} - if:
N/A - condition: state
{% elif (states('sensor.tonights_low_temp') | int) >= (states('input_number.kallen_fan_threshold') | int) %} entity_id: input_boolean.kallen_bedroom_climate_override
Fan state: 'off'
{% else %} then:
White Noise - service: input_select.select_option
{% endif %} target:
- service: input_datetime.set_datetime entity_id: input_select.scheduled_climate_mode_kallen_fan
target: data:
entity_id: input_datetime.kallen_fan option: >
data: {% if is_state('input_boolean.kallen_overnight','on') %}
time: > N/A
{% if is_state('input_boolean.hot_day','on') %} {% elif (states('sensor.tonights_low_temp') | int) >= (states('input_number.kallen_fan_threshold') | int) %}
{{ (state_attr('input_datetime.kallen_bedtime','timestamp') - 3600) | timestamp_custom('%H:%M', false) }} Fan
{% else %} {% else %}
{{ state_attr('input_datetime.kallen_bedtime','timestamp') | timestamp_custom('%H:%M', false) }} White Noise
{% endif %} {% endif %}
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.kallen_fan
data:
time: >
{% if is_state('input_boolean.hot_day','on') %}
{{ (state_attr('input_datetime.kallen_bedtime','timestamp') - 3600) | timestamp_custom('%H:%M', false) }}
{% else %}
{{ state_attr('input_datetime.kallen_bedtime','timestamp') | timestamp_custom('%H:%M', false) }}
{% endif %}
- if: - if:
- condition: state - condition: state
entity_id: input_boolean.kallen_late_bedtime entity_id: input_boolean.kallen_late_bedtime
@ -287,11 +349,16 @@ script:
entity_id: input_datetime.kallen_nightly_briefing entity_id: input_datetime.kallen_nightly_briefing
data: data:
time: "{{ (state_attr('input_datetime.kallen_nightly_briefing','timestamp') + 3600) | timestamp_custom('%H:%M', false) }}" time: "{{ (state_attr('input_datetime.kallen_nightly_briefing','timestamp') + 3600) | timestamp_custom('%H:%M', false) }}"
- service: input_datetime.set_datetime - if:
target: - condition: state
entity_id: input_datetime.kallen_fan entity_id: input_boolean.kallen_bedroom_climate_override
data: state: 'off'
time: "{{ (state_attr('input_datetime.kallen_fan','timestamp') + 3600) | timestamp_custom('%H:%M', false) }}" then:
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.kallen_fan
data:
time: "{{ (state_attr('input_datetime.kallen_fan','timestamp') + 3600) | timestamp_custom('%H:%M', false) }}"
- service: input_boolean.turn_on - service: input_boolean.turn_on
target: target:
entity_id: input_boolean.kallen_scheduling_evening_ran entity_id: input_boolean.kallen_scheduling_evening_ran
@ -308,46 +375,51 @@ script:
{% else %} {% else %}
09:00 09:00
{% endif %} {% endif %}
- service: input_datetime.set_datetime - if:
entity_id: input_datetime.morning_briefing - condition: state
data: entity_id: input_boolean.house_briefing_times_override
time: > state: 'off'
{% if is_state('input_boolean.kallen_school_today','on') %} then:
{% if is_state('input_boolean.two_hour_delay','on') %} - service: input_datetime.set_datetime
10:20 entity_id: input_datetime.morning_briefing
data:
time: >
{% if is_state('input_boolean.kallen_school_today','on') %}
{% if is_state('input_boolean.two_hour_delay','on') %}
10:20
{% else %}
{{ (state_attr('input_datetime.kallen_school_day_start','timestamp') - 2400) | timestamp_custom('%H:%M', false) }}
{% endif %}
{% elif is_state('input_boolean.work_today','on') and is_state('input_boolean.kallen_school_today','off') %}
{% if (state_attr('input_datetime.tina_workday_start','timestamp')) > 43200 %}
12:00
{% elif (state_attr('input_datetime.tina_workday_start','timestamp') - 1500 ) > (state_attr('input_datetime.audible_notification_on','timestamp')) %}
{{ (state_attr('input_datetime.tina_workday_start', 'timestamp') - 1500) | timestamp_custom('%H:%M', false) }}
{% else %}
10:00
{% endif %}
{% else %} {% else %}
{{ (state_attr('input_datetime.kallen_school_day_start','timestamp') - 2400) | timestamp_custom('%H:%M', false) }}
{% endif %}
{% elif is_state('input_boolean.work_today','on') and is_state('input_boolean.kallen_school_today','off') %}
{% if (state_attr('input_datetime.tina_workday_start','timestamp')) > 43200 %}
12:00 12:00
{% elif (state_attr('input_datetime.tina_workday_start','timestamp') - 1500 ) > (state_attr('input_datetime.audible_notification_on','timestamp')) %}
{{ (state_attr('input_datetime.tina_workday_start', 'timestamp') - 1500) | timestamp_custom('%H:%M', false) }}
{% else %}
10:00
{% endif %} {% endif %}
{% else %} - service: input_datetime.set_datetime
12:00 entity_id: input_datetime.daily_briefing
{% endif %} data:
- service: input_datetime.set_datetime time: >
entity_id: input_datetime.daily_briefing {% if is_state('input_boolean.kallen_school_today','on') %}
data: {% if is_state('input_boolean.kallen_school_early_release','on') %}
time: > 13:15
{% if is_state('input_boolean.kallen_school_today','on') %} {% else %}
{% if is_state('input_boolean.kallen_school_early_release','on') %} 14:15
13:15 {% endif %}
{% elif is_state('input_boolean.kallen_school_today','off') and is_state('input_boolean.work_today','off') %}
15:00
{% else %} {% else %}
14:15 {% if (state_attr('input_datetime.tina_workday_end','timestamp')) > 61200 %}
16:00
{% else %}
{{ (state_attr('input_datetime.tina_workday_end', 'timestamp') + 3600) | timestamp_custom('%H:%M', false) }}
{% endif %}
{% endif %} {% endif %}
{% elif is_state('input_boolean.kallen_school_today','off') and is_state('input_boolean.work_today','off') %}
15:00
{% else %}
{% if (state_attr('input_datetime.tina_workday_end','timestamp')) > 61200 %}
16:00
{% else %}
{{ (state_attr('input_datetime.tina_workday_end', 'timestamp') + 3600) | timestamp_custom('%H:%M', false) }}
{% endif %}
{% endif %}
- if: - if:
- condition: template - condition: template
value_template: > value_template: >
@ -387,15 +459,20 @@ script:
house_scheduling_evening: house_scheduling_evening:
alias: 'House Scheduling Evening' alias: 'House Scheduling Evening'
sequence: sequence:
- service: input_datetime.set_datetime - if:
entity_id: input_datetime.nightly_briefing - condition: state
data: entity_id: input_boolean.house_briefing_times_override
time: > state: 'off'
{% if is_state('input_boolean.kallen_late_bedtime','on') %} then:
{{ (state_attr('input_datetime.kallen_bedtime','timestamp') - 7200) | timestamp_custom('%H:%M', false) }} - service: input_datetime.set_datetime
{% else %} entity_id: input_datetime.nightly_briefing
{{ (state_attr('input_datetime.kallen_bedtime','timestamp') - 3600) | timestamp_custom('%H:%M', false) }} data:
{% endif %} time: >
{% if is_state('input_boolean.kallen_late_bedtime','on') %}
{{ (state_attr('input_datetime.kallen_bedtime','timestamp') - 7200) | timestamp_custom('%H:%M', false) }}
{% else %}
{{ (state_attr('input_datetime.kallen_bedtime','timestamp') - 3600) | timestamp_custom('%H:%M', false) }}
{% endif %}
- service: input_datetime.set_datetime - service: input_datetime.set_datetime
entity_id: input_datetime.audible_notification_off entity_id: input_datetime.audible_notification_off
data: data:
@ -412,19 +489,24 @@ script:
master_bedroom_scheduling_morning: master_bedroom_scheduling_morning:
alias: 'Master Bedroom Scheduling Morning' alias: 'Master Bedroom Scheduling Morning'
sequence: sequence:
- service: input_datetime.set_datetime - if:
entity_id: input_datetime.master_bedroom_wakeup - condition: state
data: entity_id: input_boolean.master_bedroom_wakeup_override
time: > state: 'off'
{% if is_state('input_boolean.kallen_school_today','on') %} then:
{% if is_state('input_boolean.kallen_school_early_release','on') %} - service: input_datetime.set_datetime
12:30 entity_id: input_datetime.master_bedroom_wakeup
data:
time: >
{% if is_state('input_boolean.kallen_school_today','on') %}
{% if is_state('input_boolean.kallen_school_early_release','on') %}
12:30
{% else %}
13:30
{% endif %}
{% else %} {% else %}
13:30 13:00
{% endif %} {% endif %}
{% else %}
13:00
{% endif %}
- service: input_boolean.turn_on - service: input_boolean.turn_on
target: target:
entity_id: input_boolean.master_bedroom_scheduling_morning_ran entity_id: input_boolean.master_bedroom_scheduling_morning_ran
@ -432,63 +514,68 @@ script:
master_bedroom_scheduling_evening: master_bedroom_scheduling_evening:
alias: 'Master Bedroom Scheduling Evening' alias: 'Master Bedroom Scheduling Evening'
sequence: sequence:
- service: input_datetime.set_datetime - if:
entity_id: input_datetime.master_bedroom_cooling - condition: state
data: entity_id: input_boolean.master_bedroom_climate_override
time: > state: 'off'
{% set low = states('sensor.tonights_low_temp') | int %} then:
{% if is_state('input_boolean.hot_day','on') and is_state('sensor.kallen_school_tomorrow','on') %} - service: input_datetime.set_datetime
20:00 entity_id: input_datetime.master_bedroom_cooling
{% elif is_state('input_boolean.hot_day','on') and is_state('sensor.kallen_school_tomorrow','off') %} data:
21:00 time: >
{% elif low >= 56 and low <= 60 %} {% set low = states('sensor.tonights_low_temp') | int %}
22:30 {% if is_state('input_boolean.hot_day','on') and is_state('sensor.kallen_school_tomorrow','on') %}
{% elif low > 60 %} 20:00
21:30 {% elif is_state('input_boolean.hot_day','on') and is_state('sensor.kallen_school_tomorrow','off') %}
{% else %} 21:00
00:00 {% elif low >= 56 and low <= 60 %}
{% endif %} 22:30
- service: input_datetime.set_datetime {% elif low > 60 %}
entity_id: input_datetime.master_bedroom_fan 21:30
data:
time: >
{% set low = states('sensor.tonights_low_temp') | int %}
{% set high = states('sensor.todays_high_temp') | int %}
{% if low > 60 or is_state('input_boolean.hot_day','on') %}
22:30
{% elif low <= 60 and low >= 50 %}
23:30
{% elif low >= states('input_number.master_bedroom_fan_threshold') | int and high > 60 %}
00:00
{% else %}
06:00
{% endif %}
- service: input_select.select_option
target:
entity_id: input_select.scheduled_climate_mode_master_bedroom_aircon
data:
option: >
{% if is_state('input_boolean.master_bedroom_aircon_installed','off') %}
N/A
{% elif (states('sensor.tonights_low_temp') | int) >= (states('input_number.master_bedroom_aircon_run_threshold') | int) %}
{% if (states('sensor.tonights_low_temp') | int) >= (states('input_number.master_bedroom_aircon_mode_threshold') | int) %}
AC
{% else %} {% else %}
Fan 00:00
{% endif %}
- service: input_datetime.set_datetime
entity_id: input_datetime.master_bedroom_fan
data:
time: >
{% set low = states('sensor.tonights_low_temp') | int %}
{% set high = states('sensor.todays_high_temp') | int %}
{% if low > 60 or is_state('input_boolean.hot_day','on') %}
22:30
{% elif low <= 60 and low >= 50 %}
23:30
{% elif low >= states('input_number.master_bedroom_fan_threshold') | int and high > 60 %}
00:00
{% else %}
06:00
{% endif %}
- service: input_select.select_option
target:
entity_id: input_select.scheduled_climate_mode_master_bedroom_aircon
data:
option: >
{% if is_state('input_boolean.master_bedroom_aircon_installed','off') %}
N/A
{% elif (states('sensor.tonights_low_temp') | int) >= (states('input_number.master_bedroom_aircon_run_threshold') | int) %}
{% if (states('sensor.tonights_low_temp') | int) >= (states('input_number.master_bedroom_aircon_mode_threshold') | int) %}
AC
{% else %}
Fan
{% endif %}
{% else %}
N/A
{% endif %}
- service: input_select.select_option
target:
entity_id: input_select.scheduled_climate_mode_master_bedroom_fan
data:
option: >
{% if (states('sensor.tonights_low_temp') | int) >= (states('input_number.master_bedroom_fan_threshold') | int) %}
Fan
{% else %}
N/A
{% endif %} {% endif %}
{% else %}
N/A
{% endif %}
- service: input_select.select_option
target:
entity_id: input_select.scheduled_climate_mode_master_bedroom_fan
data:
option: >
{% if (states('sensor.tonights_low_temp') | int) >= (states('input_number.master_bedroom_fan_threshold') | int) %}
Fan
{% else %}
N/A
{% endif %}
- service: input_boolean.turn_on - service: input_boolean.turn_on
target: target:
entity_id: input_boolean.master_bedroom_scheduling_evening_ran entity_id: input_boolean.master_bedroom_scheduling_evening_ran
@ -497,10 +584,15 @@ script:
emma_bedroom_scheduling_morning: emma_bedroom_scheduling_morning:
alias: 'Emma Bedroom Scheduling Morning' alias: 'Emma Bedroom Scheduling Morning'
sequence: sequence:
- service: input_datetime.set_datetime - if:
entity_id: input_datetime.emma_wakeup - condition: state
data: entity_id: input_boolean.emma_wakeup_override
time: "{{ states('input_datetime.master_bedroom_wakeup') }}" state: 'off'
then:
- service: input_datetime.set_datetime
entity_id: input_datetime.emma_wakeup
data:
time: "{{ states('input_datetime.master_bedroom_wakeup') }}"
- service: input_boolean.turn_on - service: input_boolean.turn_on
target: target:
entity_id: input_boolean.emma_scheduling_morning_ran entity_id: input_boolean.emma_scheduling_morning_ran
@ -508,33 +600,43 @@ script:
emma_bedroom_scheduling_evening: emma_bedroom_scheduling_evening:
alias: 'Emma Bedroom Scheduling Evening' alias: 'Emma Bedroom Scheduling Evening'
sequence: sequence:
- service: input_datetime.set_datetime - if:
entity_id: input_datetime.emma_bedtime - condition: state
data: entity_id: input_boolean.emma_bedtime_override
time: > state: 'off'
{% set high = states('sensor.todays_high_temp') | int %} then:
{% set low = states('sensor.tonights_low_temp') | int %} - service: input_datetime.set_datetime
{% if is_state('input_boolean.hot_day','on') %} entity_id: input_datetime.emma_bedtime
22:00 data:
{% elif high >= 80 or low >= 60 %} time: >
23:00 {% set high = states('sensor.todays_high_temp') | int %}
{% else %} {% set low = states('sensor.tonights_low_temp') | int %}
23:45 {% if is_state('input_boolean.hot_day','on') %}
{% endif %} 22:00
- service: input_select.select_option {% elif high >= 80 or low >= 60 %}
target: 23:00
entity_id: input_select.scheduled_climate_mode_emma_aircon {% else %}
data: 23:45
option: > {% endif %}
{% if is_state('input_boolean.emma_bedroom_aircon_installed','on') %} - if:
{% if (states('sensor.tonights_low_temp') | int) >= (states('input_number.emma_aircon_threshold') | int) %} - condition: state
AC entity_id: input_boolean.emma_bedroom_climate_override
state: 'off'
then:
- service: input_select.select_option
target:
entity_id: input_select.scheduled_climate_mode_emma_aircon
data:
option: >
{% if is_state('input_boolean.emma_bedroom_aircon_installed','on') %}
{% if (states('sensor.tonights_low_temp') | int) >= (states('input_number.emma_aircon_threshold') | int) %}
AC
{% else %}
White Noise
{% endif %}
{% else %} {% else %}
White Noise White Noise
{% endif %} {% endif %}
{% else %}
White Noise
{% endif %}
- service: input_boolean.turn_on - service: input_boolean.turn_on
target: target:
entity_id: input_boolean.emma_scheduling_evening_ran entity_id: input_boolean.emma_scheduling_evening_ran

View File

@ -24,6 +24,10 @@ automation:
trigger: trigger:
- platform: time - platform: time
at: '04:00:00' at: '04:00:00'
condition:
- condition: state
entity_id: input_boolean.tina_work_schedule_override
state: 'off'
action: action:
- if: - if:
- condition: template - condition: template