Compare commits
33 Commits
2025.3.1
...
status-rew
Author | SHA1 | Date | |
---|---|---|---|
002919483f
|
|||
ef548c2df1
|
|||
1d60a4df32
|
|||
57c27d4e48
|
|||
c06bd894ae
|
|||
1b3cf79f25
|
|||
7cf9c13e38
|
|||
e8c6cd8deb
|
|||
df92fc4df6
|
|||
a936b22bb9
|
|||
9aa918d335
|
|||
c7d6297934
|
|||
ce29e80330
|
|||
10deee4f04
|
|||
6fa762a113
|
|||
7b529895e5
|
|||
bdb278dd28
|
|||
000efa7562
|
|||
b6911a0f59
|
|||
d49563435d
|
|||
1a89d088f6
|
|||
ee6499bec8
|
|||
148f78aecd
|
|||
49f9e99439
|
|||
6254fb5953
|
|||
334b7963e8
|
|||
4466b17df1
|
|||
f96056edda
|
|||
652b4e7dff
|
|||
26bcf136e6
|
|||
9e90998a21
|
|||
30c8307272
|
|||
e6b0db142e
|
@ -1 +1 @@
|
|||||||
2025.3.1
|
2025.4.2
|
160
automations.yaml
160
automations.yaml
@ -311,38 +311,54 @@
|
|||||||
- 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:
|
||||||
|
- alias: Routing
|
||||||
|
choose:
|
||||||
|
- conditions:
|
||||||
- condition: trigger
|
- condition: trigger
|
||||||
id: hass_start
|
id: hass_start
|
||||||
alias: Startup
|
alias: Startup
|
||||||
then:
|
sequence:
|
||||||
- delay:
|
- delay:
|
||||||
hours: 0
|
hours: 0
|
||||||
minutes: 1
|
minutes: 1
|
||||||
seconds: 0
|
seconds: 0
|
||||||
milliseconds: 0
|
milliseconds: 0
|
||||||
- service: automation.turn_on
|
- data: {}
|
||||||
data: {}
|
|
||||||
target:
|
target:
|
||||||
entity_id:
|
entity_id:
|
||||||
- automation.family_has_arrived
|
- automation.family_has_arrived
|
||||||
- automation.family_has_left
|
- automation.family_has_left
|
||||||
- automation.scheduled_alarm_rearm
|
- automation.scheduled_alarm_rearm
|
||||||
- automation.scheduled_alarm_disarm
|
- automation.scheduled_alarm_disarm
|
||||||
- service: switch.turn_off
|
action: automation.turn_on
|
||||||
|
- if:
|
||||||
|
- condition: state
|
||||||
|
entity_id: binary_sensor.early_night_mode
|
||||||
|
state: 'off'
|
||||||
|
then:
|
||||||
|
- action: input_boolean.turn_off
|
||||||
|
metadata: {}
|
||||||
|
data: {}
|
||||||
target:
|
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:
|
entity_id:
|
||||||
- switch.presence_simulation
|
- switch.presence_simulation
|
||||||
data: {}
|
data: {}
|
||||||
|
action: switch.turn_off
|
||||||
- if:
|
- if:
|
||||||
- condition: and
|
- condition: and
|
||||||
conditions:
|
conditions:
|
||||||
@ -356,57 +372,57 @@
|
|||||||
alias: Is early night mode on?
|
alias: Is early night mode on?
|
||||||
alias: Test conditions
|
alias: Test conditions
|
||||||
then:
|
then:
|
||||||
- service: switch.turn_on
|
- data: {}
|
||||||
data: {}
|
|
||||||
target:
|
target:
|
||||||
entity_id: switch.animated_scene_{{ states('input_select.holiday_animation')
|
entity_id: switch.animated_scene_{{ states('input_select.holiday_animation')
|
||||||
| lower }}
|
| lower }}
|
||||||
alias: Turn on the appropriate animated holiday scene
|
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
|
alias: Turn on animated holiday scene if night time and holiday mode is on
|
||||||
- service: script.tony_desktop_refresh
|
- data: {}
|
||||||
data: {}
|
action: script.tony_desktop_refresh
|
||||||
- service: script.tina_desktop_refresh
|
- data: {}
|
||||||
data: {}
|
action: script.tina_desktop_refresh
|
||||||
- service: script.asus_laptop_refresh
|
- data: {}
|
||||||
data: {}
|
action: script.asus_laptop_refresh
|
||||||
- service: script.kallen_desktop_refresh
|
- data: {}
|
||||||
data: {}
|
action: script.kallen_desktop_refresh
|
||||||
- service: script.win10vm_refresh
|
- data: {}
|
||||||
data: {}
|
action: script.win10vm_refresh
|
||||||
- service: mqtt.publish
|
- data:
|
||||||
data:
|
|
||||||
topic: house/basement/server/glances
|
topic: house/basement/server/glances
|
||||||
payload: restart
|
payload: restart
|
||||||
qos: 0
|
qos: 0
|
||||||
retain: false
|
retain: false
|
||||||
alias: Restart Glances via MQTT
|
alias: Restart Glances via MQTT
|
||||||
- service: script.volume_reset
|
action: mqtt.publish
|
||||||
data: {}
|
- data: {}
|
||||||
alias: Reset all speaker volumes
|
alias: Reset all speaker volumes
|
||||||
|
action: script.volume_reset
|
||||||
- if:
|
- if:
|
||||||
- condition: state
|
- condition: state
|
||||||
entity_id: input_boolean.studio_quiet
|
entity_id: input_boolean.studio_quiet
|
||||||
state: 'off'
|
state: 'off'
|
||||||
then:
|
then:
|
||||||
- service: script.status_annc
|
- data:
|
||||||
data:
|
|
||||||
who: basement
|
who: basement
|
||||||
call_ha_started: 1
|
call_ha_started: 1
|
||||||
|
action: script.status_annc
|
||||||
else:
|
else:
|
||||||
- stop: Studio has requested quiet, and Jarvis respects this
|
- stop: Studio has requested quiet, and Jarvis respects this
|
||||||
alias: Announce back online, unless studio has requested quiet
|
alias: Announce back online, unless studio has requested quiet
|
||||||
- if:
|
- conditions:
|
||||||
- condition: trigger
|
- condition: trigger
|
||||||
id: hass_stop
|
id: hass_stop
|
||||||
alias: Shutdown
|
alias: Shutdown
|
||||||
then:
|
sequence:
|
||||||
- service: automation.turn_off
|
- data:
|
||||||
data:
|
|
||||||
stop_actions: true
|
stop_actions: true
|
||||||
target:
|
target:
|
||||||
entity_id:
|
entity_id:
|
||||||
- automation.family_has_arrived
|
- automation.family_has_arrived
|
||||||
- automation.family_has_left
|
- automation.family_has_left
|
||||||
|
action: automation.turn_off
|
||||||
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:
|
||||||
|
- condition: state
|
||||||
|
entity_id: light.tina_desk_lights
|
||||||
|
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:
|
target:
|
||||||
entity_id: light.tina_desk_lights
|
entity_id: light.tina_desk_lights
|
||||||
action: light.turn_on
|
|
||||||
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
|
||||||
|
@ -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
|
||||||
|
@ -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 %}
|
||||||
|
@ -474,11 +474,10 @@
|
|||||||
{% 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,11 +543,12 @@
|
|||||||
{% 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.
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -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. ",
|
||||||
@ -106,7 +128,8 @@
|
|||||||
{{ weatherInfo(type,method,time) |
|
{{ weatherInfo(type,method,time) |
|
||||||
replace('clear-night','clear') |
|
replace('clear-night','clear') |
|
||||||
replace('partlycloudy','partly cloudy') |
|
replace('partlycloudy','partly cloudy') |
|
||||||
replace('snowy-rainy','a mix of rain and snow') }}
|
replace('snowy-rainy','a mix of rain and snow') |
|
||||||
|
replace('lightning-rainy','stormy') }}
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
{{ cleanup(data()) }}
|
{{ cleanup(data()) }}
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
@ -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:
|
||||||
|
@ -1,20 +1,24 @@
|
|||||||
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: "{{ is_state('fan.emma_air_conditioner','on') and states('sensor.emma_air_conditioner_power') | int > 150 }}"
|
state: "{{ states('sensor.emma_bedroom_aircon_power') | int > 150 }}"
|
||||||
|
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: "{{ is_state('fan.emma_air_conditioner','on') and states('sensor.emma_air_conditioner_power') | int > 20 }}"
|
state: "{{ states('sensor.emma_bedroom_aircon_power') | int > 20 }}"
|
||||||
|
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
|
||||||
state: "{{ states('climate.master_bedroom_aircon') not in ['off','unknown','unavailable'] and states('sensor.master_bedroom_aircon_power') | int > 150 }}"
|
state: "{{ states('sensor.master_bedroom_aircon_power') | int > 150 }}"
|
||||||
|
availability: "{{ states('climate.master_bedroom_aircon') not in ['unknown','unavailable'] }}"
|
||||||
device_class: running
|
device_class: running
|
||||||
- name: Master Bedroom Aircon - Fan
|
- name: Master Bedroom Aircon - Fan
|
||||||
unique_id: ae893dd6-129c-4886-a966-a89b958d9f08
|
unique_id: ae893dd6-129c-4886-a966-a89b958d9f08
|
||||||
state: "{{ states('climate.master_bedroom_aircon') not in ['off','unknown','unavailable'] and states('sensor.master_bedroom_aircon_power') | int > 20 }}"
|
state: "{{ states('sensor.master_bedroom_aircon_power') | int > 20 }}"
|
||||||
|
availability: "{{ states('climate.master_bedroom_aircon') not in ['unknown','unavailable'] }}"
|
||||||
device_class: running
|
device_class: running
|
||||||
- name: Kallen Fan - Separate Schedule
|
- name: Kallen Fan - Separate Schedule
|
||||||
unique_id: 3f243861-6a1f-412f-b9e3-933b54793b08
|
unique_id: 3f243861-6a1f-412f-b9e3-933b54793b08
|
||||||
@ -138,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: >
|
||||||
@ -183,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
|
||||||
@ -201,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:
|
||||||
@ -243,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
|
||||||
@ -305,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
|
||||||
|
@ -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,14 +810,9 @@ script:
|
|||||||
datetime: >
|
datetime: >
|
||||||
{% from 'time.jinja' import set_datetime %}
|
{% from 'time.jinja' import set_datetime %}
|
||||||
{{ set_datetime(0,5) }}
|
{{ set_datetime(0,5) }}
|
||||||
- if:
|
|
||||||
- condition: state
|
|
||||||
entity_id: binary_sensor.basement_occupied
|
|
||||||
state: 'on'
|
|
||||||
then:
|
|
||||||
- service: script.speech_engine
|
- service: script.speech_engine
|
||||||
data:
|
data:
|
||||||
who: basement
|
who: common
|
||||||
type: normal
|
type: normal
|
||||||
message: Emma has awoken, so it is time to make your way upstairs now
|
message: Emma has awoken, so it is time to make your way upstairs now
|
||||||
- service: input_datetime.set_datetime
|
- service: input_datetime.set_datetime
|
||||||
@ -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
|
|
@ -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:
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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'] %}
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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:
|
||||||
|
@ -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"
|
||||||
|
448
scripts.yaml
448
scripts.yaml
@ -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:
|
||||||
@ -1663,6 +1668,32 @@ tony_morning_meds:
|
|||||||
tag: tony-morning-meds
|
tag: tony-morning-meds
|
||||||
alias: Clear previous morning notification
|
alias: Clear previous morning notification
|
||||||
action: script.text_notify
|
action: script.text_notify
|
||||||
|
- alias: Send notifications, using AI if internet is connected
|
||||||
|
if:
|
||||||
|
- condition: state
|
||||||
|
entity_id: binary_sensor.internet
|
||||||
|
state: 'on'
|
||||||
|
then:
|
||||||
|
- alias: Generate reminder, be snarky if it's been several times
|
||||||
|
if:
|
||||||
|
- condition: numeric_state
|
||||||
|
entity_id: counter.tony_morning_meds_reminder_count
|
||||||
|
above: 2
|
||||||
|
then:
|
||||||
|
- action: google_generative_ai_conversation.generate_content
|
||||||
|
metadata: {}
|
||||||
|
data:
|
||||||
|
prompt: Remind Tony to take his morning meds. Use a maximum of two lines.
|
||||||
|
Be snarky, because at this point he's been reminded multiple times.
|
||||||
|
response_variable: response
|
||||||
|
alias: Generate snarky reminder
|
||||||
|
else:
|
||||||
|
- action: google_generative_ai_conversation.generate_content
|
||||||
|
metadata: {}
|
||||||
|
data:
|
||||||
|
prompt: Remind Tony to take his morning meds. Use a maximum of two lines.
|
||||||
|
response_variable: response
|
||||||
|
alias: Generate reminder
|
||||||
- delay:
|
- delay:
|
||||||
hours: 0
|
hours: 0
|
||||||
minutes: 0
|
minutes: 0
|
||||||
@ -1675,7 +1706,7 @@ tony_morning_meds:
|
|||||||
who: tony
|
who: tony
|
||||||
type: alert
|
type: alert
|
||||||
title: Morning Meds
|
title: Morning Meds
|
||||||
message: You need to take your morning meds
|
message: '{{ response.text }}'
|
||||||
tag: tony-morning-meds
|
tag: tony-morning-meds
|
||||||
actions:
|
actions:
|
||||||
- action: TONY_MORNING_MEDS_TAKEN
|
- action: TONY_MORNING_MEDS_TAKEN
|
||||||
@ -1685,7 +1716,7 @@ tony_morning_meds:
|
|||||||
action: script.text_notify
|
action: script.text_notify
|
||||||
- alias: Send TTS if reminders > 2 and Tony is home
|
- alias: Send TTS if reminders > 2 and Tony is home
|
||||||
if:
|
if:
|
||||||
- alias: If reminders > 2 and Tony is home
|
- alias: When reminders > 2 and Tony is home
|
||||||
condition: and
|
condition: and
|
||||||
conditions:
|
conditions:
|
||||||
- condition: numeric_state
|
- condition: numeric_state
|
||||||
@ -1700,10 +1731,50 @@ tony_morning_meds:
|
|||||||
- data:
|
- data:
|
||||||
who: common_areas
|
who: common_areas
|
||||||
type: alert
|
type: alert
|
||||||
message: Tony, you need to take your morning meds. This is reminder number
|
message: '{{ response.text }}'
|
||||||
{{ states('counter.tony_morning_meds_reminder_count') }} for today.
|
|
||||||
alias: Send TTS notification
|
alias: Send TTS notification
|
||||||
action: script.speech_engine
|
action: script.speech_engine
|
||||||
|
else:
|
||||||
|
- delay:
|
||||||
|
hours: 0
|
||||||
|
minutes: 0
|
||||||
|
seconds: 5
|
||||||
|
milliseconds: 0
|
||||||
|
- alias: Send morning notifications via text, and TTS if needed
|
||||||
|
parallel:
|
||||||
|
- alias: Send text notification
|
||||||
|
data:
|
||||||
|
who: tony
|
||||||
|
type: alert
|
||||||
|
title: Morning Meds
|
||||||
|
tag: tony-morning-meds
|
||||||
|
actions:
|
||||||
|
- action: TONY_MORNING_MEDS_TAKEN
|
||||||
|
title: Taken
|
||||||
|
- action: TONY_MORNING_MEDS_SKIPPED
|
||||||
|
title: Skip
|
||||||
|
message: You need to take your morning meds
|
||||||
|
action: script.text_notify
|
||||||
|
- alias: Send TTS if reminders > 2 and Tony is home
|
||||||
|
if:
|
||||||
|
- alias: When reminders > 2 and Tony is home
|
||||||
|
condition: and
|
||||||
|
conditions:
|
||||||
|
- condition: numeric_state
|
||||||
|
entity_id: counter.tony_morning_meds_reminder_count
|
||||||
|
above: 2
|
||||||
|
alias: When reminder count > 2
|
||||||
|
- condition: state
|
||||||
|
entity_id: person.tony_stork
|
||||||
|
state: home
|
||||||
|
alias: If Tony is home
|
||||||
|
then:
|
||||||
|
- alias: Send TTS notification
|
||||||
|
data:
|
||||||
|
who: common_areas
|
||||||
|
type: alert
|
||||||
|
message: Tony, you need to take your morning meds
|
||||||
|
action: script.speech_engine
|
||||||
tony_night_meds:
|
tony_night_meds:
|
||||||
alias: Tony Night Meds
|
alias: Tony Night Meds
|
||||||
icon: mdi:medication
|
icon: mdi:medication
|
||||||
@ -1904,6 +1975,32 @@ tony_afternoon_meds:
|
|||||||
tag: tony-afternoon-meds
|
tag: tony-afternoon-meds
|
||||||
alias: Clear previous afternoon notification
|
alias: Clear previous afternoon notification
|
||||||
action: script.text_notify
|
action: script.text_notify
|
||||||
|
- alias: Send notifications, using AI if internet is connected
|
||||||
|
if:
|
||||||
|
- condition: state
|
||||||
|
entity_id: binary_sensor.internet
|
||||||
|
state: 'on'
|
||||||
|
then:
|
||||||
|
- alias: Generate reminder, be snarky if it's been several times
|
||||||
|
if:
|
||||||
|
- condition: numeric_state
|
||||||
|
entity_id: counter.tony_afternoon_meds_reminder_count
|
||||||
|
above: 2
|
||||||
|
then:
|
||||||
|
- action: google_generative_ai_conversation.generate_content
|
||||||
|
metadata: {}
|
||||||
|
data:
|
||||||
|
prompt: Remind Tony to take his afternoon meds. Use a maximum of two lines.
|
||||||
|
Be snarky, because at this point he's been reminded multiple times.
|
||||||
|
response_variable: response
|
||||||
|
alias: Generate snarky reminder
|
||||||
|
else:
|
||||||
|
- action: google_generative_ai_conversation.generate_content
|
||||||
|
metadata: {}
|
||||||
|
data:
|
||||||
|
prompt: Remind Tony to take his afternoon meds. Use a maximum of two lines.
|
||||||
|
response_variable: response
|
||||||
|
alias: Generate reminder
|
||||||
- delay:
|
- delay:
|
||||||
hours: 0
|
hours: 0
|
||||||
minutes: 0
|
minutes: 0
|
||||||
@ -1916,7 +2013,7 @@ tony_afternoon_meds:
|
|||||||
who: tony
|
who: tony
|
||||||
type: alert
|
type: alert
|
||||||
title: Afternoon Meds
|
title: Afternoon Meds
|
||||||
message: You need to take your afternoon meds
|
message: '{{ response.text }}'
|
||||||
tag: tony-afternoon-meds
|
tag: tony-afternoon-meds
|
||||||
actions:
|
actions:
|
||||||
- action: TONY_AFTERNOON_MEDS_TAKEN
|
- action: TONY_AFTERNOON_MEDS_TAKEN
|
||||||
@ -1941,10 +2038,50 @@ tony_afternoon_meds:
|
|||||||
- data:
|
- data:
|
||||||
who: common_areas
|
who: common_areas
|
||||||
type: alert
|
type: alert
|
||||||
message: Tony, you need to take your afternoon meds. This is reminder number
|
message: '{{ response.text }}'
|
||||||
{{ states('counter.tony_afternoon_meds_reminder_count') }} for today.
|
|
||||||
alias: Send TTS notification
|
alias: Send TTS notification
|
||||||
action: script.speech_engine
|
action: script.speech_engine
|
||||||
|
else:
|
||||||
|
- delay:
|
||||||
|
hours: 0
|
||||||
|
minutes: 0
|
||||||
|
seconds: 5
|
||||||
|
milliseconds: 0
|
||||||
|
- alias: Send afternoon notifications via text, and TTS if needed
|
||||||
|
parallel:
|
||||||
|
- alias: Send text notification
|
||||||
|
data:
|
||||||
|
who: tony
|
||||||
|
type: alert
|
||||||
|
title: Afternoon Meds
|
||||||
|
tag: tony-afternoon-meds
|
||||||
|
actions:
|
||||||
|
- action: TONY_AFTERNOON_MEDS_TAKEN
|
||||||
|
title: Taken
|
||||||
|
- action: TONY_AFTERNOON_MEDS_SKIPPED
|
||||||
|
title: Skip
|
||||||
|
message: You need to take your afternoon meds
|
||||||
|
action: script.text_notify
|
||||||
|
- alias: Send TTS if reminders > 2 and Tony is home
|
||||||
|
if:
|
||||||
|
- alias: When reminders > 2 and Tony is home
|
||||||
|
condition: and
|
||||||
|
conditions:
|
||||||
|
- condition: numeric_state
|
||||||
|
entity_id: counter.tony_afternoon_meds_reminder_count
|
||||||
|
above: 2
|
||||||
|
alias: When reminder count > 2
|
||||||
|
- condition: state
|
||||||
|
entity_id: person.tony_stork
|
||||||
|
state: home
|
||||||
|
alias: If Tony is home
|
||||||
|
then:
|
||||||
|
- alias: Send TTS notification
|
||||||
|
data:
|
||||||
|
who: common_areas
|
||||||
|
type: alert
|
||||||
|
message: Tony, you need to take your afternoon meds
|
||||||
|
action: script.speech_engine
|
||||||
tony_ibuprofen:
|
tony_ibuprofen:
|
||||||
alias: Tony Ibuprofen
|
alias: Tony Ibuprofen
|
||||||
sequence:
|
sequence:
|
||||||
@ -2308,56 +2445,37 @@ tony_tylenol:
|
|||||||
kallen_morning_meds:
|
kallen_morning_meds:
|
||||||
alias: Kallen Morning Meds
|
alias: Kallen Morning Meds
|
||||||
sequence:
|
sequence:
|
||||||
- service: counter.increment
|
- metadata: {}
|
||||||
metadata: {}
|
|
||||||
data: {}
|
data: {}
|
||||||
target:
|
target:
|
||||||
entity_id: counter.kallen_morning_meds_reminder_count
|
entity_id: counter.kallen_morning_meds_reminder_count
|
||||||
alias: Increment morning reminder counter
|
alias: Increment morning reminder counter
|
||||||
- alias: Clear previous morning notifications
|
action: counter.increment
|
||||||
parallel:
|
- alias: Clear previous text notifications
|
||||||
- service: script.text_notify
|
|
||||||
data:
|
data:
|
||||||
type: alert
|
type: alert
|
||||||
who: parents
|
who: all
|
||||||
message: clear_notification
|
message: clear_notification
|
||||||
tag: kallen-morning-meds-parents
|
tag: kallen-morning-meds
|
||||||
alias: Clear for parents
|
action: script.text_notify
|
||||||
- service: script.text_notify
|
|
||||||
data:
|
|
||||||
type: alert
|
|
||||||
who: kallen
|
|
||||||
message: clear_notification
|
|
||||||
tag: kallen-morning-meds-self
|
|
||||||
alias: Clear for Kallen
|
|
||||||
- delay:
|
- delay:
|
||||||
hours: 0
|
hours: 0
|
||||||
minutes: 0
|
minutes: 0
|
||||||
seconds: 5
|
seconds: 5
|
||||||
milliseconds: 0
|
milliseconds: 0
|
||||||
- alias: Send text notifications
|
- alias: Send text notification
|
||||||
parallel:
|
|
||||||
- alias: Send to parents
|
|
||||||
service: script.text_notify
|
|
||||||
data:
|
data:
|
||||||
who: parents
|
who: all
|
||||||
type: alert
|
type: alert
|
||||||
title: Morning Meds
|
title: Morning Meds
|
||||||
message: Kallen needs to take his morning meds
|
message: Kallen needs to take his morning meds
|
||||||
tag: kallen-morning-meds-parents
|
tag: kallen-morning-meds
|
||||||
actions:
|
actions:
|
||||||
- action: KALLEN_MORNING_MEDS_TAKEN
|
- action: KALLEN_MORNING_MEDS_TAKEN
|
||||||
title: Taken
|
title: Taken
|
||||||
- action: KALLEN_MORNING_MEDS_SKIPPED
|
- action: KALLEN_MORNING_MEDS_SKIPPED
|
||||||
title: Skip
|
title: Skip
|
||||||
- service: script.text_notify
|
action: script.text_notify
|
||||||
data:
|
|
||||||
who: kallen
|
|
||||||
type: alert
|
|
||||||
title: Morning Meds
|
|
||||||
message: You need to take your morning meds. Go to mom or dad to confirm.
|
|
||||||
tag: kallen-morning-meds-self
|
|
||||||
alias: Send to Kallen
|
|
||||||
icon: mdi:medication
|
icon: mdi:medication
|
||||||
mode: restart
|
mode: restart
|
||||||
kallen_night_meds:
|
kallen_night_meds:
|
||||||
@ -2859,35 +2977,7 @@ 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:
|
|
||||||
- conditions:
|
|
||||||
- alias: AC
|
|
||||||
condition: and
|
|
||||||
conditions:
|
|
||||||
- condition: state
|
|
||||||
entity_id: input_select.scheduled_climate_mode_emma_bedroom
|
|
||||||
state: AC
|
|
||||||
alias: Scheduled mode is AC
|
|
||||||
- condition: state
|
|
||||||
entity_id: fan.emma_air_conditioner
|
|
||||||
state: 'off'
|
|
||||||
alias: Air conditioner is not already on
|
|
||||||
sequence:
|
|
||||||
- target:
|
|
||||||
entity_id: fan.emma_air_conditioner
|
|
||||||
data: {}
|
|
||||||
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
|
- alias: White Noise
|
||||||
condition: and
|
condition: and
|
||||||
conditions:
|
conditions:
|
||||||
@ -2899,7 +2989,7 @@ emma_sleep:
|
|||||||
entity_id: input_boolean.white_noise_emma_bedroom
|
entity_id: input_boolean.white_noise_emma_bedroom
|
||||||
state: 'off'
|
state: 'off'
|
||||||
alias: White Noise is not already on
|
alias: White Noise is not already on
|
||||||
sequence:
|
then:
|
||||||
- target:
|
- target:
|
||||||
entity_id: input_boolean.white_noise_emma_bedroom
|
entity_id: input_boolean.white_noise_emma_bedroom
|
||||||
data: {}
|
data: {}
|
||||||
@ -2913,15 +3003,7 @@ emma_sleep:
|
|||||||
tag: emma-climate
|
tag: emma-climate
|
||||||
alias: Send white noise notification
|
alias: Send white noise notification
|
||||||
action: script.text_notify
|
action: script.text_notify
|
||||||
default:
|
alias: Select climate mode
|
||||||
- data:
|
|
||||||
who: parents
|
|
||||||
title: Emma Climate Schedule
|
|
||||||
message: No option selected for Emma's climate mode. No devices will be activated.
|
|
||||||
type: normal
|
|
||||||
tag: emma-climate
|
|
||||||
alias: Send notification that no climate mode is selected
|
|
||||||
action: script.text_notify
|
|
||||||
icon: mdi:lightbulb-night
|
icon: mdi:lightbulb-night
|
||||||
mode: restart
|
mode: restart
|
||||||
tina_morning_meds:
|
tina_morning_meds:
|
||||||
@ -2929,75 +3011,163 @@ tina_morning_meds:
|
|||||||
icon: mdi:medication
|
icon: mdi:medication
|
||||||
mode: restart
|
mode: restart
|
||||||
sequence:
|
sequence:
|
||||||
- service: counter.increment
|
- metadata: {}
|
||||||
metadata: {}
|
|
||||||
data: {}
|
data: {}
|
||||||
target:
|
target:
|
||||||
entity_id: counter.tina_morning_meds_reminder_count
|
entity_id: counter.tina_morning_meds_reminder_count
|
||||||
alias: Increment morning reminder counter
|
alias: Increment morning reminder counter
|
||||||
- service: script.text_notify
|
action: counter.increment
|
||||||
data:
|
- data:
|
||||||
type: alert
|
type: alert
|
||||||
who: tina
|
who: tina
|
||||||
message: clear_notification
|
message: clear_notification
|
||||||
tag: tina-morning-meds
|
tag: tina-morning-meds
|
||||||
alias: Clear previous morning notification
|
alias: Clear previous morning notification
|
||||||
|
action: script.text_notify
|
||||||
|
- alias: Send notifications, using AI if internet is connected
|
||||||
|
if:
|
||||||
|
- condition: state
|
||||||
|
entity_id: binary_sensor.internet
|
||||||
|
state: 'on'
|
||||||
|
then:
|
||||||
|
- if:
|
||||||
|
- condition: numeric_state
|
||||||
|
entity_id: counter.tina_morning_meds_reminder_count
|
||||||
|
above: 2
|
||||||
|
then:
|
||||||
|
- action: google_generative_ai_conversation.generate_content
|
||||||
|
metadata: {}
|
||||||
|
data:
|
||||||
|
prompt: Remind Tina to take her morning meds. Use a maximum of two lines.
|
||||||
|
Be snarky, because at this point she's been reminded multiple times.
|
||||||
|
response_variable: response
|
||||||
|
alias: Generate snarky reminder
|
||||||
|
else:
|
||||||
|
- action: google_generative_ai_conversation.generate_content
|
||||||
|
metadata: {}
|
||||||
|
data:
|
||||||
|
prompt: Remind Tina to take her morning meds. Use a maximum of two lines.
|
||||||
|
response_variable: response
|
||||||
|
alias: Generate reminder
|
||||||
|
alias: Generate reminder, be snarky if it's been several times
|
||||||
- delay:
|
- delay:
|
||||||
hours: 0
|
hours: 0
|
||||||
minutes: 0
|
minutes: 0
|
||||||
seconds: 5
|
seconds: 5
|
||||||
milliseconds: 0
|
milliseconds: 0
|
||||||
- alias: Send text notification
|
- alias: Send text notification
|
||||||
service: script.text_notify
|
|
||||||
data:
|
data:
|
||||||
who: tina
|
who: tina
|
||||||
type: alert
|
type: alert
|
||||||
title: Morning Meds
|
title: Morning Meds
|
||||||
message: You need to take your morning meds
|
message: '{{ response.text }}'
|
||||||
tag: tina-morning-meds
|
tag: tina-morning-meds
|
||||||
actions:
|
actions:
|
||||||
- action: TINA_MORNING_MEDS_TAKEN
|
- action: TINA_MORNING_MEDS_TAKEN
|
||||||
title: Taken
|
title: Taken
|
||||||
- action: TINA_MORNING_MEDS_SKIPPED
|
- action: TINA_MORNING_MEDS_SKIPPED
|
||||||
title: Skip
|
title: Skip
|
||||||
description: ''
|
action: script.text_notify
|
||||||
tina_night_meds:
|
else:
|
||||||
alias: Tina Night Meds
|
- delay:
|
||||||
icon: mdi:medication
|
hours: 0
|
||||||
mode: restart
|
minutes: 0
|
||||||
sequence:
|
seconds: 5
|
||||||
- service: counter.increment
|
milliseconds: 0
|
||||||
metadata: {}
|
- alias: Send text notification
|
||||||
data: {}
|
data:
|
||||||
target:
|
who: tina
|
||||||
entity_id: counter.tina_night_meds_reminder_count
|
type: alert
|
||||||
alias: Increment night reminder counter
|
title: Morning Meds
|
||||||
- service: script.text_notify
|
tag: tina-morning-meds
|
||||||
data:
|
actions:
|
||||||
type: alert
|
- action: TINA_MORNING_MEDS_TAKEN
|
||||||
who: tina
|
title: Taken
|
||||||
message: clear_notification
|
- action: TINA_MORNING_MEDS_SKIPPED
|
||||||
tag: tina-night-meds
|
title: Skip
|
||||||
alias: Clear previous night notification
|
message: You need to take your morning meds
|
||||||
|
action: script.text_notify
|
||||||
|
tina_night_meds:
|
||||||
|
alias: Tina Night Meds
|
||||||
|
icon: mdi:medication
|
||||||
|
mode: restart
|
||||||
|
sequence:
|
||||||
|
- metadata: {}
|
||||||
|
data: {}
|
||||||
|
target:
|
||||||
|
entity_id: counter.tina_night_meds_reminder_count
|
||||||
|
alias: Increment night reminder counter
|
||||||
|
action: counter.increment
|
||||||
|
- data:
|
||||||
|
type: alert
|
||||||
|
who: tina
|
||||||
|
message: clear_notification
|
||||||
|
tag: tina-night-meds
|
||||||
|
alias: Clear previous night notification
|
||||||
|
action: script.text_notify
|
||||||
|
- alias: Send notifications, using AI if internet is connected
|
||||||
|
if:
|
||||||
|
- condition: state
|
||||||
|
entity_id: binary_sensor.internet
|
||||||
|
state: 'on'
|
||||||
|
then:
|
||||||
|
- if:
|
||||||
|
- condition: numeric_state
|
||||||
|
entity_id: counter.tina_night_meds_reminder_count
|
||||||
|
above: 2
|
||||||
|
then:
|
||||||
|
- action: google_generative_ai_conversation.generate_content
|
||||||
|
metadata: {}
|
||||||
|
data:
|
||||||
|
prompt: Remind Tina to take her night meds. Use a maximum of two lines.
|
||||||
|
Be snarky, because at this point she's been reminded multiple times.
|
||||||
|
response_variable: response
|
||||||
|
alias: Generate snarky reminder
|
||||||
|
else:
|
||||||
|
- action: google_generative_ai_conversation.generate_content
|
||||||
|
metadata: {}
|
||||||
|
data:
|
||||||
|
prompt: Remind Tina to take her night meds. Use a maximum of two lines.
|
||||||
|
response_variable: response
|
||||||
|
alias: Generate reminder
|
||||||
|
alias: Generate reminder, be snarky if it's been several times
|
||||||
- delay:
|
- delay:
|
||||||
hours: 0
|
hours: 0
|
||||||
minutes: 0
|
minutes: 0
|
||||||
seconds: 5
|
seconds: 5
|
||||||
milliseconds: 0
|
milliseconds: 0
|
||||||
- alias: Send text notification
|
- alias: Send text notification
|
||||||
service: script.text_notify
|
|
||||||
data:
|
data:
|
||||||
who: tina
|
who: tina
|
||||||
type: alert
|
type: alert
|
||||||
title: Night Meds
|
title: Night Meds
|
||||||
message: You need to take your night meds
|
message: '{{ response.text }}'
|
||||||
tag: tina-night-meds
|
tag: tina-night-meds
|
||||||
actions:
|
actions:
|
||||||
- action: TINA_NIGHT_MEDS_TAKEN
|
- action: TINA_NIGHT_MEDS_TAKEN
|
||||||
title: Taken
|
title: Taken
|
||||||
- action: TINA_NIGHT_MEDS_SKIPPED
|
- action: TINA_NIGHT_MEDS_SKIPPED
|
||||||
title: Skip
|
title: Skip
|
||||||
description: ''
|
action: script.text_notify
|
||||||
|
else:
|
||||||
|
- delay:
|
||||||
|
hours: 0
|
||||||
|
minutes: 0
|
||||||
|
seconds: 5
|
||||||
|
milliseconds: 0
|
||||||
|
- alias: Send text notification
|
||||||
|
data:
|
||||||
|
who: tina
|
||||||
|
type: alert
|
||||||
|
title: Night Meds
|
||||||
|
tag: tina-night-meds
|
||||||
|
actions:
|
||||||
|
- action: TINA_NIGHT_MEDS_TAKEN
|
||||||
|
title: Taken
|
||||||
|
- action: TINA_NIGHT_MEDS_SKIPPED
|
||||||
|
title: Skip
|
||||||
|
message: You need to take your night meds
|
||||||
|
action: script.text_notify
|
||||||
tina_ibuprofen:
|
tina_ibuprofen:
|
||||||
sequence:
|
sequence:
|
||||||
- alias: Turn off boolean if this is a notification
|
- alias: Turn off boolean if this is a notification
|
||||||
@ -3360,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
|
||||||
|
@ -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: ''
|
||||||
|
@ -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 %}
|
||||||
|
@ -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 %}
|
||||||
|
@ -76,7 +76,7 @@
|
|||||||
<p>
|
<p>
|
||||||
{% if (states('sensor.climate_devices_installed') | int) > 0 %}
|
{% if (states('sensor.climate_devices_installed') | int) > 0 %}
|
||||||
{% if is_state('input_boolean.master_bedroom_aircon_installed','on') %}
|
{% if is_state('input_boolean.master_bedroom_aircon_installed','on') %}
|
||||||
"the master bedroom temperature is {{ states('sensor.master_bedroom_aircon_indoor_temperature') | int }} degrees. "
|
"the master bedroom temperature is {{ states('sensor.master_bedroom_temperature') | int }} degrees. "
|
||||||
{% if not is_state('climate.master_bedroom_aircon','off') %}
|
{% if not is_state('climate.master_bedroom_aircon','off') %}
|
||||||
{% if is_state('climate.master_bedroom_aircon','cool') %}
|
{% if is_state('climate.master_bedroom_aircon','cool') %}
|
||||||
"and the master bedroom air conditioner is set for cooling to {{ state_attr('climate.master_bedroom_aircon','temperature') }} degrees. "
|
"and the master bedroom air conditioner is set for cooling to {{ state_attr('climate.master_bedroom_aircon','temperature') }} degrees. "
|
||||||
@ -90,11 +90,22 @@
|
|||||||
"and the master bedroom air conditioner is currently not speaking to me. Was it something I said? "
|
"and the master bedroom air conditioner is currently not speaking to me. Was it something I said? "
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif is_state('input_boolean.master_bedroom_aircon_installed','off') %}
|
|
||||||
"There is no air conditioner or temperature sensor installed in the master bedroom. "
|
|
||||||
{% 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>
|
||||||
@ -117,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 %}
|
||||||
|
Reference in New Issue
Block a user