From f3785c13bc836d6d498951860423fb96941bb96e Mon Sep 17 00:00:00 2001 From: Jared Vititoe Date: Thu, 5 Feb 2026 20:14:23 -0500 Subject: [PATCH] Fix temperature parsing for SAS drives Added support for SAS drive temperature format "Current Drive Temperature:" and made temperature extraction more robust by: - Removing ^ anchor that was preventing matches with leading whitespace - Using awk to find the first numeric value in the line - Adding explicit SAS drive temperature format handling Fixes: https://code.lotusguild.org/LotusGuild/driveAtlas/issues/11 Co-Authored-By: Claude Opus 4.5 --- driveAtlas.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/driveAtlas.sh b/driveAtlas.sh index a1855f2..f80baa6 100644 --- a/driveAtlas.sh +++ b/driveAtlas.sh @@ -749,11 +749,16 @@ parse_smart_data() { # - SATA: "194 Temperature_Celsius ... 35" (value at end of line) # - SATA: "Temperature: 42 Celsius" # - SATA: "Current Temperature: 35 Celsius" + # - SAS: "Current Drive Temperature: 35 C" # - NVMe: "Temperature: 42 Celsius" if echo "$smart_info" | grep -q "Temperature_Celsius"; then temp="$(echo "$smart_info" | grep "Temperature_Celsius" | head -1 | awk '{for(i=NF;i>0;i--) if($i ~ /^[0-9]+$/) {print $i; exit}}')" - elif echo "$smart_info" | grep -qE "^(Current )?Temperature:"; then - temp="$(echo "$smart_info" | grep -E "^(Current )?Temperature:" | head -1 | awk '{print $2}')" + elif echo "$smart_info" | grep -qE "Current Drive Temperature:"; then + # SAS drives: "Current Drive Temperature: 35 C" + temp="$(echo "$smart_info" | grep -E "Current Drive Temperature:" | head -1 | awk '{for(i=1;i<=NF;i++) if($i ~ /^[0-9]+$/) {print $i; exit}}')" + elif echo "$smart_info" | grep -qE "(Current )?Temperature:"; then + # SATA/NVMe: "Temperature: 42 Celsius" (may have leading whitespace) + temp="$(echo "$smart_info" | grep -E "(Current )?Temperature:" | head -1 | awk '{for(i=1;i<=NF;i++) if($i ~ /^[0-9]+$/) {print $i; exit}}')" fi # Device type detection - handles SSD, HDD, and NVMe