Compare commits

..

27 Commits

Author SHA1 Message Date
25fe4bef13 Add tornado warnings to long-term databases 2026-04-01 02:47:15 -04:00
ea1985cf91 Trigger lightning warning if Tempest binary sensor shows lightning 2026-04-01 02:46:48 -04:00
cdfbb6023b Add bedtime reminder for E 2026-03-29 22:56:20 -04:00
6157abce18 Fix bubble card modules to use the correct accent color variable 2026-03-29 22:55:54 -04:00
379de46d05 Update .gitignore 2026-03-29 22:55:31 -04:00
f6c2f99b11 Update .HA_VERSION 2026-03-29 22:55:09 -04:00
f4e809317b Merge branch 'temp_fixes' into dev 2026-03-20 23:06:46 -04:00
71c4affd3c Revert Weatherflow fixes as integration appears to work now 2026-03-20 22:50:13 -04:00
eef92467de Temp disable animated_scenes 2026-03-20 22:50:12 -04:00
eab0a507b7 Temp fixes until Weatherflow Forecast integration is fixed 2026-03-20 22:50:06 -04:00
979e253ff0 Turn recorder on after reboot, if it was off 2026-03-20 22:48:24 -04:00
3aa5a1a462 Ensure only heat or AC can be active at the same time in E's bedroom 2026-03-20 22:48:11 -04:00
fc9bcc9db6 Add alert for when windows are open and it gets too hot or cold outside 2026-03-20 22:47:43 -04:00
57023115f1 Replace binary windows open sensor with proper template 2026-03-20 22:46:23 -04:00
faeeb64696 Update .HA_VERSION 2026-03-20 22:45:26 -04:00
cc2f328dec Move response time sensors from recorder to InfluxDB/Prometheus 2026-03-12 13:56:59 -04:00
8e8430cba0 Remove some noisy sensors from recorder 2026-03-12 13:56:28 -04:00
7f91e3ed04 Remove parts of InfluxDB config that have moved to UI 2026-03-09 02:05:10 -04:00
802fb39608 Update .HA_VERSION 2026-03-07 01:48:50 -05:00
9bc654bc70 Fix incorrect entities in history stat sensors for E's aircon 2026-03-06 06:18:17 -05:00
6e9e35a6a4 Fix wrong entity used for E's scheduled climate mode in nightly briefing 2026-03-06 05:45:11 -05:00
bf094bf56a Update .gitignore 2026-03-05 02:17:07 -05:00
f614b3965f Update .HA_VERSION 2026-03-05 02:16:40 -05:00
2c8e062666 Update .HA_VERSION 2026-03-04 05:51:08 -05:00
5dd003e994 Don't reset basement briefing if I'm still down here 2026-02-24 03:28:59 -05:00
6cf0b6daee Temp solution for #260 2026-02-24 03:15:33 -05:00
6b2747c518 Add proper opponent collisions to inhibit sensors for college hockey 2026-02-23 01:57:23 -05:00
20 changed files with 286 additions and 78 deletions

View File

@@ -1 +1 @@
2026.2.1
2026.3.4

2
.gitignore vendored
View File

