Compare commits

...

32 Commits

Author SHA1 Message Date
ac6f7978be Updated readme
#257
2025-12-16 21:28:29 -05:00
28e3b93441 Updated readme 2025-12-16 19:23:28 -05:00
bdca4c702a Remove battery notes from config as it's all UI-based now 2025-12-15 21:19:08 -05:00
4b57efcd74 Add extra_module_url for card-mod 2025-12-15 19:32:30 -05:00
7255422ca1 Fix E's white noise not turning on at bedtime
#256
2025-12-15 19:32:29 -05:00
5ae5e5021e Integrate E's bedroom heater with existing automations and scheduling
#256
2025-12-13 20:16:31 -05:00
bd9c7190ed Update weather templates to current syntax 2025-12-13 18:25:58 -05:00
f176e3b867 Update .HA_VERSION 2025-12-13 18:13:02 -05:00
1b52cc31a8 Update .HA_VERSION 2025-12-09 20:16:17 -05:00
8993196366 Add college hockey teams to sports tracking #255 2025-12-09 20:16:00 -05:00
210434e4ad Prevent trying to report team record when it is not provided 2025-12-09 20:15:39 -05:00
e37ac9d504 Re-enable K's night meds tracker 2025-12-09 20:13:57 -05:00
bf19984b47 Fix recliner mode not marking basement as occupied 2025-11-28 00:47:23 -05:00
4634b66866 Change deprecated Powercalc config 2025-11-26 20:27:16 -05:00
001dcbe625 Update .HA_VERSION 2025-11-26 20:26:34 -05:00
f70be6ceee Update .HA_VERSION 2025-11-10 22:38:58 -05:00
265e129c06 Try to fix weird changing of climate modes in E's bedroom 2025-10-30 18:14:02 -04:00
00bea40b6b Update .HA_VERSION 2025-10-30 18:13:22 -04:00
f94bce3381 Update .HA_VERSION 2025-10-18 00:21:58 -04:00
2de7d82e20 Sensors to indicate health of media server items 2025-10-03 19:29:28 -04:00
83c3c10a5a Add structured output to AI med notification prompts 2025-10-03 19:29:07 -04:00
f7ac1b915b Update .HA_VERSION 2025-10-03 19:28:27 -04:00
1d3398752e Fix deprecated Google AI calls 2025-10-03 02:59:00 -04:00
837ed779c9 Add reminder booleans for other med trackers 2025-10-02 19:10:00 -04:00
bc3a58875d Fix typo in lighting_fx 2025-10-02 18:24:17 -04:00
3c018a922b Remove old gas sensors from configs 2025-10-02 18:24:05 -04:00
10188d553a Update .HA_VERSION and .gitignore 2025-10-02 18:20:39 -04:00
341200deb0 Disable K night meds as currently unneeded 2025-09-23 18:34:58 -04:00
b930cb28b5 Update .HA_VERSION 2025-09-23 18:34:24 -04:00
c31158448c Update .gitignore 2025-09-16 02:10:39 -04:00
9e9c1fcf11 Update .HA_VERSION 2025-09-16 02:09:23 -04:00
02e3252e62 Update .HA_VERSION 2025-09-11 04:36:21 -04:00
19 changed files with 790 additions and 570 deletions

View File

@@ -1 +1 @@
2025.8.3
2025.12.3

2
.gitignore vendored
View File

@@ -21,6 +21,7 @@
/downloads/
/lightwand/
/bubble/Scratchpad/
/custom_icons
# ignore any of these files no matter where they are using double *
**.DS_Store
@@ -67,6 +68,7 @@
**jsconfig*
.markdownlint.json
**test.jinja
**.ha_run.lock
# exceptions
!/www/bubble/

View File

