Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions pve-mod-gui-sensors.settings
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Action when lm_sensors not installed
# y - install required packages
# n - skip installation
CONFIG_INSTALL_LM_SENSORS=""

# CPU temperature(s)
# c - show temperatures for every cores
# a - show average temperature per CPU
CONFIG_CPU_TEMP_MODE=""

# Fan speed(s)
# y - show active and inactive fans
# n - show only active fans
CONFIG_FAN_ZERO_SPEED_DISPLAY=""

# Temperature unit
# c - Celsius
# f - Fahrenheit
CONFIG_TEMP_UNIT=""

# UPS information
# y - show UPS information
# n - ignore UPS information
CONFIG_UPS_SHOW_INFO=""

# UPS connection, e.g.: upsname[@hostname[:port]]
CONFIG_UPS_CONNECTION=""

# System information
# n - ignore system information
# 1 - show system information
# 2 - show motherboard information
CONFIG_SYSINFO_DISPLAY_MODE=""
100 changes: 76 additions & 24 deletions pve-mod-gui-sensors.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ JSON_EXPORT_FILENAME="sensorsdata.json"
PVE_MANAGER_LIB_JS_FILE="/usr/share/pve-manager/js/pvemanagerlib.js"
NODES_PM_FILE="/usr/share/perl5/PVE/API2/Nodes.pm"

UNATTENDED_MODE=false

