From 38817a404d414253f110e5eee806cfc0c2959a1d Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Sat, 12 Jul 2025 17:38:53 -0400 Subject: [PATCH] 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 --- config/.HA_VERSION | 2 +- config/packages/climate.yaml | 96 +++++++++++++++++++++++++----------- config/recorder.yaml | 2 +- 3 files changed, 70 insertions(+), 30 deletions(-) diff --git a/config/.HA_VERSION b/config/.HA_VERSION index 4a4fc487..5bc1f4d9 100755 --- a/config/.HA_VERSION +++ b/config/.HA_VERSION @@ -1 +1 @@ -2025.6.1 \ No newline at end of file +2025.7.1 \ No newline at end of file diff --git a/config/packages/climate.yaml b/config/packages/climate.yaml index 6099ab6a..0ee61853 100644 --- a/config/packages/climate.yaml +++ b/config/packages/climate.yaml @@ -1,14 +1,20 @@ +# -------------------------------------------------- +# AC Filter‑change 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: 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 - - 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() }}" +# --------------------------------------------------------------------------- +# Utility‑meters 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 auto‑reset + 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 800 h. 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 450 h. 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 diff --git a/config/recorder.yaml b/config/recorder.yaml index 75452a91..ed208ff5 100755 --- a/config/recorder.yaml +++ b/config/recorder.yaml @@ -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