Compare commits

...

27 Commits

Author SHA1 Message Date
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
ce29e80330 Try to fix Tina Desk Switch weirdness 2025-04-02 15:53:12 -04:00
10deee4f04 Always play Emma wakeup announcement, and play it in common areas 2025-03-29 01:15:20 -04:00
6fa762a113 Adjust scheduling for ridiculously OP air conditioner 2025-03-29 01:10:58 -04:00
7b529895e5 Whole fuckload of changes for Emma's new air conditioner 2025-03-28 21:56:58 -04:00
bdb278dd28 Adjust TTS briefings for K riding the bus
#219
2025-03-24 18:38:55 -04:00
000efa7562 Adjust status macros for K riding the bus
#219
2025-03-24 18:38:54 -04:00
b6911a0f59 Rework scheduling for K riding the bus
#219
2025-03-24 18:38:53 -04:00
d49563435d Raise threshold to show computers on, ignore idle power spikes
This caused my computer to briefly register as on, and thus my Awake switch was turned on and prevented Emma's door alert from playing in the bedroom
2025-03-24 18:38:38 -04:00
1a89d088f6 Automations to deal with Emma Awake toggle 2025-03-24 03:00:13 -04:00
ee6499bec8 Add option for Adjustment request in reporting system 2025-03-22 20:50:01 -04:00
148f78aecd Update .HA_VERSION 2025-03-22 07:20:42 -04:00
49f9e99439 Add warnings for considerable destructive t-storm, confirmed tornado 2025-03-19 17:11:34 -04:00
6254fb5953 Track new weather alert sensors for long-term stats 2025-03-18 01:38:17 -04:00
334b7963e8 Add ability to show when tornado production is possible 2025-03-18 01:37:52 -04:00
4466b17df1 Update .HA_VERSION 2025-03-17 16:12:03 -04:00
21 changed files with 475 additions and 317 deletions

View File

@ -1 +1 @@
2025.3.2 2025.4.2

View File

@ -311,102 +311,118 @@
- id: '1651787468337' - id: '1651787468337'
alias: Reboot handling alias: Reboot handling
description: '' description: ''
trigger: triggers:
- platform: homeassistant - event: start
event: start
id: hass_start id: hass_start
- platform: homeassistant trigger: homeassistant
event: shutdown - event: shutdown
id: hass_stop id: hass_stop
condition: [] trigger: homeassistant
action: conditions: []
- if: actions:
- condition: trigger - alias: Routing
id: hass_start choose:
alias: Startup - conditions:
then: - condition: trigger
- delay: id: hass_start
hours: 0 alias: Startup
minutes: 1 sequence:
seconds: 0 - delay:
milliseconds: 0 hours: 0
- service: automation.turn_on minutes: 1
data: {} seconds: 0
target: milliseconds: 0
entity_id: - data: {}
- automation.family_has_arrived target:
- automation.family_has_left entity_id:
- automation.scheduled_alarm_rearm - automation.family_has_arrived
- automation.scheduled_alarm_disarm - automation.family_has_left
- service: switch.turn_off - automation.scheduled_alarm_rearm
target: - automation.scheduled_alarm_disarm
entity_id: action: automation.turn_on
- switch.presence_simulation - if:
data: {}
- if:
- condition: and
conditions:
- condition: state
entity_id: input_boolean.holiday_mode
state: 'on'
alias: Is holiday mode on?
- condition: state - condition: state
entity_id: binary_sensor.early_night_mode entity_id: binary_sensor.early_night_mode
state: 'on' state: 'off'
alias: Is early night mode on? then:
alias: Test conditions - action: input_boolean.turn_off
then: metadata: {}
- service: switch.turn_on 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: {} 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: target:
entity_id: switch.animated_scene_{{ states('input_select.holiday_animation') entity_id:
| lower }} - automation.family_has_arrived
alias: Turn on the appropriate animated holiday scene - automation.family_has_left
alias: Turn on animated holiday scene if night time and holiday mode is on action: automation.turn_off
- 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
mode: queued mode: queued
- id: '1654547257475' - id: '1654547257475'
alias: Battery Monitoring alias: Battery Monitoring
@ -1310,10 +1326,23 @@
input: input:
dimmer_device: 40c14ccfe958d21d75888a968bbbf908 dimmer_device: 40c14ccfe958d21d75888a968bbbf908
on_short_action: on_short_action:
- data: {} - if:
target: - condition: state
entity_id: light.tina_desk_lights entity_id: light.tina_desk_lights
action: light.turn_on state: 'off'
then:
- action: input_select.select_option
metadata: {}
data:
option: Reset
target:
entity_id: input_select.tina_desk_scenes
else:
- action: light.turn_off
metadata: {}
data: {}
target:
entity_id: light.tina_desk_lights
on_long_action: on_long_action:
- data: - data:
option: Reset option: Reset
@ -5030,38 +5059,6 @@
alias: Update Notification alias: Update Notification
mode: parallel mode: parallel
max: 10 max: 10
- id: '1714595577405'
alias: Emma Bedroom Cooling
description: ''
trigger:
- platform: time
at: input_datetime.emma_bedroom_cooling
alias: At the scheduled cooling time
condition:
- condition: state
entity_id: input_boolean.emma_sleeping
state: 'off'
alias: If Emma is not already asleep
- condition: state
entity_id: input_select.scheduled_climate_mode_emma_bedroom
state: AC
alias: If the AC is scheduled to run
action:
- service: fan.turn_on
metadata: {}
data: {}
target:
entity_id: fan.emma_air_conditioner
alias: Turn on Emma's air conditioner
- service: script.text_notify
data:
who: parents
title: Emma Climate Schedule
message: The air conditioner in Emma's Bedroom has been activated.
type: normal
tag: emma-climate
alias: Send AC notification
mode: restart
- id: '1716497196985' - id: '1716497196985'
alias: Emma Bedtime Rescheduler alias: Emma Bedtime Rescheduler
description: Keeps Emma's bedtime up-to-date with reality description: Keeps Emma's bedtime up-to-date with reality
@ -6097,3 +6094,30 @@
action: script.tina_tylenol action: script.tina_tylenol
mode: parallel mode: parallel
max: 10 max: 10
- id: '1742799079017'
alias: Emma Sleep Handling
description: Awareness of when Emma is asleep or wakes up
triggers:
- trigger: state
entity_id:
- input_boolean.emma_sleeping
from: 'on'
to: 'off'
id: sleep-off
alias: Sleep Off
- trigger: state
entity_id:
- binary_sensor.family_home
from: 'on'
to: 'off'
id: family-left
alias: Family Left
conditions: []
actions:
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.emma_awake
alias: Turn on Emma Awake
mode: restart