@@ -4646,39 +4646,41 @@
- id: '1710611198911'
alias: Kallen Meds Handler
description: Handles the scheduling of medication reminders for Kallen
trigger:
- platform: time_pattern
minutes: /30
triggers:
- minutes: /30
id: trigger30
alias: Every 30 minutes
- platform: time
at: input_datetime.kallen_morning_meds_notify
trigger: time_pattern
- at: input_datetime.kallen_morning_meds_notify
id: morning-notify
alias: Morning Notify
- platform: time
at: input_datetime.kallen_night_meds_notify
trigger: time
- at: input_datetime.kallen_night_meds_notify
id: night-notify
alias: Night Notify
- platform: state
entity_id:
trigger: time
enabled: true
- entity_id:
- input_boolean.kallen_morning_meds_taken
to: 'on'
id: boolean-morning
alias: Morning Taken
from: 'off'
- platform: state
entity_id:
trigger: state
- entity_id:
- input_boolean.kallen_night_meds_taken
id: boolean-night
alias: Night Taken
from: 'off'
to: 'on'
condition:
trigger: state
enabled: true
conditions:
- condition: state
entity_id: input_boolean.kallen_overnight
state: 'off'
alias: Kallen is not staying the night elsewhere
action:
actions:
- alias: Routing
choose:
- conditions:
@@ -4693,10 +4695,10 @@
state: 'on'
alias: Morning meds reminder needed
then:
- service: script.kallen_morning_meds
metadata: {}
- metadata: {}
data: {}
alias: Run morning meds notification script
action: script.kallen_morning_meds
- alias: Check night reminder switch
if:
- condition: state
@@ -4704,10 +4706,10 @@
state: 'on'
alias: Night meds reminder needed
then:
- service: script.kallen_night_meds
metadata: {}
- metadata: {}
data: {}
alias: Run night meds notification script
action: script.kallen_night_meds
alias: Every 30 minutes
- conditions:
- condition: and
@@ -4719,16 +4721,16 @@
state: 'off'
alias: Morning Notify
sequence:
- service: input_boolean.turn_on
metadata: {}
- metadata: {}
data: {}
target:
entity_id: input_boolean.kallen_morning_meds_reminder
alias: Activate morning reminders
- service: script.kallen_morning_meds
metadata: {}
action: input_boolean.turn_on
- metadata: {}
data: {}
alias: Run morning meds notification script
action: script.kallen_morning_meds
- conditions:
- condition: and
conditions:
@@ -4741,22 +4743,21 @@
alias: Night Notify
sequence:
- alias: Activate night reminders
service: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.kallen_night_meds_reminder
- service: script.kallen_night_meds
metadata: {}
action: input_boolean.turn_on
- metadata: {}
data: {}
alias: Run night meds notification script
action: script.kallen_night_meds
- conditions:
- condition: trigger
id: boolean-morning
alias: Morning Taken
sequence:
- service: input_datetime.set_datetime
target:
- target:
entity_id: input_datetime.kallen_morning_meds_taken
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0)
@@ -4764,27 +4765,27 @@
'
alias: Set time morning meds were taken
- service: input_boolean.turn_off
metadata: {}
action: input_datetime.set_datetime
- metadata: {}
data: {}
target:
entity_id: input_boolean.kallen_morning_meds_reminder
alias: Deactivate morning reminders
- service: script.text_notify
metadata: {}
action: input_boolean.turn_off
- metadata: {}
data:
type: alert
who: kallen
message: clear_notification
tag: kallen-left-meds
alias: Clear kallen-left-meds notification tag
action: script.text_notify
- conditions:
- condition: trigger
id: boolean-night
alias: Night Taken
sequence:
- service: input_datetime.set_datetime
target:
- target:
entity_id: input_datetime.kallen_night_meds_taken
data:
datetime: '{% from ''time.jinja'' import set_datetime %} {{ set_datetime(0)
@@ -4792,20 +4793,21 @@
'
alias: Set time night meds were taken
action: input_datetime.set_datetime
- alias: Deactivate night reminders
service: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id: input_boolean.kallen_night_meds_reminder
- service: script.text_notify
metadata: {}
action: input_boolean.turn_off
- metadata: {}
data:
type: alert
who: kallen
message: clear_notification
tag: kallen-left-meds
alias: Clear kallen-left-meds notification tag
action: script.text_notify
mode: parallel
max: 12
- id: '1711657679853'
@@ -6307,3 +6309,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:
@@ -300,18 +301,6 @@ influxdb:
- binary_sensor.people_present
- weather.iron_nerd_weather_station
- weather.ashland_weather_station
- sensor.circle_k
- sensor.kroger
- sensor.kecks
- sensor.the_barn
- sensor.the_big_fish
- sensor.speedway
- sensor.meijer
- sensor.ridis
- sensor.marathon_cleveland_avenue
- sensor.south_side_shell
- sensor.east_side_shell
- sensor.shell_ottawa_avenue
- sensor.current_lights_on
- binary_sensor.early_night_mode
- input_boolean.give_me_darkness
@@ -484,18 +473,6 @@ prometheus:
- binary_sensor.people_present
- weather.iron_nerd_weather_station
- weather.ashland_weather_station
- sensor.circle_k
- sensor.kroger
- sensor.kecks
- sensor.the_barn
- sensor.the_big_fish
- sensor.speedway
- sensor.meijer
- sensor.ridis
- sensor.marathon_cleveland_avenue
- sensor.south_side_shell
- sensor.east_side_shell
- sensor.shell_ottawa_avenue
- sensor.current_lights_on
- binary_sensor.early_night_mode
- input_boolean.give_me_darkness

