Compare commits

..

15 Commits

12 changed files with 183 additions and 43 deletions

View File

@ -1 +1 @@
2025.5.2 2025.6.2

View File

@ -1869,54 +1869,70 @@
to: 'on' to: 'on'
id: recliner-on id: recliner-on
trigger: state trigger: state
alias: Recliner Mode On
- entity_id: input_boolean.recliner_mode - entity_id: input_boolean.recliner_mode
from: 'on' from: 'on'
to: 'off' to: 'off'
id: recliner-off id: recliner-off
trigger: state trigger: state
alias: Recliner Mode Off
conditions: [] conditions: []
actions: actions:
- choose: - alias: Routing
choose:
- conditions: - conditions:
- condition: trigger - condition: trigger
id: recliner-on id: recliner-on
alias: Recliner Mode On
sequence: sequence:
- target: - target:
entity_id: input_select.basement_studio_scenes entity_id: input_select.basement_studio_scenes
data: data:
option: Stairwell option: Stairwell
action: input_select.select_option action: input_select.select_option
alias: Set scene to Stairwell
- target: - target:
entity_id: entity_id:
- input_boolean.white_noise_basement - input_boolean.white_noise_basement
- input_boolean.studio_quiet - input_boolean.studio_quiet
data: {} data: {}
action: input_boolean.turn_on action: input_boolean.turn_on
- if: alias: Turn on white noise and Studio Quiet
- alias: Turn off TV
if:
- condition: template - condition: template
value_template: "{% if is_state('media_player.basement_tv','playing') %}\n 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') \ 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 %}\n {{ state_attr('media_player.basement_tv','app_name') in ['TV','Android
TV Launcher'] }}\n{% else %}\n false\n{% endif %}\n" TV Launcher'] }}\n{% else %}\n false\n{% endif %}\n"
alias: If nothing is playing
then: then:
- target: - target:
entity_id: media_player.basement_tv entity_id: media_player.basement_tv
data: {} data: {}
action: media_player.turn_off action: media_player.turn_off
- if: alias: Turn off TV
- condition: not enabled: false
- alias: Turn off computer monitors
if:
- alias: If I'm not watching something
condition: not
conditions: conditions:
- condition: state - condition: state
entity_id: media_player.tony_asus entity_id: media_player.tony_asus
state: playing state: playing
alias: PC playing video or music
then: then:
- target: - target:
entity_id: script.tony_desktop_displays_off entity_id: script.tony_desktop_displays_off
data: {} data: {}
action: script.turn_on action: script.turn_on
alias: Turn off computer monitors
enabled: false
- conditions: - conditions:
- condition: trigger - condition: trigger
id: recliner-off id: recliner-off
alias: Recliner Mode Off
sequence: sequence:
- data: {} - data: {}
target: target:
@ -2046,10 +2062,12 @@
- script.tony_desktop_displays_on - script.tony_desktop_displays_on
data: {} data: {}
action: script.turn_on action: script.turn_on
enabled: false
- target: - target:
entity_id: media_player.basement_tv entity_id: media_player.basement_tv
data: {} data: {}
action: media_player.turn_on action: media_player.turn_on
enabled: false
mode: restart mode: restart
- id: '1696286540644' - id: '1696286540644'
alias: Basement Lights Adaptive Resync alias: Basement Lights Adaptive Resync

View File

