Compare commits

...

17 Commits

Author SHA1 Message Date
364c81e8b1 Use night volumes if people are sleeping
#238
2025-04-19 14:37:47 -04:00
0d42142a07 Simplify default speaker volume settings
#238
2025-04-19 14:30:41 -04:00
7d6d72c6ef Update eco mode sensors to reflect new Midea integration in use 2025-04-19 13:58:08 -04:00
41228c1304 Gotta actually CALL an entity to run a service on it...fix #216 2025-04-18 17:49:48 -04:00
b4f4d06d6c Fix scenes using deprecated Hue effect "None" 2025-04-18 17:32:20 -04:00
002919483f Lower-case format period_str 2025-04-16 14:35:14 -04:00
ef548c2df1 Use period_str instead of "inning" 2025-04-16 14:32:28 -04:00
1d60a4df32 Update .HA_VERSION 2025-04-16 14:31:19 -04:00
57c27d4e48 Sports updates are now clock/inning aware
We know at LEAST baseball works. Will have to test hockey at the start of the playoffs in a few days, and football later this year.
2025-04-16 14:23:53 -04:00
c06bd894ae Working on adding clock updates to sports update macros 2025-04-16 13:52:12 -04:00
1b3cf79f25 Reading mode for waifu
#236
2025-04-13 01:50:06 -04:00
7cf9c13e38 Sensor for unavailable lights due to potential light switch usage
home_automation/Home-Assistant-Configs#235
2025-04-13 01:29:20 -04:00
e8c6cd8deb Remove cache parameter from AWS Polly config 2025-04-05 17:14:54 -04:00
df92fc4df6 Remove amazon auto breaths from speech engine 2025-04-05 17:05:19 -04:00
a936b22bb9 Switch AWS Polly from neural voice engine to generative 2025-04-05 16:55:41 -04:00
9aa918d335 Rearrange reboot handling automation, add reset of night modes 2025-04-05 16:55:25 -04:00
c7d6297934 Update .HA_VERSION 2025-04-05 16:54:55 -04:00
9 changed files with 446 additions and 326 deletions

View File

@ -1 +1 @@
2025.3.4
2025.4.2

View File

