Compare commits

..

8 Commits

11 changed files with 607 additions and 458 deletions

View File

@@ -1 +1 @@
2025.12.2
2025.12.3

View File

@@ -2967,49 +2967,99 @@
- id: '1696539209438'
alias: Tony Custom Meds Handler
description: ''
trigger:
- platform: time
at: input_datetime.tony_custom_meds_notify_p1
triggers:
- minutes: /30
id: trigger30
alias: Every 30 minutes
trigger: time_pattern
- at: input_datetime.tony_custom_meds_notify_p1
alias: Notify 1
id: p1-notify
- platform: state
entity_id:
trigger: time
- alias: Notify 2
at: input_datetime.tony_custom_meds_notify_p2
id: p2-notify
trigger: time
- entity_id:
- input_boolean.tony_custom_meds_taken_p1
from: 'off'
to: 'on'
id: p1-taken
alias: Taken 1
condition: []
action:
trigger: state
- alias: Taken 2
entity_id:
- input_datetime.tony_custom_meds_taken_p2
from: 'off'
to: 'on'
id: p2-taken
trigger: state
conditions:
- condition: or
conditions:
- condition: state
entity_id: input_boolean.tony_custom_meds_tracker_p1
state: 'on'
- condition: state
entity_id: input_boolean.tony_custom_meds_tracker_p2
state: 'on'
alias: Any custom med trackers are on
actions:
- alias: Routing
if:
- condition: trigger
id:
- trigger30
then:
- variables:
trigger: '{{ trigger.id }}'
num: all
reason: notify
alias: Override variables to indicate this is an interval notify request
- alias: For each reminder entity
repeat:
for_each: '{{ states.input_boolean | selectattr(''entity_id'',''in'',label_entities(''Tony
Custom Meds'')) | selectattr(''entity_id'',''search'',''reminder'') | map(attribute=''entity_id'')
| list }}'
sequence:
- alias: Run custom meds script if tracker is active
if:
- alias: Check tracker
condition: template
value_template: '{{ is_state(repeat.item,''on'') }}'
then:
- data:
num: '{{ num }}'
reason: '{{ reason }}'
alias: Run custom meds script
action: script.tony_custom_meds
else:
- variables:
trigger: '{{ trigger.id }}'
num: '{{ trigger[:2] }}'
reason: '{{ trigger.split(''-'')[1] }}'
- if:
- condition: template
value_template: '{% set active = ''input_boolean.tony_custom_meds_tracker_''
+ num %}
{{ is_state(active,''on'') }}'
alias: Check tracker
- alias: Run custom meds script if tracker is active
if:
- alias: Check tracker
condition: template
value_template: '{{ is_state(repeat.item,''on'') }}'
then:
- if:
- condition: template
value_template: '{{ reason == ''notify'' }}'
alias: Is this a notification
then:
- service: input_boolean.turn_off
data: {}
- data: {}
target:
entity_id: '{{ ''input_boolean.tony_custom_meds_taken_'' + num }}'
alias: Turn off "taken" boolean
action: input_boolean.turn_off
alias: Turn off "taken" boolean if this is a notification
- service: script.tony_custom_meds
data:
- data:
num: '{{ num }}'
reason: '{{ reason }}'
alias: Run custom meds script
alias: Run custom meds script if tracker is active
action: script.tony_custom_meds
mode: parallel
max: 10
- id: '1696556688808'
@@ -6309,3 +6359,27 @@
who: all
alias: Routing
mode: restart
- id: '1765674032722'
alias: Emma Bedroom Heater
description: Turns Emma's bedroom heater on at the scheduled time
triggers:
- trigger: time
at: input_datetime.emma_bedroom_climate
alias: Emma Bedroom Climate
conditions:
- condition: state
entity_id: input_select.scheduled_climate_mode_emma_bedroom
state:
- Heat
- condition: state
entity_id: input_boolean.emma_bedroom_heater_installed
state:
- 'on'
actions:
- action: climate.set_hvac_mode
metadata: {}
target:
entity_id: climate.emma_bedroom_vtherm
data:
hvac_mode: heat
mode: restart

View File

@@ -33,6 +33,7 @@ frontend:
- /hacsfiles/hass-hue-icons/hass-hue-icons.js
- /hacsfiles/hass-bha-icons/hass-bha-icons.js
- /hacsfiles/material-you-utilities/material-you-utilities.min.js
- /hacsfiles/lovelace-card-mod/card-mod.js?v4.1.0
javascript_version: latest
panel_custom:

View File

