Compare commits

..

23 Commits

Author SHA1 Message Date
1a706153a8 Fix handling of MLB rain delays, close #252 2025-06-26 17:27:26 -04:00
95b2c8cfc5 Update .HA_VERSION 2025-06-26 17:27:02 -04:00
61b04c05c6 Update time macros 2025-06-15 18:13:55 -04:00
41141e94df Add entity to denote ongoing server maintenance 2025-06-15 17:44:07 -04:00
cc9ec0b211 Update .HA_VERSION 2025-06-15 17:43:46 -04:00
adf881a106 Adjust scheduling to help K's room when it's hot upstairs 2025-06-13 20:09:52 -04:00
6ee298a3d2 Update .HA_VERSION 2025-06-13 20:09:35 -04:00
aa6358ce19 Merge branch 'sunset-rework' into dev 2025-05-29 17:32:50 -04:00
abe62888b2 Add outdoor lux threshold and triggered boolean for sunset lights
home_automation/HA-NerdFlows#32
2025-05-27 21:26:24 -04:00
0cabab0462 Adjustments to Recliner Mode 2025-05-26 00:01:21 -04:00
034cf2f972 Adaptive lighting should reset after tornado warnings #229 2025-05-25 19:22:25 -04:00
1d246e8018 Use locally calculated SLP in template weather provider 2025-05-24 20:17:12 -04:00
5cffb7208f Add rain intensity awareness to weather briefings
#247
2025-05-23 20:57:04 -04:00
a7b1a53754 Fix storm warning code I apparently wrote in my sleep... 2025-05-23 20:56:40 -04:00
de5efd39b4 Update .HA_VERSION 2025-05-23 20:56:02 -04:00
0129a56866 Comment out total rain sensors template 2025-05-23 04:35:35 -04:00
b305f7c880 Rewrite rain detection sensor 2025-05-23 04:34:26 -04:00
6ee4bacf55 Notifications for school status changes (delay/cancel)
#245
2025-05-23 03:57:44 -04:00
4710700f7e Fix adaptive lighting reset in basement studio goodnight script 2025-05-22 19:06:41 -04:00
895e99657b The new way of doing weather forecasts in Home Assistant is fucking trash 2025-05-21 22:15:52 -04:00
0dc7d0f8e4 Fix Weather.com attributes in template weather stations 2025-05-21 20:45:59 -04:00
d38cf59812 Make sure the correct teams are inhibited for MLB if playing each other 2025-05-21 20:41:35 -04:00
a489ecdf14 Update .HA_VERSION 2025-05-20 18:35:56 -04:00
13 changed files with 307 additions and 74 deletions

View File

@ -1 +1 @@
2025.5.1
2025.6.2

View File