View File

@@ -90,7 +90,7 @@
{% 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 %} {{ opponent_name }} by a score of {{ state_attr(team,'opponent_score') }} to {{ state_attr(team,'team_score') }}.
{% endif %}
{% if state_attr(team,'clock') not in ['postponed','Postponed'] %}
{% if state_attr(team,'clock') not in ['postponed','Postponed'] and state_attr(team,'team_record') != None %}
This brings their record to {{ state_attr(team,'team_record') | replace("-"," and ") }} on the season.
{% endif %}
{% elif yday == date %}
@@ -171,6 +171,15 @@
{% if is_state('binary_sensor.minnesota_wild_inhibit','off') %}
{{ sports_pregame('sensor.minnesota_wild') }}
{% endif %}
{% if is_state('binary_sensor.michigan_wolverines_hockey','off') %}
{{ sports_pregame('sensor.michigan_wolverines_hockey') }}
{% endif %}
{% if is_state('binary_sensor.minnesota_golden_gophers_hockey','off') %}
{{ sports_pregame('sensor.minnesota_golden_gophers_hockey') }}
{% endif %}
{% if is_state('binary_sensor.minnesota_state_mavericks_hockey','off') %}
{{ sports_pregame('sensor.minnesota_state_mavericks_hockey') }}
{% endif %}
{% elif time == 'main' %}
{% if is_state('binary_sensor.michigan_wolverines_inhibit','off') %}
{{ sports_main('sensor.michigan_wolverines') }}
@@ -199,6 +208,15 @@
{% if is_state('binary_sensor.minnesota_wild_inhibit','off') %}
{{ sports_main('sensor.minnesota_wild') }}
{% endif %}
{% if is_state('binary_sensor.michigan_wolverines_hockey','off') %}
{{ sports_main('sensor.michigan_wolverines_hockey') }}
{% endif %}
{% if is_state('binary_sensor.minnesota_golden_gophers_hockey','off') %}
{{ sports_main('sensor.minnesota_golden_gophers_hockey') }}
{% endif %}
{% if is_state('binary_sensor.minnesota_state_mavericks_hockey','off') %}
{{ sports_main('sensor.minnesota_state_mavericks_hockey') }}
{% endif %}
{% endif %}
{% endmacro %}
{{ cleanup(data()) }}