@@ -352,6 +352,20 @@ input_number:
step: 1
unit_of_measurement: °F
icon: mdi:thermometer
emma_bedroom_heater_run_threshold:
name: Emma Bedroom Heater Run Threshold
min: 40
max: 80
step: 1
unit_of_measurement: °F
icon: mdi:thermometer
emma_bedroom_heater_shutoff_threshold:
name: Emma Bedroom Heater Shutoff Threshold
min: 40
max: 80
step: 1
unit_of_measurement: °F
icon: mdi:thermometer
emma_bedroom_aircon_run_threshold:
name: Emma Bedroom Aircon Run Threshold
min: 40

View File

@@ -1,6 +1,6 @@
weather:
- platform: template
name: "Iron Nerd Weather Station"
template:
- weather:
- name: "Iron Nerd Weather Station"
condition_template: >
{% set stations = [
states.weather.home_tempest_forecast_home,
@@ -112,8 +112,8 @@ weather:
{{ states(result) | float }}
precipitation_unit: in
- platform: template
name: "Iron Nerd Weather Station - Hourly"
- weather:
- name: "Iron Nerd Weather Station - Hourly"
condition_template: >
{% set stations = [
states.weather.home_tempest_forecast_home,
@@ -218,8 +218,8 @@ weather:
{{ states(result) | float }}
precipitation_unit: in
- platform: template
name: "Ashland Weather Station"
- weather:
- name: "Ashland Weather Station"
condition_template: >
{% set stations = [
states.weather.ashland,
@@ -299,77 +299,6 @@ weather:
{{ states(result) | float }}
precipitation_unit: in
# binary_sensor:
# - platform: bayesian
# unique_id: 3e9640d9-57a0-4495-8731-e64b34774065
# name: Raining Bayesian
# prior: 0.17
# probability_threshold: 0.6
# observations:
# - entity_id: "sensor.pirateweather_precip"
# prob_given_true: 0.13
# prob_given_false: 0.005
# platform: "state"
# to_state: "rain"
# - entity_id: "sensor.openweathermap_precipitation_kind"
# prob_given_true: 0.75
# prob_given_false: 0.005
# platform: "state"
# to_state: "rain"
# - entity_id: "sensor.tomorrow_io_stratton_ave_precipitation_type"
# prob_given_true: 0.99
# prob_given_false: 0.2
# platform: "state"
# to_state: "rain"
# - entity_id: "sensor.stratton_ave_precipitation"
# prob_given_true: 0.99
# prob_given_false: 0.2
# platform: "numeric_state"
# above: 0
sensor:
- platform: weatheralerts
state: OH
zone: 4
county: 39
# - platform: statistics
# unique_id: b5996cb4-b715-4fc9-b3d8-98fc12c2b7dd
# name: Outside Temp Average
# entity_id: sensor.pirateweather_temperature
# state_characteristic: average_linear
# max_age:
# days: 7
# - platform: statistics
# unique_id: 6192c95a-8fd1-4ba0-87de-d06fdc071d6b
# name: Apparent Temp Average
# entity_id: sensor.stratton_ave_apparent_temperature
# state_characteristic: average_linear
# max_age:
# days: 7
# - platform: statistics
# unique_id: 7b9c269c-40b7-4255-a051-2d1b7a6af017
# name: Wind Speed Average
# entity_id: sensor.pirateweather_wind_speed
# state_characteristic: average_linear
# max_age:
# days: 7
# - platform: statistics
# unique_id: b43d053f-aafb-4237-a742-a2ca841498fa
# name: Visibility Stats Average
# entity_id: sensor.kdfi_visibility
# state_characteristic: average_linear
# max_age:
# days: 7
# - platform: statistics
# unique_id: b1206da2-fa00-4f7d-9af4-f2cf6794bd24
# name: Humidity Stats Average
# entity_id: sensor.pirateweather_humidity
# state_characteristic: average_linear
# max_age:
# days: 7
template:
- trigger:
- platform: time_pattern
minutes: /15
@@ -1613,6 +1542,76 @@ template:
hail_stroke: "{{ state_attr('sensor.spc_outlook_day_1','hail_stroke') }}"
icon: mdi:weather-hail
sensor:
- platform: weatheralerts
state: OH
zone: 4
county: 39
# - platform: statistics
# unique_id: b5996cb4-b715-4fc9-b3d8-98fc12c2b7dd
# name: Outside Temp Average
# entity_id: sensor.pirateweather_temperature
# state_characteristic: average_linear
# max_age:
# days: 7
# - platform: statistics
# unique_id: 6192c95a-8fd1-4ba0-87de-d06fdc071d6b
# name: Apparent Temp Average
# entity_id: sensor.stratton_ave_apparent_temperature
# state_characteristic: average_linear
# max_age:
# days: 7
# - platform: statistics
# unique_id: 7b9c269c-40b7-4255-a051-2d1b7a6af017
# name: Wind Speed Average
# entity_id: sensor.pirateweather_wind_speed
# state_characteristic: average_linear
# max_age:
# days: 7
# - platform: statistics
# unique_id: b43d053f-aafb-4237-a742-a2ca841498fa
# name: Visibility Stats Average
# entity_id: sensor.kdfi_visibility
# state_characteristic: average_linear
# max_age:
# days: 7
# - platform: statistics
# unique_id: b1206da2-fa00-4f7d-9af4-f2cf6794bd24
# name: Humidity Stats Average
# entity_id: sensor.pirateweather_humidity
# state_characteristic: average_linear
# max_age:
# days: 7
# binary_sensor:
# - platform: bayesian
# unique_id: 3e9640d9-57a0-4495-8731-e64b34774065
# name: Raining Bayesian
# prior: 0.17
# probability_threshold: 0.6
# observations:
# - entity_id: "sensor.pirateweather_precip"
# prob_given_true: 0.13
# prob_given_false: 0.005
# platform: "state"
# to_state: "rain"
# - entity_id: "sensor.openweathermap_precipitation_kind"
# prob_given_true: 0.75
# prob_given_false: 0.005
# platform: "state"
# to_state: "rain"
# - entity_id: "sensor.tomorrow_io_stratton_ave_precipitation_type"
# prob_given_true: 0.99
# prob_given_false: 0.2
# platform: "state"
# to_state: "rain"
# - entity_id: "sensor.stratton_ave_precipitation"
# prob_given_true: 0.99
# prob_given_false: 0.2
# platform: "numeric_state"
# above: 0
input_boolean:
freeze_warning:
name: Freeze Warning

View File

@@ -48,8 +48,8 @@ input_datetime:
has_date: false
has_time: true
icon: mdi:fan-auto
emma_bedroom_cooling:
name: Emma Bedroom Cooling
emma_bedroom_climate:
name: Emma Bedroom Climate
has_date: false
has_time: true
icon: mdi:fan-auto
@@ -899,3 +899,6 @@ script:
- service: input_boolean.turn_off
target:
entity_id: input_boolean.white_noise_emma_bedroom
- service: climate.turn_off
target:
entity_id: climate.emma_bedroom_vtherm

View File

@@ -60,5 +60,3 @@ pyscript:
animated_scenes:
grad_vol:
battery_notes:

View File

@@ -710,27 +710,34 @@ script:
data:
option: >
{% set low = states('sensor.overnight_lowest_temperature') | int %}
{% set run_threshold = states('input_number.emma_bedroom_aircon_run_threshold') | int %}
{% set mode_threshold = states('input_number.emma_bedroom_aircon_mode_threshold') | int %}
{% if is_state('input_boolean.emma_bedroom_aircon_installed','off') %}
{% set aircon_run_threshold = states('input_number.emma_bedroom_aircon_run_threshold') | int %}
{% set aircon_mode_threshold = states('input_number.emma_bedroom_aircon_mode_threshold') | int %}
{% set heater_run_threshold = states('input_number.emma_bedroom_heater_run_threshold') | int %}
{% if is_state('input_boolean.emma_bedroom_aircon_installed','off') and is_state('input_boolean.emma_bedroom_heater_installed','off') %}
White Noise
{% elif low >= run_threshold %}
{% if low >= mode_threshold %}
{% elif low >= aircon_run_threshold and is_state('input_boolean.emma_bedroom_aircon_installed','on') %}
{% if low >= aircon_mode_threshold %}
AC
{% else %}
Fan
{% endif %}
{% elif low < heater_run_threshold and is_state('input_boolean.emma_bedroom_heater_installed','on') %}
Heat
{% else %}
White Noise
{% endif %}
- delay:
milliseconds: 500
- service: input_datetime.set_datetime
target:
entity_id: input_datetime.emma_bedroom_cooling
entity_id: input_datetime.emma_bedroom_climate
data:
time: >
{% set high = states('sensor.todays_high_temp') | int %}
{% set low = states('sensor.overnight_lowest_temperature') | int %}
{% set bedtime = state_attr('input_datetime.emma_bedtime','timestamp') | int %}
{% set schedmode = states('input_select.scheduled_climate_mode_emma_bedroom') %}
{% if schedmode in ['AC','Fan'] and is_state('input_boolean.emma_bedroom_aircon_installed','on') %}
{% if is_state('input_boolean.hot_day','on') %}
{{ (bedtime - 5400) | timestamp_custom('%H:%M',false) }}
{% elif high >= 80 or low >= 60 %}
@@ -738,6 +745,17 @@ script:
{% else %}
{{ (bedtime - 1800) | timestamp_custom('%H:%M',false) }}
{% endif %}
{% elif schedmode == 'Heat' and is_state('input_boolean.emma_bedroom_heater_installed','on') %}
{% if low <= 20 %}
{{ (bedtime - 5400) | timestamp_custom('%H:%M',false) }}
{% elif low <= 32 %}
{{ (bedtime - 3600) | timestamp_custom('%H:%M',false) }}
{% else %}
{{ (bedtime - 1800) | timestamp_custom('%H:%M',false) }}
{% endif %}
{% else %}
{{ bedtime | timestamp_custom('%H:%M',false) }}
{% endif %}
- service: input_boolean.turn_on
target:
entity_id: input_boolean.emma_scheduling_evening_ran

View File

@@ -113,6 +113,7 @@ ## HACS Lovelace Cards
- [Comfortable Environment Card](https://github.com/argaar/comfortable-environment-card)
- [Versatile Thermostat UI Card](https://github.com/jmcollin78/versatile-thermostat-ui-card)
- [Gauge Card Pro](https://github.com/benjamin-dcs/gauge-card-pro)
- [AdGuard Card](https://github.com/homeassistant-extras/adguard-card)
</details>

View File

@@ -2591,27 +2591,28 @@ kallen_night_meds:
minutes: 0
seconds: 5
milliseconds: 0
- parallel:
- data:
- alias: Send text notifications
parallel:
- alias: Send to parents
data:
who: "{% if states('person.christina_stork') in ['Bob Evans','BobEvans'] %}\n
\ tony\n{% else %}\n parents\n{% endif %}\n"
type: alert
title: Night Meds
message: Kallen needs to take his night meds (melatonin)
message: Kallen needs to take his night meds
tag: kallen-night-meds
actions:
- action: KALLEN_NIGHT_MEDS_TAKEN
title: Taken
- action: KALLEN_NIGHT_MEDS_SKIPPED
title: Skip
alias: Send to parents
action: script.text_notify
- alias: Send to Kallen
data:
who: kallen
type: alert
title: Night Meds
message: You need to take your night meds (melatonin)
message: You need to take your night meds
tag: kallen-night-meds
actions:
- action: KALLEN_NIGHT_MEDS_TAKEN
@@ -2619,7 +2620,6 @@ kallen_night_meds:
- action: KALLEN_NIGHT_MEDS_SKIPPED
title: Skip
action: script.text_notify
alias: Send text notifications
icon: mdi:medication
mode: restart
reset_annc_switches:
@@ -3071,7 +3071,9 @@ emma_sleep:
option: Adaptive
alias: Set lights to adaptive
action: input_select.select_option
- if:
- alias: Set climate mode if not already set
choose:
- conditions:
- alias: White Noise
condition: and
conditions:
@@ -3083,7 +3085,7 @@ emma_sleep:
entity_id: input_boolean.white_noise_emma_bedroom
state: 'off'
alias: White Noise is not already on
then:
sequence:
- target:
entity_id: input_boolean.white_noise_emma_bedroom
data: {}
@@ -3097,7 +3099,46 @@ emma_sleep:
tag: emma-climate
alias: Send white noise notification
action: script.text_notify
alias: Select climate mode
- conditions:
- alias: Heat
condition: and
conditions:
- condition: state
entity_id: input_select.scheduled_climate_mode_emma_bedroom
state:
- Heat
alias: Heat
sequence:
- if:
- alias: Heat is not already on
condition: state
entity_id: climate.emma_bedroom_vtherm
state:
- 'off'
then:
- alias: Send heater notification
data:
who: parents
title: Emma Climate Schedule
message: The space heater has been activated in Emma's Bedroom.
type: normal
tag: emma-climate
action: script.text_notify
alias: If heat was not already on, send notification that it has been turned
on
- action: climate.set_hvac_mode
metadata: {}
target:
entity_id: climate.emma_bedroom_vtherm
data:
hvac_mode: heat
alias: Turn on heater
- action: input_boolean.turn_on
metadata: {}
target:
entity_id: input_boolean.white_noise_emma_bedroom
data: {}
alias: Turn on white noise
icon: mdi:lightbulb-night
mode: restart
tina_morning_meds:

View File

@@ -73,11 +73,11 @@
{% endif %}
{% if states('input_select.scheduled_climate_mode_emma_bedroom_aircon') != 'N/A' %}
{% if is_state('input_select.scheduled_climate_mode_emma_bedroom_aircon','AC') and is_state('input_boolean.hot_day','on') %}
"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') }}. "
"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_climate') }}. "
{% 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') }}. "
"Emma's bedroom air conditioner will start cooling at {{ input_datetime_read('input_datetime.emma_bedroom_climate') }}. "
{% 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') }}. "
"Emma's bedroom air conditioner will activate fan only mode at {{ input_datetime_read('input_datetime.emma_bedroom_climate') }}. "
{% 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') }}. "
{% endif %}