From 61811ede4f56422980a2cc444d3c1034a7324f82 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo <2160436+CCOSTAN@users.noreply.github.com> Date: Sat, 12 Jul 2025 17:44:42 -0400 Subject: [PATCH] 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 --- config/.HA_VERSION | 2 +- config/packages/climate.yaml | 96 +++++++++++++++++++++++++----------- config/packages/proxmox.yaml | 17 +++++++ config/recorder.yaml | 2 +- 4 files changed, 87 insertions(+), 30 deletions(-) create mode 100644 config/packages/proxmox.yaml diff --git a/config/.HA_VERSION b/config/.HA_VERSION index 66147d03..5bc1f4d9 100755 --- a/config/.HA_VERSION +++ b/config/.HA_VERSION @@ -1 +1 @@ -2025.6.0 \ 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: 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 + +# --------------------------------------------------------------------------- +# 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/packages/proxmox.yaml b/config/packages/proxmox.yaml new file mode 100644 index 00000000..dc8c1a32 --- /dev/null +++ b/config/packages/proxmox.yaml @@ -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 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