HA 2026.8 rejects ANY non-numeric native_value on a unit-bearing snmp sensor at entity ADD (host down at boot renders ''/'unknown'/'None' as strings) — unit-bearing adds crash and the entity vanishes until manual reload. Raw layer now carries no unit (validation off); semantic template layer carries unit + device_class under the original unique_ids so entity_ids, dashboards, and automations are unchanged. https://projects.knownelement.com/issues/344#note-3916
488 lines
18 KiB
YAML
488 lines
18 KiB
YAML
sensor:
|
|
# ARCHITECTURE (2026-09-02, HA 2026.8) — two layers, do not re-merge:
|
|
# RAW layer (platform snmp, below): transport only. NO unit_of_measurement
|
|
# and NO device_class — HA 2026.8 raises ValueError at entity ADD when a
|
|
# unit-bearing sensor's native_value is non-numeric (host down/asleep at
|
|
# boot renders '' or the literal string 'unknown'; even {{ none }} is
|
|
# stringified to 'None'). Unit-bearing adds CRASH and the entity vanishes.
|
|
# SEMANTIC layer (template: below): carries unit + device_class under the
|
|
# ORIGINAL unique_ids (registry keeps the original entity_ids so dashboards
|
|
# and automations are unaffected). Template platform degrades to unknown
|
|
# gracefully. value must never render empty — guard with is_number().
|
|
# --- RAW SNMP transport (lm-sensors / drac / pdu extends) ---
|
|
- platform: snmp
|
|
name: "PFV artroom temperature raw"
|
|
host: stlpc-artroom.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_artroom_temperature_raw
|
|
value_template: >-
|
|
{% 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 if c is not none }}
|
|
|
|
- platform: snmp
|
|
name: "PFV garage temperature raw"
|
|
host: stlpc-garage.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_garage_temperature_raw
|
|
value_template: >-
|
|
{% 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 if c is not none }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys1 rack temperature raw"
|
|
host: pfv-tsys1.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_tsys1_rack_temperature_raw
|
|
value_template: >-
|
|
{% 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 if c is not none }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys3 CPU temperature raw"
|
|
host: pfv-tsys3.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_tsys3_cpu_temperature_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('Package id 0:\s*\+?(-?\d+\.?\d*)') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys4 ambient temperature raw"
|
|
host: pfv-tsys4.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_tsys4_ambient_temperature_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('Ambient:\s*\+?(-?\d+\.?\d*)') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys5 ambient temperature raw"
|
|
host: pfv-tsys5.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_tsys5_ambient_temperature_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('Ambient:\s*\+?(-?\d+\.?\d*)') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys6 CPU temperature raw"
|
|
host: pfv-tsys6.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_tsys6_cpu_temperature_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('Core 0:\s*\+?(-?\d+\.?\d*)') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys6 node power raw"
|
|
host: pfv-tsys6.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_tsys6_node_power_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('power1:\s*(\d+\.?\d*)\s*W') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys7 CPU temperature raw"
|
|
host: pfv-tsys7.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_tsys7_cpu_temperature_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('Package id 0:\s*\+?(-?\d+\.?\d*)') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys7 node power raw"
|
|
host: pfv-tsys7.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_tsys7_node_power_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('power1:\s*(\d+\.?\d*)\s*W') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys9 CPU temperature raw"
|
|
host: pfv-tsys9.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_tsys9_cpu_temperature_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('Package id 0:\s*\+?(-?\d+\.?\d*)') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV jetson temperature raw"
|
|
host: pfv-jetson-nano-1.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_jetson_temperature_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('temp1:\s*\+?(-?\d+\.?\d*)') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV svrpi temperature raw"
|
|
host: pfvsvrpi.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_svrpi_temperature_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('temp1:\s*\+?(-?\d+\.?\d*)') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV subopi3 temperature raw"
|
|
host: subopi3.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_subopi3_temperature_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('temp1:\s*\+?(-?\d+\.?\d*)') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV subopi-dev-3 temperature raw"
|
|
host: subopi-dev-3.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_subopi_dev_3_temperature_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('temp1:\s*\+?(-?\d+\.?\d*)') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV subopi-dev-4 temperature raw"
|
|
host: subopi-dev-4.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.108.109.115.101.110.115.111.114.115
|
|
accept_errors: true
|
|
unique_id: pfv_subopi_dev_4_temperature_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('temp1:\s*\+?(-?\d+\.?\d*)') %}
|
|
{{ m | first | float if m }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys6 DRAC ambient raw"
|
|
host: pfv-tsys6.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.4.100.114.97.99
|
|
accept_errors: true
|
|
unique_id: pfv_tsys6_drac_ambient_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('ambient_temp (\d+)') %}
|
|
{{ m[0] | float if m | length > 0 }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys7 DRAC inlet raw"
|
|
host: pfv-tsys7.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.4.100.114.97.99
|
|
accept_errors: true
|
|
unique_id: pfv_tsys7_drac_inlet_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('inlet_temp (\d+)') %}
|
|
{{ m[0] | float if m | length > 0 }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys7 DRAC exhaust raw"
|
|
host: pfv-tsys7.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.4.100.114.97.99
|
|
accept_errors: true
|
|
unique_id: pfv_tsys7_drac_exhaust_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('exhaust_temp (\d+)') %}
|
|
{{ m[0] | float if m | length > 0 }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys7 DRAC CPU1 raw"
|
|
host: pfv-tsys7.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.4.100.114.97.99
|
|
accept_errors: true
|
|
unique_id: pfv_tsys7_drac_cpu1_raw
|
|
value_template: >-
|
|
{% set t = value | regex_findall('(?:^|\n)temp (\d+)') %}
|
|
{{ t[0] | float if t | length > 0 }}
|
|
|
|
- platform: snmp
|
|
name: "PFV tsys7 DRAC CPU2 raw"
|
|
host: pfv-tsys7.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.4.100.114.97.99
|
|
accept_errors: true
|
|
unique_id: pfv_tsys7_drac_cpu2_raw
|
|
value_template: >-
|
|
{% set t = value | regex_findall('(?:^|\n)temp (\d+)') %}
|
|
{{ t[1] | float if t | length > 1 }}
|
|
|
|
- platform: snmp
|
|
name: "PFV garage PDU output current raw"
|
|
host: tsys-librenms.knel.net
|
|
version: 2c
|
|
community: kn3lmgmt
|
|
baseoid: .1.3.6.1.4.1.8072.1.3.2.3.1.2.9.103.97.114.97.103.101.112.100.117
|
|
accept_errors: true
|
|
unique_id: pfv_garage_pdu_amps_raw
|
|
value_template: >-
|
|
{% set m = value | regex_findall('output_amps ([0-9.]+)') %}
|
|
{{ m[0] | float if m | length > 0 }}
|
|
|
|
# --- Garage PDU energy (kWh) integrated from watts [#344] ---
|
|
- platform: integration
|
|
source: sensor.pfv_garage_pdu_power
|
|
name: pfv garage PDU energy
|
|
round: 2
|
|
unit_prefix: k
|
|
unit_time: h
|
|
method: left
|
|
unique_id: pfv_garage_pdu_energy
|
|
|
|
# --- Rate-of-change early warning (#682): +10°F/15min = AC trouble [#344] ---
|
|
binary_sensor:
|
|
- platform: trend
|
|
sensors:
|
|
server_room_temp_rising:
|
|
entity_id: sensor.pfv_tsys1_rack_temperature
|
|
sample_duration: 900
|
|
min_gradient: 0.011
|
|
unique_id: trend_server_room_rising
|
|
tsys6_ambient_rising:
|
|
entity_id: sensor.pfv_tsys6_drac_ambient
|
|
sample_duration: 900
|
|
min_gradient: 0.011
|
|
unique_id: trend_tsys6_ambient_rising
|
|
tsys7_inlet_rising:
|
|
entity_id: sensor.pfv_tsys7_drac_inlet
|
|
sample_duration: 900
|
|
min_gradient: 0.011
|
|
unique_id: trend_tsys7_inlet_rising
|
|
garage_temp_rising:
|
|
entity_id: sensor.pfv_garage_temperature
|
|
sample_duration: 900
|
|
min_gradient: 0.011
|
|
unique_id: trend_garage_rising
|
|
|
|
utility_meter:
|
|
garage_pdu_daily:
|
|
source: sensor.pfv_garage_pdu_energy
|
|
name: Garage PDU daily energy
|
|
unique_id: garage_pdu_daily_energy
|
|
cycle: daily
|
|
|
|
template:
|
|
- sensor:
|
|
- name: "PFV artroom temperature"
|
|
unique_id: pfv_artroom_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_artroom_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV garage temperature"
|
|
unique_id: pfv_garage_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_garage_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys1 rack temperature"
|
|
unique_id: pfv_tsys1_rack_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys1_rack_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys3 CPU temperature"
|
|
unique_id: pfv_tsys3_cpu_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys3_cpu_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys4 ambient temperature"
|
|
unique_id: pfv_tsys4_ambient_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys4_ambient_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys5 ambient temperature"
|
|
unique_id: pfv_tsys5_ambient_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys5_ambient_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys6 CPU temperature"
|
|
unique_id: pfv_tsys6_cpu_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys6_cpu_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys6 node power"
|
|
unique_id: pfv_tsys6_node_power
|
|
device_class: power
|
|
unit_of_measurement: "W"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys6_node_power_raw') %}
|
|
{{ v | float | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys7 CPU temperature"
|
|
unique_id: pfv_tsys7_cpu_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys7_cpu_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys7 node power"
|
|
unique_id: pfv_tsys7_node_power
|
|
device_class: power
|
|
unit_of_measurement: "W"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys7_node_power_raw') %}
|
|
{{ v | float | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys9 CPU temperature"
|
|
unique_id: pfv_tsys9_cpu_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys9_cpu_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV jetson temperature"
|
|
unique_id: pfv_jetson_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_jetson_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV svrpi temperature"
|
|
unique_id: pfv_svrpi_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_svrpi_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV subopi3 temperature"
|
|
unique_id: pfv_subopi3_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_subopi3_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV subopi-dev-3 temperature"
|
|
unique_id: pfv_subopi_dev_3_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_subopi_dev_3_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV subopi-dev-4 temperature"
|
|
unique_id: pfv_subopi_dev_4_temperature
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_subopi_dev_4_temperature_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys6 DRAC ambient"
|
|
unique_id: pfv_tsys6_drac_ambient
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys6_drac_ambient_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys7 DRAC inlet"
|
|
unique_id: pfv_tsys7_drac_inlet
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys7_drac_inlet_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys7 DRAC exhaust"
|
|
unique_id: pfv_tsys7_drac_exhaust
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys7_drac_exhaust_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys7 DRAC CPU1"
|
|
unique_id: pfv_tsys7_drac_cpu1
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys7_drac_cpu1_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV tsys7 DRAC CPU2"
|
|
unique_id: pfv_tsys7_drac_cpu2
|
|
device_class: temperature
|
|
unit_of_measurement: "°F"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_tsys7_drac_cpu2_raw') %}
|
|
{{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}
|
|
- name: "PFV garage PDU output current"
|
|
unique_id: pfv_garage_pdu_amps
|
|
device_class: current
|
|
unit_of_measurement: "A"
|
|
state: >-
|
|
{% set v = states('sensor.pfv_garage_pdu_amps_raw') %}
|
|
{{ v | float | round(1) if is_number(v) else none }}
|
|
- name: "PFV garage PDU power"
|
|
unique_id: pfv_garage_pdu_watts
|
|
device_class: power
|
|
unit_of_measurement: "W"
|
|
state: >-
|
|
{% set a = states('sensor.pfv_garage_pdu_output_current') | float(-1) %}
|
|
{{ (a * 120) | round(0) if a >= 0 }}
|