mirror of
https://github.com/CCOSTAN/Home-AssistantConfig.git
synced 2025-09-01 18:56:38 +00:00
Compare commits
2 Commits
ac4d927968
...
ff868369db
Author | SHA1 | Date | |
---|---|---|---|
|
ff868369db | ||
|
61811ede4f |
@@ -1 +1 @@
|
|||||||
2025.6.0
|
2025.7.1
|
@@ -1,14 +1,20 @@
|
|||||||
|
# --------------------------------------------------
|
||||||
|
# AC Filter‑change runtime tracker
|
||||||
|
# --------------------------------------------------
|
||||||
|
|
||||||
input_datetime:
|
input_datetime:
|
||||||
downstairs_last_filter_change:
|
downstairs_last_filter_change:
|
||||||
name: Downstairs Last Filter Change
|
name: Downstairs Last Filter Change
|
||||||
has_date: true
|
has_date: true
|
||||||
has_time: true
|
has_time: true
|
||||||
|
|
||||||
upstairs_last_filter_change:
|
upstairs_last_filter_change:
|
||||||
name: Upstairs Last Filter Change
|
name: Upstairs Last Filter Change
|
||||||
has_date: true
|
has_date: true
|
||||||
has_time: true
|
has_time: true
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# Binary sensors – true when the thermostat reports the compressor is running
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
binary_sensor:
|
binary_sensor:
|
||||||
- platform: template
|
- platform: template
|
||||||
sensors:
|
sensors:
|
||||||
@@ -16,71 +22,106 @@ binary_sensor:
|
|||||||
friendly_name: "Downstairs AC is Cooling"
|
friendly_name: "Downstairs AC is Cooling"
|
||||||
value_template: >
|
value_template: >
|
||||||
{{ state_attr('climate.downstairs', 'hvac_action') == 'cooling' }}
|
{{ state_attr('climate.downstairs', 'hvac_action') == 'cooling' }}
|
||||||
|
|
||||||
upstairs_ac_cooling:
|
upstairs_ac_cooling:
|
||||||
friendly_name: "Upstairs AC is Cooling"
|
friendly_name: "Upstairs AC is Cooling"
|
||||||
value_template: >
|
value_template: >
|
||||||
{{ state_attr('climate.upstairs', 'hvac_action') == 'cooling' }}
|
{{ state_attr('climate.upstairs', 'hvac_action') == 'cooling' }}
|
||||||
|
|
||||||
sensor:
|
sensor:
|
||||||
- platform: history_stats
|
- platform: template
|
||||||
name: Downstairs AC Runtime Since Last Filter Change
|
sensors:
|
||||||
entity_id: binary_sensor.downstairs_ac_cooling
|
downstairs_ac_cooling_numeric:
|
||||||
state: 'on'
|
friendly_name: "Downstairs AC Cooling Numeric"
|
||||||
type: time
|
value_template: "{{ 1 if is_state('binary_sensor.downstairs_ac_cooling', 'on') else 0 }}"
|
||||||
start: "{{ states('input_datetime.downstairs_last_filter_change') }}"
|
upstairs_ac_cooling_numeric:
|
||||||
end: "{{ now() }}"
|
friendly_name: "Upstairs AC Cooling Numeric "
|
||||||
|
value_template: "{{ 1 if is_state('binary_sensor.upstairs_ac_cooling', 'on') else 0 }}"
|
||||||
|
|
||||||
- platform: history_stats
|
- platform: integration
|
||||||
name: Upstairs AC Runtime Since Last Filter Change
|
name: Downstairs AC Runtime Raw
|
||||||
entity_id: binary_sensor.upstairs_ac_cooling
|
source: sensor.downstairs_ac_cooling_numeric
|
||||||
state: 'on'
|
unit_time: h
|
||||||
type: time
|
method: left
|
||||||
start: "{{ states('input_datetime.upstairs_last_filter_change') }}"
|
round: 2
|
||||||
end: "{{ now() }}"
|
- 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:
|
script:
|
||||||
reset_filter_change_date:
|
reset_downstairs_filter:
|
||||||
alias: Reset Downstairs Filter Change Date
|
alias: Reset Downstairs Filter
|
||||||
|
mode: queued
|
||||||
sequence:
|
sequence:
|
||||||
- service: input_datetime.set_datetime
|
- service: input_datetime.set_datetime
|
||||||
data:
|
data:
|
||||||
entity_id: input_datetime.downstairs_last_filter_change
|
entity_id: input_datetime.downstairs_last_filter_change
|
||||||
datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}"
|
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:
|
automation:
|
||||||
- alias: Notify Downstairs Filter Change Due
|
- 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:
|
trigger:
|
||||||
- platform: numeric_state
|
- platform: numeric_state
|
||||||
entity_id: sensor.downstairs_ac_runtime_since_last_filter_change
|
entity_id: sensor.downstairs_ac_runtime_since_last_filter_change
|
||||||
above: 800
|
above: 800 # hours
|
||||||
action:
|
action:
|
||||||
- service: script.notify_engine
|
- service: script.notify_engine # <-- keep your existing notify helper
|
||||||
data:
|
data:
|
||||||
title: "Home Maintenance Reminder"
|
title: "Home Maintenance Reminder"
|
||||||
value1: "It's time to change your Downstairs AC filter."
|
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"
|
who: "Carlo"
|
||||||
group: "maintenance"
|
group: "maintenance"
|
||||||
level: "active"
|
level: "active"
|
||||||
|
|
||||||
- alias: Notify Upstairs Filter Change Due
|
- 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:
|
trigger:
|
||||||
- platform: numeric_state
|
- platform: numeric_state
|
||||||
entity_id: sensor.upstairs_ac_runtime_since_last_filter_change
|
entity_id: sensor.upstairs_ac_runtime_since_last_filter_change
|
||||||
above: 450
|
above: 450 # hours
|
||||||
action:
|
action:
|
||||||
- service: script.notify_engine
|
- service: script.notify_engine
|
||||||
data:
|
data:
|
||||||
title: "Home Maintenance Reminder"
|
title: "Home Maintenance Reminder"
|
||||||
value1: "It's time to change your Upstairs AC filter."
|
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"
|
who: "Carlo"
|
||||||
group: "maintenance"
|
group: "maintenance"
|
||||||
|
|
||||||
- alias: 'Prevent Upstairs Nest Below 76'
|
|
||||||
|
- alias: Prevent Upstairs Nest Below 76
|
||||||
id: 7812fdaf-a3f8-498b-8f07-28e977e528ff
|
id: 7812fdaf-a3f8-498b-8f07-28e977e528ff
|
||||||
trigger:
|
trigger:
|
||||||
- platform: numeric_state
|
- platform: numeric_state
|
||||||
@@ -88,8 +129,7 @@ automation:
|
|||||||
attribute: temperature
|
attribute: temperature
|
||||||
below: 76
|
below: 76
|
||||||
action:
|
action:
|
||||||
- delay:
|
- delay: "00:03:00"
|
||||||
minutes: 3
|
|
||||||
- service: climate.set_temperature
|
- service: climate.set_temperature
|
||||||
data:
|
data:
|
||||||
entity_id: climate.upstairs
|
entity_id: climate.upstairs
|
||||||
|
17
config/packages/proxmox.yaml
Normal file
17
config/packages/proxmox.yaml
Normal 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
|
@@ -10,7 +10,7 @@
|
|||||||
# Original Repo: https://github.com/CCOSTAN/Home-AssistantConfig
|
# Original Repo: https://github.com/CCOSTAN/Home-AssistantConfig
|
||||||
#-------------------------------------------
|
#-------------------------------------------
|
||||||
#db_url: sqlite:///data/home-assistant_v2.db
|
#db_url: sqlite:///data/home-assistant_v2.db
|
||||||
purge_keep_days: 14
|
purge_keep_days: 30
|
||||||
include:
|
include:
|
||||||
entities:
|
entities:
|
||||||
- device_tracker.spaceship_location_tracker
|
- device_tracker.spaceship_location_tracker
|
||||||
|
@@ -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">
|
<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.6.0</title>
|
<title>2025.7.1</title>
|
||||||
<linearGradient id="szXfZ" x2="0" y2="100%">
|
<linearGradient id="NFXny" x2="0" y2="100%">
|
||||||
<stop offset="0" stop-opacity=".1" stop-color="#EEE"/>
|
<stop offset="0" stop-opacity=".1" stop-color="#EEE"/>
|
||||||
<stop offset="1" stop-opacity=".1"/>
|
<stop offset="1" stop-opacity=".1"/>
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
<mask id="thWMi"><rect width="615" height="200" rx="30" fill="#FFF"/></mask>
|
<mask id="JztcQ"><rect width="615" height="200" rx="30" fill="#FFF"/></mask>
|
||||||
<g mask="url(#thWMi)">
|
<g mask="url(#JztcQ)">
|
||||||
<rect width="615" height="200" fill="#08C" x="0"/>
|
<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>
|
||||||
<g aria-hidden="true" fill="#fff" text-anchor="start" font-family="Verdana,DejaVu Sans,sans-serif" font-size="110">
|
<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="65" y="148" textLength="500" fill="#000" opacity="0.25">2025.7.1</text>
|
||||||
<text x="55" y="138" textLength="500">2025.6.0</text>
|
<text x="55" y="138" textLength="500">2025.7.1</text>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 811 B After Width: | Height: | Size: 811 B |
Reference in New Issue
Block a user