Compare commits

...

12 Commits

7 changed files with 236 additions and 123 deletions

View File

@ -1 +1 @@
2025.3.4 2025.4.2

View File

@ -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

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

@ -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

@ -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:
@ -3525,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