#region message tools
# Section header (bold)
function msgb() {
Expand Down Expand Up @@ -69,8 +71,13 @@ function err() {
# Prompts (cyan or bold)
function ask() {
local prompt="$1"
local configVarName="$2"
local response
read -p $'\n\e[1;36m'"${prompt}:"$'\e[0m ' response
if [[ -n configVarName && -n "${!configVarName}" ]]; then
response="${!configVarName}"
else
read -p $'\n\e[1;36m'"${prompt}:"$'\e[0m ' response
fi
echo "$response"
}
#endregion message tools
Expand All @@ -81,19 +88,40 @@ function usage {
exit 1
}

function show_clear_browser_cache_msg() {
local clearCacheMsg="Clear the browser cache to ensure that all changes are visible."
if [[ $UNATTENDED_MODE == true ]]; then
echo -e "\n\e[1;42;97m${clearCacheMsg}\e[0m\n"
else
ask "$clearCacheMsg (press any key to continue)"
fi
}

# System checks
function check_root_privileges() {
function check_root_privileges {
[[ $EUID -eq 0 ]] || err "This script must be run as root. Please run it with 'sudo $0'."
info "Root privileges verified."
}

function load_settings {
if [ -r "$SCRIPT_CWD/pve-mod-gui-sensors.settings" ]; then
msgb "\n=== Configuration file detected ==="
. "$SCRIPT_CWD/pve-mod-gui-sensors.settings"
if [ $? -eq 0 ]; then
info "Settings for unattended installation loaded."
UNATTENDED_MODE=true
fi
fi
}

# Define a function to install packages
function install_packages {
# Check if the 'sensors' command is available on the system
if (! command -v sensors &>/dev/null); then

# If the 'sensors' command is not available, prompt the user to install lm-sensors
local choiceInstallLmSensors=$(ask "lm-sensors is not installed. Would you like to install it? (y/n)")
case "$choiceInstallLmSensors" in
local choice=$(ask "lm-sensors is not installed. Would you like to install it? (y/n)" CONFIG_INSTALL_LM_SENSORS)
case "$choice" in
[yY])
# If the user chooses to install lm-sensors, update the package list and install the package
apt-get update
Expand Down Expand Up @@ -172,8 +200,9 @@ function configure {
if [ "$ENABLE_CPU" = true ]; then
info "Detected CPU sensors ($cpuCount): $cpuList"
SENSORS_DETECTED=true

while true; do
local choice=$(ask "Display temperatures for all cores [C] or average per CPU [a] (some newer AMD variants support per die)? (C/a)")
local choice=$(ask "Display temperatures for all cores [C] or average per CPU [a] (some newer AMD variants support per die)? (C/a)" CONFIG_CPU_TEMP_MODE)
case "$choice" in
[cC]|"")
CPU_TEMP_TARGET="Core"
Expand All @@ -186,7 +215,11 @@ function configure {
break
;;
*)
warn "Invalid input, please choose C or a."
if [[ $UNATTENDED_MODE == true ]]; then
err "Invalid configuration value. Exiting."
else
warn "Invalid input, please choose C or a."
fi
;;
esac
done
Expand Down Expand Up @@ -255,8 +288,7 @@ function configure {
ENABLE_FAN_SPEED=true
SENSORS_DETECTED=true

local choice
choice=$(ask "Display fans reporting zero speed? (Y/n)")
local choice=$(ask "Display fans reporting zero speed? (Y/n)" CONFIG_FAN_ZERO_SPEED_DISPLAY)
case "$choice" in
[yY]|"")
DISPLAY_ZERO_SPEED_FANS=true
Expand All @@ -267,8 +299,12 @@ function configure {
info "Only active fans will be displayed."
;;
*)
warn "Invalid input. Defaulting to show zero-speed fans."
DISPLAY_ZERO_SPEED_FANS=true
if [[ $UNATTENDED_MODE == true ]]; then
err "Invalid configuration value. Exiting."
else
warn "Invalid input. Defaulting to show zero-speed fans."
DISPLAY_ZERO_SPEED_FANS=true
fi
;;
esac
else
Expand All @@ -281,7 +317,7 @@ function configure {
#region temp unit setup
msgb "\n=== Display temperature ==="
if [ "$SENSORS_DETECTED" = true ]; then
local unit=$(ask "Display temperatures in Celsius [C] or Fahrenheit [f]? (C/f)")
local unit=$(ask "Display temperatures in Celsius [C] or Fahrenheit [f]? (C/f)" CONFIG_TEMP_UNIT)
case "$unit" in
[cC]|"")
TEMP_UNIT="C"
Expand All @@ -292,24 +328,30 @@ function configure {
info "Using Fahrenheit."
;;
*)
warn "Invalid selection. Defaulting to Celsius."
TEMP_UNIT="C"
if [[ $UNATTENDED_MODE == true ]]; then
err "Invalid configuration value. Exiting."
else
warn "Invalid selection. Defaulting to Celsius."
TEMP_UNIT="C"
fi
;;
esac
fi
#endregion temp unit setup

#### UPS ####
#region ups setup
local choiceUPS=$(ask "Enable UPS information? (y/N)")
case "$choiceUPS" in
msgb "\n=== UPS setup ==="
local choice=$(ask "Enable UPS information? (y/N)" CONFIG_UPS_SHOW_INFO)
case "$choice" in
[yY])
local upsConnection=
if [ "$DEBUG_REMOTE" = true ]; then
upsOutput=$(cat "$DEBUG_UPS_FILE")
info "Remote debugging: UPS readings from $DEBUG_UPS_FILE"
upsConnection="DEBUG_UPS"
else
upsConnection=$(ask "Enter UPS connection (e.g., upsname[@hostname[:port]])")
upsConnection=$(ask "Enter UPS connection (e.g., upsname[@hostname[:port]])" CONFIG_UPS_CONNECTION)
if ! command -v upsc &>/dev/null; then
err "The 'upsc' command is not available. Install 'nut-client'."
fi
Expand All @@ -330,8 +372,12 @@ function configure {
info "UPS information will not be displayed."
;;
*)
warn "Invalid selection. UPS info will not be displayed."
ENABLE_UPS=false
if [[ $UNATTENDED_MODE == true ]]; then
err "Invalid configuration value. Exiting."
else
warn "Invalid selection. UPS info will not be displayed."
ENABLE_UPS=false
fi
;;
esac
#endregion ups setup
Expand All @@ -343,7 +389,7 @@ function configure {
echo "type ${i})"
dmidecode -t "$i" | awk -F': ' '/Manufacturer|Product Name|Serial Number/ {print $1": "$2}'
done
local choiceSysInfo=$(ask "Enable system information? (1/2/n)")
local choiceSysInfo=$(ask "Enable system information? (1/2/n)" CONFIG_SYSINFO_DISPLAY_MODE)
case "$choiceSysInfo" in
[1]|"")
ENABLE_SYSTEM_INFO=true
Expand All @@ -360,9 +406,13 @@ function configure {
info "System information will NOT be displayed."
;;
*)
warn "Invalid selection. Defaulting to system information."
ENABLE_SYSTEM_INFO=true
SYSTEM_INFO_TYPE=1
if [[ $UNATTENDED_MODE == true ]]; then
err "Invalid configuration value. Exiting."
else
warn "Invalid selection. Defaulting to system information."
ENABLE_SYSTEM_INFO=true
SYSTEM_INFO_TYPE=1
fi
;;
esac
#endregion system info setup
Expand Down Expand Up @@ -431,7 +481,7 @@ function install_mod {

restart_proxy
info "Installation completed."
ask "Clear the browser cache to ensure all changes are visualized. (any key to continue)"
show_clear_browser_cache_msg
}

# Sanitize sensors output to handle common lm-sensors parsing issues
Expand Down Expand Up @@ -1601,7 +1651,7 @@ function uninstall_mod {
restart_proxy
fi

ask "Clear the browser cache to ensure all changes are visualized. (any key to continue)"
show_clear_browser_cache_msg
}

# Function to check if the modification is installed
Expand Down Expand Up @@ -1727,12 +1777,14 @@ while [[ $# -gt 0 ]]; do
install)
executed=$(($executed + 1))
msgb "\nInstalling the Proxmox VE sensors display mod..."
load_settings
install_packages
install_mod
;;
uninstall)
executed=$(($executed + 1))
msgb "\nUninstalling the Proxmox VE sensors display mod..."
load_settings
uninstall_mod
;;
save-sensors-data)
Expand Down