@ -311,102 +311,118 @@
- id: '1651787468337'
alias: Reboot handling
description: ''
trigger:
- platform: homeassistant
event: start
triggers:
- event: start
id: hass_start
- platform: homeassistant
event: shutdown
trigger: homeassistant
- event: shutdown
id: hass_stop
condition: []
action:
- if:
- condition: trigger
id: hass_start
alias: Startup
then:
- delay:
hours: 0
minutes: 1
seconds: 0
milliseconds: 0
- service: automation.turn_on
data: {}
target:
entity_id:
- automation.family_has_arrived
- automation.family_has_left
- automation.scheduled_alarm_rearm
- automation.scheduled_alarm_disarm
- service: switch.turn_off
target:
entity_id:
- switch.presence_simulation
data: {}
- if:
- condition: and
conditions:
- condition: state
entity_id: input_boolean.holiday_mode
state: 'on'
alias: Is holiday mode on?
trigger: homeassistant
conditions: []
actions:
- alias: Routing
choose:
- conditions:
- condition: trigger
id: hass_start
alias: Startup
sequence:
- delay:
hours: 0
minutes: 1
seconds: 0
milliseconds: 0
- data: {}
target:
entity_id:
- automation.family_has_arrived
- automation.family_has_left
- automation.scheduled_alarm_rearm
- automation.scheduled_alarm_disarm
action: automation.turn_on
- if:
- condition: state
entity_id: binary_sensor.early_night_mode
state: 'on'
alias: Is early night mode on?
alias: Test conditions
then:
- service: switch.turn_on
state: 'off'
then:
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id:
- input_boolean.give_me_darkness
- input_boolean.night_mode
- input_boolean.goodnight
alias: If early night mode is off, turn off other night-related modes
- target:
entity_id:
- switch.presence_simulation
data: {}
action: switch.turn_off
- if:
- condition: and
conditions:
- condition: state
entity_id: input_boolean.holiday_mode
state: 'on'
alias: Is holiday mode on?
- condition: state
entity_id: binary_sensor.early_night_mode
state: 'on'
alias: Is early night mode on?
alias: Test conditions
then:
- data: {}
target:
entity_id: switch.animated_scene_{{ states('input_select.holiday_animation')
| lower }}
alias: Turn on the appropriate animated holiday scene
action: switch.turn_on
alias: Turn on animated holiday scene if night time and holiday mode is on
- data: {}
action: script.tony_desktop_refresh
- data: {}
action: script.tina_desktop_refresh
- data: {}
action: script.asus_laptop_refresh
- data: {}
action: script.kallen_desktop_refresh
- data: {}
action: script.win10vm_refresh
- data:
topic: house/basement/server/glances
payload: restart
qos: 0
retain: false
alias: Restart Glances via MQTT
action: mqtt.publish
- data: {}
alias: Reset all speaker volumes
action: script.volume_reset
- if:
- condition: state
entity_id: input_boolean.studio_quiet
state: 'off'
then:
- data:
who: basement
call_ha_started: 1
action: script.status_annc
else:
- stop: Studio has requested quiet, and Jarvis respects this
alias: Announce back online, unless studio has requested quiet
- conditions:
- condition: trigger
id: hass_stop
alias: Shutdown
sequence:
- data:
stop_actions: true
target:
entity_id: switch.animated_scene_{{ states('input_select.holiday_animation')
| lower }}
alias: Turn on the appropriate animated holiday scene
alias: Turn on animated holiday scene if night time and holiday mode is on
- service: script.tony_desktop_refresh
data: {}
- service: script.tina_desktop_refresh
data: {}
- service: script.asus_laptop_refresh
data: {}
- service: script.kallen_desktop_refresh
data: {}
- service: script.win10vm_refresh
data: {}
- service: mqtt.publish
data:
topic: house/basement/server/glances
payload: restart
qos: 0
retain: false
alias: Restart Glances via MQTT
- service: script.volume_reset
data: {}
alias: Reset all speaker volumes
- if:
- condition: state
entity_id: input_boolean.studio_quiet
state: 'off'
then:
- service: script.status_annc
data:
who: basement
call_ha_started: 1
else:
- stop: Studio has requested quiet, and Jarvis respects this
alias: Announce back online, unless studio has requested quiet
- if:
- condition: trigger
id: hass_stop
alias: Shutdown
then:
- service: automation.turn_off
data:
stop_actions: true
target:
entity_id:
- automation.family_has_arrived
- automation.family_has_left
entity_id:
- automation.family_has_arrived
- automation.family_has_left
action: automation.turn_off
mode: queued
- id: '1654547257475'
alias: Battery Monitoring
@ -514,127 +530,126 @@
- id: '1667341156218'
alias: White Noise
description: ''
trigger:
- platform: state
entity_id:
triggers:
- entity_id:
- input_boolean.white_noise_emma_bedroom
to: 'on'
from: 'off'
id: emma-on
alias: Emma On
- platform: state
entity_id:
trigger: state
- entity_id:
- input_boolean.white_noise_basement
to: 'on'
from: 'off'
id: basement-on
alias: Basement On
- platform: state
entity_id:
trigger: state
- entity_id:
- input_boolean.white_noise_kallen_bedroom
to: 'on'
from: 'off'
id: kallen-on
alias: Kallen On
- platform: state
entity_id:
trigger: state
- entity_id:
- input_boolean.white_noise_emma_bedroom
from: 'on'
to: 'off'
id: emma-off
alias: Emma Off
- platform: state
entity_id:
trigger: state
- entity_id:
- input_boolean.white_noise_basement
from: 'on'
to: 'off'
id: basement-off
alias: Basement Off
- platform: state
entity_id:
trigger: state
- entity_id:
- input_boolean.white_noise_kallen_bedroom
from: 'on'
to: 'off'
id: kallen-off
alias: Kallen Off
trigger: state
- alias: Emma Timeout
platform: state
id: emma-timeout
entity_id:
- media_player.emma_bedroom_google_speaker
to: 'off'
trigger: state
- alias: Basement Timeout
platform: state
id: basement-timeout
entity_id:
- media_player.basement_google_speaker
to: 'off'
trigger: state
- alias: Kallen Timeout
platform: state
id: kallen-timeout
entity_id:
- media_player.kallen_bedroom_google_speaker
to: 'off'
condition: []
action:
trigger: state
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id: emma-on
sequence:
- alias: Start river sounds
service: google_assistant_sdk.send_text_command
data:
command: give me river noise on emma bedroom speaker
- service: media_player.volume_set
data:
volume_level: '{{ states(''input_number.emma_bedroom_google_speaker_night_volume'')
action: google_assistant_sdk.send_text_command
- data:
volume_level: '{{ states(''sensor.emma_bedroom_google_speaker_volume'')
}}'
target:
entity_id: media_player.emma_bedroom_google_speaker
alias: Set volume
action: media_player.volume_set
alias: Emma On
- conditions:
- condition: trigger
id: basement-on
sequence:
- service: google_assistant_sdk.send_text_command
data:
- data:
command: give me thunderstorm sounds on basement studio speaker
alias: Start thunderstorm sounds
- service: media_player.volume_set
data:
volume_level: '{{ states(''input_number.basement_google_speaker_night_volume'')
}}'
action: google_assistant_sdk.send_text_command
- data:
volume_level: '{{ states(''sensor.basement_google_speaker_volume'') }}'
target:
entity_id: media_player.basement_google_speaker
alias: Set volume
action: media_player.volume_set
alias: Basement On
- conditions:
- condition: trigger
id: kallen-on
sequence:
- alias: Start river sounds
service: google_assistant_sdk.send_text_command
data:
command: give me river noise on kallen bedroom speaker
- service: media_player.volume_set
data:
volume_level: '{{ states(''input_number.kallen_bedroom_google_speaker_night_volume'')
action: google_assistant_sdk.send_text_command
- data:
volume_level: '{{ states(''sensor.kallen_bedroom_google_speaker_volume'')
}}'
target:
entity_id: media_player.kallen_bedroom_google_speaker
alias: Set volume
action: media_player.volume_set
alias: Kallen On
- conditions:
- condition: trigger
id: emma-off
sequence:
- service: media_player.turn_off
data: {}
- data: {}
target:
entity_id: media_player.emma_bedroom_google_speaker
alias: Turn off speaker
action: media_player.turn_off
- alias: If Emma is awake, reset volume
if:
- condition: state
@ -646,49 +661,44 @@
minutes: 0
seconds: 5
milliseconds: 0
- service: media_player.volume_set
data:
volume_level: "{% if is_state('input_boolean.give_me_darkness','on') %}\n
\ {{ states('input_number.emma_bedroom_google_speaker_night_volume')
}}\n{% else %}\n {{ states('input_number.emma_bedroom_google_speaker_day_volume')
}}\n{% endif %}\n"
- data:
volume_level: '{{ states(''sensor.emma_bedroom_google_speaker_volume'')
}}'
target:
entity_id: media_player.emma_bedroom_google_speaker
alias: Reset volume
action: media_player.volume_set
alias: Emma Off
- conditions:
- condition: trigger
id: basement-off
sequence:
- service: media_player.turn_off
data: {}
- data: {}
target:
entity_id: media_player.basement_google_speaker
alias: Turn off speaker
action: media_player.turn_off
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- service: media_player.volume_set
data:
volume_level: "{% if is_state('input_boolean.give_me_darkness','on') %}\n
{{ states('input_number.basement_google_speaker_night_volume') }}\n{%
else %}\n {{ states('input_number.basement_google_speaker_day_volume')
}}\n{% endif %}\n"
- data:
volume_level: '{{ states(''sensor.basement_google_speaker_volume'') }}'
target:
entity_id: media_player.basement_google_speaker
alias: Reset volume
action: media_player.volume_set
alias: Basement Off
- conditions:
- condition: trigger
id: kallen-off
sequence:
- service: media_player.turn_off
data: {}
- data: {}
target:
entity_id: media_player.kallen_bedroom_google_speaker
alias: Turn off speaker
action: media_player.turn_off
- alias: If Kallen is awake, reset volume
if:
- condition: and
@ -705,15 +715,13 @@
minutes: 0
seconds: 5
milliseconds: 0
- service: media_player.volume_set
data:
volume_level: "{% if is_state('input_boolean.give_me_darkness','on') %}\n
\ {{ states('input_number.kallen_bedroom_google_speaker_night_volume')
}}\n{% else %}\n {{ states('input_number.kallen_bedroom_google_speaker_day_volume')
}}\n{% endif %}\n"
- data:
volume_level: '{{ states(''sensor.kallen_bedroom_google_speaker_volume'')
}}'
target:
entity_id: media_player.kallen_bedroom_google_speaker
alias: Reset volume
action: media_player.volume_set
alias: Kallen Off
- conditions:
- condition: trigger
@ -733,16 +741,16 @@
seconds: 5
milliseconds: 0
- alias: Start river sounds
service: google_assistant_sdk.send_text_command
data:
command: give me river noise on emma bedroom speaker
- service: media_player.volume_set
data:
volume_level: '{{ states(''input_number.emma_bedroom_google_speaker_night_volume'')
action: google_assistant_sdk.send_text_command
- data:
volume_level: '{{ states(''sensor.emma_bedroom_google_speaker_volume'')
}}'
target:
entity_id: media_player.emma_bedroom_google_speaker
alias: Set volume
action: media_player.volume_set
alias: Emma Timeout
- conditions:
- condition: trigger
@ -762,16 +770,15 @@
seconds: 5
milliseconds: 0
- alias: Start thunderstorm sounds
service: google_assistant_sdk.send_text_command
data:
command: give me thunderstorm sounds on basement studio speaker
- service: media_player.volume_set
data:
volume_level: '{{ states(''input_number.basement_google_speaker_night_volume'')
}}'
action: google_assistant_sdk.send_text_command
- data:
volume_level: '{{ states(''sensor.basement_google_speaker_volume'') }}'
target:
entity_id: media_player.basement_google_speaker
alias: Set volume
action: media_player.volume_set
alias: Basement Timeout
- conditions:
- condition: trigger
@ -791,16 +798,16 @@
seconds: 5
milliseconds: 0
- alias: Start river sounds
service: google_assistant_sdk.send_text_command
data:
command: give me river noise on kallen bedroom speaker
- service: media_player.volume_set
data:
volume_level: '{{ states(''input_number.kallen_bedroom_google_speaker_night_volume'')
action: google_assistant_sdk.send_text_command
- data:
volume_level: '{{ states(''sensor.kallen_bedroom_google_speaker_volume'')
}}'
target:
entity_id: media_player.kallen_bedroom_google_speaker
alias: Set volume
action: media_player.volume_set
alias: Kallen Timeout
mode: parallel
max: 20

