SNMP sensors for all 9 instrumented hosts (temps in °F per founder ruling, °C converted at display layer), ACPI node-wattage feeds for tsys6/7, UPS alert automations (on-battery, battery-low, comm-lost, power-restored, high-temp) targeting Pushover, and Riemann-sum kWh helpers for the Energy dashboard. PDU and iDRAC blocks left as pinned placeholders pending PDU community and #462 OMSA work. 💘 Generated with Crush Assisted-by: Crush:glm-5.2
135 lines
4.4 KiB
YAML
135 lines
4.4 KiB
YAML
# PFV UPS + plant alert automations for Home Assistant [#439]
|
|
#
|
|
# Paste into automations.yaml (or via UI: paste YAML directly into the
|
|
# automation editor). Delivery target: notify.pushover (add the Pushover
|
|
# integration first; interim targets that exist today:
|
|
# notify.mobile_app_ultix_sidecar / notify.mobile_app_ultix_mini /
|
|
# notify.mobile_app_allthes_ipad).
|
|
#
|
|
# ENTITY IDs: created by the NUT integration when you add the two UPS config
|
|
# entries (Settings > Devices & Services > Add Integration > Network UPS
|
|
# Tools; hosts pfv-tsys1.knel.net and pfv-tsys9.knel.net, port 3493, user
|
|
# homeassistant + the upsd.users password). Suggested device names:
|
|
# "tsys1 ups" and "tsys9 ups" -> entities below. If HA names them
|
|
# differently, check Developer Tools > States (search "_ups_status") and
|
|
# edit the entity_id lines to match. Nothing else needs changing.
|
|
|
|
- alias: "PFV plant - UPS on battery"
|
|
id: pfv_plant_ups_on_battery
|
|
mode: single
|
|
triggers:
|
|
- trigger: state
|
|
entity_id:
|
|
- sensor.tsys1_ups_status
|
|
- sensor.tsys9_ups_status
|
|
conditions:
|
|
- condition: template
|
|
value_template: >-
|
|
{{ 'On Battery' in states(trigger.entity_id) }}
|
|
actions:
|
|
- action: notify.send_message
|
|
target:
|
|
entity_id: notify.pushover
|
|
data:
|
|
title: "POWER OUTAGE"
|
|
message: >-
|
|
{{ state_attr(trigger.entity_id, 'friendly_name') }} lost utility
|
|
power and is ON BATTERY at {{ states('sensor.' ~ trigger.entity_id.split('.')[1] | replace('_status', '_battery_charge')) }}% charge.
|
|
|
|
- alias: "PFV plant - UPS battery low"
|
|
id: pfv_plant_ups_battery_low
|
|
mode: single
|
|
triggers:
|
|
- trigger: numeric_state
|
|
entity_id:
|
|
- sensor.tsys1_ups_battery_charge
|
|
- sensor.tsys9_ups_battery_charge
|
|
below: 40
|
|
conditions:
|
|
- condition: template
|
|
value_template: >-
|
|
{{ 'On Battery' in states(trigger.entity_id | replace('_battery_charge', '_status')) }}
|
|
actions:
|
|
- action: notify.send_message
|
|
target:
|
|
entity_id: notify.pushover
|
|
data:
|
|
title: "UPS BATTERY LOW"
|
|
message: >-
|
|
{{ trigger.entity_id }} at {{ states(trigger.entity_id) }}% while on
|
|
battery. Start graceful shutdown of VMs before hypervisors (#455 ordering).
|
|
data:
|
|
priority: 1
|
|
|
|
- alias: "PFV plant - UPS communication lost"
|
|
id: pfv_plant_ups_comm_lost
|
|
mode: single
|
|
triggers:
|
|
- trigger: state
|
|
entity_id:
|
|
- sensor.tsys1_ups_status
|
|
- sensor.tsys9_ups_status
|
|
to: unavailable
|
|
for: "00:05:00"
|
|
actions:
|
|
- action: notify.send_message
|
|
target:
|
|
entity_id: notify.pushover
|
|
data:
|
|
title: "UPS COMMS LOST"
|
|
message: >-
|
|
{{ trigger.entity_id }} unreachable for 5 minutes (nut-server or
|
|
network path down; tsys1 also hosts pfv-bms itself).
|
|
data:
|
|
priority: 1
|
|
|
|
- alias: "PFV plant - utility power restored"
|
|
id: pfv_plant_ups_power_restored
|
|
mode: single
|
|
triggers:
|
|
- trigger: state
|
|
entity_id:
|
|
- sensor.tsys1_ups_status
|
|
- sensor.tsys9_ups_status
|
|
conditions:
|
|
- condition: template
|
|
value_template: >-
|
|
{{ trigger.from_state is not none and 'On Battery' in trigger.from_state.state
|
|
and 'On Battery' not in states(trigger.entity_id) }}
|
|
actions:
|
|
- action: notify.send_message
|
|
target:
|
|
entity_id: notify.pushover
|
|
data:
|
|
title: "Power restored"
|
|
message: >-
|
|
{{ state_attr(trigger.entity_id, 'friendly_name') }} is back ONLINE.
|
|
|
|
- alias: "PFV plant - high temperature"
|
|
id: pfv_plant_high_temperature
|
|
mode: single
|
|
triggers:
|
|
- trigger: numeric_state
|
|
entity_id:
|
|
- sensor.pfv_artroom_temperature
|
|
- sensor.pfv_garage_temperature
|
|
- sensor.pfv_tsys1_rack_temperature
|
|
- sensor.pfv_tsys3_cpu_temperature
|
|
- sensor.pfv_tsys4_ambient_temperature
|
|
- sensor.pfv_tsys5_ambient_temperature
|
|
- sensor.pfv_tsys6_cpu_temperature
|
|
- sensor.pfv_tsys7_cpu_temperature
|
|
- sensor.pfv_tsys9_cpu_temperature
|
|
above: 104
|
|
actions:
|
|
- action: notify.send_message
|
|
target:
|
|
entity_id: notify.pushover
|
|
data:
|
|
title: "HIGH TEMPERATURE"
|
|
message: >-
|
|
{{ trigger.entity_id }} is {{ states(trigger.entity_id) }}°F
|
|
(threshold 104°F). Check cooling/airflow.
|
|
data:
|
|
priority: 1
|