@@ -4,6 +4,7 @@
/.google.token
/.ssh
/.codegpt
/.cache
# ignore some directories.
/www/*
@@ -22,6 +23,7 @@
/lightwand/
/bubble/Scratchpad/
/custom_icons
/bubble_card
# ignore any of these files no matter where they are using double *
**.DS_Store

View File

@@ -314,6 +314,12 @@
minutes: 1
seconds: 0
milliseconds: 0
- action: input_boolean.turn_on
metadata: {}
target:
entity_id: input_boolean.recorder
data: {}
alias: Turn on Recorder
- data: {}
target:
entity_id:
@@ -6219,6 +6225,7 @@
- input_boolean.tina_morning_meds_taken
- input_boolean.tina_night_meds_taken
alias: Reset Tina meds taken switches
enabled: false
mode: restart
- id: '1747130058536'
alias: Shower Mode Auto Off
@@ -6404,3 +6411,175 @@
data: {}
alias: Disable Recorder
mode: restart
- id: '1773604271398'
alias: Emma Bedroom Climate Interlock
description: Makes sure only one climate device can be enabled at one time, to protect
from blowing a breaker
triggers:
- trigger: state
entity_id:
- input_boolean.emma_bedroom_aircon_installed
from:
- 'off'
to:
- 'on'
id: aircon
alias: Aircon Installed
- trigger: state
entity_id:
- input_boolean.emma_bedroom_heater_installed
from:
- 'off'
to:
- 'on'
id: heater
alias: Heater Installed
conditions: []
actions:
- alias: Routing
choose:
- conditions:
- condition: trigger
id:
- aircon
alias: Aircon Installed
sequence:
- action: climate.turn_off
metadata: {}
target:
entity_id: climate.emma_bedroom_vtherm
data: {}
alias: Turn off heater thermostat
- action: input_boolean.turn_off
metadata: {}
target:
entity_id: input_boolean.emma_bedroom_heater_installed
data: {}
alias: Remove heater
- conditions:
- condition: trigger
id:
- heater
alias: Heater Installed
sequence:
- action: climate.turn_off
metadata: {}
target:
entity_id: climate.emma_bedroom_aircon
data: {}
alias: Turn off aircon
- action: input_boolean.turn_off
metadata: {}
target:
entity_id: input_boolean.emma_bedroom_aircon_installed
data: {}
alias: Remove aircon
mode: restart
- id: '1773964427974'
alias: Temperature Window Alert
description: Alert when the temperature outside gets too cold or too hot for having
windows open
triggers:
- trigger: numeric_state
entity_id:
- weather.iron_nerd_weather_station
attribute: temperature
below: 50
id: cold
alias: Cold
- trigger: numeric_state
entity_id:
- weather.iron_nerd_weather_station
attribute: temperature
above: 80
id: hot
alias: Hot
conditions:
- condition: state
entity_id: binary_sensor.windows
state:
- 'on'
actions:
- choose:
- conditions:
- condition: trigger
id:
- cold
alias: Cold
sequence:
- action: script.speech_engine
metadata: {}
data:
who: everywhere
message: It has gotten a bit chilly outside, and there are windows open.
Please consider closing them!
type: weather
alias: Play announcement for cold
- conditions:
- alias: Hot
condition: trigger
id:
- hot
sequence:
- alias: Play announcement for hot
action: script.speech_engine
metadata: {}
data:
who: everywhere
message: It has gotten pretty hot outside, and there are windows open. Please
consider closing them!
type: weather
alias: Routing
mode: restart
- id: '1774435563540'
alias: Emma Bedtime Reminder
description: We keep losing track of time and putting Emma to bed later than we
mean to. This aims to remedy that.
triggers:
- trigger: time
at:
entity_id: input_datetime.emma_bedtime
offset: -00:30:00
id: prewarn
alias: Pre-warning
- alias: Bedtime
trigger: time
at: input_datetime.emma_bedtime
id: bedtime
conditions:
- condition: state
entity_id: input_boolean.emma_sleeping
state:
- 'off'
actions:
- alias: Routing
choose:
- conditions:
- condition: trigger
id:
- prewarn
alias: Prewarn
sequence:
- action: script.speech_engine
metadata: {}
data:
who: living_room
message: Hey, it is getting close to Emma's bedtime. Just making sure you
don't lose track of time.
type: alert
alias: Play pre-warning announcement
- conditions:
- condition: trigger
id:
- bedtime
alias: Bedtime
sequence:
- alias: Play bedtime announcement
action: script.speech_engine
metadata: {}
data:
who: living_room
message: Hey, it is Emma's bedtime. You should probably start getting her
ready if you haven't already.
type: alert
mode: restart

View File

@@ -4,7 +4,7 @@
const cold = hass?.states[this.config?.main_button_floors?.cold_entity]?.state || '';
let bg_color = 'var(--bubble-main-background-color)';
let occupied_color = 'var(--accent-color)';
let occupied_color = 'var(--bubble-accent-color)';
let hot_color = 'var(--error-color)';
let cold_color = 'var(--purple-color)';

View File

@@ -1,6 +1,6 @@
main_button_floors:
name: Main Button Floors
version: '1.1'
version: '1.2.1'
creator: Tony Stork
supported:
- button
@@ -12,7 +12,7 @@ main_button_floors:
const cold = hass?.states[this.config?.main_button_floors?.cold_entity]?.state || '';
let bg_color = 'var(--bubble-main-background-color)';
let occupied_color = 'var(--accent-color)';
let occupied_color = 'var(--bubble-accent-color)';
let hot_color = 'var(--error-color)';
let cold_color = 'var(--purple-color)';

View File

@@ -2,7 +2,7 @@
const occupancy = hass?.states[this.config?.main_button_outdoors?.occupancy_entity]?.state || '';
let bg_color = 'var(--bubble-main-background-color)';
let occupied_color = 'var(--accent-color)';
let occupied_color = 'var(--bubble-accent-color)';
// Main button background
const mainButton = card?.querySelector('.bubble-button-background');

View File

@@ -1,6 +1,6 @@
main_button_outdoors:
name: Main Button Outdoors
version: '1.1'
version: '1.2.1'
creator: Tony Stork
supported:
- button
@@ -10,7 +10,7 @@ main_button_outdoors:
const occupancy = hass?.states[this.config?.main_button_outdoors?.occupancy_entity]?.state || '';
let bg_color = 'var(--bubble-main-background-color)';
let occupied_color = 'var(--accent-color)';
let occupied_color = 'var(--bubble-accent-color)';
// Main button background
const mainButton = card?.querySelector('.bubble-button-background');

View File

@@ -2,7 +2,7 @@
const state = hass?.states[this.config?.entity]?.state || '';
let bg_color = 'var(--background-color-2)';
let accent_color = 'var(--accent-color)';
let accent_color = 'var(--bubble-accent-color)';
// Main button background
const mainButton = card?.querySelector('.bubble-button-background');

View File

@@ -1,6 +1,6 @@
popup_accent_color_button:
name: Popup Accent Color Button
version: '1.0'
version: '1.1'
creator: Tony Stork
supported:
- button
@@ -10,7 +10,7 @@ popup_accent_color_button:
const state = hass?.states[this.config?.entity]?.state || '';
let bg_color = 'var(--background-color-2)';
let accent_color = 'var(--accent-color)';
let accent_color = 'var(--bubble-accent-color)';
// Main button background
const mainButton = card?.querySelector('.bubble-button-background');

View File

@@ -11,7 +11,7 @@
// Use the configured color or default to accent color
let on_color = this.config?.state_color_button?.color
? `var(--${this.config.state_color_button.color})`
: 'var(--accent-color)';
: 'var(--bubble-accent-color)';
// Main button background
const mainButton = card?.querySelector('.bubble-button-background');

View File

@@ -1,6 +1,6 @@
state_color_button:
name: State Color Button
version: 1.1.3
version: 1.2.0
creator: Tony Stork
supported:
- button
@@ -27,7 +27,7 @@ state_color_button:
// Use the configured color or default to accent color
let on_color = this.config?.state_color_button?.color
? `var(--${this.config.state_color_button.color})`
: 'var(--accent-color)';
: 'var(--bubble-accent-color)';
// Main button background
const mainButton = card?.querySelector('.bubble-button-background');

View File

@@ -108,6 +108,7 @@ recorder:
- sensor.*_count
- sensor.*memory_available*
- sensor.*memory_used*
- sensor.*memory_usage*
- sensor.*cpu_usage
- sensor.*cpu_temperature
- sensor.*gpu_temperature
@@ -124,6 +125,11 @@ recorder:
- sensor.*_monitored_url
- sensor.*_response_time
- sensor.adguard*
- sensor.*iphone_info
- sensor.*ipad_info
- sensor.*airpods_info
- sensor.*airpods_pro_info
- sensor.*response_time*
entities:
- sensor.avg_ping
- sensor.max_ping
@@ -164,14 +170,7 @@ logger:
homeassistant.core: fatal
influxdb:
api_version: 2
host: 192.168.1.254
port: 8086
max_retries: 3
ssl: false
organization: !secret influxdb_org
token: !secret influxdb_token
bucket: home_assistant
default_measurement: state
tags:
source: HA
@@ -291,6 +290,7 @@ influxdb:
- sensor.*_response_time
- sensor.*_status
- sensor.adguard*
- sensor.*response_time*
entities:
- media_player.living_room_tv
- media_player.basement_tv
@@ -341,6 +341,7 @@ influxdb:
- sensor.national_tornado_warnings
- sensor.national_severe_thunderstorm_warnings
- binary_sensor.severe_thunderstorm_warning
- binary_sensor.tornado_warning
logbook:
include:
@@ -469,6 +470,7 @@ prometheus:
- sensor.*_response_time
- sensor.*_status
- sensor.adguard*
- sensor.*response_time*
include_entities:
- media_player.living_room_tv
- media_player.basement_tv
@@ -519,3 +521,4 @@ prometheus:
- sensor.national_tornado_warnings
- sensor.national_severe_thunderstorm_warnings
- binary_sensor.severe_thunderstorm_warning
- binary_sensor.tornado_warning

View File

@@ -699,7 +699,7 @@ template:
{% endif %}
- name: "Lightning Warning"
unique_id: edaddfc4-f7f0-4d75-aada-a2c588afe029
state: "{{ states('sensor.home_tempest_cloud_sensors_lightning_strikes_last_hour') | int > 0 }}"
state: "{{ (states('sensor.home_tempest_cloud_sensors_lightning_strikes_last_hour') | int > 0) or is_state('binary_sensor.home_tempest_cloud_binary_sensors_is_lightning','on') }}"
device_class: safety
attributes:
current_strikes: "{{ states('sensor.home_tempest_cloud_sensors_lightning_strikes_last_hour') | int }}"

View File

@@ -65,7 +65,7 @@ sensor:
hours: 24
- platform: history_stats
name: Emma A/C Compressor Time
entity_id: binary_sensor.emma_aircon_compressor
entity_id: binary_sensor.emma_bedroom_aircon_compressor
state: 'on'
type: time
end: '{{ now() }}'
@@ -73,7 +73,7 @@ sensor:
hours: 24
- platform: history_stats
name: Emma A/C Fan Time
entity_id: binary_sensor.emma_aircon_fan
entity_id: binary_sensor.emma_bedroom_aircon_fan
state: 'on'
type: time
end: '{{ now() }}'

View File

@@ -57,6 +57,6 @@ pyscript:
allow_all_imports: true
hass_is_global: true
animated_scenes:
# animated_scenes:
grad_vol:

View File

@@ -822,51 +822,51 @@ template:
mdi:lightbulb
{% endif %}
switch:
- platform: animated_scenes
name: Christmas
restore: False
restore_power: False
ignore_off: False
lights:
- light.front_porch_light
colors:
- color_type: rgb_color
color: [255,0,0]
brightness: 255
- color_type: rgb_color
color: [0,255,0]
brightness: 255
transition: 10
change_frequency: 60
change_amount: all
change_sequence: True
animate_brightness: True
animate_color: True
- platform: animated_scenes
name: Christmas Day
restore: False
restore_power: False
ignore_off: False
lights:
- light.living_room_color_1
- light.living_room_color_2
- light.living_room_color_3
- light.tina_lamp_top
- light.tina_lamp_side
colors:
- color_type: rgb_color
color: [255,0,0]
brightness: 255
- color_type: rgb_color
color: [0,255,0]
brightness: 255
transition: 1
change_frequency: 5
change_amount: 3
change_sequence: False
animate_brightness: True
animate_color: True
# switch:
# - platform: animated_scenes
# name: Christmas
# restore: False
# restore_power: False
# ignore_off: False
# lights:
# - light.front_porch_light
# colors:
# - color_type: rgb_color
# color: [255,0,0]
# brightness: 255
# - color_type: rgb_color
# color: [0,255,0]
# brightness: 255
# transition: 10
# change_frequency: 60
# change_amount: all
# change_sequence: True
# animate_brightness: True
# animate_color: True
# - platform: animated_scenes
# name: Christmas Day
# restore: False
# restore_power: False
# ignore_off: False
# lights:
# - light.living_room_color_1
# - light.living_room_color_2
# - light.living_room_color_3
# - light.tina_lamp_top
# - light.tina_lamp_side
# colors:
# - color_type: rgb_color
# color: [255,0,0]
# brightness: 255
# - color_type: rgb_color
# color: [0,255,0]
# brightness: 255
# transition: 1
# change_frequency: 5
# change_amount: 3
# change_sequence: False
# animate_brightness: True
# animate_color: True
#! Unless there is a good reason, do not define multi-room scenes below.
#! Use scripts instead, to avoid some straight-up haunted house bullshit...

View File

@@ -125,6 +125,18 @@ alarm_control_panel:
template:
- binary_sensor:
- name: Windows
unique_id: 9ff34cd4-c450-45d2-934a-b4a9fd8b93b2
device_class: window
state: >
{% set windows_open = states.binary_sensor
| selectattr('attributes.device_class','eq','window')
| selectattr('attributes.entity_id','eq',null)
| rejectattr('entity_id','search','windows')
| selectattr('state','eq','on')
| list
| count %}
{{ windows_open > 0 }}
- name: Living Room Windows
unique_id: fb4ab414-3ceb-44d2-8276-66027a936329
device_class: window

View File

@@ -156,7 +156,7 @@ template:
unique_id: 87653f3a-203c-4dbf-87e8-70bcacf6eb22
state: >
{% from 'sports.jinja' import sports_inhibit %}
{{ sports_inhibit('sensor.minnesota_golden_gophers_hockey') }}
{{ state_attr('sensor.minnesota_golden_gophers_hockey','opponent_abbr') in ['MICH','MNST'] or sports_inhibit('sensor.minnesota_golden_gophers_hockey') }}
- name: Minnesota Golden Gophers Hockey Event Today
unique_id: 1f4ff7eb-cbc9-4c81-a5c9-6523b5fb52ff
state: >
@@ -166,7 +166,7 @@ template:
unique_id: bd15870d-bccb-4c52-9690-473c31bb4090
state: >
{% from 'sports.jinja' import sports_inhibit %}
{{ sports_inhibit('sensor.minnesota_state_mavericks_hockey') }}
{{ state_attr('sensor.minnesota_state_mavericks_hockey','opponent_abbr') in ['MICH'] or sports_inhibit('sensor.minnesota_state_mavericks_hockey') }}
- name: Minnesota State Mavericks Hockey Event Today
unique_id: e403be15-3ff2-47b1-8398-70f8ccb65026
state: >

View File

@@ -2673,16 +2673,28 @@ kallen_night_meds:
reset_annc_switches:
alias: Reset Announcement Switches
sequence:
- service: input_boolean.turn_off
target:
- target:
entity_id:
- input_boolean.good_morning
- input_boolean.daily_briefing
- input_boolean.nightly_briefing
- input_boolean.kallen_morning_briefing
- input_boolean.kallen_nightly_briefing
- input_boolean.basement_briefing
data: {}
action: input_boolean.turn_off
alias: Turn off housewide briefing switches
- if:
- condition: state
entity_id: binary_sensor.basement_occupied
state:
- 'off'
then:
- action: input_boolean.turn_off
metadata: {}
target:
entity_id: input_boolean.basement_briefing
data: {}
alias: Turn off basement briefing switch if basement is not occupied
mode: single
icon: mdi:bullhorn-outline
emma_rainbow_lights:

View File

@@ -71,12 +71,12 @@
{% else %}
"Collin's room will be left alone, as he is spending the night elsewhere tonight. "
{% 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') %}
{% if states('input_select.scheduled_climate_mode_emma_bedroom') != 'N/A' %}
{% if is_state('input_select.scheduled_climate_mode_emma_bedroom','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_climate') }}. "
{% elif is_state('input_select.scheduled_climate_mode_emma_bedroom_aircon','AC') %}
{% elif is_state('input_select.scheduled_climate_mode_emma_bedroom','AC') %}
"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') %}
{% elif is_state('input_select.scheduled_climate_mode_emma_bedroom','Fan') %}
"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') }}. "