View File

@ -12,21 +12,62 @@
{% endif %}
{% endmacro %}
{% macro period_str(team) %}
{% if state_attr(team,'league') in ['NFL','NCAAF'] %}
quarter
{% elif state_attr(team,'league') == 'MLB' %}
inning
{% else %}
period
{% endif %}
{% endmacro %}
{% macro sports_clock(team) %}
{% macro data() %}
{% set period_str = period_str(team) %}
{% set game_clock = state_attr(team,'clock') | lower %}
{% if state_attr(team,'league') == 'MLB' %}
{% set inning_parts = game_clock.split(' ') %}
in the {{ inning_parts[0] ~ ' of the ' ~ inning_parts[1] ~ ' ' ~ period_str }}
{% else %}
{% if ' - ' in game_clock %}
{% set clock_time, quarter = game_clock.split(' - ') %}
with {{ clock_time ~ ' remaining in the ' ~ quarter ~ ' ' ~ period_str }}
{% else %}
with {{ game_clock ~ ' remaining in the ' ~ period_str }}
{% endif %}
{% endif %}
{% endmacro %}
{{ cleanup(data()) }}
{% endmacro %}
{% macro sports_pregame(team) %}
{% macro data() %}
{% if state_attr(team,'opponent_name') %}
{% set opponent_name = state_attr(team, 'opponent_name') %}
{% if opponent_name.endswith(' St') %}
{% set opponent_name = opponent_name | replace(' St', ' State') %}
{% endif %}
{% endif %}
{% if is_state(team,'PRE') %}
{% set date = state_attr(team,'date') | as_timestamp | timestamp_custom('%m-%d') %}
{% if date == now().strftime('%m-%d') %}
The {{ state_attr(team,'friendly_name') }} will be playing today against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ state_attr(team,'opponent_name') }} at {{ state_attr(team,'venue') }}.
The {{ state_attr(team,'friendly_name') }} will be playing today against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ opponent_name }} at {{ state_attr(team,'venue') }}.
{{ sports_str(team,'start') }} is at {{ state_attr(team,'date') | as_timestamp | timestamp_custom('%I:%M %p') }}.
{% endif %}
{% endif %}
{% endmacro%}
{% endmacro %}
{{ cleanup(data()) }}
{% endmacro %}
{% macro sports_main(team) %}
{% macro data() %}
{% if state_attr(team,'opponent_name') %}
{% set opponent_name = state_attr(team, 'opponent_name') %}
{% if opponent_name.endswith(' St') %}
{% set opponent_name = opponent_name | replace(' St', ' State') %}
{% endif %}
{% endif %}
{% if is_state(team,'POST') %}
{% set date = state_attr(team,'date') | as_timestamp | timestamp_custom('%m-%d') %}
{% set yday = (as_timestamp(now()) - (24*3600)) | timestamp_custom('%m-%d') %}
@ -34,11 +75,11 @@
{% if state_attr(team,'clock') in ['postponed','Postponed'] %}
The {{ state_attr(team,'friendly_name') }} had their game postponed today, and it will be played at a later date.
{% elif (state_attr(team,'team_score') | int) == state_attr(team,'opponent_score') | int %}
The {{ state_attr(team,'friendly_name') }} tied in their game today against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ state_attr(team,'opponent_name') }} by a score of {{ state_attr(team,'team_score') }} to {{ state_attr(team,'opponent_score') }}.
The {{ state_attr(team,'friendly_name') }} tied in their game today against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ opponent_name }} by a score of {{ state_attr(team,'team_score') }} to {{ state_attr(team,'opponent_score') }}.
{% elif state_attr(team,'team_winner') == true %}
The {{ state_attr(team,'friendly_name') }} won their game today against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ state_attr(team,'opponent_name') }} by a score of {{ state_attr(team,'team_score') }} to {{ state_attr(team,'opponent_score') }}.
The {{ state_attr(team,'friendly_name') }} won their game today against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ opponent_name }} by a score of {{ state_attr(team,'team_score') }} to {{ state_attr(team,'opponent_score') }}.
{% elif state_attr(team,'opponent_winner') == true %}
The {{ state_attr(team,'friendly_name') }} lost their game today against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ state_attr(team,'opponent_name') }} by a score of {{ state_attr(team,'opponent_score') }} to {{ state_attr(team,'team_score') }}.
The {{ state_attr(team,'friendly_name') }} lost their game today against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ opponent_name }} by a score of {{ state_attr(team,'opponent_score') }} to {{ state_attr(team,'team_score') }}.
{% endif %}
{% if state_attr(team,'clock') not in ['postponed','Postponed'] %}
This brings their record to {{ state_attr(team,'team_record') | replace("-"," and ") }} on the season.
@ -47,11 +88,11 @@
{% if state_attr(team,'clock') in ['postponed','Postponed'] %}
The {{ state_attr(team,'friendly_name') }} had their game postponed yesterday, and it will be played at a later date.
{% elif (state_attr(team,'team_score') | int) == state_attr(team,'opponent_score') | int %}
The {{ state_attr(team,'friendly_name') }} tied in their game yesterday against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ state_attr(team,'opponent_name') }} by a score of {{ state_attr(team,'team_score') }} to {{ state_attr(team,'opponent_score') }}.
The {{ state_attr(team,'friendly_name') }} tied in their game yesterday against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ opponent_name }} by a score of {{ state_attr(team,'team_score') }} to {{ state_attr(team,'opponent_score') }}.
{% elif state_attr(team,'team_winner') == true %}
The {{ state_attr(team,'friendly_name') }} won their game yesterday against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ state_attr(team,'opponent_name') }} by a score of {{ state_attr(team,'team_score') }} to {{ state_attr(team,'opponent_score') }}.
The {{ state_attr(team,'friendly_name') }} won their game yesterday against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ opponent_name }} by a score of {{ state_attr(team,'team_score') }} to {{ state_attr(team,'opponent_score') }}.
{% elif state_attr(team,'opponent_winner') == true %}
The {{ state_attr(team,'friendly_name') }} lost their game yesterday against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ state_attr(team,'opponent_name') }} by a score of {{ state_attr(team,'opponent_score') }} to {{ state_attr(team,'team_score') }}.
The {{ state_attr(team,'friendly_name') }} lost their game yesterday against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ opponent_name }} by a score of {{ state_attr(team,'opponent_score') }} to {{ state_attr(team,'team_score') }}.
{% endif %}
{% if state_attr(team,'clock') not in ['postponed','Postponed'] %}
This brings their record to {{ state_attr(team,'team_record') | replace("-"," and ") }} on the season.
@ -59,11 +100,11 @@
{% endif %}
{% elif is_state(team,'IN') %}
{% if (state_attr(team,'team_score') | int) == (state_attr(team,'opponent_score') | int) %}
The {{ state_attr(team,'friendly_name') }} are currently tied in their game against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ state_attr(team,'opponent_name') }} with a score of {{ state_attr(team,'team_score') }} to {{ state_attr(team,'opponent_score') }}.
The {{ state_attr(team,'friendly_name') }} are currently tied in their game against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ opponent_name }} with a score of {{ state_attr(team,'team_score') }} to {{ state_attr(team,'opponent_score') }} {{ sports_clock(team) }}.
{% elif (state_attr(team,'team_score') | int) > (state_attr(team,'opponent_score') | int) %}
The {{ state_attr(team,'friendly_name') }} are currently winning their game against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ state_attr(team,'opponent_name') }} with a score of {{ state_attr(team,'team_score') }} to {{ state_attr(team,'opponent_score') }}.
The {{ state_attr(team,'friendly_name') }} are currently winning their game against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ opponent_name }} with a score of {{ state_attr(team,'team_score') }} to {{ state_attr(team,'opponent_score') }} {{ sports_clock(team) }}.
{% else %}
The {{ state_attr(team,'friendly_name') }} are currently losing their game against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ state_attr(team,'opponent_name') }} with a score of {{ state_attr(team,'opponent_score') }} to {{ state_attr(team,'team_score') }}.
The {{ state_attr(team,'friendly_name') }} are currently losing their game against {% if state_attr(team,'league') != 'NCAAF'%}the{% endif %} {{ opponent_name }} with a score of {{ state_attr(team,'opponent_score') }} to {{ state_attr(team,'team_score') }} {{ sports_clock(team) }}.
{% endif %}
{% endif %}
{% endmacro %}