View File

@@ -1,39 +1,3 @@
sensor.ridis:
device_class: monetary
sensor.kecks:
device_class: monetary
sensor.circle_k:
device_class: monetary
sensor.the_big_fish:
device_class: monetary
sensor.meijer:
device_class: monetary
sensor.south_side_shell:
device_class: monetary
sensor.kroger:
device_class: monetary
sensor.marathon_cleveland_avenue:
device_class: monetary
sensor.speedway:
device_class: monetary
sensor.shell_ottawa_avenue:
device_class: monetary
sensor.the_barn:
device_class: monetary
sensor.east_side_shell:
device_class: monetary
sensor.local_minimum_gas_price:
device_class: monetary

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

@@ -38,12 +38,13 @@ conversation:
alexa:
powercalc:
force_update_frequency: 00:01:00
discovery:
enabled: true
energy_update_interval: 60
power_sensor_naming: "{} Power Sensor"
power_sensor_friendly_naming: "{} Power Sensor"
energy_sensor_naming: "{} Energy Sensor"
energy_sensor_friendly_naming: "{} Energy Sensor"
enable_autodiscovery: true
create_energy_sensors: true
create_utility_meters: true
create_domain_groups:
@@ -59,5 +60,3 @@ pyscript:
animated_scenes:
grad_vol:
battery_notes:

View File

@@ -268,7 +268,7 @@ script:
- light.living_room_overhead
- service: input_text.set_value
target:
entity_id: input_text.living_room_studio_selected_scene
entity_id: input_text.living_room_selected_scene
data:
value: Alert
# Define variable for restoration of the current scene if the backup is not needed

View File

