feat(dashboards): data-dense Overview, dedicated UPS tab, Automations tab [#344]

Overview: at-a-glance markdown (UPS/PDU/hottest temps/fleet count) +
Power entities + key-temp history; giant status card dropped. New UPS
view (charge+runtime gauges, battery V, 7d charge / 24h V+runtime
graphs, unit facts incl. no-input/output-voltage note, UPS automations).
Automations moved to own tab with trend sensors. NUT runtime/voltage/
setpoint entities enabled via registry (disabled-by-default). New
pfv_ups_runtime_minutes template sensor.

https://projects.knownelement.com/issues/344
This commit is contained in:
2026-09-02 20:37:53 -05:00
parent 1eca4b8f1d
commit f1898daa8a
2 changed files with 139 additions and 23 deletions
+132 -23
View File
@@ -1,43 +1,152 @@
# Server Room dashboard [#618] — git-deployed via KNEL/pfv-bms # Server Room dashboard [#618/#344] — git-deployed via KNEL/pfv-bms
title: Server Room title: Server Room
views: views:
- title: Overview - title: Overview
type: panel type: sections
cards: sections:
- type: grid
cards:
- type: markdown
content: >
## At a glance
**UPS** {{ states('sensor.tsys1_ups_status') }} ·
{{ states('sensor.tsys1_ups_battery_charge') }}% ·
{{ states('sensor.pfv_ups_runtime_minutes') }} min runtime ·
{{ states('sensor.tsys1_ups_battery_voltage') }} V battery
**PDU** {{ states('sensor.pfv_garage_pdu_output_current') }} A ·
{{ states('sensor.pfv_garage_pdu_power') }} W ·
{{ states('sensor.garage_pdu_daily_energy') | float(-1) | round(2) }} kWh today
{% set s = states.sensor | selectattr('entity_id','search','pfv_')
| selectattr('attributes.device_class','defined')
| selectattr('attributes.device_class','eq','temperature')
| rejectattr('state','in',['unavailable','unknown']) | list %}
**Fleet temps** {{ s | count }} reporting ·
{% set ns = namespace(items=[]) %}{% for x in s %}{% set ns.items
= ns.items + [(x.state | float, x.name)] %}{% endfor %}{% for v,n
in ns.items | sort(reverse=true) | batch(3) | first %}**{{ n }}**
{{ v | round(1) }}°F {% endfor %}
- type: entities
title: Power
entities:
- sensor.tsys1_ups_status
- sensor.tsys1_ups_battery_charge
- sensor.pfv_ups_runtime_minutes
- sensor.tsys1_ups_battery_voltage
- sensor.pfv_garage_pdu_output_current
- sensor.pfv_garage_pdu_power
- sensor.pfv_garage_pdu_energy
- sensor.garage_pdu_daily_energy
- sensor.pfv_tsys6_node_power
- sensor.pfv_tsys7_node_power
- sensor.pfv_power_meter
- type: grid
cards:
- type: history-graph
title: Key temps (24h)
entities:
- sensor.pfv_tsys1_rack_temperature
- sensor.pfv_tsys3_cpu_temperature
- sensor.pfv_tsys6_drac_ambient
- sensor.pfv_tsys7_drac_inlet
- sensor.pfv_tsys5_nvme_temperature
hours_to_show: 24
- title: UPS
type: sections
sections:
- type: grid - type: grid
columns: 2
square: false
cards: cards:
- type: gauge - type: gauge
entity: sensor.tsys1_ups_battery_charge entity: sensor.tsys1_ups_battery_charge
name: tsys1 UPS battery name: Battery charge
unit: "%" min: 0
max: 100
severity: severity:
green: 60 green: 60
yellow: 40 yellow: 40
red: 20 red: 20
- type: entity - type: gauge
entity: sensor.tsys1_ups_status entity: sensor.pfv_ups_runtime_minutes
name: tsys1 UPS name: Runtime (min)
icon: mdi:ups min: 0
- type: history-graph max: 60
title: tsys1 UPS battery severity:
entities: green: 25
- sensor.tsys1_ups_battery_charge yellow: 15
hours_to_show: 24 red: 5
- type: grid
cards:
- type: entities - type: entities
title: Plant automations title: Status
entities:
- sensor.tsys1_ups_status
- sensor.tsys1_ups_status_data
- sensor.tsys1_ups_battery_charge
- sensor.pfv_ups_runtime_minutes
- sensor.tsys1_ups_battery_runtime
- sensor.tsys1_ups_battery_voltage
- sensor.tsys1_ups_nominal_battery_voltage
- sensor.tsys1_ups_low_battery_setpoint
- sensor.tsys1_ups_beeper_status
- type: markdown
content: >
**APC Smart-UPS C 1500** · serial AS1213210423 · mfr 2012-03 ·
fw UPS 02.2 · PbAc, 24 V nominal · usbhid-ups via pfv-tsys1
(NUT :3493). This unit reports no input/output voltage over
USB HID — battery-side metrics only.
- type: grid
cards:
- type: entities
title: UPS automations
entities: entities:
- automation.pfv_plant_high_temperature
- automation.pfv_plant_ups_on_battery - automation.pfv_plant_ups_on_battery
- automation.pfv_plant_ups_battery_low - automation.pfv_plant_ups_battery_low
- automation.pfv_plant_ups_communication_lost - automation.pfv_plant_ups_communication_lost
- automation.pfv_plant_utility_power_restored - automation.pfv_plant_utility_power_restored
- type: markdown - type: grid
content: > cards:
**Server Room** — Proxmox hosts + Pis. Temperature sensors - type: history-graph
populate here after the SNMP migration (#618). Minisplit title: Charge (7 days)
climate control lands with #614 (BTU loop Friday). entities:
- sensor.tsys1_ups_battery_charge
hours_to_show: 168
- type: history-graph
title: Battery voltage · runtime (24h)
entities:
- sensor.tsys1_ups_battery_voltage
- sensor.pfv_ups_runtime_minutes
hours_to_show: 24
- title: Automations
type: sections
sections:
- type: grid
cards:
- type: entities
title: Plant automations
entities:
- automation.pfv_plant_high_temperature
- automation.pfv_plant_temperature_rising_fast_rate_of_change
- automation.pfv_plant_sensor_watchdog_unavailable_sensors
- automation.pfv_plant_ups_on_battery
- automation.pfv_plant_ups_battery_low
- automation.pfv_plant_ups_communication_lost
- automation.pfv_plant_utility_power_restored
- type: entities
title: Trend early-warning (rate-of-change, #682)
entities:
- binary_sensor.server_room_temp_rising
- binary_sensor.tsys6_ambient_rising
- binary_sensor.tsys7_inlet_rising
- binary_sensor.garage_temp_rising
- title: Temps - title: Temps
type: sections type: sections
sections: sections:
+7
View File
@@ -641,3 +641,10 @@ template:
state: >- state: >-
{% set v = states('sensor.pfv_tsys9_pch_temperature_raw') %} {% set v = states('sensor.pfv_tsys9_pch_temperature_raw') %}
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }} {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
- name: "PFV UPS runtime minutes"
unique_id: pfv_ups_runtime_minutes
device_class: duration
unit_of_measurement: "min"
state: >-
{% set v = states('sensor.tsys1_ups_battery_runtime') %}
{{ (v | float / 60) | round(0) if is_number(v) else none }}