You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Home-AssistantConfig/config/packages/proxmox.yaml

243 lines
9.3 KiB

######################################################################
# @CCOSTAN - Follow Me on X
# For more info visit https://www.vcloudinfo.com/click-here
# Original Repo : https://github.com/CCOSTAN/Home-AssistantConfig
# -------------------------------------------------------------------
# Proxmox Host Automations - reboots and update alerts
# Nightly Frigate host reboot plus update repair issues.
# -------------------------------------------------------------------
# Related Issue: 1584
# Notes: Creates HA repair issues when proxmox nodes report updates.
# Notes: Adds normalized runtime + disk health signals for dashboard/alerts.
######################################################################
template:
- sensor:
- name: "Proxmox1 Disk Used Percentage"
unique_id: proxmox1_disk_used_percentage
unit_of_measurement: "%"
icon: mdi:harddisk
state: >-
{% set preferred = states('sensor.node_proxmox1_disk_used_percentage') %}
{% if preferred not in ['unknown', 'unavailable', 'none', ''] %}
{{ preferred | float(0) | round(1) }}
{% else %}
{% set used = states('sensor.node_proxmox1_disk') | float(0) %}
{% set total = states('sensor.node_proxmox1_max_disk') | float(0) %}
{% if total > 0 %}
{{ ((used / total) * 100) | round(1) }}
{% else %}
{{ none }}
{% endif %}
{% endif %}
- name: "Proxmox02 Disk Used Percentage"
unique_id: proxmox02_disk_used_percentage
unit_of_measurement: "%"
icon: mdi:harddisk
state: >-
{% set preferred = states('sensor.node_proxmox02_disk_used_percentage') %}
{% if preferred not in ['unknown', 'unavailable', 'none', ''] %}
{{ preferred | float(0) | round(1) }}
{% else %}
{% set used = states('sensor.node_proxmox02_disk') | float(0) %}
{% set total = states('sensor.node_proxmox02_max_disk') | float(0) %}
{% if total > 0 %}
{{ ((used / total) * 100) | round(1) }}
{% else %}
{{ none }}
{% endif %}
{% endif %}
- binary_sensor:
- name: "Proxmox1 Runtime Healthy"
unique_id: proxmox1_runtime_healthy
device_class: running
state: >-
{% set state_value = states('binary_sensor.node_proxmox1_status') %}
{% if state_value in ['on', 'off'] %}
{{ state_value == 'on' }}
{% else %}
{% set status = states('sensor.node_proxmox1_status') | lower %}
{{ status in ['online', 'running', 'on'] }}
{% endif %}
- name: "Proxmox02 Runtime Healthy"
unique_id: proxmox02_runtime_healthy
device_class: running
state: >-
{% set state_value = states('binary_sensor.node_proxmox02_status') %}
{% if state_value in ['on', 'off'] %}
{{ state_value == 'on' }}
{% else %}
{% set status = states('sensor.node_proxmox02_status') | lower %}
{{ status in ['online', 'running', 'on'] }}
{% endif %}
automation:
- alias: "Nightly Frigate Server Reboot"
id: nightly_frigate_reboot
description: "Reboots the Frigate server every day at 5 AM"
mode: single
trigger:
- platform: time
at: "05:00:00"
action:
- service: button.press
target:
entity_id: button.qemu_docker2_101_reboot
- service: script.send_to_logbook
data:
topic: "FRIGATE"
message: "Frigate server rebooted at 5 AM."
- alias: "Proxmox Updates Repair Issues"
id: proxmox_updates_repair
description: "Track repair issues when Proxmox hosts report updates."
mode: restart
trigger:
- platform: state
entity_id: binary_sensor.node_proxmox1_updates_packages
- platform: state
entity_id: binary_sensor.node_proxmox02_updates_packages
variables:
node_name: >
{% if 'proxmox1' in trigger.entity_id %}Proxmox1{% else %}Proxmox02{% endif %}
issue_id: >
{% if 'proxmox1' in trigger.entity_id %}
proxmox1_updates_available
{% else %}
proxmox02_updates_available
{% endif %}
action:
- choose:
- conditions: "{{ trigger.to_state.state == 'on' }}"
sequence:
- service: repairs.create
data:
issue_id: "{{ issue_id }}"
severity: warning
persistent: false
title: "{{ node_name }} has updates available"
description: >
{{ trigger.entity_id }} is ON, indicating pending updates on {{ node_name }}.
Apply updates in Proxmox, then reload this sensor to clear the issue.
default:
- service: repairs.remove
data:
issue_id: "{{ issue_id }}"
- service: script.send_to_logbook
data:
topic: "PROXMOX"
message: "{{ node_name }} has been Patched"
- alias: "Proxmox Runtime Repair Issues"
id: proxmox_runtime_repairs
description: "Create and clear Repairs when Proxmox node runtime becomes unhealthy."
mode: restart
trigger:
- platform: state
entity_id:
- binary_sensor.proxmox1_runtime_healthy
- binary_sensor.proxmox02_runtime_healthy
variables:
node_name: >-
{% if 'proxmox1' in trigger.entity_id %}Proxmox1{% else %}Proxmox02{% endif %}
issue_id: >-
{% if 'proxmox1' in trigger.entity_id %}
proxmox1_runtime_unhealthy
{% else %}
proxmox02_runtime_unhealthy
{% endif %}
action:
- choose:
- conditions: "{{ trigger.to_state.state == 'off' }}"
sequence:
- delay: "00:02:00"
- condition: template
value_template: "{{ is_state(trigger.entity_id, 'off') }}"
- service: repairs.create
data:
issue_id: "{{ issue_id }}"
severity: error
persistent: true
title: "{{ node_name }} runtime degraded"
description: >
{{ node_name }} has remained offline for over 2 minutes.
Check node status in Proxmox and restore runtime.
- service: script.send_to_logbook
data:
topic: "PROXMOX"
message: "{{ node_name }} runtime is degraded."
default:
- service: repairs.remove
continue_on_error: true
data:
issue_id: "{{ issue_id }}"
- service: script.send_to_logbook
data:
topic: "PROXMOX"
message: "{{ node_name }} runtime recovered."
- alias: "Proxmox Disk Pressure Repair Issues"
id: proxmox_disk_pressure_repairs
description: "Create and clear Repairs when Proxmox node disk usage stays elevated."
mode: restart
trigger:
- platform: numeric_state
entity_id:
- sensor.proxmox1_disk_used_percentage
- sensor.proxmox02_disk_used_percentage
above: 85
for: "00:15:00"
- platform: state
entity_id:
- sensor.proxmox1_disk_used_percentage
- sensor.proxmox02_disk_used_percentage
variables:
node_name: >-
{% if 'proxmox1' in trigger.entity_id %}Proxmox1{% else %}Proxmox02{% endif %}
issue_id: >-
{% if 'proxmox1' in trigger.entity_id %}
proxmox1_disk_pressure
{% else %}
proxmox02_disk_pressure
{% endif %}
disk_pct: "{{ states(trigger.entity_id) | float(0) }}"
action:
- choose:
- conditions: "{{ disk_pct >= 92 }}"
sequence:
- service: repairs.create
data:
issue_id: "{{ issue_id }}"
severity: error
persistent: true
title: "{{ node_name }} disk pressure critical ({{ disk_pct | round(1) }}%)"
description: >
{{ node_name }} disk usage is critically high.
Free disk space or expand storage allocation.
- service: script.send_to_logbook
data:
topic: "PROXMOX"
message: "{{ node_name }} disk usage is critical at {{ disk_pct | round(1) }}%."
- conditions: "{{ disk_pct >= 85 }}"
sequence:
- service: repairs.create
data:
issue_id: "{{ issue_id }}"
severity: warning
persistent: true
title: "{{ node_name }} disk pressure warning ({{ disk_pct | round(1) }}%)"
description: >
{{ node_name }} disk usage has stayed above 85% for 15 minutes.
Plan cleanup before capacity reaches critical levels.
- service: script.send_to_logbook
data:
topic: "PROXMOX"
message: "{{ node_name }} disk usage warning at {{ disk_pct | round(1) }}%."
default:
- service: repairs.remove
continue_on_error: true
data:
issue_id: "{{ issue_id }}"

Powered by TurnKey Linux.