diff --git a/pve-mod-gui-temp.sh b/pve-mod-gui-temp.sh index 735d35c..7dc4f99 100644 --- a/pve-mod-gui-temp.sh +++ b/pve-mod-gui-temp.sh @@ -157,6 +157,16 @@ function configure { warn "The CPU configuration is not complete. Temperatures will not be available." fi + # Look for fan speeds + msg "\nDetecting support for Fan speeds..." + if (echo "$sensorOutput" | grep -q "fan[0-9]*_input" ); then + msg "Fan speeds detected:\n$(echo "$sensorOutput" | grep -o 'fan[0-9]*_input[^"]*')" + enableFanSpeed=true + else + warn "No Fan speeds found." + enableFanSpeed=false + fi + echo # add a new line } @@ -353,7 +363,58 @@ function install_mod { }, }" "$pvemanagerlibjs" fi - + + if [ $enableFanSpeed = true ]; then + # Add fan speeds display + sed -i "/^Ext.define('PVE.node.StatusView',/ { + :a; + /items:/!{N;ba;} + :b; + /'thermal.*},/!{N;bb;} + a\ + \\ + { + xtype: 'box', + colspan: 2, + html: gettext('Fan Speed(s)'), + }, + { + itemId: 'thermalFan', + colspan: 2, + printBar: false, + title: gettext(' '), + iconCls: 'fa fa-fw fa-solid fa-fan', + textField: 'thermalstate', + renderer: function(value){ + const objValue = JSON.parse(value); + + let speeds = []; + + // Loop through the parent keys + Object.keys(objValue).forEach(parentKey => { + const parentObj = objValue[parentKey]; + + // Filter and sort fan keys for each parent object + const fanKeys = Object.keys(parentObj).filter(item => /^fan[0-9]+$/.test(item)).sort(); + + fanKeys.forEach((fanKey) => { + try { + const fanSpeed = parentObj[fanKey][`${fanKey}_input`]; + const fanNumber = fanKey.replace('fan', ''); // Extract fan number from the key + if (fanSpeed !== undefined) { + speeds.push(`Fan ${fanNumber}: ${fanSpeed} RPM`); + } + } catch(e) { + console.error(`Error retrieving fan speed for ${fanKey} in ${parentKey}:`, e); // Debug: Log specific error + } + }); + }); + + return '