@@ -124,6 +124,8 @@ template:
state: >
{% if is_state('binary_sensor.basement_studio_motion','on') %}
true
{% elif is_state('input_boolean.recliner_mode','on') %}
true
{% elif is_state('sensor.xia_desktop_current_username','tm24f') %}
false
{% elif is_state('binary_sensor.tony_desktop_on','off') and

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

@@ -142,6 +142,36 @@ template:
state: >
{% from 'sports.jinja' import sports_today %}
{{ sports_today('sensor.minnesota_wild') }}
- name: Michigan Wolverines Hockey Inhibit
unique_id: 8ecd46d5-64c2-49f5-bc8d-d88593273d92
state: >
{% from 'sports.jinja' import sports_inhibit %}
{{ sports_inhibit('sensor.michigan_wolverines_hockey') }}
- name: Michigan Wolverines Hockey Event Today
unique_id: 551fdae5-e18c-4117-b3ba-df864068b13d
state: >
{% from 'sports.jinja' import sports_today %}
{{ sports_today('sensor.michigan_wolverines_hockey') }}
- name: Minnesota Golden Gophers Hockey Inhibit
unique_id: 87653f3a-203c-4dbf-87e8-70bcacf6eb22
state: >
{% from 'sports.jinja' import sports_inhibit %}
{{ sports_inhibit('sensor.minnesota_golden_gophers_hockey') }}
- name: Minnesota Golden Gophers Hockey Event Today
unique_id: 1f4ff7eb-cbc9-4c81-a5c9-6523b5fb52ff
state: >
{% from 'sports.jinja' import sports_today %}
{{ sports_today('sensor.minnesota_golden_gophers_hockey') }}
- name: Minnesota State Mavericks Hockey Inhibit
unique_id: bd15870d-bccb-4c52-9690-473c31bb4090
state: >
{% from 'sports.jinja' import sports_inhibit %}
{{ sports_inhibit('sensor.minnesota_state_mavericks_hockey') }}
- name: Minnesota State Mavericks Hockey Event Today
unique_id: e403be15-3ff2-47b1-8398-70f8ccb65026
state: >
{% from 'sports.jinja' import sports_today %}
{{ sports_today('sensor.minnesota_state_mavericks_hockey') }}
intent_script:
SportsScore:

View File

@@ -25,24 +25,36 @@ input_boolean:
tony_ibuprofen_active:
name: Tony Ibuprofen Active
icon: mdi:medication
tony_ibuprofen_reminder:
name: Tony Ibuprofen Reminder
icon: mdi:medication
tony_ibuprofen_taken:
name: Tony Ibuprofen Taken
icon: mdi:medication
tony_tylenol_active:
name: Tony Tylenol Active
icon: mdi:medication
tony_tylenol_reminder:
name: Tony Tylenol Reminder
icon: mdi:medication
tony_tylenol_taken:
name: Tony Tylenol Taken
icon: mdi:medication
tony_custom_meds_tracker_p1:
name: Tony Custom Meds Tracker P1
icon: mdi:medication
tony_custom_meds_reminder_p1:
name: Tony Custom Meds Reminder P1
icon: mdi:medication
tony_custom_meds_taken_p1:
name: Tony Custom Meds Taken P1
icon: mdi:medication
tony_custom_meds_tracker_p2:
name: Tony Custom Meds Tracker P2
icon: mdi:medication
tony_custom_meds_reminder_p2:
name: Tony Custom Meds Reminder P2
icon: mdi:medication
tony_custom_meds_taken_p2:
name: Tony Custom Meds Taken P2
icon: mdi:medication

View File

@@ -47,7 +47,6 @@ ## HACS Components
- [PyScript](https://github.com/custom-components/pyscript)
- [Hass Animated Scenes](https://github.com/chazzu/hass-animated-scenes)
- [Jokes](https://github.com/LaggAt/ha-jokes)
- [Uptime Kuma](https://github.com/meichthys/uptime_kuma)
- [Jellyfin](https://github.com/koying/jellyfin_ha)
- [Sonoff LAN](https://github.com/AlexxIT/SonoffLAN)
- [Powercalc](https://github.com/bramstroker/homeassistant-powercalc)
@@ -113,6 +112,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

@@ -1733,21 +1733,38 @@ tony_morning_meds:
entity_id: counter.tony_morning_meds_reminder_count
above: 2
then:
- action: google_generative_ai_conversation.generate_content
- alias: Generate snarky reminder
action: ai_task.generate_data
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 {{ remindCount }}
times.
instructions: Remind Tony to take his morning meds. Use a maximum of two
lines. Be snarky, because at this point this is reminder number {{ remindCount
}}.
task_name: Tony Morning Medication Reminder Snarky
entity_id: ai_task.google_ai_task
structure:
notification_text:
description: The text to send in the notification to Tony's phone
required: true
selector:
text:
response_variable: response
alias: Generate snarky reminder
else:
- action: google_generative_ai_conversation.generate_content
- alias: Generate reminder
action: ai_task.generate_data
metadata: {}
data:
prompt: Remind Tony to take his morning meds. Use a maximum of two lines.
instructions: Remind Tony to take his morning meds. Use a maximum of two
lines.
task_name: Tony Morning Medication Reminder
entity_id: ai_task.google_ai_task
structure:
notification_text:
description: The text to send in the notification to Tony's phone
required: true
selector:
text:
response_variable: response
alias: Generate reminder
- delay:
hours: 0
minutes: 0
@@ -1760,7 +1777,7 @@ tony_morning_meds:
who: tony
type: alert
title: Morning Meds
message: '{{ response.text }}'
message: '{{ response.data.notification_text }}'
tag: tony-morning-meds
actions:
- action: TONY_MORNING_MEDS_TAKEN
@@ -1782,11 +1799,11 @@ tony_morning_meds:
state: home
alias: If Tony is home
then:
- data:
- alias: Send TTS notification
data:
who: common_areas
type: alert
message: '{{ response.text }}'
alias: Send TTS notification
message: '{{ response.data.notification_text }}'
action: script.speech_engine
else:
- delay:
@@ -2044,21 +2061,38 @@ tony_afternoon_meds:
entity_id: counter.tony_afternoon_meds_reminder_count
above: 2
then:
- action: google_generative_ai_conversation.generate_content
- alias: Generate snarky reminder
action: ai_task.generate_data
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 {{ remindCount }}
times.
instructions: Remind Tony to take his afternoon meds. Use a maximum of two
lines. Be snarky, because at this point this is reminder number {{ remindCount
}}.
task_name: Tony Afternoon Medication Reminder Snarky
entity_id: ai_task.google_ai_task
structure:
notification_text:
description: The text to send in the notification to Tony's phone
required: true
selector:
text:
response_variable: response
alias: Generate snarky reminder
else:
- action: google_generative_ai_conversation.generate_content
- alias: Generate reminder
action: ai_task.generate_data
metadata: {}
data:
prompt: Remind Tony to take his afternoon meds. Use a maximum of two lines.
instructions: Remind Tony to take his afternoon meds. Use a maximum of two
lines.
task_name: Tony Afternoon Medication Reminder
entity_id: ai_task.google_ai_task
structure:
notification_text:
description: The text to send in the notification to Tony's phone
required: true
selector:
text:
response_variable: response
alias: Generate reminder
- delay:
hours: 0
minutes: 0
@@ -2071,7 +2105,7 @@ tony_afternoon_meds:
who: tony
type: alert
title: Afternoon Meds
message: '{{ response.text }}'
message: '{{ response.data.notification_text }}'
tag: tony-afternoon-meds
actions:
- action: TONY_AFTERNOON_MEDS_TAKEN
@@ -2093,11 +2127,11 @@ tony_afternoon_meds:
state: home
alias: If Tony is home
then:
- data:
- alias: Send TTS notification
data:
who: common_areas
type: alert
message: '{{ response.text }}'
alias: Send TTS notification
message: '{{ response.data.notification_text }}'
action: script.speech_engine
else:
- delay:
@@ -2557,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
@@ -2585,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:
@@ -3006,14 +3040,14 @@ rabbit_hutch_cleaning:
emma_sleep:
alias: Emma Sleep
sequence:
- if:
- alias: Run scheduling if it hasn't already been run
if:
- condition: time
after: 04:00:00
after: 09:00:00
before: '17:00:00'
then:
- data: {}
action: script.emma_bedroom_scheduling_evening
alias: Run scheduling if it hasn't already been run
- target:
entity_id:
- script.emma_ibuprofen
@@ -3037,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:
@@ -3049,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: {}
@@ -3063,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:
@@ -3099,21 +3174,38 @@ tina_morning_meds:
entity_id: counter.tina_morning_meds_reminder_count
above: 2
then:
- action: google_generative_ai_conversation.generate_content
- alias: Generate snarky reminder
action: ai_task.generate_data
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 {{ remindCount }}
times.
instructions: Remind Tina to take her morning meds. Use a maximum of two
lines. Be snarky, because at this point this is reminder number {{ remindCount
}}.
task_name: Tina Morning Medication Reminder Snarky
entity_id: ai_task.google_ai_task
structure:
notification_text:
description: The text to send in the notification to Tina's phone
required: true
selector:
text:
response_variable: response
alias: Generate snarky reminder
else:
- action: google_generative_ai_conversation.generate_content
- alias: Generate reminder
action: ai_task.generate_data
metadata: {}
data:
prompt: Remind Tina to take her morning meds. Use a maximum of two lines.
instructions: Remind Tina to take her morning meds. Use a maximum of two
lines.
task_name: Tina Morning Medication Reminder
entity_id: ai_task.google_ai_task
structure:
notification_text:
description: The text to send in the notification to Tina's phone
required: true
selector:
text:
response_variable: response
alias: Generate reminder
- delay:
hours: 0
minutes: 0
@@ -3124,7 +3216,7 @@ tina_morning_meds:
who: tina
type: alert
title: Morning Meds
message: '{{ response.text }}'
message: '{{ response.data.notification_text }}'
tag: tina-morning-meds
actions:
- action: TINA_MORNING_MEDS_TAKEN
@@ -3184,21 +3276,37 @@ tina_night_meds:
entity_id: counter.tina_night_meds_reminder_count
above: 2
then:
- action: google_generative_ai_conversation.generate_content
- alias: Generate snarky reminder
action: ai_task.generate_data
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 {{ remindCount }}
times.
instructions: Remind Tina to take her night meds. Use a maximum of two lines.
Be snarky, because at this point this is reminder number {{ remindCount
}}.
task_name: Tina Night Medication Reminder Snarky
entity_id: ai_task.google_ai_task
structure:
notification_text:
description: The text to send in the notification to Tina's phone
required: true
selector:
text:
response_variable: response
alias: Generate snarky reminder
else:
- action: google_generative_ai_conversation.generate_content
- alias: Generate reminder
action: ai_task.generate_data
metadata: {}
data:
prompt: Remind Tina to take her night meds. Use a maximum of two lines.
instructions: Remind Tina to take her night meds. Use a maximum of two lines.
task_name: Tina Night Medication Reminder
entity_id: ai_task.google_ai_task
structure:
notification_text:
description: The text to send in the notification to Tina's phone
required: true
selector:
text:
response_variable: response
alias: Generate reminder
- delay:
hours: 0
minutes: 0
@@ -3209,7 +3317,7 @@ tina_night_meds:
who: tina
type: alert
title: Night Meds
message: '{{ response.text }}'
message: '{{ response.data.notification_text }}'
tag: tina-night-meds
actions:
- action: TINA_NIGHT_MEDS_TAKEN

View File

@@ -464,3 +464,51 @@
map(attribute='attributes.friendly_name') |
list %}
{{ uptimekuma | join(', ') }}
- name: Media Server Viewer Health
unique_id: 51154ade-255e-4dcd-9b89-66910fcc1331
unit_of_measurement: '%'
icon: mdi:movie
state: >
{% set total = states.binary_sensor |
selectattr('entity_id','in',label_entities('media_server')) |
selectattr('entity_id','in',label_entities('viewer')) |
list | count | int %}
{% set up = states.binary_sensor |
selectattr('entity_id','in',label_entities('media_server')) |
selectattr('entity_id','in',label_entities('viewer')) |
selectattr('state','eq','on') |
list | count | int %}
{{ ((up / total) * 100) | round(0) }}
attributes:
services_down: >
{% set down = states.binary_sensor |
selectattr('entity_id','in',label_entities('media_server')) |
selectattr('entity_id','in',label_entities('viewer')) |
selectattr('state','eq','off') |
map(attribute='attributes.friendly_name') |
list %}
{{ down | join(', ') }}
- name: Media Server Downloaders Health
unique_id: f27867fe-700f-45bc-9e6b-8b1ee74cb724
unit_of_measurement: '%'
icon: mdi:tray-arrow-down
state: >
{% set total = states.binary_sensor |
selectattr('entity_id','in',label_entities('media_server')) |
selectattr('entity_id','in',label_entities('downloader')) |
list | count | int %}
{% set up = states.binary_sensor |
selectattr('entity_id','in',label_entities('media_server')) |
selectattr('entity_id','in',label_entities('downloader')) |
selectattr('state','eq','on') |
list | count | int %}
{{ ((up / total) * 100) | round(0) }}
attributes:
services_down: >
{% set down = states.binary_sensor |
selectattr('entity_id','in',label_entities('media_server')) |
selectattr('entity_id','in',label_entities('downloader')) |
selectattr('state','eq','off') |
map(attribute='attributes.friendly_name') |
list %}
{{ down | join(', ') }}

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 %}