View File

@ -118,9 +118,9 @@ template:
availability: "{{ states('climate.master_bedroom_aircon') not in ['unavailable','unknown'] }}"
- name: "Master Bedroom Eco Mode"
unique_id: edf36e23-adcf-4506-80eb-a14f4ea2fce0
state: "{{ is_state_attr('climate.master_bedroom_aircon','preset_mode','eco') }}"
state: "{{ is_state_attr('climate.master_bedroom_aircon','eco_mode',true) }}"
icon: >-
{% if is_state_attr('climate.master_bedroom_aircon','preset_mode','eco') %}
{% if is_state_attr('climate.master_bedroom_aircon','eco_mode',true) %}
mdi:home-lightning-bolt
{% else %}
mdi:home-lightning-bolt-outline
@ -148,9 +148,9 @@ template:
availability: "{{ states('climate.emma_bedroom_aircon') not in ['unavailable','unknown'] }}"
- name: "Emma Bedroom Eco Mode"
unique_id: 4b6fc8fc-4152-4d8b-ad8d-80f97fcabe44
state: "{{ is_state_attr('climate.emma_bedroom_aircon','preset_mode','eco') }}"
state: "{{ is_state_attr('climate.emma_bedroom_aircon','eco_mode',true) }}"
icon: >-
{% if is_state_attr('climate.emma_bedroom_aircon','preset_mode','eco') %}
{% if is_state_attr('climate.emma_bedroom_aircon','eco_mode',true) %}
mdi:home-lightning-bolt
{% else %}
mdi:home-lightning-bolt-outline