@ -825,7 +825,21 @@
'ottobre', 'ottobre',
'novembre', 'novembre',
'dicembre', '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':{ 'pt':{
'_language': 'Português', '_language': 'Português',
@ -1041,7 +1055,21 @@
'Październik', 'Październik',
'Listopad', 'Listopad',
'Grudzień', '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':{ 'ru':{
'_language': 'Русский', '_language': 'Русский',
@ -1779,9 +1807,9 @@
{%- else %} {%- else %}
{%- set t = translate('ago', language=language) %} {%- set t = translate('ago', language=language) %}
{%- if '%s' in t %} {%- if '%s' in t %}
{{ t % items }} {{- t % items }}
{%- else %} {%- else %}
{{- items }} {{ translate('ago', language=language) }} {{- items }} {{ t }}
{%- endif %} {%- endif %}
{%- endif %} {%- endif %}
{%- else %} {%- else %}
@ -2045,7 +2073,7 @@
{%- if '%s' in t %} {%- if '%s' in t %}
{{- t % ret }} {{- t % ret }}
{%- else %} {%- else %}
{{- ret }} {{ translate('ago', language=language) }} {{- ret }} {{ t }}
{%- endif %} {%- endif %}
{%- endif %} {%- endif %}
{%- endif %} {%- endif %}

View File

@ -236,7 +236,7 @@
'hour': ['ч', 'час', 'часа', 'часов'], 'hour': ['ч', 'час', 'часа', 'часов'],
'minute': ['м', 'минута', 'минуты', 'минут'], 'minute': ['м', 'минута', 'минуты', 'минут'],
'second': ['с', 'секунда', 'секунды', 'секунд'], 'second': ['с', 'секунда', 'секунды', 'секунд'],
'millisecond': ['мс', 'милисекунда', 'милисекунды', 'милисекунд'], 'millisecond': ['мс', 'миллисекунда', 'миллисекунды', 'миллисекунд'],
'combine': 'и', 'combine': 'и',
'error': 'Неверная дата', 'error': 'Неверная дата',
} }
@ -337,6 +337,22 @@
'error': 'Érvénytelen dátum', '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 #} {# 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 period_str = period_str(team) %}
{% set game_clock = state_attr(team,'clock') | lower %} {% set game_clock = state_attr(team,'clock') | lower %}
{% if state_attr(team,'league') == 'MLB' %} {% if state_attr(team,'league') == 'MLB' %}
{% set inning_parts = game_clock.split(' ') %} {% if 'rain delay' in game_clock %}
in the {{ inning_parts[0] ~ ' of the ' ~ inning_parts[1] ~ ' ' ~ period_str }} {# 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 %} {% else %}
{% if ' - ' in game_clock %} {% if ' - ' in game_clock %}
{% set clock_time, quarter = game_clock.split(' - ') %} {% set clock_time, quarter = game_clock.split(' - ') %}

View File

@ -19,15 +19,15 @@
{% 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) %} {% if state_attr('binary_sensor.tornado_warning','confirmed') == true %}
A tornado has been confirmed in the area. Please take shelter immediately! A tornado has been confirmed in the area. Please take shelter immediately!
{% endif %} {% endif %}
{% elif is_state('binary_sensor.severe_thunderstorm_warning','on') %} {% elif is_state('binary_sensor.severe_thunderstorm_warning','on') %}
We are under a severe thunderstorm warning. 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! The incoming storm has the potential to produce a tornado, so please pay attention and prepare to take shelter!
{% endif %} {% 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! This storm has the potential to cause considerable damage. Please take shelter and stay safe!
{% endif %} {% endif %}
{% elif states('sensor.weatheralerts_active_alerts') > '0' and method != 'dashboard' %} {% 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. There is lightning in the area. Nearest strike is {{ ltgdist }} miles away.
{% endif %} {% endif %}
{% if is_state('binary_sensor.raining','on') %} {% 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 %}
{% endif %} {% endif %}
{% if state_attr('weather.iron_nerd_weather_station','visibility') | int < 3 %} {% if state_attr('weather.iron_nerd_weather_station','visibility') | int < 3 %}
@ -60,15 +75,15 @@
{% 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) %} {% if state_attr('binary_sensor.tornado_warning','confirmed') == true %}
"A tornado has been confirmed in the area. Please take shelter immediately! " "A tornado has been confirmed in the area. Please take shelter immediately! "
{% endif %} {% endif %}
{% elif is_state('binary_sensor.severe_thunderstorm_warning','on') %} {% elif is_state('binary_sensor.severe_thunderstorm_warning','on') %}
"We are under a severe thunderstorm warning. " "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! " "The incoming storm has the potential to produce a tornado, so please pay attention and prepare to take shelter! "
{% endif %} {% 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! " "This storm has the potential to cause considerable damage. Please take shelter and stay safe! "
{% endif %} {% endif %}
{% elif is_state('input_boolean.tornado_watch','on') %} {% elif is_state('input_boolean.tornado_watch','on') %}
@ -90,12 +105,49 @@
"The nearest lightning strike is {{ ltgdist }} miles away. " "The nearest lightning strike is {{ ltgdist }} miles away. "
{% endif %} {% endif %}
{% if is_state('binary_sensor.raining','on') %} {% if is_state('binary_sensor.raining','on') %}
{{ [ {% if states('sensor.home_tempest_cloud_sensors_precipitation_intensity') not in ['unavailable','unknown','no_rain'] %}
"I have looked outside and determined that it is raining. ", {% set intensity = states('sensor.home_tempest_cloud_sensors_precipitation_intensity') %}
"If you look outside the window, you will notice, it wainin. ", {% if intensity == 'very_light' %}
"It wainin sideways! ", {{ [
"There appears to be excessive moisture currently falling from the sky. Plan accordingly. ", "There is currently a very light drizzle falling. ",
] | random }} "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 %} {% endif %}
{% if (state_attr('weather.iron_nerd_weather_station','visibility') | int ) < 3 %} {% if (state_attr('weather.iron_nerd_weather_station','visibility') | int ) < 3 %}
{{ [ {{ [

View File

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

View File

@ -68,6 +68,7 @@ weather:
{{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }} {{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }}
pressure_template: > pressure_template: >
{% set pressures = [ {% set pressures = [
states.sensor.home_tempest_local_slp,
states.sensor.home_tempest_cloud_sensors_sea_level_pressure, states.sensor.home_tempest_cloud_sensors_sea_level_pressure,
states.sensor.home_pressure, states.sensor.home_pressure,
states.sensor.kdfi_barometric_pressure states.sensor.kdfi_barometric_pressure
@ -173,6 +174,7 @@ weather:
{{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }} {{ forecasts | selectattr('forecast','defined') | map(attribute='forecast') | list | first }}
pressure_template: > pressure_template: >
{% set pressures = [ {% set pressures = [
states.sensor.home_tempest_local_slp,
states.sensor.home_tempest_cloud_sensors_sea_level_pressure, states.sensor.home_tempest_cloud_sensors_sea_level_pressure,
states.sensor.home_pressure, states.sensor.home_pressure,
states.sensor.kdfi_barometric_pressure states.sensor.kdfi_barometric_pressure

View File

@ -44,6 +44,9 @@ input_boolean:
adaptive_lighting_adjustments: adaptive_lighting_adjustments:
name: Adaptive Lighting Adjustments name: Adaptive Lighting Adjustments
icon: mdi:knob icon: mdi:knob
sunset_lights_triggered:
name: Sunset Lights Triggered
icon: mdi:weather-sunset
input_number: input_number:
upstairs_bathroom_motion_off_delay: upstairs_bathroom_motion_off_delay:
@ -215,6 +218,13 @@ input_number:
mode: box mode: box
unit_of_measurement: lx unit_of_measurement: lx
icon: mdi:sun-wireless 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 # Settings for adaptive adjustments
daytime_colortemp_front_porch: daytime_colortemp_front_porch:

View File

@ -602,25 +602,15 @@ script:
{% set low = states('sensor.overnight_lowest_temperature') | int %} {% set low = states('sensor.overnight_lowest_temperature') | int %}
{% set high = states('sensor.todays_high_temp') | int %} {% set high = states('sensor.todays_high_temp') | int %}
{% set kallen_bedtime = state_attr('input_datetime.kallen_bedtime','timestamp') | 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 #} {% 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') or bedroom_hot == true %}
{% if is_state('input_boolean.hot_day','on') %} {{ (kallen_fantime - 3600) | timestamp_custom('%H:%M',false) }}
{{ (kallen_bedtime - 3600) | timestamp_custom('%H:%M',false) }} {% elif low >= 56 or high >= 75 %}
{% elif low >= 56 or high >= 75 %} {{ (kallen_bedtime - 1800) | timestamp_custom('%H:%M',false) }}
{{ (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
{% else %} {% else %}
00:00 {{ kallen_bedtime | timestamp_custom('%H:%M',false) }}
{% endif %} {% endif %}
- service: input_datetime.set_datetime - service: input_datetime.set_datetime
entity_id: input_datetime.master_bedroom_fan entity_id: input_datetime.master_bedroom_fan

View File

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

View File

@ -854,6 +854,12 @@ adaptive_on_first_floor:
adaptive_on_second_floor: adaptive_on_second_floor:
alias: Adaptive on Second Floor alias: Adaptive on Second Floor
sequence: sequence:
- action: switch.turn_on
metadata: {}
data: {}
target:
entity_id: switch.adaptive_lighting_stairwell
alias: Turn on adaptive lighting in stairwell
- if: - if:
- condition: state - condition: state
entity_id: light.hallway_overhead entity_id: light.hallway_overhead