feat(dashboards): garage + artroom; health heart view; fleet-wide unknown-render fix [#618][#344][#625]
This commit is contained in:
@@ -29,3 +29,13 @@ lovelace:
|
||||
title: Health
|
||||
filename: dashboards/health.yaml
|
||||
icon: mdi:heart-pulse
|
||||
pfv-garage:
|
||||
mode: yaml
|
||||
title: Garage
|
||||
filename: dashboards/garage.yaml
|
||||
icon: mdi:garage
|
||||
pfv-artroom:
|
||||
mode: yaml
|
||||
title: Art Room
|
||||
filename: dashboards/artroom.yaml
|
||||
icon: mdi:palette
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# Art Room dashboard [#618] — git-deployed via KNEL/pfv-bms
|
||||
# Sources: TEMPer on stlpc-artroom, Canon printer toners (IPP).
|
||||
# OctoPrint x2 + 3 3D printers land Friday (#466).
|
||||
title: Art Room
|
||||
views:
|
||||
- title: Art Room
|
||||
type: sections
|
||||
sections:
|
||||
- type: grid
|
||||
cards:
|
||||
- type: gauge
|
||||
entity: sensor.pfv_artroom_temperature
|
||||
name: Art room temp
|
||||
min: 50
|
||||
max: 100
|
||||
unit: "°F"
|
||||
- type: history-graph
|
||||
title: Art room temp (24h)
|
||||
entities:
|
||||
- sensor.pfv_artroom_temperature
|
||||
hours_to_show: 24
|
||||
- type: entities
|
||||
title: Printer — toner
|
||||
entities:
|
||||
- sensor.cnmf731c_733c_canon_cartridge_046_black_toner
|
||||
- sensor.cnmf731c_733c_canon_cartridge_046_cyan_ton
|
||||
- sensor.cnmf731c_733c_canon_cartridge_046_magenta_to
|
||||
- sensor.cnmf731c_733c_canon_cartridge_046_yellow_ton
|
||||
- type: markdown
|
||||
content: >
|
||||
**Pending:** TR4500 status, OctoPrint x2 + 3D printers (#466,
|
||||
Friday).
|
||||
@@ -0,0 +1,24 @@
|
||||
# Garage dashboard [#618] — git-deployed via KNEL/pfv-bms
|
||||
# Sources: TEMPer on stlpc-garage. PDU power/temp pending integration (#374/#351).
|
||||
title: Garage
|
||||
views:
|
||||
- title: Garage
|
||||
type: sections
|
||||
sections:
|
||||
- type: grid
|
||||
cards:
|
||||
- type: gauge
|
||||
entity: sensor.pfv_garage_temperature
|
||||
name: Garage temp
|
||||
min: 40
|
||||
max: 110
|
||||
unit: "°F"
|
||||
- type: history-graph
|
||||
title: Garage temp (24h)
|
||||
entities:
|
||||
- sensor.pfv_garage_temperature
|
||||
hours_to_show: 24
|
||||
- type: markdown
|
||||
content: >
|
||||
**Pending:** garage PDU power + temp (#374 outlet naming,
|
||||
#351 network onboarding), minisplit BTU context (#614).
|
||||
@@ -29,6 +29,39 @@ views:
|
||||
entities:
|
||||
- person.charles_n_wyble
|
||||
hours_to_show: 168
|
||||
- title: Heart
|
||||
type: sections
|
||||
sections:
|
||||
- type: grid
|
||||
cards:
|
||||
- type: gauge
|
||||
entity: sensor.ultix_mini_heart_rate
|
||||
name: Heart rate
|
||||
unit: bpm
|
||||
min: 40
|
||||
max: 180
|
||||
severity:
|
||||
green: 50
|
||||
yellow: 100
|
||||
red: 140
|
||||
- type: entities
|
||||
title: Heart metrics
|
||||
entities:
|
||||
- sensor.ultix_mini_heart_rate
|
||||
- sensor.ultix_mini_resting_heart_rate
|
||||
- sensor.ultix_mini_walking_heart_rate_average
|
||||
- sensor.ultix_mini_heart_rate_variability
|
||||
- type: history-graph
|
||||
title: Heart rate (24h)
|
||||
entities:
|
||||
- sensor.ultix_mini_heart_rate
|
||||
hours_to_show: 24
|
||||
- type: history-graph
|
||||
title: Heart rate (7d)
|
||||
entities:
|
||||
- sensor.ultix_mini_heart_rate
|
||||
- sensor.ultix_mini_resting_heart_rate
|
||||
hours_to_show: 168
|
||||
- title: Body temp
|
||||
type: sections
|
||||
sections:
|
||||
|
||||
+16
-16
@@ -15,7 +15,7 @@ sensor:
|
||||
{% set ext = value | regex_findall('External:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{% set int = value | regex_findall('Internal:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{% set c = (ext | first) if ext else ((int | first) if int else none) %}
|
||||
{{ ((c | float * 9 / 5) + 32) | round(1) if c is not none else 'unknown' }}
|
||||
{{ ((c | float * 9 / 5) + 32) | round(1) if c is not none }}
|
||||
|
||||
- platform: snmp
|
||||
name: "PFV garage temperature"
|
||||
@@ -32,7 +32,7 @@ sensor:
|
||||
{% set ext = value | regex_findall('External:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{% set int = value | regex_findall('Internal:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{% set c = (ext | first) if ext else ((int | first) if int else none) %}
|
||||
{{ ((c | float * 9 / 5) + 32) | round(1) if c is not none else 'unknown' }}
|
||||
{{ ((c | float * 9 / 5) + 32) | round(1) if c is not none }}
|
||||
|
||||
- platform: snmp
|
||||
name: "PFV tsys1 rack temperature"
|
||||
@@ -49,7 +49,7 @@ sensor:
|
||||
{% set ext = value | regex_findall('External:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{% set int = value | regex_findall('Internal:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{% set c = (ext | first) if ext else ((int | first) if int else none) %}
|
||||
{{ ((c | float * 9 / 5) + 32) | round(1) if c is not none else 'unknown' }}
|
||||
{{ ((c | float * 9 / 5) + 32) | round(1) if c is not none }}
|
||||
|
||||
# --- Native lm-sensors hosts (label picked per host ground truth 2026-08-27) ---
|
||||
# tsys3 Precision 7510: CPU package
|
||||
@@ -66,7 +66,7 @@ sensor:
|
||||
unique_id: pfv_tsys3_cpu_temperature
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('Package id 0:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m else 'unknown' }}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m }}
|
||||
|
||||
# tsys4 Precision T1700: Dell SMM ambient (board inlet)
|
||||
- platform: snmp
|
||||
@@ -82,7 +82,7 @@ sensor:
|
||||
unique_id: pfv_tsys4_ambient_temperature
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('Ambient:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m else 'unknown' }}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m }}
|
||||
|
||||
# tsys5 Precision T7500: Dell SMM ambient (board inlet)
|
||||
- platform: snmp
|
||||
@@ -98,7 +98,7 @@ sensor:
|
||||
unique_id: pfv_tsys5_ambient_temperature
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('Ambient:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m else 'unknown' }}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m }}
|
||||
|
||||
# tsys6 PowerEdge R610: socket-0 core temp (no Package label on Westmere)
|
||||
- platform: snmp
|
||||
@@ -114,7 +114,7 @@ sensor:
|
||||
unique_id: pfv_tsys6_cpu_temperature
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('Core 0:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m else 'unknown' }}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m }}
|
||||
|
||||
# tsys6 ACPI power meter (node draw, watts)
|
||||
- platform: snmp
|
||||
@@ -130,7 +130,7 @@ sensor:
|
||||
unique_id: pfv_tsys6_node_power
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('power1:\s*(\d+\.?\d*)\s*W') %}
|
||||
{{ m | first | float if m else 'unknown' }}
|
||||
{{ m | first | float if m }}
|
||||
|
||||
# tsys7 PowerEdge R620: package temp
|
||||
- platform: snmp
|
||||
@@ -146,7 +146,7 @@ sensor:
|
||||
unique_id: pfv_tsys7_cpu_temperature
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('Package id 0:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m else 'unknown' }}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m }}
|
||||
|
||||
# tsys7 ACPI power meter (node draw, watts)
|
||||
- platform: snmp
|
||||
@@ -162,7 +162,7 @@ sensor:
|
||||
unique_id: pfv_tsys7_node_power
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('power1:\s*(\d+\.?\d*)\s*W') %}
|
||||
{{ m | first | float if m else 'unknown' }}
|
||||
{{ m | first | float if m }}
|
||||
|
||||
# tsys9 OptiPlex 7080: package temp
|
||||
- platform: snmp
|
||||
@@ -178,7 +178,7 @@ sensor:
|
||||
unique_id: pfv_tsys9_cpu_temperature
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('Package id 0:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m else 'unknown' }}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m }}
|
||||
|
||||
# --- SBC fleet (sysfs thermal fallback in lmsensors-extend v2; temp1 = zone0/SoC) ---
|
||||
- platform: snmp
|
||||
@@ -194,7 +194,7 @@ sensor:
|
||||
unique_id: pfv_jetson_temperature
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('temp1:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m else 'unknown' }}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m }}
|
||||
|
||||
- platform: snmp
|
||||
name: "PFV svrpi temperature"
|
||||
@@ -209,7 +209,7 @@ sensor:
|
||||
unique_id: pfv_svrpi_temperature
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('temp1:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m else 'unknown' }}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m }}
|
||||
|
||||
- platform: snmp
|
||||
name: "PFV subopi3 temperature"
|
||||
@@ -224,7 +224,7 @@ sensor:
|
||||
unique_id: pfv_subopi3_temperature
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('temp1:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m else 'unknown' }}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m }}
|
||||
|
||||
- platform: snmp
|
||||
name: "PFV subopi-dev-3 temperature"
|
||||
@@ -239,7 +239,7 @@ sensor:
|
||||
unique_id: pfv_subopi_dev_3_temperature
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('temp1:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m else 'unknown' }}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m }}
|
||||
|
||||
- platform: snmp
|
||||
name: "PFV subopi-dev-4 temperature"
|
||||
@@ -254,7 +254,7 @@ sensor:
|
||||
unique_id: pfv_subopi_dev_4_temperature
|
||||
value_template: >-
|
||||
{% set m = value | regex_findall('temp1:\s*\+?(-?\d+\.?\d*)') %}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m else 'unknown' }}
|
||||
{{ ((m | first | float * 9 / 5) + 32) | round(1) if m }}
|
||||
|
||||
|
||||
# --- iDRAC IPMI temps via drac-extend (SNMP MIB tables empty on this hw gen) [#625] ---
|
||||
|
||||
Reference in New Issue
Block a user