diff --git a/automations.yaml b/automations.yaml index 16691b4..84dabfd 100644 --- a/automations.yaml +++ b/automations.yaml @@ -119,6 +119,24 @@ - sensor.pfv_tsys4_dimm_1a_temperature - sensor.pfv_tsys4_dimm_1b_temperature above: 140 + - trigger: numeric_state + entity_id: + - sensor.pfv_tsys1_drive_temperature + - sensor.pfv_tsys4_drive_0_0_temperature + - sensor.pfv_tsys4_drive_0_10_temperature + - sensor.pfv_tsys4_drive_1_0_temperature + - sensor.pfv_tsys4_drive_1_10_temperature + - sensor.pfv_tsys5_drive_1_0_temperature + - sensor.pfv_tsys5_drive_4_10_temperature + - sensor.pfv_tsys5_drive_4_20_temperature + - sensor.pfv_tsys5_drive_4_30_temperature + - sensor.pfv_tsys9_drive_temperature + above: 140 + - trigger: numeric_state + entity_id: + - sensor.pfv_tsys3_gpu_temperature + - sensor.pfv_jetson_gpu_temperature + above: 185 - trigger: numeric_state entity_id: - sensor.pfv_tsys3_pch_temperature diff --git a/dashboards/server-room.yaml b/dashboards/server-room.yaml index 5e24290..fe11cac 100644 --- a/dashboards/server-room.yaml +++ b/dashboards/server-room.yaml @@ -172,12 +172,14 @@ views: - sensor.pfv_subopi_dev_3_temperature - sensor.pfv_subopi_dev_4_temperature - sensor.pfv_jetson_temperature + - sensor.pfv_jetson_gpu_temperature - type: grid cards: - type: entities title: R5 · Laptops entities: - sensor.pfv_tsys3_cpu_temperature + - sensor.pfv_tsys3_gpu_temperature - type: grid cards: - type: entities @@ -192,7 +194,7 @@ views: - type: grid cards: - type: entities - title: Storage · Memory · Chipset + title: Storage · Memory · Chipset · GPU entities: - sensor.pfv_tsys3_nvme_temperature - sensor.pfv_tsys5_nvme_temperature @@ -202,6 +204,16 @@ views: - sensor.pfv_tsys4_dimm_1b_temperature - sensor.pfv_tsys3_pch_temperature - sensor.pfv_tsys9_pch_temperature + - sensor.pfv_tsys1_drive_temperature + - sensor.pfv_tsys4_drive_0_0_temperature + - sensor.pfv_tsys4_drive_0_10_temperature + - sensor.pfv_tsys4_drive_1_0_temperature + - sensor.pfv_tsys4_drive_1_10_temperature + - sensor.pfv_tsys5_drive_1_0_temperature + - sensor.pfv_tsys5_drive_4_10_temperature + - sensor.pfv_tsys5_drive_4_20_temperature + - sensor.pfv_tsys5_drive_4_30_temperature + - sensor.pfv_tsys9_drive_temperature - type: grid cards: - type: history-graph diff --git a/packages/plant_snmp.yaml b/packages/plant_snmp.yaml index c079c97..5f73974 100644 --- a/packages/plant_snmp.yaml +++ b/packages/plant_snmp.yaml @@ -380,6 +380,154 @@ sensor: {% set m = value | regex_findall('(?s)pch_cometlake.*?temp1:\s*\+?(-?\d+\.?\d*)') %} {{ m | first | float if m }} + # --- Drive temps (drivetemp) + GPU temps [#736] --- + # Drive chips are drivetemp-scsi--; the trailing \n anchor keeps + # scsi-1-0 from matching scsi-1-10. Server disks behind PERC are NOT + # OS-visible (storcli gap, documented in #736). + - platform: snmp + name: "PFV tsys1 drive 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_drive_temperature_raw + value_template: >- + {% set m = value | regex_findall('(?s)drivetemp-scsi-1-0\n.*?temp1:\s*\+?(-?\d+\.?\d*)') %} + {{ m | first | float if m }} + + - platform: snmp + name: "PFV tsys4 drive 0-0 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_drive_0_0_temperature_raw + value_template: >- + {% set m = value | regex_findall('(?s)drivetemp-scsi-0-0\n.*?temp1:\s*\+?(-?\d+\.?\d*)') %} + {{ m | first | float if m }} + + - platform: snmp + name: "PFV tsys4 drive 0-10 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_drive_0_10_temperature_raw + value_template: >- + {% set m = value | regex_findall('(?s)drivetemp-scsi-0-10\n.*?temp1:\s*\+?(-?\d+\.?\d*)') %} + {{ m | first | float if m }} + + - platform: snmp + name: "PFV tsys4 drive 1-0 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_drive_1_0_temperature_raw + value_template: >- + {% set m = value | regex_findall('(?s)drivetemp-scsi-1-0\n.*?temp1:\s*\+?(-?\d+\.?\d*)') %} + {{ m | first | float if m }} + + - platform: snmp + name: "PFV tsys4 drive 1-10 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_drive_1_10_temperature_raw + value_template: >- + {% set m = value | regex_findall('(?s)drivetemp-scsi-1-10\n.*?temp1:\s*\+?(-?\d+\.?\d*)') %} + {{ m | first | float if m }} + + - platform: snmp + name: "PFV tsys5 drive 1-0 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_drive_1_0_temperature_raw + value_template: >- + {% set m = value | regex_findall('(?s)drivetemp-scsi-1-0\n.*?temp1:\s*\+?(-?\d+\.?\d*)') %} + {{ m | first | float if m }} + + - platform: snmp + name: "PFV tsys5 drive 4-10 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_drive_4_10_temperature_raw + value_template: >- + {% set m = value | regex_findall('(?s)drivetemp-scsi-4-10\n.*?temp1:\s*\+?(-?\d+\.?\d*)') %} + {{ m | first | float if m }} + + - platform: snmp + name: "PFV tsys5 drive 4-20 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_drive_4_20_temperature_raw + value_template: >- + {% set m = value | regex_findall('(?s)drivetemp-scsi-4-20\n.*?temp1:\s*\+?(-?\d+\.?\d*)') %} + {{ m | first | float if m }} + + - platform: snmp + name: "PFV tsys5 drive 4-30 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_drive_4_30_temperature_raw + value_template: >- + {% set m = value | regex_findall('(?s)drivetemp-scsi-4-30\n.*?temp1:\s*\+?(-?\d+\.?\d*)') %} + {{ m | first | float if m }} + + - platform: snmp + name: "PFV tsys9 drive 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_drive_temperature_raw + value_template: >- + {% set m = value | regex_findall('(?s)drivetemp-scsi-0-0\n.*?temp1:\s*\+?(-?\d+\.?\d*)') %} + {{ m | first | float if m }} + + - platform: snmp + name: "PFV tsys3 GPU 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_gpu_temperature_raw + value_template: >- + {% set m = value | regex_findall('(?s)nouveau.*?temp1:\s*\+?(-?\d+\.?\d*)') %} + {{ m | first | float if m }} + + - platform: snmp + name: "PFV jetson GPU 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_gpu_temperature_raw + value_template: >- + {% set m = value | regex_findall('(?s)zone-GPU-therm-virtual-0\n.*?temp1:\s*\+?(-?\d+\.?\d*)') %} + {{ m | first | float if m }} + # --- Garage PDU energy (kWh) integrated from watts [#344] --- - platform: integration source: sensor.pfv_garage_pdu_power @@ -648,3 +796,87 @@ template: state: >- {% set v = states('sensor.tsys1_ups_battery_runtime') %} {{ (v | float / 60) | round(0) if is_number(v) else none }} + - name: "PFV tsys1 drive temperature" + unique_id: pfv_tsys1_drive_temperature + device_class: temperature + unit_of_measurement: "°F" + state: >- + {% set v = states('sensor.pfv_tsys1_drive_temperature_raw') %} + {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }} + - name: "PFV tsys4 drive 0-0 temperature" + unique_id: pfv_tsys4_drive_0_0_temperature + device_class: temperature + unit_of_measurement: "°F" + state: >- + {% set v = states('sensor.pfv_tsys4_drive_0_0_temperature_raw') %} + {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }} + - name: "PFV tsys4 drive 0-10 temperature" + unique_id: pfv_tsys4_drive_0_10_temperature + device_class: temperature + unit_of_measurement: "°F" + state: >- + {% set v = states('sensor.pfv_tsys4_drive_0_10_temperature_raw') %} + {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }} + - name: "PFV tsys4 drive 1-0 temperature" + unique_id: pfv_tsys4_drive_1_0_temperature + device_class: temperature + unit_of_measurement: "°F" + state: >- + {% set v = states('sensor.pfv_tsys4_drive_1_0_temperature_raw') %} + {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }} + - name: "PFV tsys4 drive 1-10 temperature" + unique_id: pfv_tsys4_drive_1_10_temperature + device_class: temperature + unit_of_measurement: "°F" + state: >- + {% set v = states('sensor.pfv_tsys4_drive_1_10_temperature_raw') %} + {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }} + - name: "PFV tsys5 drive 1-0 temperature" + unique_id: pfv_tsys5_drive_1_0_temperature + device_class: temperature + unit_of_measurement: "°F" + state: >- + {% set v = states('sensor.pfv_tsys5_drive_1_0_temperature_raw') %} + {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }} + - name: "PFV tsys5 drive 4-10 temperature" + unique_id: pfv_tsys5_drive_4_10_temperature + device_class: temperature + unit_of_measurement: "°F" + state: >- + {% set v = states('sensor.pfv_tsys5_drive_4_10_temperature_raw') %} + {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }} + - name: "PFV tsys5 drive 4-20 temperature" + unique_id: pfv_tsys5_drive_4_20_temperature + device_class: temperature + unit_of_measurement: "°F" + state: >- + {% set v = states('sensor.pfv_tsys5_drive_4_20_temperature_raw') %} + {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }} + - name: "PFV tsys5 drive 4-30 temperature" + unique_id: pfv_tsys5_drive_4_30_temperature + device_class: temperature + unit_of_measurement: "°F" + state: >- + {% set v = states('sensor.pfv_tsys5_drive_4_30_temperature_raw') %} + {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }} + - name: "PFV tsys9 drive temperature" + unique_id: pfv_tsys9_drive_temperature + device_class: temperature + unit_of_measurement: "°F" + state: >- + {% set v = states('sensor.pfv_tsys9_drive_temperature_raw') %} + {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }} + - name: "PFV tsys3 GPU temperature" + unique_id: pfv_tsys3_gpu_temperature + device_class: temperature + unit_of_measurement: "°F" + state: >- + {% set v = states('sensor.pfv_tsys3_gpu_temperature_raw') %} + {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }} + - name: "PFV jetson GPU temperature" + unique_id: pfv_jetson_gpu_temperature + device_class: temperature + unit_of_measurement: "°F" + state: >- + {% set v = states('sensor.pfv_jetson_gpu_temperature_raw') %} + {{ ((v | float * 9 / 5) + 32) | round(1) if is_number(v) else none }}