View File

@ -31,8 +31,7 @@ tts:
region_name: 'us-east-1'
text_type: ssml
voice: Joanna
cache: true
engine: neural
engine: generative
conversation:

View File

@ -489,6 +489,7 @@ input_select:
- Evening Mode
- Night Mode
- Bright Mode
- Reading Mode
- Reset
initial: Select
icon: mdi:desk
@ -653,6 +654,21 @@ template:
{% endif %}
device_class: problem
delay_on: "00:00:10"
- name: Light Switch Issue
unique_id: 381e8038-ea96-474c-92ec-d1296dc1369e
state: >
{% set lights = states.light.upstairs_bathroom_lights,
states.light.hallway_overhead,
states.light.downstairs_bathroom_lights %}
{% set issues = lights | selectattr('state','eq','unavailable') | list | count %}
{{ issues > 0 }}
attributes:
issues: >
{% set lights = states.light.upstairs_bathroom_lights,
states.light.hallway_overhead,
states.light.downstairs_bathroom_lights %}
{% set ids = lights | selectattr('state','eq','unavailable') | map(attribute='attributes.friendly_name') | list %}
{{ ids | join(', ') }}
- sensor:
- name: "Basement Studio Lights - Brightness Actual"
unique_id: dee4dc84-a6a0-4150-903e-5b8bd436d962

View File

