Compare commits

...

2 Commits

Author SHA1 Message Date
github-actions[bot]
ff868369db Update HA version badge to 2025.7.1 2025-07-12 21:45:00 +00:00
Carlo Costanzo
61811ede4f June Updates (#1522)
* Add nightly reboot schedule for Frigate server in Proxmox configuration

* Update HA version to 2025.6.1

* Update HA version to 2025.7.1, increase recorder purge days to 30, and enhance climate package with new sensors and utility meters for AC runtime tracking. In service of AC filter changing.  #273

---------

Co-authored-by: Carlo Costanzo <CCOSTAN@users.noreply.github.com>
2025-07-12 17:44:42 -04:00
5 changed files with 95 additions and 38 deletions

View File

@@ -1 +1 @@
2025.6.0
2025.7.1

View File

@@ -1,14 +1,20 @@
# --------------------------------------------------
# AC Filterchange runtime tracker
# --------------------------------------------------
input_datetime:
downstairs_last_filter_change:
name: Downstairs Last Filter Change
has_date: true
has_time: true
upstairs_last_filter_change:
name: Upstairs Last Filter Change
has_date: true
has_time: true
# ---------------------------------------------------------------------------
# Binary sensors true when the thermostat reports the compressor is running
# ---------------------------------------------------------------------------
binary_sensor:
- platform: template
sensors:
@@ -16,71 +22,106 @@ binary_sensor:
friendly_name: "Downstairs AC is Cooling"
value_template: >
{{ state_attr('climate.downstairs', 'hvac_action') == 'cooling' }}
upstairs_ac_cooling:
friendly_name: "Upstairs AC is Cooling"
value_template: >
{{ state_attr('climate.upstairs', 'hvac_action') == 'cooling' }}
sensor:
- platform: history_stats
name: Downstairs AC Runtime Since Last Filter Change
entity_id: binary_sensor.downstairs_ac_cooling
state: 'on'
type: time
start: "{{ states('input_datetime.downstairs_last_filter_change') }}"
end: "{{ now() }}"
- platform: template
sensors:
downstairs_ac_cooling_numeric:
friendly_name: "Downstairs AC Cooling Numeric"
value_template: "{{ 1 if is_state('binary_sensor.downstairs_ac_cooling', 'on') else 0 }}"
upstairs_ac_cooling_numeric:
friendly_name: "Upstairs AC Cooling Numeric "
value_template: "{{ 1 if is_state('binary_sensor.upstairs_ac_cooling', 'on') else 0 }}"
- platform: history_stats
name: Upstairs AC Runtime Since Last Filter Change
entity_id: binary_sensor.upstairs_ac_cooling
state: 'on'
type: time
start: "{{ states('input_datetime.upstairs_last_filter_change') }}"
end: "{{ now() }}"
- platform: integration
name: Downstairs AC Runtime Raw
source: sensor.downstairs_ac_cooling_numeric
unit_time: h
method: left
round: 2
- platform: integration
name: Upstairs AC Runtime Raw
source: sensor.upstairs_ac_cooling_numeric
unit_time: h
method: left
round: 2
# ---------------------------------------------------------------------------
# Utilitymeters that act like odometers (reset when you swap the filter)
# ---------------------------------------------------------------------------
utility_meter:
downstairs_ac_runtime_since_last_filter_change:
source: sensor.downstairs_ac_runtime_raw
cycle: none # never autoreset
upstairs_ac_runtime_since_last_filter_change:
source: sensor.upstairs_ac_runtime_raw
cycle: none
script:
reset_filter_change_date:
alias: Reset Downstairs Filter Change Date
reset_downstairs_filter:
alias: Reset Downstairs Filter
mode: queued
sequence:
- service: input_datetime.set_datetime
data:
entity_id: input_datetime.downstairs_last_filter_change
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
- service: utility_meter.reset
target:
entity_id: utility_meter.downstairs_ac_runtime_since_last_filter_change
reset_upstairs_filter:
alias: Reset Upstairs Filter
mode: queued
sequence:
- service: input_datetime.set_datetime
data:
entity_id: input_datetime.upstairs_last_filter_change
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
- service: utility_meter.reset
target:
entity_id: utility_meter.upstairs_ac_runtime_since_last_filter_change
automation:
- alias: Notify Downstairs Filter Change Due
description: "Notify when AC runtime exceeds threshold since last filter change"
description: Notify when downstairs runtime exceeds threshold since last filter change
trigger:
- platform: numeric_state
entity_id: sensor.downstairs_ac_runtime_since_last_filter_change
above: 800
above: 800 # hours
action:
- service: script.notify_engine
- service: script.notify_engine # <-- keep your existing notify helper
data:
title: "Home Maintenance Reminder"
value1: "It's time to change your Downstairs AC filter."
value2: "Runtime has exceeded 800 hours. Last changed {{ ((now() - states.input_datetime.downstairs_last_filter_change.last_changed).total_seconds() / 86400) | round(0) }} days ago."
value2: >
Runtime has exceeded 800h. Last changed {{ ((now() - states.input_datetime.downstairs_last_filter_change.last_changed).total_seconds() / 86400) | round(0) }} days ago.
who: "Carlo"
group: "maintenance"
level: "active"
- alias: Notify Upstairs Filter Change Due
description: "Notify when AC runtime exceeds threshold since last filter change"
description: Notify when upstairs runtime exceeds threshold since last filter change
trigger:
- platform: numeric_state
entity_id: sensor.upstairs_ac_runtime_since_last_filter_change
above: 450
above: 450 # hours
action:
- service: script.notify_engine
data:
title: "Home Maintenance Reminder"
value1: "It's time to change your Upstairs AC filter."
value2: "Runtime has exceeded 450 hours. Last changed {{ ((now() - states.input_datetime.upstairs_last_filter_change.last_changed).total_seconds() / 86400) | round(0) }} days ago."
value2: >
Runtime has exceeded 450h. Last changed {{ ((now() - states.input_datetime.upstairs_last_filter_change.last_changed).total_seconds() / 86400) | round(0) }} days ago.
who: "Carlo"
group: "maintenance"
- alias: 'Prevent Upstairs Nest Below 76'
- alias: Prevent Upstairs Nest Below 76
id: 7812fdaf-a3f8-498b-8f07-28e977e528ff
trigger:
- platform: numeric_state
@@ -88,8 +129,7 @@ automation:
attribute: temperature
below: 76
action:
- delay:
minutes: 3
- delay: "00:03:00"
- service: climate.set_temperature
data:
entity_id: climate.upstairs

View File

@@ -0,0 +1,17 @@
#-------------------------------------------
# Setting up nightly reboot schedule for Frigate server via Proxmox
# https://www.vcloudinfo.com/click-here
#-------------------------------------------
automation:
- alias: "Nightly Frigate Server Reboot"
id: nightly_frigate_reboot
description: "Reboots the Frigate server every day at 5 AM"
trigger:
- platform: time
at: "05:00:00"
action:
- service: button.press
target:
entity_id: button.qemu_docker2_101_reboot
mode: single

View File

@@ -10,7 +10,7 @@
# Original Repo: https://github.com/CCOSTAN/Home-AssistantConfig
#-------------------------------------------
#db_url: sqlite:///data/home-assistant_v2.db
purge_keep_days: 14
purge_keep_days: 30
include:
entities:
- device_tracker.spaceship_location_tracker

View File

@@ -1,16 +1,16 @@
<svg width="61.5" height="20" viewBox="0 0 615 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="2025.6.0">
<title>2025.6.0</title>
<linearGradient id="szXfZ" x2="0" y2="100%">
<svg width="61.5" height="20" viewBox="0 0 615 200" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="2025.7.1">
<title>2025.7.1</title>
<linearGradient id="NFXny" x2="0" y2="100%">
<stop offset="0" stop-opacity=".1" stop-color="#EEE"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="thWMi"><rect width="615" height="200" rx="30" fill="#FFF"/></mask>
<g mask="url(#thWMi)">
<mask id="JztcQ"><rect width="615" height="200" rx="30" fill="#FFF"/></mask>
<g mask="url(#JztcQ)">
<rect width="615" height="200" fill="#08C" x="0"/>
<rect width="615" height="200" fill="url(#szXfZ)"/>
<rect width="615" height="200" fill="url(#NFXny)"/>
</g>
<g aria-hidden="true" fill="#fff" text-anchor="start" font-family="Verdana,DejaVu Sans,sans-serif" font-size="110">
<text x="65" y="148" textLength="500" fill="#000" opacity="0.25">2025.6.0</text>
<text x="55" y="138" textLength="500">2025.6.0</text>
<text x="65" y="148" textLength="500" fill="#000" opacity="0.25">2025.7.1</text>
<text x="55" y="138" textLength="500">2025.7.1</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 811 B

After

Width:  |  Height:  |  Size: 811 B