View File

@ -321,6 +321,9 @@ influxdb:
- sensor.dimmest_room - sensor.dimmest_room
- sensor.warmest_room_temperature - sensor.warmest_room_temperature
- sensor.coldest_room_temperature - sensor.coldest_room_temperature
- sensor.national_tornado_warnings
- sensor.national_severe_thunderstorm_warnings
- binary_sensor.severe_thunderstorm_warning
logbook: logbook:
include: include:
@ -498,3 +501,6 @@ prometheus:
- sensor.dimmest_room - sensor.dimmest_room
- sensor.warmest_room_temperature - sensor.warmest_room_temperature
- sensor.coldest_room_temperature - sensor.coldest_room_temperature
- sensor.national_tornado_warnings
- sensor.national_severe_thunderstorm_warnings
- binary_sensor.severe_thunderstorm_warning

View File

@ -12,21 +12,62 @@
{% endif %} {% endif %}
{% endmacro %} {% 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 sports_pregame(team) %}
{% macro data() %} {% 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') %} {% if is_state(team,'PRE') %}
{% set date = state_attr(team,'date') | as_timestamp | timestamp_custom('%m-%d') %} {% set date = state_attr(team,'date') | as_timestamp | timestamp_custom('%m-%d') %}
{% if date == now().strftime('%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') }}. {{ sports_str(team,'start') }} is at {{ state_attr(team,'date') | as_timestamp | timestamp_custom('%I:%M %p') }}.
{% endif %} {% endif %}
{% endif %} {% endif %}
{% endmacro%} {% endmacro %}
{{ cleanup(data()) }} {{ cleanup(data()) }}
{% endmacro %} {% endmacro %}
{% macro sports_main(team) %} {% macro sports_main(team) %}
{% macro data() %} {% 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') %} {% if is_state(team,'POST') %}
{% set date = state_attr(team,'date') | as_timestamp | timestamp_custom('%m-%d') %} {% set date = state_attr(team,'date') | as_timestamp | timestamp_custom('%m-%d') %}
{% set yday = (as_timestamp(now()) - (24*3600)) | 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'] %} {% 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. 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 %} {% 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 %} {% 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 %} {% 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 %} {% endif %}
{% if state_attr(team,'clock') not in ['postponed','Postponed'] %} {% if state_attr(team,'clock') not in ['postponed','Postponed'] %}
This brings their record to {{ state_attr(team,'team_record') | replace("-"," and ") }} on the season. 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'] %} {% 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. 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 %} {% 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 %} {% 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 %} {% 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 %} {% endif %}
{% if state_attr(team,'clock') not in ['postponed','Postponed'] %} {% if state_attr(team,'clock') not in ['postponed','Postponed'] %}
This brings their record to {{ state_attr(team,'team_record') | replace("-"," and ") }} on the season. This brings their record to {{ state_attr(team,'team_record') | replace("-"," and ") }} on the season.
@ -59,11 +100,11 @@
{% endif %} {% endif %}
{% elif is_state(team,'IN') %} {% elif is_state(team,'IN') %}
{% if (state_attr(team,'team_score') | int) == (state_attr(team,'opponent_score') | int) %} {% 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) %} {% 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 %} {% 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 %}
{% endif %} {% endif %}
{% endmacro %} {% endmacro %}

View File

@ -473,12 +473,11 @@
Collin has Beyond The Bells today after school. Collin has Beyond The Bells today after school.
{% endif %} {% endif %}
{% if is_state('input_boolean.kallen_alternate_pickup','on') %} {% if is_state('input_boolean.kallen_alternate_pickup','on') %}
{{ states('input_text.kallen_pickup') }} will be picking Collin up from school today. {{ states('input_text.kallen_pickup') }} will be picking Collin up from school today.
{% else %}
Pickup today will be at {{ input_datetime_read('input_datetime.kallen_school_day_end') | trim }}.
{% if is_state('input_boolean.kallen_school_early_release','on') %} {% if is_state('input_boolean.kallen_school_early_release','on') %}
And It is early release! Today is an early release day!
{% endif %} {% endif %}
Pickup today will be at {{ input_datetime_read('input_datetime.kallen_school_day_end') | trim }}.
{% endif %} {% endif %}
{% if states('sensor.windows_open') | int > 0 %} {% if states('sensor.windows_open') | int > 0 %}
'I detect that there are windows open. Make sure you close them before you leave, or else the security system will not arm. ' 'I detect that there are windows open. Make sure you close them before you leave, or else the security system will not arm. '
@ -544,10 +543,11 @@
{% endif %} {% endif %}
{% if is_state('input_boolean.kallen_alternate_pickup','on') %} {% if is_state('input_boolean.kallen_alternate_pickup','on') %}
{{ states('input_text.kallen_pickup') }} will be picking him up from school today. {{ states('input_text.kallen_pickup') }} will be picking him up from school today.
{% elif is_state('input_boolean.kallen_school_early_release','on') %} {% if is_state('input_boolean.kallen_school_early_release','on') %}
The school is on an early release schedule, pickup is at {{ input_datetime_read('input_datetime.kallen_school_day_end') | trim }}. The school is on an early release schedule, pickup is at {{ input_datetime_read('input_datetime.kallen_school_day_end') | trim }}.
{% else %} {% else %}
His pickup time is {{ input_datetime_read('input_datetime.kallen_school_day_end') | trim }}. His pickup time is {{ input_datetime_read('input_datetime.kallen_school_day_end') | trim }}.
{% endif %}
{% endif %} {% endif %}
{% else %} {% else %}
{{ identKallen }} has school at {{ input_datetime_read('input_datetime.kallen_school_day_start') | trim }} today. {{ identKallen }} has school at {{ input_datetime_read('input_datetime.kallen_school_day_start') | trim }} today.

View File

@ -19,6 +19,17 @@
{% if type in ['alerts','full'] %} {% if type in ['alerts','full'] %}
{% if is_state('input_boolean.tornado_alarm','on') %} {% if is_state('input_boolean.tornado_alarm','on') %}
We are under a tornado warning. If you are not already in shelter, you should be. Get on it! We are under a tornado warning. If you are not already in shelter, you should be. Get on it!
{% if state_attr('binary_sensor.tornado_warning','confirmed' == true) %}
A tornado has been confirmed in the area. Please take shelter immediately!
{% endif %}
{% elif is_state('binary_sensor.severe_thunderstorm_warning','on') %}
We are under a severe thunderstorm warning.
{% if state_attr('binary_sensor.severe_thunderstorm_warning','tornado_possible' == true) %}
The incoming storm has the potential to produce a tornado, so please pay attention and prepare to take shelter!
{% endif %}
{% if state_attr('binary_sensor.severe_thunderstorm_warning','considerable_destructive' == true) %}
This storm has the potential to cause considerable damage. Please take shelter and stay safe!
{% endif %}
{% elif states('sensor.weatheralerts_active_alerts') > '0' and method != 'dashboard' %} {% elif states('sensor.weatheralerts_active_alerts') > '0' and method != 'dashboard' %}
Current weather alerts: {{ states('sensor.weather_alert_string') }}. Current weather alerts: {{ states('sensor.weather_alert_string') }}.
{% endif %} {% endif %}
@ -49,6 +60,17 @@
{% endif %} {% endif %}
{% if is_state('input_boolean.tornado_alarm','on') %} {% if is_state('input_boolean.tornado_alarm','on') %}
"We are under a tornado warning. If you are not already in shelter, you should be. Get on it! " "We are under a tornado warning. If you are not already in shelter, you should be. Get on it! "
{% if state_attr('binary_sensor.tornado_warning','confirmed' == true) %}
"A tornado has been confirmed in the area. Please take shelter immediately! "
{% endif %}
{% elif is_state('binary_sensor.severe_thunderstorm_warning','on') %}
"We are under a severe thunderstorm warning. "
{% if state_attr('binary_sensor.severe_thunderstorm_warning','tornado_possible' == true) %}
"The incoming storm has the potential to produce a tornado, so please pay attention and prepare to take shelter! "
{% endif %}
{% if state_attr('binary_sensor.severe_thunderstorm_warning','considerable_destructive' == true) %}
"This storm has the potential to cause considerable damage. Please take shelter and stay safe! "
{% endif %}
{% elif is_state('input_boolean.tornado_watch','on') %} {% elif is_state('input_boolean.tornado_watch','on') %}
{{ [ {{ [
"There is currently a tornado watch active. Please keep an eye on the sky and your local weather reports. ", "There is currently a tornado watch active. Please keep an eye on the sky and your local weather reports. ",

View File

@ -11,6 +11,7 @@ report_type:
options: options:
- Bug Report - Bug Report
- New Idea - New Idea
- Adjustment
initial: Bug Report initial: Bug Report
icon: mdi:bug icon: mdi:bug
select_testing: select_testing:

View File

@ -1,14 +1,14 @@
template: template:
- binary_sensor: - binary_sensor:
- name: Emma Aircon - Compressor - name: Emma Bedroom Aircon - Compressor
unique_id: 21bcbb62-823c-43ff-8c2c-26e940324ee6 unique_id: 21bcbb62-823c-43ff-8c2c-26e940324ee6
state: "{{ states('sensor.emma_air_conditioner_power') | int > 150 }}" state: "{{ states('sensor.emma_bedroom_aircon_power') | int > 150 }}"
availability: "{{ states('fan.emma_air_conditioner') not in ['unknown','unavailable'] }}" availability: "{{ states('climate.emma_bedroom_aircon') not in ['unknown','unavailable'] }}"
device_class: running device_class: running
- name: Emma Aircon - Fan - name: Emma Bedroom Aircon - Fan
unique_id: 9e3054cf-8f7e-4fef-9da4-5b2f2bc99c9d unique_id: 9e3054cf-8f7e-4fef-9da4-5b2f2bc99c9d
state: "{{ states('sensor.emma_air_conditioner_power') | int > 20 }}" state: "{{ states('sensor.emma_bedroom_aircon_power') | int > 20 }}"
availability: "{{ states('fan.emma_air_conditioner') not in ['unknown','unavailable'] }}" availability: "{{ states('climate.emma_bedroom_aircon') not in ['unknown','unavailable'] }}"
device_class: running device_class: running
- name: Master Bedroom Aircon - Compressor - name: Master Bedroom Aircon - Compressor
unique_id: 87051957-1dbc-4d65-b138-e8469728f58f unique_id: 87051957-1dbc-4d65-b138-e8469728f58f
@ -142,6 +142,36 @@ template:
mdi:fan-off mdi:fan-off
{% endif %} {% endif %}
availability: "{{ states('climate.master_bedroom_aircon') not in ['unavailable','unknown'] }}" availability: "{{ states('climate.master_bedroom_aircon') not in ['unavailable','unknown'] }}"
- name: "Emma Bedroom Target Temp"
unique_id: b81152a1-d4d9-4e3e-8a78-6039de2884ad
state: "{{ state_attr('climate.emma_bedroom_aircon','temperature') | float }}"
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') }}"
icon: >-
{% if is_state_attr('climate.emma_bedroom_aircon','preset_mode','eco') %}
mdi:home-lightning-bolt
{% else %}
mdi:home-lightning-bolt-outline
{% endif %}
availability: "{{ states('climate.emma_bedroom_aircon') not in ['unavailable','unknown'] }}"
- name: "Emma Bedroom Aircon Fan Mode"
unique_id: d678eb2e-be5b-4626-913d-fc1e32941ead
state: "{{ state_attr('climate.emma_bedroom_aircon','fan_mode') }}"
icon: >
{% if is_state_attr('climate.emma_bedroom_aircon','fan_mode','Auto') %}
mdi:fan-auto
{% elif is_state_attr('climate.emma_bedroom_aircon','fan_mode','Low') %}
mdi:fan-speed-1
{% elif is_state_attr('climate.emma_bedroom_aircon','fan_mode','Medium') %}
mdi:fan-speed-2
{% elif is_state_attr('climate.emma_bedroom_aircon','fan_mode','High') %}
mdi:fan-speed-3
{% else %}
mdi:fan-off
{% endif %}
availability: "{{ states('climate.emma_bedroom_aircon') not in ['unavailable','unknown'] }}"
- name: Living Room Average Temperature - name: Living Room Average Temperature
unique_id: c4a901a6-87e2-4257-b60b-2944be8fdf04 unique_id: c4a901a6-87e2-4257-b60b-2944be8fdf04
state: > state: >
@ -187,16 +217,17 @@ input_boolean:
master_bedroom_climate_protocol: master_bedroom_climate_protocol:
name: Master Bedroom Climate Protocol name: Master Bedroom Climate Protocol
icon: mdi:lightbulb-night icon: mdi:lightbulb-night
emma_bedroom_climate_protocol:
name: Emma Bedroom Climate Protocol
icon: mdi:lightbulb-night
kallen_bedtime_protocol: kallen_bedtime_protocol:
name: Kallen Bedtime Protocol name: Kallen Bedtime Protocol
icon: mdi:lightbulb-night icon: mdi:lightbulb-night
# Turn on when master bedroom air conditioner is installed, turn off in winter when we take it out, for smarter automations # Turn on when air conditioners are installed, turn off in winter when we take them out
master_bedroom_aircon_installed: master_bedroom_aircon_installed:
name: Master Bedroom Aircon Installed name: Master Bedroom Aircon Installed
icon: mdi:tools icon: mdi:tools
# Same thing, but for Emma's bedroom air conditioner
emma_bedroom_aircon_installed: emma_bedroom_aircon_installed:
name: Emma Bedroom Aircon Installed name: Emma Bedroom Aircon Installed
icon: mdi:tools icon: mdi:tools
@ -205,6 +236,9 @@ input_boolean:
master_bedroom_cooling_on: master_bedroom_cooling_on:
name: Master Bedroom Cooling On name: Master Bedroom Cooling On
icon: mdi:snowflake icon: mdi:snowflake
emma_bedroom_cooling_on:
name: Emma Bedroom Cooling On
icon: mdi:snowflake
# Activated if the day will be excessively hot. For use with automations for daytime climate control. # Activated if the day will be excessively hot. For use with automations for daytime climate control.
hot_day: hot_day:
@ -247,6 +281,7 @@ input_select:
name: Scheduled Climate Mode - Emma Bedroom name: Scheduled Climate Mode - Emma Bedroom
options: options:
- AC - AC
- Fan
- Heat - Heat
- White Noise - White Noise
- N/A - N/A
@ -309,13 +344,55 @@ input_number:
step: 1 step: 1
unit_of_measurement: °F unit_of_measurement: °F
icon: mdi:thermometer icon: mdi:thermometer
emma_aircon_threshold: emma_bedroom_daytime_temp:
name: Emma Aircon Threshold name: Emma Bedroom Daytime Temp
min: 65
max: 80
step: 1
unit_of_measurement: °F
icon: mdi:thermometer
emma_bedroom_night_temp:
name: Emma Bedroom Night Temp
min: 65
max: 80
step: 1
unit_of_measurement: °F
icon: mdi:thermometer
emma_bedroom_bedtime_temp:
name: Emma Bedroom Bedtime Temp
min: 65
max: 80
step: 1
unit_of_measurement: °F
icon: mdi:thermometer
emma_bedroom_aircon_run_threshold:
name: Emma Bedroom Aircon Run Threshold
min: 40 min: 40
max: 80 max: 80
step: 1 step: 1
unit_of_measurement: °F unit_of_measurement: °F
icon: mdi:thermometer icon: mdi:thermometer
emma_bedroom_aircon_mode_threshold:
name: Emma Bedroom Aircon Mode Threshold
min: 40
max: 80
step: 1
unit_of_measurement: °F
icon: mdi:thermometer
emma_bedroom_fan_threshold:
name: Emma Bedroom Fan Threshold
min: 30
max: 70
step: 1
unit_of_measurement: °F
icon: mdi:thermometer
emma_bedroom_auto_cooling_threshold:
name: Emma Bedroom Auto Cooling Threshold
min: 70
max: 90
step: 1
unit_of_measurement: °F
icon: mdi:thermometer
kallen_fan_threshold: kallen_fan_threshold:
name: Kallen Fan Threshold name: Kallen Fan Threshold
min: 40 min: 40

View File

@ -257,6 +257,9 @@ automation:
time: > time: >
{% from 'time.jinja' import current_time %} {% from 'time.jinja' import current_time %}
{{ current_time('time',24) }} {{ current_time('time',24) }}
- service: input_boolean.turn_off
target:
entity_id: input_boolean.emma_awake
- conditions: - conditions:
- condition: trigger - condition: trigger
id: bedtime-timer-finished id: bedtime-timer-finished
@ -281,6 +284,9 @@ automation:
datetime: > datetime: >
{% from 'time.jinja' import current_time %} {% from 'time.jinja' import current_time %}
{{ current_time('time',24) }} {{ current_time('time',24) }}
- service: input_boolean.turn_off
target:
entity_id: input_boolean.emma_awake
- id: e59f638a-519f-4619-bf7d-b13251b3a374 - id: e59f638a-519f-4619-bf7d-b13251b3a374
alias: Emma Meds Handler alias: Emma Meds Handler
@ -804,16 +810,11 @@ script:
datetime: > datetime: >
{% from 'time.jinja' import set_datetime %} {% from 'time.jinja' import set_datetime %}
{{ set_datetime(0,5) }} {{ set_datetime(0,5) }}
- if: - service: script.speech_engine
- condition: state data:
entity_id: binary_sensor.basement_occupied who: common
state: 'on' type: normal
then: message: Emma has awoken, so it is time to make your way upstairs now
- service: script.speech_engine
data:
who: basement
type: normal
message: Emma has awoken, so it is time to make your way upstairs now
- service: input_datetime.set_datetime - service: input_datetime.set_datetime
target: target:
entity_id: input_datetime.emma_awake_at entity_id: input_datetime.emma_awake_at
@ -898,26 +899,3 @@ script:
- service: input_boolean.turn_off - service: input_boolean.turn_off
target: target:
entity_id: input_boolean.white_noise_emma_bedroom entity_id: input_boolean.white_noise_emma_bedroom
- if:
- condition: state
entity_id: fan.emma_air_conditioner
state: 'on'
then:
- service: script.turn_on
target:
entity_id: script.emma_aircon_shutoff
emma_aircon_shutoff:
alias: 'Emma Air Conditioner Shutoff'
mode: restart
description: 'Attempt to shut off air conditioner after compressor stops running'
sequence:
- wait_template: "{{ is_state('binary_sensor.emma_aircon_compressor','off') }}"
timeout:
minutes: 15
continue_on_timeout: true
- delay:
seconds: 5
- service: fan.turn_off
target:
entity_id: fan.emma_air_conditioner

View File

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

View File

@ -489,6 +489,7 @@ input_select:
- Evening Mode - Evening Mode
- Night Mode - Night Mode
- Bright Mode - Bright Mode
- Reading Mode
- Reset - Reset
initial: Select initial: Select
icon: mdi:desk icon: mdi:desk
@ -653,6 +654,21 @@ template:
{% endif %} {% endif %}
device_class: problem device_class: problem
delay_on: "00:00:10" 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: - sensor:
- name: "Basement Studio Lights - Brightness Actual" - name: "Basement Studio Lights - Brightness Actual"
unique_id: dee4dc84-a6a0-4150-903e-5b8bd436d962 unique_id: dee4dc84-a6a0-4150-903e-5b8bd436d962

View File

@ -1237,11 +1237,9 @@ script:
data: data:
message: > message: >
<voice name="{{ voice }}"> <voice name="{{ voice }}">
<amazon:auto-breaths>
<prosody rate="fast"> <prosody rate="fast">
{{ message }} {{ message }}
</prosody> </prosody>
</amazon:auto-breaths>
</voice> </voice>
target: > target: >
{% if who in ['living_room_echo_dot', 'media_player.living_room_echo_dot','living_room'] %} {% if who in ['living_room_echo_dot', 'media_player.living_room_echo_dot','living_room'] %}

View File

@ -17,8 +17,8 @@ sensor:
entity_id: switch.tina_desktop entity_id: switch.tina_desktop
power_sensor_id: sensor.tina_desktop_power power_sensor_id: sensor.tina_desktop_power
- platform: powercalc - platform: powercalc
entity_id: fan.emma_air_conditioner entity_id: switch.emma_bedroom_aircon
power_sensor_id: sensor.emma_air_conditioner_power power_sensor_id: sensor.emma_bedroom_aircon_power
- platform: powercalc - platform: powercalc
entity_id: switch.master_bedroom_aircon entity_id: switch.master_bedroom_aircon
power_sensor_id: sensor.master_bedroom_aircon_power power_sensor_id: sensor.master_bedroom_aircon_power

View File

@ -613,7 +613,6 @@ automation:
target: target:
entity_id: entity_id:
- fan.kallen_bedroom_fan - fan.kallen_bedroom_fan
- fan.emma_air_conditioner
- service: button.press - service: button.press
target: target:
entity_id: button.master_bedroom_climate_reset entity_id: button.master_bedroom_climate_reset

View File

@ -418,21 +418,14 @@ script:
entity_id: input_datetime.daily_briefing entity_id: input_datetime.daily_briefing
data: data:
time: > time: >
{% from 'time.jinja' import time_from_calendar %} {% if is_state('input_boolean.kallen_school_today','off') and is_state('input_boolean.work_today','on') %}
{% if is_state('input_boolean.kallen_school_today','on') %}
{% if is_state('input_boolean.kallen_alternate_pickup','on') or is_state('input_boolean.kallen_btb','on') %}
15:30
{% else %}
{{ time_from_calendar('calendar.kallen_school_days','end_time','set','subtract',1) }}
{% endif %}
{% elif is_state('input_boolean.kallen_school_today','off') and is_state('input_boolean.work_today','off') %}
15:30
{% else %}
{% if (state_attr('input_datetime.tina_workday_end','timestamp')) > 61200 %} {% if (state_attr('input_datetime.tina_workday_end','timestamp')) > 61200 %}
16:00 16:00
{% else %} {% else %}
{{ (state_attr('input_datetime.tina_workday_end', 'timestamp') + 3600) | timestamp_custom('%H:%M', false) }} {{ (state_attr('input_datetime.tina_workday_end', 'timestamp') + 3600) | timestamp_custom('%H:%M', false) }}
{% endif %} {% endif %}
{% else %}
15:30
{% endif %} {% endif %}
- if: - if:
- condition: state - condition: state
@ -561,18 +554,7 @@ script:
- service: input_datetime.set_datetime - service: input_datetime.set_datetime
entity_id: input_datetime.master_bedroom_wakeup entity_id: input_datetime.master_bedroom_wakeup
data: data:
time: > time: "16:30"
{% if is_state('input_boolean.kallen_school_today','on') %}
{% if is_state('input_boolean.kallen_alternate_pickup','on') or is_state('input_boolean.kallen_btb','on') %}
16:30
{% elif is_state('input_boolean.kallen_school_early_release','on') %}
12:30
{% else %}
13:00
{% endif %}
{% else %}
16:30
{% endif %}
- delay: - delay:
milliseconds: 500 milliseconds: 500
- service: input_datetime.set_datetime - service: input_datetime.set_datetime
@ -750,11 +732,11 @@ script:
{% set low = states('sensor.overnight_lowest_temperature') | int %} {% set low = states('sensor.overnight_lowest_temperature') | int %}
{% set bedtime = state_attr('input_datetime.emma_bedtime','timestamp') | int %} {% set bedtime = state_attr('input_datetime.emma_bedtime','timestamp') | int %}
{% if is_state('input_boolean.hot_day','on') %} {% if is_state('input_boolean.hot_day','on') %}
{{ (bedtime - 7200) | timestamp_custom('%H:%M',false) }}
{% elif high >= 80 or low >= 60 %}
{{ (bedtime - 5400) | timestamp_custom('%H:%M',false) }} {{ (bedtime - 5400) | timestamp_custom('%H:%M',false) }}
{% else %} {% elif high >= 80 or low >= 60 %}
{{ (bedtime - 3600) | timestamp_custom('%H:%M',false) }} {{ (bedtime - 3600) | timestamp_custom('%H:%M',false) }}
{% else %}
{{ (bedtime - 1800) | timestamp_custom('%H:%M',false) }}
{% endif %} {% endif %}
- service: input_boolean.turn_on - service: input_boolean.turn_on
target: target:

View File

@ -63,25 +63,25 @@ template:
- binary_sensor: - binary_sensor:
- name: Tony Desktop On - name: Tony Desktop On
unique_id: 82ce673a-96ad-4af5-a8d1-be9ca9fa9c36 unique_id: 82ce673a-96ad-4af5-a8d1-be9ca9fa9c36
state: "{{ states('sensor.tony_desktop_power') | int > 10 }}" state: "{{ states('sensor.tony_desktop_power') | int > 25 }}"
device_class: running device_class: running
attributes: attributes:
power_usage: "{{ states('sensor.tony_desktop_power') | int }}W" power_usage: "{{ states('sensor.tony_desktop_power') | int }}W"
- name: Tina Desktop On - name: Tina Desktop On
unique_id: 8484dbd4-2fae-4368-a4bc-d1bdc09e003f unique_id: 8484dbd4-2fae-4368-a4bc-d1bdc09e003f
state: "{{ states('sensor.tina_desktop_power') | int > 10 }}" state: "{{ states('sensor.tina_desktop_power') | int > 25 }}"
device_class: running device_class: running
attributes: attributes:
power_usage: "{{ states('sensor.tina_desktop_power') | int }}W" power_usage: "{{ states('sensor.tina_desktop_power') | int }}W"
- name: Kallen Desktop On - name: Kallen Desktop On
unique_id: ccc25d75-4915-449d-9b2e-09ad14ffac29 unique_id: ccc25d75-4915-449d-9b2e-09ad14ffac29
state: "{{ states('sensor.kallen_desktop_power') | int > 10 }}" state: "{{ states('sensor.kallen_desktop_power') | int > 25 }}"
device_class: running device_class: running
attributes: attributes:
power_usage: "{{ states('sensor.kallen_desktop_power') | int }}W" power_usage: "{{ states('sensor.kallen_desktop_power') | int }}W"
- name: Basement Server On - name: Basement Server On
unique_id: e6df7d98-d3ba-4e01-bae2-2ebafc8d78d6 unique_id: e6df7d98-d3ba-4e01-bae2-2ebafc8d78d6
state: "{{ states('sensor.basement_server_power') | int > 10 }}" state: "{{ states('sensor.basement_server_power') | int > 25 }}"
device_class: running device_class: running
attributes: attributes:
power_usage: "{{ states('sensor.basement_server_power') | int }}W" power_usage: "{{ states('sensor.basement_server_power') | int }}W"

View File

@ -1544,14 +1544,14 @@ day_mode_in_tina_desk:
alias: Day Mode in Tina Desk alias: Day Mode in Tina Desk
sequence: sequence:
- parallel: - parallel:
- service: light.turn_on - target:
target:
entity_id: light.tina_lamp_top entity_id: light.tina_lamp_top
data: {} data: {}
- service: light.turn_off action: light.turn_on
target: - target:
entity_id: light.tina_lamp_side entity_id: light.tina_lamp_side
data: {} data: {}
action: light.turn_off
- wait_template: '{{ is_state(''light.tina_lamp_side'',''off'') }}' - wait_template: '{{ is_state(''light.tina_lamp_side'',''off'') }}'
timeout: timeout:
seconds: 15 seconds: 15
@ -1561,52 +1561,57 @@ day_mode_in_tina_desk:
- condition: state - condition: state
entity_id: switch.adaptive_lighting_tina_lamp entity_id: switch.adaptive_lighting_tina_lamp
state: 'off' state: 'off'
alias: If switch is off alias: If adaptive lighting is off
then: then:
- service: switch.turn_on - alias: Turn on adaptive lighting
data: {} data: {}
target: target:
entity_id: switch.adaptive_lighting_tina_lamp entity_id:
alias: Turn on the switch - switch.adaptive_lighting_tina_lamp
- switch.adaptive_lighting_adapt_brightness_tina_lamp
- switch.adaptive_lighting_adapt_color_tina_lamp
action: switch.turn_on
else: else:
- alias: Apply adaptive lighting - alias: Apply adaptive lighting
service: adaptive_lighting.apply
data: data:
entity_id: switch.adaptive_lighting_tina_lamp entity_id: switch.adaptive_lighting_tina_lamp
adapt_brightness: true adapt_brightness: true
adapt_color: true adapt_color: true
action: adaptive_lighting.apply
mode: restart mode: restart
icon: mdi:palette icon: mdi:palette
evening_mode_in_tina_desk: evening_mode_in_tina_desk:
alias: Evening Mode in Tina Desk alias: Evening Mode in Tina Desk
sequence: sequence:
- alias: Turn on lamp - alias: Turn on lamp
service: light.turn_on
data: {} data: {}
target: target:
entity_id: entity_id:
- light.tina_lamp_top - light.tina_lamp_top
- light.tina_lamp_side - light.tina_lamp_side
action: light.turn_on
- alias: Apply adaptive lighting to lamp - alias: Apply adaptive lighting to lamp
if: if:
- condition: state - condition: state
entity_id: switch.adaptive_lighting_tina_lamp entity_id: switch.adaptive_lighting_tina_lamp
state: 'off' state: 'off'
alias: If switch is off alias: If adaptive lighting is off
then: then:
- service: switch.turn_on - alias: Turn on adaptive lighting
data: {} data: {}
target: target:
entity_id: switch.adaptive_lighting_tina_lamp entity_id:
alias: Turn on the switch - switch.adaptive_lighting_tina_lamp
- switch.adaptive_lighting_adapt_brightness_tina_lamp
- switch.adaptive_lighting_adapt_color_tina_lamp
action: switch.turn_on
else: else:
- service: adaptive_lighting.apply - alias: Apply adaptive lighting
data: data:
entity_id: switch.adaptive_lighting_tina_lamp entity_id: switch.adaptive_lighting_tina_lamp
adapt_brightness: true adapt_brightness: true
adapt_color: true adapt_color: true
turn_on_lights: true action: adaptive_lighting.apply
alias: Apply adaptive lighting
mode: restart mode: restart
icon: mdi:palette icon: mdi:palette
night_mode_in_tina_desk: night_mode_in_tina_desk:
@ -2972,69 +2977,33 @@ emma_sleep:
option: Adaptive option: Adaptive
alias: Set lights to adaptive alias: Set lights to adaptive
action: input_select.select_option action: input_select.select_option
- alias: Select climate mode - if:
choose: - alias: White Noise
- conditions: condition: and
- alias: AC conditions:
condition: and - condition: state
conditions: entity_id: input_select.scheduled_climate_mode_emma_bedroom
- condition: state state: White Noise
entity_id: input_select.scheduled_climate_mode_emma_bedroom alias: Scheduled mode is White Noise
state: AC - condition: state
alias: Scheduled mode is AC entity_id: input_boolean.white_noise_emma_bedroom
- condition: state state: 'off'
entity_id: fan.emma_air_conditioner alias: White Noise is not already on
state: 'off' then:
alias: Air conditioner is not already on - target:
sequence: entity_id: input_boolean.white_noise_emma_bedroom
- target: data: {}
entity_id: fan.emma_air_conditioner alias: Turn on white noise
data: {} action: input_boolean.turn_on
alias: Turn on air conditioner
action: fan.turn_on
- data:
who: parents
title: Emma Climate Schedule
message: The air conditioner in Emma's Bedroom has been activated.
type: normal
tag: emma-climate
alias: Send AC notification
action: script.text_notify
- conditions:
- alias: White Noise
condition: and
conditions:
- condition: state
entity_id: input_select.scheduled_climate_mode_emma_bedroom
state: White Noise
alias: Scheduled mode is White Noise
- condition: state
entity_id: input_boolean.white_noise_emma_bedroom
state: 'off'
alias: White Noise is not already on
sequence:
- target:
entity_id: input_boolean.white_noise_emma_bedroom
data: {}
alias: Turn on white noise
action: input_boolean.turn_on
- data:
who: parents
title: Emma Climate Schedule
message: White noise has been activated in Emma's Bedroom.
type: normal
tag: emma-climate
alias: Send white noise notification
action: script.text_notify
default:
- data: - data:
who: parents who: parents
title: Emma Climate Schedule title: Emma Climate Schedule
message: No option selected for Emma's climate mode. No devices will be activated. message: White noise has been activated in Emma's Bedroom.
type: normal type: normal
tag: emma-climate tag: emma-climate
alias: Send notification that no climate mode is selected alias: Send white noise notification
action: script.text_notify action: script.text_notify
alias: Select climate mode
icon: mdi:lightbulb-night icon: mdi:lightbulb-night
mode: restart mode: restart
tina_morning_meds: tina_morning_meds:
@ -3561,3 +3530,41 @@ tina_tylenol:
icon: mdi:medication icon: mdi:medication
max: 10 max: 10
description: '' 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

View File

@ -168,7 +168,7 @@
unit_of_measurement: '' unit_of_measurement: ''
state: >- state: >-
{% set compressors = [ {% set compressors = [
states.binary_sensor.emma_aircon_compressor, states.binary_sensor.emma_bedroom_aircon_compressor,
states.binary_sensor.master_bedroom_aircon_compressor states.binary_sensor.master_bedroom_aircon_compressor
] %} ] %}
{{ compressors | selectattr('state','eq','on') | list | count | int }} {{ compressors | selectattr('state','eq','on') | list | count | int }}
@ -177,7 +177,7 @@
unit_of_measurement: '' unit_of_measurement: ''
state: >- state: >-
{% set fans = [ {% set fans = [
states.binary_sensor.emma_aircon_fan, states.binary_sensor.emma_bedroom_aircon_fan,
states.binary_sensor.master_bedroom_aircon_fan states.binary_sensor.master_bedroom_aircon_fan
] %} ] %}
{{ fans | selectattr('state','eq','on') | list | count | int }} {{ fans | selectattr('state','eq','on') | list | count | int }}
@ -196,11 +196,7 @@
unit_of_measurement: '' unit_of_measurement: ''
state: >- state: >-
{% set climate = states.climate | selectattr('state','ne','off') | rejectattr('state','eq','unavailable') | rejectattr('state','eq','unknown') | list | count | int %} {% set climate = states.climate | selectattr('state','ne','off') | rejectattr('state','eq','unavailable') | rejectattr('state','eq','unknown') | list | count | int %}
{% set fans = [ {{ climate | int }}
states.fan.emma_air_conditioner
] %}
{% set fans_on = fans | selectattr('state','eq','on') | list | count | int %}
{{ climate + fans_on | int }}
- name: Climate Devices Running - name: Climate Devices Running
unique_id: 3c61c756-2934-4294-8085-7d3855b692dd unique_id: 3c61c756-2934-4294-8085-7d3855b692dd
unit_of_measurement: '' unit_of_measurement: ''

View File

@ -98,12 +98,7 @@
{% endif %} {% endif %}
{% if is_state('input_boolean.kallen_alternate_pickup','on') %} {% if is_state('input_boolean.kallen_alternate_pickup','on') %}
Today, you will be picked up from school by {{ states('input_text.kallen_pickup') }}. Today, you will be picked up from school by {{ states('input_text.kallen_pickup') }}.
{% elif is_state('input_boolean.work_today','off') %}
Today, you will be picked up from school by your parents.
{% else %}
Today, you will be picked up from school by your dad.
{% endif %} {% endif %}
<s>Pickup today will be at {{ input_datetime_read('input_datetime.kallen_school_day_end') }}</s>
{% if count_the_days('input_datetime.school_last_day') | int == 0 -%} {% if count_the_days('input_datetime.school_last_day') | int == 0 -%}
But today is the last day of School! But today is the last day of School!
{%- endif %} {%- endif %}

View File

@ -71,9 +71,13 @@
{% else %} {% else %}
"Collin's room will be left alone, as he is spending the night elsewhere tonight. " "Collin's room will be left alone, as he is spending the night elsewhere tonight. "
{% endif %} {% endif %}
{% if states('input_select.scheduled_climate_mode_emma_bedroom') != 'N/A' %} {% if states('input_select.scheduled_climate_mode_emma_bedroom_aircon') != 'N/A' %}
{% if is_state('input_select.scheduled_climate_mode_emma_bedroom','AC') and is_state('fan.emma_air_conditioner','off') %} {% if is_state('input_select.scheduled_climate_mode_emma_bedroom_aircon','AC') and is_state('input_boolean.hot_day','on') %}
"Emma's air conditioner will be activated at {{ input_datetime_read('input_datetime.emma_bedroom_cooling') }}. " "Today was a hot day, so Emma's bedroom air conditioner will start cooling a bit earlier tonight at {{ input_datetime_read('input_datetime.emma_bedroom_cooling') }}. "
{% elif is_state('input_select.scheduled_climate_mode_emma_bedroom_aircon','AC') %}
"Emma's bedroom air conditioner will start cooling at {{ input_datetime_read('input_datetime.emma_bedroom_cooling') }}. "
{% elif is_state('input_select.scheduled_climate_mode_emma_bedroom_aircon','Fan') %}
"Emma's bedroom air conditioner will activate fan only mode at {{ input_datetime_read('input_datetime.emma_bedroom_cooling') }}. "
{% elif is_state('input_select.scheduled_climate_mode_emma_bedroom','White Noise') and is_state('input_boolean.white_noise_emma_bedroom','off') %} {% elif is_state('input_select.scheduled_climate_mode_emma_bedroom','White Noise') and is_state('input_boolean.white_noise_emma_bedroom','off') %}
"Emma's white noise generator will activate at {{ input_datetime_read('input_datetime.emma_bedtime') }}. " "Emma's white noise generator will activate at {{ input_datetime_read('input_datetime.emma_bedtime') }}. "
{% endif %} {% endif %}

View File

@ -91,8 +91,21 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if is_state('input_boolean.emma_bedroom_aircon_installed','on') and is_state('fan.emma_air_conditioner','on') %} {% if is_state('input_boolean.emma_bedroom_aircon_installed','on') %}
"Emma's air conditioner is {{ states('fan.emma_air_conditioner') }}. " "the temperature in Emma's bedroom is {{ states('sensor.emma_bedroom_temperature') | int }} degrees. "
{% if not is_state('climate.emma_bedroom_aircon','off') %}
{% if is_state('climate.emma_bedroom_aircon','cool') %}
"and Emma's bedroom air conditioner is set for cooling to {{ state_attr('climate.emma_bedroom_aircon','temperature') }} degrees. "
{% elif is_state('climate.emma_bedroom_aircon','fan_only') %}
"and Emma's bedroom air conditioner is in fan only mode. "
{% elif is_state('climate.emma_bedroom_aircon','dry') %}
"and Emma's bedroom air conditioner is moonlighting as a dehumidifier. "
{% elif is_state('climate.emma_bedroom_aircon','auto') %}
"and Emma's bedroom air conditioner is making its own decisions. Be afraid, be very afraid. "
{% else %}
"and Emma's bedroom air conditioner is currently not speaking to me. Was it something I said? "
{% endif %}
{% endif %}
{% endif %} {% endif %}
{% endif %} {% endif %}
</p> </p>
@ -115,7 +128,7 @@
"Tina has work today. " "Tina has work today. "
{% endif %} {% endif %}
{% if is_state('input_boolean.kallen_at_school','on') %} {% if is_state('input_boolean.kallen_at_school','on') %}
"Collin is at school right now. His pickup time will be at {{ input_datetime_read('input_datetime.kallen_school_day_end') }}. " "Collin is at school right now. His school day ends at {{ input_datetime_read('input_datetime.kallen_school_day_end') }}. "
{% elif is_state('input_boolean.kallen_school_today','on') %} {% elif is_state('input_boolean.kallen_school_today','on') %}
"Collin has school today. " "Collin has school today. "
{% endif %} {% endif %}