@ -198,6 +198,57 @@ input_number:
step: 0.05
icon: mdi:knob
template:
- sensor:
- name: "Basement Echo Dot Volume"
state: >
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ states('input_number.basement_echo_dot_night_volume') }}
{% else %}
{{ states('input_number.basement_echo_dot_day_volume') }}
{% endif %}
icon: mdi:volume-high
- name: "Basement Google Speaker Volume"
state: >
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ states('input_number.basement_google_speaker_night_volume') }}
{% else %}
{{ states('input_number.basement_google_speaker_day_volume') }}
{% endif %}
icon: mdi:volume-high
- name: "Living Room Echo Dot Volume"
state: >
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ states('input_number.living_room_echo_dot_night_volume') }}
{% else %}
{{ states('input_number.living_room_echo_dot_day_volume') }}
{% endif %}
icon: mdi:volume-high
- name: "Master Bedroom Echo Dot Volume"
state: >
{% if is_state('input_boolean.give_me_darkness','on') or is_state('binary_sensor.people_sleeping','on') %}
{{ states('input_number.master_bedroom_echo_dot_night_volume') }}
{% else %}
{{ states('input_number.master_bedroom_echo_dot_day_volume') }}
{% endif %}
icon: mdi:volume-high
- name: "Kallen Bedroom Google Speaker Volume"
state: >
{% if is_state('input_boolean.give_me_darkness','on') or is_state('input_boolean.kallen_sleeping','on') %}
{{ states('input_number.kallen_bedroom_google_speaker_night_volume') }}
{% else %}
{{ states('input_number.kallen_bedroom_google_speaker_day_volume') }}
{% endif %}
icon: mdi:volume-high
- name: "Emma Bedroom Google Speaker Volume"
state: >
{% if is_state('input_boolean.give_me_darkness','on') or is_state('input_boolean.emma_sleeping','on') %}
{{ states('input_number.emma_bedroom_google_speaker_night_volume') }}
{% else %}
{{ states('input_number.emma_bedroom_google_speaker_day_volume') }}
{% endif %}
icon: mdi:volume-high
# Amazon Polly Sensors to see last message and location of audible notification
mqtt:
sensor:
@ -325,24 +376,14 @@ script:
- condition: template
value_template: >
{% set current = state_attr('media_player.basement_echo_dot','volume_level') | float %}
{% set night = states('input_number.basement_echo_dot_night_volume') | float %}
{% set day = states('input_number.basement_echo_dot_day_volume') | float %}
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ current != night }}
{% else %}
{{ current != day }}
{% endif %}
{% set expected = states('sensor.basement_echo_dot_volume') | float %}
{{ current != expected }}
then:
- service: media_player.volume_set
target:
entity_id: media_player.basement_echo_dot
data:
volume_level: >
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ states('input_number.basement_echo_dot_night_volume') }}
{% else %}
{{ states('input_number.basement_echo_dot_day_volume') }}
{% endif %}
volume_level: "{{ states('sensor.basement_echo_dot_volume') }}"
# Basement Google Speaker
- if:
- condition: and
@ -373,24 +414,14 @@ script:
- condition: template
value_template: >
{% set current = state_attr('media_player.basement_google_speaker','volume_level') | float %}
{% set night = states('input_number.basement_google_speaker_night_volume') | float %}
{% set day = states('input_number.basement_google_speaker_day_volume') | float %}
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ current != night }}
{% else %}
{{ current != day }}
{% endif %}
{% set expected = states('sensor.basement_google_speaker_volume') | float %}
{{ current != expected }}
then:
- service: media_player.volume_set
target:
entity_id: media_player.basement_google_speaker
data:
volume_level: >
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ states('input_number.basement_google_speaker_night_volume') }}
{% else %}
{{ states('input_number.basement_google_speaker_day_volume') }}
{% endif %}
volume_level: "{{ states('sensor.basement_google_speaker_volume') }}"
- service: media_player.volume_mute
target:
entity_id: media_player.basement_google_speaker
@ -405,24 +436,14 @@ script:
- condition: template
value_template: >
{% set current = state_attr('media_player.living_room_echo_dot','volume_level') | float %}
{% set night = states('input_number.living_room_echo_dot_night_volume') | float %}
{% set day = states('input_number.living_room_echo_dot_day_volume') | float %}
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ current != night }}
{% else %}
{{ current != day }}
{% endif %}
{% set expected = states('sensor.living_room_echo_dot_volume') | float %}
{{ current != expected }}
then:
- service: media_player.volume_set
target:
entity_id: media_player.living_room_echo_dot
data:
volume_level: >
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ states('input_number.living_room_echo_dot_night_volume') }}
{% else %}
{{ states('input_number.living_room_echo_dot_day_volume') }}
{% endif %}
volume_level: "{{ states('sensor.living_room_echo_dot_volume') }}"
# Master Bedroom Echo Dot
- if:
- condition: state
@ -435,24 +456,14 @@ script:
- condition: template
value_template: >
{% set current = state_attr('media_player.master_bedroom_echo_dot','volume_level') | float %}
{% set night = states('input_number.master_bedroom_echo_dot_night_volume') | float %}
{% set day = states('input_number.master_bedroom_echo_dot_day_volume') | float %}
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ current != night }}
{% else %}
{{ current != day }}
{% endif %}
{% set expected = states('sensor.master_bedroom_echo_dot_volume') | float %}
{{ current != expected }}
then:
- service: media_player.volume_set
target:
entity_id: media_player.master_bedroom_echo_dot
data:
volume_level: >
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ states('input_number.master_bedroom_echo_dot_night_volume') }}
{% else %}
{{ states('input_number.master_bedroom_echo_dot_day_volume') }}
{% endif %}
volume_level: "{{ states('sensor.master_bedroom_echo_dot_volume') }}"
# Kallen Bedroom Speaker
- if:
- condition: and
@ -483,24 +494,14 @@ script:
- condition: template
value_template: >
{% set current = state_attr('media_player.kallen_bedroom_google_speaker','volume_level') | float %}
{% set night = states('input_number.kallen_bedroom_google_speaker_night_volume') | float %}
{% set day = states('input_number.kallen_bedroom_google_speaker_day_volume') | float %}
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ current != night }}
{% else %}
{{ current != day }}
{% endif %}
{% set expected = states('sensor.kallen_bedroom_google_speaker_volume') | float %}
{{ current != expected }}
then:
- service: media_player.volume_set
target:
entity_id: media_player.kallen_bedroom_google_speaker
data:
volume_level: >
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ states('input_number.kallen_bedroom_google_speaker_night_volume') }}
{% else %}
{{ states('input_number.kallen_bedroom_google_speaker_day_volume') }}
{% endif %}
volume_level: "{{ states('sensor.kallen_bedroom_google_speaker_volume') }}"
- service: media_player.volume_mute
target:
entity_id: media_player.kallen_bedroom_google_speaker
@ -536,24 +537,14 @@ script:
- condition: template
value_template: >
{% set current = state_attr('media_player.emma_bedroom_google_speaker','volume_level') | float %}
{% set night = states('input_number.emma_bedroom_google_speaker_night_volume') | float %}
{% set day = states('input_number.emma_bedroom_google_speaker_day_volume') | float %}
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ current != night }}
{% else %}
{{ current != day }}
{% endif %}
{% set expected = states('sensor.emma_bedroom_google_speaker_volume') | float %}
{{ current != expected }}
then:
- service: media_player.volume_set
target:
entity_id: media_player.emma_bedroom_google_speaker
data:
volume_level: >
{% if is_state('input_boolean.give_me_darkness','on') %}
{{ states('input_number.emma_bedroom_google_speaker_night_volume') }}
{% else %}
{{ states('input_number.emma_bedroom_google_speaker_day_volume') }}
{% endif %}
volume_level: "{{ states('sensor.kallen_bedroom_google_speaker_volume') }}"
- service: media_player.volume_mute
target:
entity_id: media_player.emma_bedroom_google_speaker
@ -1237,11 +1228,9 @@ script:
data:
message: >
<voice name="{{ voice }}">
<amazon:auto-breaths>
<prosody rate="fast">
{{ message }}
</prosody>
</amazon:auto-breaths>
</voice>
target: >
{% if who in ['living_room_echo_dot', 'media_player.living_room_echo_dot','living_room'] %}
@ -1328,53 +1317,34 @@ script:
media_player.basement_google_speaker
{% endif %}
volume_level: >-
{% set numbers_night = [
states.input_number.emma_bedroom_google_speaker_night_volume.state,
states.input_number.kallen_bedroom_google_speaker_night_volume.state
{% set numbers = [
states.sensor.emma_bedroom_google_speaker_volume.state,
states.sensor.kallen_bedroom_google_speaker_volume.state
] %}
{% set numbers_day = [
states.input_number.emma_bedroom_google_speaker_day_volume.state,
states.input_number.kallen_bedroom_google_speaker_day_volume.state
] %}
{% set kidsgroup_night = numbers_night | list | min | float %}
{% set kidsgroup_day = numbers_day | list | max | float %}
{% set kidsgroup = numbers | list | min | float %}
{% if type in ['critical'] %}
1.0
{% elif is_state('input_boolean.give_me_darkness','on') %}
{% if who in ['Everywhere','everywhere','kids_bedrooms','all_bedrooms'] %}
{% if is_state('input_boolean.emma_sleeping','on') and is_state('input_boolean.kallen_sleeping','off') %}
{{ states('input_number.kallen_bedroom_google_speaker_night_volume') }}
{% elif is_state('input_boolean.kallen_sleeping','on') and is_state('input_boolean.emma_sleeping','off') %}
{{ states('input_number.emma_bedroom_google_speaker_night_volume') }}
{% else %}
{{ kidsgroup_night }}
{% endif %}
{% elif who in ['kallen_bedroom','media_player.kallen_bedroom_google_speaker'] %}
{{ states('input_number.kallen_bedroom_google_speaker_night_volume') }}
{% elif who in ['emma_bedroom','media_player.emma_bedroom_google_speaker'] %}
{{ states('input_number.emma_bedroom_google_speaker_night_volume') }}
{% elif who in ['Basement Google','basement_google'] %}
{{ states('input_number.basement_google_speaker_night_volume') }}
{% else %}
0.3
{% endif %}
{% else %}
{% if who in ['Everywhere','everywhere','kids_bedrooms','all_bedrooms'] %}
{% if is_state('input_boolean.emma_sleeping','on') and is_state('input_boolean.kallen_sleeping','off') %}
{{ states('input_number.kallen_bedroom_google_speaker_day_volume') }}
{{ states('sensor.kallen_bedroom_google_speaker_volume') }}
{% elif is_state('input_boolean.kallen_sleeping','on') and is_state('input_boolean.emma_sleeping','off') %}
{{ states('input_number.emma_bedroom_google_speaker_day_volume') }}
{{ states('sensor.emma_bedroom_google_speaker_volume') }}
{% else %}
{{ kidsgroup_day }}
{{ kidsgroup }}
{% endif %}
{% elif who in ['kallen_bedroom','media_player.kallen_bedroom_google_speaker'] %}
{{ states('input_number.kallen_bedroom_google_speaker_day_volume') }}
{{ states('sensor.kallen_bedroom_google_speaker_volume') }}
{% elif who in ['emma_bedroom','media_player.emma_bedroom_google_speaker'] %}
{{ states('input_number.emma_bedroom_google_speaker_day_volume') }}
{{ states('sensor.emma_bedroom_google_speaker_volume') }}
{% elif who in ['Basement Google','basement_google'] %}
{{ states('input_number.basement_google_speaker_day_volume') }}
{{ states('sensor.basement_google_speaker_volume') }}
{% else %}
0.6
{% if is_state('input_boolean.give_me_darkness','on') %}
0.3
{% else %}
0.6
{% endif %}
{% endif %}
{% endif %}
- service: tts.amazon_polly_say

View File

@ -1210,14 +1210,23 @@
min_mireds: 153
max_mireds: 500
effect_list:
- None
- 'off'
- candle
- fire
- prism
- sparkle
- opal
- glisten
- underwater
- cosmos
- sunbeam
- enchant
- sunrise
- sunset
supported_color_modes:
- color_temp
- xy
effect: None
effect: 'off'
color_mode: xy
brightness: 179
color_temp_kelvin:
@ -1244,14 +1253,23 @@
min_mireds: 153
max_mireds: 500
effect_list:
- None
- 'off'
- candle
- fire
- prism
- sparkle
- opal
- glisten
- underwater
- cosmos
- sunbeam
- enchant
- sunrise
- sunset
supported_color_modes:
- color_temp
- xy
effect: None
effect: 'off'
color_mode: xy
brightness: 255
color_temp_kelvin:
@ -1278,10 +1296,13 @@
min_mireds: 153
max_mireds: 500
effect_list:
- None
- 'off'
- candle
- fire
- prism
- sparkle
- opal
- glisten
supported_color_modes:
- color_temp
- xy
@ -1342,14 +1363,23 @@
min_mireds: 153
max_mireds: 500
effect_list:
- None
- 'off'
- candle
- fire
- prism
- sparkle
- opal
- glisten
- underwater
- cosmos
- sunbeam
- enchant
- sunrise
- sunset
supported_color_modes:
- color_temp
- xy
effect: None
effect: 'off'
color_mode: xy
brightness: 255
color_temp_kelvin:
@ -1376,14 +1406,23 @@
min_mireds: 153
max_mireds: 500
effect_list:
- None
- 'off'
- candle
- fire
- prism
- sparkle
- opal
- glisten
- underwater
- cosmos
- sunbeam
- enchant
- sunrise
- sunset
supported_color_modes:
- color_temp
- xy
effect: None
effect: 'off'
color_mode: xy
brightness: 255
color_temp_kelvin:
@ -1441,14 +1480,17 @@
min_mireds: 153
max_mireds: 500
effect_list:
- None
- 'off'
- candle
- fire
- prism
- sparkle
- opal
- glisten
supported_color_modes:
- color_temp
- xy
effect: None
effect: 'off'
color_mode: xy
brightness: 204
color_temp_kelvin:

View File

@ -1544,14 +1544,14 @@ day_mode_in_tina_desk:
alias: Day Mode in Tina Desk
sequence:
- parallel:
- service: light.turn_on
target:
- target:
entity_id: light.tina_lamp_top
data: {}
- service: light.turn_off
target:
action: light.turn_on
- target:
entity_id: light.tina_lamp_side
data: {}
action: light.turn_off
- wait_template: '{{ is_state(''light.tina_lamp_side'',''off'') }}'
timeout:
seconds: 15
@ -1561,52 +1561,57 @@ day_mode_in_tina_desk:
- condition: state
entity_id: switch.adaptive_lighting_tina_lamp
state: 'off'
alias: If switch is off
alias: If adaptive lighting is off
then:
- service: switch.turn_on
- alias: Turn on adaptive lighting
data: {}
target:
entity_id: switch.adaptive_lighting_tina_lamp
alias: Turn on the switch
entity_id:
- switch.adaptive_lighting_tina_lamp
- switch.adaptive_lighting_adapt_brightness_tina_lamp
- switch.adaptive_lighting_adapt_color_tina_lamp
action: switch.turn_on
else:
- alias: Apply adaptive lighting
service: adaptive_lighting.apply
data:
entity_id: switch.adaptive_lighting_tina_lamp
adapt_brightness: true
adapt_color: true
action: adaptive_lighting.apply
mode: restart
icon: mdi:palette
evening_mode_in_tina_desk:
alias: Evening Mode in Tina Desk
sequence:
- alias: Turn on lamp
service: light.turn_on
data: {}
target:
entity_id:
- light.tina_lamp_top
- light.tina_lamp_side
action: light.turn_on
- alias: Apply adaptive lighting to lamp
if:
- condition: state
entity_id: switch.adaptive_lighting_tina_lamp
state: 'off'
alias: If switch is off
alias: If adaptive lighting is off
then:
- service: switch.turn_on
- alias: Turn on adaptive lighting
data: {}
target:
entity_id: switch.adaptive_lighting_tina_lamp
alias: Turn on the switch
entity_id:
- switch.adaptive_lighting_tina_lamp
- switch.adaptive_lighting_adapt_brightness_tina_lamp
- switch.adaptive_lighting_adapt_color_tina_lamp
action: switch.turn_on
else:
- service: adaptive_lighting.apply
- alias: Apply adaptive lighting
data:
entity_id: switch.adaptive_lighting_tina_lamp
adapt_brightness: true
adapt_color: true
turn_on_lights: true
alias: Apply adaptive lighting
action: adaptive_lighting.apply
mode: restart
icon: mdi:palette
night_mode_in_tina_desk:
@ -2476,25 +2481,26 @@ kallen_morning_meds:
kallen_night_meds:
alias: Kallen Night Meds
sequence:
- service: counter.increment
- alias: Increment night reminder counter
metadata: {}
data: {}
alias: Increment night reminder counter
- service: script.text_notify
data:
action: counter.increment
target:
entity_id: counter.kallen_night_meds_reminder_count
- data:
type: alert
who: all
message: clear_notification
tag: kallen-night-meds
alias: Clear previous night notification
action: script.text_notify
- delay:
hours: 0
minutes: 0
seconds: 5
milliseconds: 0
- parallel:
- service: script.text_notify
data:
- data:
who: "{% if states('person.christina_stork') in ['Bob Evans','BobEvans'] %}\n
\ tony\n{% else %}\n parents\n{% endif %}\n"
type: alert
@ -2507,8 +2513,8 @@ kallen_night_meds:
- action: KALLEN_NIGHT_MEDS_SKIPPED
title: Skip
alias: Send to parents
action: script.text_notify
- alias: Send to Kallen
service: script.text_notify
data:
who: kallen
type: alert
@ -2520,6 +2526,7 @@ kallen_night_meds:
title: Taken
- action: KALLEN_NIGHT_MEDS_SKIPPED
title: Skip
action: script.text_notify
alias: Send text notifications
icon: mdi:medication
mode: restart
@ -3525,3 +3532,41 @@ tina_tylenol:
icon: mdi:medication
max: 10
description: ''
reading_mode_in_tina_desk:
sequence:
- action: switch.turn_off
metadata: {}
data: {}
target:
entity_id: switch.adaptive_lighting_adapt_brightness_tina_lamp
alias: Turn off adaptive brightness, leave adaptive color on
- alias: Turn on lamp
action: light.turn_on
metadata: {}
data:
brightness_pct: 100
target:
entity_id: light.tina_desk_lights
- alias: Apply adaptive lighting to lamp
if:
- condition: state
entity_id: switch.adaptive_lighting_tina_lamp
state: 'off'
alias: If switch is off
then:
- data: {}
target:
entity_id: switch.adaptive_lighting_tina_lamp
alias: Turn on the switch
action: switch.turn_on
else:
- alias: Apply adaptive lighting
data:
entity_id: switch.adaptive_lighting_tina_lamp
adapt_color: true
turn_on_lights: true
adapt_brightness: false
action: adaptive_lighting.apply
alias: Reading Mode in Tina Desk
description: ''
icon: mdi:palette