feat(plant): temperature RECOVERY alerts - tiered clear notifications [#344]

Recovery twin of the high-temperature alert: per-tier below-triggers
(fire-line minus 5F, held 10 min), from_state guard against restart
false-positives, peak-value reporting. Matches existing notify
targets; UPS on-battery already had its restored twin.

Detail: https://projects.knownelement.com/issues/344
This commit is contained in:
2026-09-03 16:12:18 -05:00
parent db4624a2df
commit e6f4032865
+136
View File
@@ -371,3 +371,139 @@
pulled. Restarting HA core (webhook re-registration) - back in
~1 min.
- action: homeassistant.restart
- id: pfv_plant_temperature_recovered
alias: PFV plant - temperature recovered
description: >-
Recovery twin of the high-temperature alert [#344 ask 2026-09-03]:
notify when a sensor that was OVER its tier drops back below
(fire-line minus 5F hysteresis) and HOLDS there for 10 minutes.
from_state guard prevents spurious fires at HA restart; the tier
map mirrors the high-temperature automation thresholds exactly.
triggers:
- trigger: numeric_state
entity_id:
- sensor.pfv_tsys3_nvme_temperature
- sensor.pfv_tsys5_nvme_temperature
below: 145
for: 00:10:00
- trigger: numeric_state
entity_id:
- sensor.pfv_tsys4_dimm_18_temperature
- sensor.pfv_tsys4_dimm_19_temperature
- sensor.pfv_tsys4_dimm_1a_temperature
- sensor.pfv_tsys4_dimm_1b_temperature
below: 135
for: 00:10:00
- trigger: numeric_state
entity_id:
- sensor.pfv_tsys1_drive_temperature
- sensor.pfv_tsys4_drive_0_0_temperature
- sensor.pfv_tsys4_drive_0_10_temperature
- sensor.pfv_tsys4_drive_1_0_temperature
- sensor.pfv_tsys4_drive_1_10_temperature
- sensor.pfv_tsys5_drive_1_0_temperature
- sensor.pfv_tsys5_drive_4_10_temperature
- sensor.pfv_tsys5_drive_4_20_temperature
- sensor.pfv_tsys5_drive_4_30_temperature
- sensor.pfv_tsys9_drive_temperature
below: 135
for: 00:10:00
- trigger: numeric_state
entity_id:
- sensor.pfv_tsys3_gpu_temperature
- sensor.pfv_jetson_gpu_temperature
below: 180
for: 00:10:00
- trigger: numeric_state
entity_id:
- sensor.pfv_tsys3_pch_temperature
- sensor.pfv_tsys9_pch_temperature
below: 155
for: 00:10:00
- trigger: numeric_state
entity_id:
- sensor.pfv_tsys3_cpu_temperature
- sensor.pfv_tsys6_cpu_temperature
- sensor.pfv_tsys7_cpu_temperature
- sensor.pfv_tsys9_cpu_temperature
- sensor.pfv_tsys7_drac_cpu1
- sensor.pfv_tsys7_drac_cpu2
- sensor.pfv_jetson_temperature
- sensor.pfv_svrpi_temperature
- sensor.pfv_subopi3_temperature
- sensor.pfv_subopi_dev_3_temperature
- sensor.pfv_subopi_dev_4_temperature
below: 171
for: 00:10:00
- trigger: numeric_state
entity_id:
- sensor.pfv_artroom_temperature
- sensor.pfv_garage_temperature
- sensor.pfv_tsys1_rack_temperature
- sensor.pfv_tsys4_ambient_temperature
- sensor.pfv_tsys5_ambient_temperature
- sensor.pfv_tsys6_drac_ambient
- sensor.pfv_tsys7_drac_inlet
- sensor.pfv_tsys7_drac_exhaust
below: 99
for: 00:10:00
actions:
- variables:
fire_lines:
sensor.pfv_tsys3_nvme_temperature: 150
sensor.pfv_tsys5_nvme_temperature: 150
sensor.pfv_tsys4_dimm_18_temperature: 140
sensor.pfv_tsys4_dimm_19_temperature: 140
sensor.pfv_tsys4_dimm_1a_temperature: 140
sensor.pfv_tsys4_dimm_1b_temperature: 140
sensor.pfv_tsys1_drive_temperature: 140
sensor.pfv_tsys4_drive_0_0_temperature: 140
sensor.pfv_tsys4_drive_0_10_temperature: 140
sensor.pfv_tsys4_drive_1_0_temperature: 140
sensor.pfv_tsys4_drive_1_10_temperature: 140
sensor.pfv_tsys5_drive_1_0_temperature: 140
sensor.pfv_tsys5_drive_4_10_temperature: 140
sensor.pfv_tsys5_drive_4_20_temperature: 140
sensor.pfv_tsys5_drive_4_30_temperature: 140
sensor.pfv_tsys9_drive_temperature: 140
sensor.pfv_tsys3_gpu_temperature: 185
sensor.pfv_jetson_gpu_temperature: 185
sensor.pfv_tsys3_pch_temperature: 160
sensor.pfv_tsys9_pch_temperature: 160
sensor.pfv_tsys3_cpu_temperature: 176
sensor.pfv_tsys6_cpu_temperature: 176
sensor.pfv_tsys7_cpu_temperature: 176
sensor.pfv_tsys9_cpu_temperature: 176
sensor.pfv_tsys7_drac_cpu1: 176
sensor.pfv_tsys7_drac_cpu2: 176
sensor.pfv_jetson_temperature: 176
sensor.pfv_svrpi_temperature: 176
sensor.pfv_subopi3_temperature: 176
sensor.pfv_subopi_dev_3_temperature: 176
sensor.pfv_subopi_dev_4_temperature: 176
sensor.pfv_artroom_temperature: 104
sensor.pfv_garage_temperature: 104
sensor.pfv_tsys1_rack_temperature: 104
sensor.pfv_tsys4_ambient_temperature: 104
sensor.pfv_tsys5_ambient_temperature: 104
sensor.pfv_tsys6_drac_ambient: 104
sensor.pfv_tsys7_drac_inlet: 104
sensor.pfv_tsys7_drac_exhaust: 104
fire: "{{ fire_lines.get(trigger.entity_id, 0) | int }}"
- condition: template
value_template: >-
{{ trigger.from_state is not none
and trigger.from_state.state not in ['unavailable', 'unknown', 'none']
and trigger.from_state.state | float(-1) >= fire }}
- action: notify.send_message
target:
entity_id:
- notify.ultix_sidecar_new
- notify.allthes_ipad
data:
title: TEMPERATURE RECOVERED
message: >-
{{ state_attr(trigger.entity_id, 'friendly_name') | default(trigger.entity_id) }}
back to {{ states(trigger.entity_id) }}°F and holding — was
{{ trigger.from_state.state }}°F when the alert cleared (tier fire line {{ fire }}°F).
mode: single