@ -1869,54 +1869,70 @@
to: 'on'
id: recliner-on
trigger: state
alias: Recliner Mode On
- entity_id: input_boolean.recliner_mode
from: 'on'
to: 'off'
id: recliner-off
trigger: state
alias: Recliner Mode Off
conditions: []
actions:
- choose:
- alias: Routing
choose:
- conditions:
- condition: trigger
id: recliner-on
alias: Recliner Mode On
sequence:
- target:
entity_id: input_select.basement_studio_scenes
data:
option: Stairwell
action: input_select.select_option
alias: Set scene to Stairwell
- target:
entity_id:
- input_boolean.white_noise_basement
- input_boolean.studio_quiet
data: {}
action: input_boolean.turn_on
- if:
alias: Turn on white noise and Studio Quiet
- alias: Turn off TV
if:
- condition: template
value_template: "{% if is_state('media_player.basement_tv','playing') %}\n
\ false\n{% elif is_state('media_player.basement_tv','paused') or is_state('media_player.basement_tv','idle')
%}\n {{ state_attr('media_player.basement_tv','app_name') in ['TV','Android
TV Launcher'] }}\n{% else %}\n false\n{% endif %}\n"
alias: If nothing is playing
then:
- target:
entity_id: media_player.basement_tv
data: {}
action: media_player.turn_off
- if:
- condition: not
alias: Turn off TV
enabled: false
- alias: Turn off computer monitors
if:
- alias: If I'm not watching something
condition: not
conditions:
- condition: state
entity_id: media_player.tony_asus
state: playing
alias: PC playing video or music
then:
- target:
entity_id: script.tony_desktop_displays_off
data: {}
action: script.turn_on
alias: Turn off computer monitors
enabled: false
- conditions:
- condition: trigger
id: recliner-off
alias: Recliner Mode Off
sequence:
- data: {}
target:
@ -2046,10 +2062,12 @@
- script.tony_desktop_displays_on
data: {}
action: script.turn_on
enabled: false
- target:
entity_id: media_player.basement_tv
data: {}
action: media_player.turn_on
enabled: false
mode: restart
- id: '1696286540644'
alias: Basement Lights Adaptive Resync
@ -6204,3 +6222,70 @@
entity_id: input_boolean.shower_mode
alias: Routing
mode: restart
- id: '1747986913670'
alias: School Status Notifications
description: Sends alert notifications to all phones when school is placed under
a two hour delay or cancelled for the day
triggers:
- trigger: state
entity_id:
- input_boolean.two_hour_delay
from: 'off'
to: 'on'
id: delay
alias: Two Hour Delay
- trigger: state
entity_id:
- input_boolean.school_cancelled
from: 'off'
to: 'on'
id: cancel
alias: Cancelled
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- delay
alias: Two Hour Delay
sequence:
- alias: Send Notification
action: script.text_notify
metadata: {}
data:
type: alert
title: School Alert
message: Defiance City Schools is under a two hour delay!
tag: two-hour-delay
who: all
- conditions:
- condition: trigger
id:
- cancel
alias: Cancelled
sequence:
- action: script.text_notify
metadata: {}
data:
type: alert
who: all
message: clear_notification
tag: two-hour-delay
alias: Clear previous delay notification
- delay:
hours: 0
minutes: 0
seconds: 2
milliseconds: 0
- alias: Send Notification
action: script.text_notify
metadata: {}
data:
type: alert
title: School Alert
message: Defiance City Schools has closed for today!
tag: school-cancelled
who: all
alias: Routing
mode: restart

View File

@ -825,7 +825,21 @@
'ottobre',
'novembre',
'dicembre',
]
],
'time_of_hour':{
0: '{hour}',
1: '{hour} e un minuto',
15: '{hour} ed un quarto',
30: '{hour} e mezzo',
45: '15 minuti alle {hour}',
59: 'un minuto alle {hour}',
'past_hour': '{hour} e {minute}',
'to_hour': '{hour} meno {minute}',
},
'time_of_day':{
'midnight': 'mezzanotte',
'noon': 'mezzogiorno',
}
},
'pt':{
'_language': 'Português',
@ -1041,7 +1055,21 @@
'Październik',
'Listopad',
'Grudzień',
]
],
'time_of_hour': {
0: '{hour}',
1: 'minuta po {hour}',
15: 'kwadrans po {hour}',
30: 'pół godziny po {hour}',
45: 'za kwadrans {hour}',
59: 'za minutę {hour}',
'past_hour': '{minute} po {hour}',
'to_hour': '{minute} do {hour}'
},
'time_of_day': {
'midnight': 'północ',
'noon': 'południe'
}
},
'ru':{
'_language': 'Русский',
@ -1779,9 +1807,9 @@
{%- else %}
{%- set t = translate('ago', language=language) %}
{%- if '%s' in t %}
{{ t % items }}
{{- t % items }}
{%- else %}
{{- items }} {{ translate('ago', language=language) }}
{{- items }} {{ t }}
{%- endif %}
{%- endif %}
{%- else %}
@ -2045,7 +2073,7 @@
{%- if '%s' in t %}
{{- t % ret }}
{%- else %}
{{- ret }} {{ translate('ago', language=language) }}
{{- ret }} {{ t }}
{%- endif %}
{%- endif %}
{%- endif %}

View File

@ -236,7 +236,7 @@
'hour': ['ч', 'час', 'часа', 'часов'],
'minute': ['м', 'минута', 'минуты', 'минут'],
'second': ['с', 'секунда', 'секунды', 'секунд'],
'millisecond': ['мс', 'милисекунда', 'милисекунды', 'милисекунд'],
'millisecond': ['мс', 'миллисекунда', 'миллисекунды', 'миллисекунд'],
'combine': 'и',
'error': 'Неверная дата',
}
@ -337,6 +337,22 @@
'error': 'Érvénytelen dátum',
}
},
{
'language': 'tr',
'plural_form': 'english',
'phrases': {
'year': ['yıl', 'yıl', 'yıl'],
'month': ['ay', 'ay', 'ay'],
'week': ['hf', 'hafta', 'hafta'],
'day': ['gün', 'gün', 'gün'],
'hour': ['sa', 'saat', 'saat'],
'minute': ['dk', 'dakika', 'dakika'],
'second': ['sn', 'saniye', 'saniye'],
'millisecond': ['ms', 'milisaniye', 'milisaniye'],
'combine': 've',
'error': 'Geçersiz tarih',
}
},
] -%}
{# macro to convert the abbreviated input for the not_use and always_show lists to the full time part names #}

View File

@ -27,8 +27,15 @@
{% 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 }}
{% if 'rain delay' in game_clock %}
{# Handle cases like "Rain Delay, Top 1st" #}
{% set status, inning = game_clock.split(',', 1) %}
{% set inning_parts = inning.split(' ') %}
in a {{ status | trim }} in the {{ inning_parts[1] ~ ' of the ' ~ inning_parts[2] }} {{ period_str }}
{% else %}
{% set inning_parts = game_clock.split(' ') %}
in the {{ inning_parts[0] ~ ' of the ' ~ inning_parts[1] ~ ' ' ~ period_str }}
{% endif %}
{% else %}
{% if ' - ' in game_clock %}
{% set clock_time, quarter = game_clock.split(' - ') %}

View File

@ -19,15 +19,15 @@
{% if type in ['alerts','full'] %}
{% 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!
{% if state_attr('binary_sensor.tornado_warning','confirmed' == true) %}
{% 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) %}
{% 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) %}
{% 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' %}
@ -39,7 +39,22 @@
There is lightning in the area. Nearest strike is {{ ltgdist }} miles away.
{% endif %}
{% if is_state('binary_sensor.raining','on') %}
It is currently raining. Make sure all doors and windows are closed!
{% if states('sensor.home_tempest_cloud_sensors_precipitation_intensity') not in ['unavailable','unknown','no_rain'] %}
{% set intensity = states('sensor.home_tempest_cloud_sensors_precipitation_intensity') %}
{% if intensity == 'very_light' %}
There is currently a very light drizzle falling.
{% elif intensity == 'light' %}
There is currently light rain falling. Front porch windows should be okay, but other windows should be closed.
{% elif intensity == 'moderate' %}
It is raining pretty good outside, you should probably make sure all windows are closed.
{% elif intensity in ['heavy','very_heavy'] %}
There is heavy rain falling, please make sure all doors and windows are closed at this time.
{% elif intensity == 'extreme' %}
It is raining extremely hard outside. Make sure all doors and windows are closed, and I recommend staying inside until it calms down. Perhaps check for roof leaks as well.
{% endif %}
{% else %}
It is currently raining. Make sure all doors and windows are closed!
{% endif %}
{% endif %}
{% endif %}
{% if state_attr('weather.iron_nerd_weather_station','visibility') | int < 3 %}
@ -60,15 +75,15 @@
{% endif %}
{% 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! "
{% if state_attr('binary_sensor.tornado_warning','confirmed' == true) %}
{% 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) %}
{% 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) %}
{% 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') %}
@ -90,12 +105,49 @@
"The nearest lightning strike is {{ ltgdist }} miles away. "
{% endif %}
{% if is_state('binary_sensor.raining','on') %}
{{ [
"I have looked outside and determined that it is raining. ",
"If you look outside the window, you will notice, it wainin. ",
"It wainin sideways! ",
"There appears to be excessive moisture currently falling from the sky. Plan accordingly. ",
] | random }}
{% if states('sensor.home_tempest_cloud_sensors_precipitation_intensity') not in ['unavailable','unknown','no_rain'] %}
{% set intensity = states('sensor.home_tempest_cloud_sensors_precipitation_intensity') %}
{% if intensity == 'very_light' %}
{{ [
"There is currently a very light drizzle falling. ",
"It is drizzling outside, but it is not too bad. ",
"The sky is spitting on us. That's not very nice, but a mild inconvenience at most. "
] | random }}
{% elif intensity == 'light' %}
{{ [
"There is currently light rain falling. ",
"It is raining lightly outside, but it is not too bad. ",
"It kinda wainin outside, but just a little. "
] | random }}
"Front porch windows should be okay, but other windows should be closed. "
{% elif intensity == 'moderate' %}
{{ [
"It is raining pretty good outside, you should probably make sure all windows are closed. ",
"It is raining at a decent rate outside, please make sure all windows are closed. "
"If you look outside, you will see that it wainin. "
] | random }}
{% elif intensity in ['heavy','very_heavy'] %}
{{ [
"There is heavy rain falling, please make sure all doors and windows are closed at this time. ",
"It is raining heavily outside, please make sure all doors and windows are closed. ",
"It wainin sideways! Please make sure all doors and windows are closed. "
] | random }}
{% elif intensity == 'extreme' %}
{{ [
"It is raining extremely hard outside. ",
"There is a torrential downpour outside. ",
"Holy crap, I have never seen it rain this hard before. "
] | random }}
"Make sure all doors and windows are closed, and I recommend staying inside until it calms down. Perhaps check for roof leaks as well. "
{% endif %}
{% else %}
{{ [
"I have looked outside and determined that it is raining. ",
"If you look outside the window, you will notice, it wainin. ",
"It wainin sideways! ",
"There appears to be excessive moisture currently falling from the sky. Plan accordingly. ",
] | random }}
{% endif %}
{% endif %}
{% if (state_attr('weather.iron_nerd_weather_station','visibility') | int ) < 3 %}
{{ [

View File

@ -239,6 +239,9 @@ script:
server_maintenance_annc:
alias: Server Maintenance Announcement
sequence:
- service: input_boolean.turn_on
target:
entity_id: input_boolean.server_maintenance
- service: script.status_annc
data:
who: "{{ who|default('everywhere') }}"
@ -248,6 +251,9 @@ script:
server_maintenance_done_annc:
alias: Server Maintenance Done Announcement
sequence:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.server_maintenance
- service: script.status_annc
data:
who: "{{ who|default('everywhere') }}"

View File

@ -53,7 +53,6 @@ weather:
{{ states(result) | float }}
forecast_daily_template: >
{% set forecasts = [
states.sensor.weatherflow_daily_weather_forecast.attributes,
states.sensor.weather_com_daily_weather_forecast.attributes,
states.weather.kdfi_daynight.attributes,
states.sensor.pirateweather_daily_weather_forecast.attributes,
@ -63,13 +62,13 @@ weather:
{{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }}
forecast_hourly_template: >
{% set forecasts = [
states.sensor.weatherflow_hourly_weather_forecast.attributes,
states.sensor.weather_com_hourly_weather_forecast,
states.sensor.weather_com_hourly_weather_forecast.attributes,
states.sensor.pirateweather_hourly_weather_forecast.attributes
] %}
{{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }}
pressure_template: >
{% set pressures = [
states.sensor.home_tempest_local_slp,
states.sensor.home_tempest_cloud_sensors_sea_level_pressure,
states.sensor.home_pressure,
states.sensor.kdfi_barometric_pressure
@ -168,14 +167,14 @@ weather:
{{ states(result) | float }}
forecast_hourly_template: >
{% set forecasts = [
states.sensor.weatherflow_hourly_weather_forecast.attributes,
states.sensor.weather_com_hourly_weather_forecast,
states.sensor.weather_com_hourly_weather_forecast.attributes,
states.weather.tomorrow_io_stratton_ave_hourly.attributes,
states.sensor.pirateweather_hourly_weather_forecast.attributes
] %}
{{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }}
pressure_template: >
{% set pressures = [
states.sensor.home_tempest_local_slp,
states.sensor.home_tempest_cloud_sensors_sea_level_pressure,
states.sensor.home_pressure,
states.sensor.kdfi_barometric_pressure
@ -804,26 +803,29 @@ template:
- name: Raining
unique_id: 232b43a4-4598-4315-ab76-42348c11e6ff
state: >
{{ states('sensor.total_rain_sensors') | int > 1 }}
icon: "{{ 'mdi:weather-rainy' if states('sensor.total_rain_sensors') | int > 1 else 'mdi:weather-cloudy' }}"
{{ states('sensor.home_tempest_precipitation_intensity') | float > 0 or
states('sensor.home_tempest_precipitation_type') in ['rain','hail','rain_hail'] or
states('sensor.home_tempest_cloud_sensors_precipitation_description') in ['rain','heavy_rain'] or
is_state('binary_sensor.home_tempest_cloud_binary_sensors_is_raining','on') }}
icon: "{{ 'mdi:weather-rainy' if this.state == 'on' else 'mdi:weather-cloudy' }}"
- sensor:
- name: Total Rain Sensors
unique_id: b7c2e709-8f5c-4263-aa1d-fa8280afcddb
unit_of_measurement: 'sensors'
state: >
{% set sensors = [
states.sensor.home_tempest_precipitation_type,
states.sensor.pirateweather_precip,
states.sensor.openweathermap_precipitation_kind,
states.sensor.tomorrow_io_stratton_ave_precipitation_type
] %}
{% set numeric_sensors = [
states.sensor.home_tempest_precipitation_intensity,
states.sensor.stratton_ave_precipitation
] %}
{% set c1 = sensors | selectattr('state','eq','rain') | list | count %}
{% set c2 = numeric_sensors | map(attribute='state') | map('float') | select('gt',0) | list | count %}
{{ (c1 + c2) | int }}
# - name: Total Rain Sensors
# unique_id: b7c2e709-8f5c-4263-aa1d-fa8280afcddb
# unit_of_measurement: 'sensors'
# state: >
# {% set sensors = [
# states.sensor.home_tempest_precipitation_type,
# states.sensor.pirateweather_precip,
# states.sensor.openweathermap_precipitation_kind,
# states.sensor.tomorrow_io_stratton_ave_precipitation_type
# ] %}
# {% set numeric_sensors = [
# states.sensor.home_tempest_precipitation_intensity,
# states.sensor.stratton_ave_precipitation
# ] %}
# {% set c1 = sensors | selectattr('state','eq','rain') | list | count %}
# {% set c2 = numeric_sensors | map(attribute='state') | map('float') | select('gt',0) | list | count %}
# {{ (c1 + c2) | int }}
- name: Current Forecast
unique_id: c0faea33-2ac3-40f1-8558-584c3f5d6b16
icon: mdi:weather-sunny

View File

@ -44,6 +44,9 @@ input_boolean:
adaptive_lighting_adjustments:
name: Adaptive Lighting Adjustments
icon: mdi:knob
sunset_lights_triggered:
name: Sunset Lights Triggered
icon: mdi:weather-sunset
input_number:
upstairs_bathroom_motion_off_delay:
@ -215,6 +218,13 @@ input_number:
mode: box
unit_of_measurement: lx
icon: mdi:sun-wireless
sunset_lights_outdoor_lux_threshold:
name: Sunset Lights Outdoor Lux Threshold
min: 0
max: 10000
step: 100
unit_of_measurement: lx
icon: mdi:sun-wireless
# Settings for adaptive adjustments
daytime_colortemp_front_porch:

View File

@ -602,25 +602,15 @@ script:
{% set low = states('sensor.overnight_lowest_temperature') | int %}
{% set high = states('sensor.todays_high_temp') | int %}
{% set kallen_bedtime = state_attr('input_datetime.kallen_bedtime','timestamp') | int %}
{% set kallen_fantime = state_attr('input_datetime.kallen_fan','timestamp') | int %}
{% set bedroom_hot = is_state('binary_sensor.kallen_bedroom_hot','on') %}
{% set cutoff = 81000 %} {# Cutoff time is 22:30 #}
{% if is_state('binary_sensor.kallen_school_tomorrow','on') %}
{% if is_state('input_boolean.hot_day','on') %}
{{ (kallen_bedtime - 3600) | timestamp_custom('%H:%M',false) }}
{% elif low >= 56 or high >= 75 %}
{{ (kallen_bedtime - 1800) | timestamp_custom('%H:%M',false) }}
{% else %}
{{ kallen_bedtime | timestamp_custom('%H:%M',false) }}
{% endif %}
{% elif low > 60 or high > 74 %}
{% if kallen_bedtime < cutoff %}
{{ kallen_bedtime | timestamp_custom('%H:%M',false) }}
{% else %}
22:00
{% endif %}
{% elif 56 <= low <= 60 %}
22:30
{% if is_state('input_boolean.hot_day','on') or bedroom_hot == true %}
{{ (kallen_fantime - 3600) | timestamp_custom('%H:%M',false) }}
{% elif low >= 56 or high >= 75 %}
{{ (kallen_bedtime - 1800) | timestamp_custom('%H:%M',false) }}
{% else %}
00:00
{{ kallen_bedtime | timestamp_custom('%H:%M',false) }}
{% endif %}
- service: input_datetime.set_datetime
entity_id: input_datetime.master_bedroom_fan

View File

@ -106,7 +106,7 @@ template:
unique_id: 2987ae95-f55d-4994-b9dd-018278d2f5ad
state: >
{% from 'sports.jinja' import sports_inhibit %}
{{ state_attr('sensor.minnesota_twins','opponent_abbr') in ['CLE','LAD'] or sports_inhibit('sensor.minnesota_twins') }}
{{ sports_inhibit('sensor.minnesota_twins') }}
- name: Minnesota Twins Event Today
unique_id: 30055cb3-d259-4cef-90e1-7dea0a5cb439
state: >
@ -116,7 +116,7 @@ template:
unique_id: b0980d47-d762-4f23-97b1-9e88da729d8f
state: >
{% from 'sports.jinja' import sports_inhibit %}
{{ sports_inhibit('sensor.cleveland_guardians') }}
{{ state_attr('sensor.cleveland_guardians','opponent_abbr') in ['MIN','LAD'] or sports_inhibit('sensor.cleveland_guardians') }}
- name: Cleveland Guardians Event Today
unique_id: 985a7b2c-9ebd-4a2e-8ee2-2ab5359310e0
state: >
@ -126,7 +126,7 @@ template:
unique_id: 2c6aae6e-eff6-46e5-bee9-311f9bbc0c0e
state: >
{% from 'sports.jinja' import sports_inhibit %}
{{ state_attr('sensor.los_angeles_dodgers','opponent_abbr') in ['CLE'] or sports_inhibit('sensor.los_angeles_dodgers') }}
{{ state_attr('sensor.los_angeles_dodgers','opponent_abbr') in ['MIN'] or sports_inhibit('sensor.los_angeles_dodgers') }}
- name: Los Angeles Dodgers Event Today
unique_id: 7c2bd060-ea2c-4b81-8af7-3e6b9b3c639d
state: >

View File

@ -1,3 +1,8 @@
input_boolean:
server_maintenance:
name: Server Maintenance
icon: mdi:wrench-clock
input_select:
log_level:
name: Log Level

View File

@ -854,6 +854,12 @@ adaptive_on_first_floor:
adaptive_on_second_floor:
alias: Adaptive on Second Floor
sequence:
- action: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.adaptive_lighting_stairwell
alias: Turn on adaptive lighting in stairwell
- if:
- condition: state
entity_id: light.hallway_overhead
@ -1441,16 +1447,42 @@ evening_on_second_floor:
goodnight_in_basement:
alias: Goodnight in Basement
sequence:
- service: light.turn_off
target:
- target:
area_id:
- basement_studio
- furnace_room
data: {}
- service: fan.turn_off
target:
action: light.turn_off
alias: Turn lights off
- target:
entity_id: fan.basement_fan
data: {}
action: fan.turn_off
alias: Turn fan off
- delay:
hours: 0
minutes: 0
seconds: 3
milliseconds: 0
- action: switch.turn_off
metadata: {}
data: {}
target:
entity_id: switch.adaptive_lighting_sleep_mode_basement_studio
alias: Turn off sleep mode
- action: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.adaptive_lighting_basement_studio
alias: Turn on adaptive lighting
- action: input_text.set_value
metadata: {}
data:
value: Adaptive
target:
entity_id: input_text.basement_studio_selected_scene
alias: Reset selected scene text
goodnight_on_first_floor:
alias: Goodnight on First Floor
sequence: