March 10, 20242 yr In the terminal, enter the following command to navigate to the Docker templates directory: cd /boot/config/plugins/dockerMan/templates-user Use the nano text editor to create a new XML file for the Docker container configuration: nano my-Dell-iDRAC-Fan-Controller.xml Now, copy and paste the XML configuration Paste this into the nano editor. To paste in the terminal, you can usually right-click and select "Paste" or use Ctrl + Shift + V. <?xml version="1.0"?> <Container version="2"> <Name>Dell-iDRAC-Fan-Controller</Name> <Repository>tigerblue77/dell_idrac_fan_controller</Repository> <Registry>https://hub.docker.com/r/tigerblue77/dell_idrac_fan_controller/</Registry> <Network>bridge</Network> <MyIP/> <Shell>sh</Shell> <Privileged>false</Privileged> <Support/> <Project/> <Overview>https://github.com/tigerblue77/Dell_iDRAC_fan_controller_Docker
 
 https://hub.docker.com/r/tigerblue77/dell_idrac_fan_controller/
 
 All parameters are optional as they have default values (including default iDRAC username and password).
 
 IDRAC_HOST parameter can be set to "local" or to your distant iDRAC's IP address. Default value is "local".
 IDRAC_USERNAME parameter is only necessary if you're adressing a distant iDRAC. Default value is "root".
 IDRAC_PASSWORD parameter is only necessary if you're adressing a distant iDRAC. Default value is "calvin".
 FAN_SPEED parameter can be set as a decimal (from 0 to 100%) or hexadecimal value (from 0x00 to 0x64) you want to set the fans to. Default value is 5(%).
 CPU_TEMPERATURE_THRESHOLD parameter is the T°junction (junction temperature) threshold beyond which the Dell fan profile defined in your BIOS will become active again (to protect the server hardware against overheat). Default value is 50(°C).
 CHECK_INTERVAL parameter is the time (in seconds) between each temperature check and potential profile change. Default value is 60(s).
 DISABLE_THIRD_PARTY_PCIE_CARD_DELL_DEFAULT_COOLING_RESPONSE parameter is a boolean that allows to disable third-party PCIe card Dell default cooling response. Default value is false.
 ipmi tool installation help: https://forums.unraid.net/topic/129200-plug-in-nerdtools/ for installation and check this link for missing ipmi
 ipmi tool can't find /dev/ipmi0?: https://serverfault.com/questions/480371/ipmitool-cant-find-dev-ipmi0-or-dev-ipmidev-0</Overview> <Category>Other:</Category> <WebUI/> <TemplateURL>https://raw.githubusercontent.com/selfhosters/unRAID-CA-templates/master/templates/idrac-fan-controller.xml</TemplateURL> <Icon>https://raw.githubusercontent.com/selfhosters/unRAID-CA-templates/master/templates/img/idrac6.png</Icon> <ExtraParams/> <PostArgs/> <CPUset/> <DateInstalled>1707442417</DateInstalled> <DonateText/> <DonateLink/> <Requires/> <Config Name="IDRAC_HOST" Target="IDRAC_HOST" Default="local" Mode="" Description="IDRAC_HOST parameter can be set to local or to your distant iDRAC's IP address. Default value is local" Type="Variable" Display="always" Required="false" Mask="false">IDRAC IPADDRESS</Config> <Config Name="FAN_SPEED" Target="FAN_SPEED" Default="5" Mode="" Description="FAN_SPEED parameter can be set as a decimal (from 0 to 100%) or hexadecimaladecimal value (from 0x00 to 0x64) you want to set the fans to. Default value is 5(%)." Type="Variable" Display="always" Required="false" Mask="false">30</Config> <Config Name="CPU_TEMPERATURE_THRESHOLD" Target="CPU_TEMPERATURE_THRESHOLD" Default="50" Mode="" Description="CPU_TEMPERATURE_THRESHOLD parameter is the T°junction (junction temperature) threshold beyond which the Dell fan profile defined in your BIOS will become active again (to protect the server hardware against overheat). Default value is 50(°C)." Type="Variable" Display="always" Required="false" Mask="false">50</Config> <Config Name="CHECK_INTERVAL" Target="CHECK_INTERVAL" Default="60" Mode="" Description="CHECK_INTERVAL parameter is the time (in seconds) between each temperature check and potential profile change. Default value is 60(s). " Type="Variable" Display="always" Required="false" Mask="false">60</Config> <Config Name="IDRAC_USERNAME" Target="IDRAC_USERNAME" Default="root" Mode="" Description="" Type="Variable" Display="always" Required="false" Mask="false">IDRAC USERNAME</Config> <Config Name="IDRAC_PASSWORD" Target="IDRAC_PASSWORD" Default="calvin" Mode="" Description="" Type="Variable" Display="always" Required="false" Mask="false">IDRAC PASSWORD</Config> <Config Name="DISABLE_THIRD_PARTY_PCIE_CARD_DELL_DEFAULT_COOLING_RESPONSE" Target="DISABLE_THIRD_PARTY_PCIE_CARD_DELL_DEFAULT_COOLING_RESPONSE" Default="false" Mode="" Description="parameter is a boolean that allows to disable third-party PCIe card Dell default cooling response. Default value is false." Type="Variable" Display="always" Required="false" Mask="false">false</Config> </Container> Once you've finished pasting the XML configuration into nano, save the changes by pressing Ctrl + O (to write out the changes), then press Enter (to confirm the file name), and finally, Ctrl + X to exit the editor. Go back to the Unraid web interface. Navigate to the Docker tab by selecting "Docker" from the top menu. Scroll down to the bottom of the page, and you'll see an "Add Container" button. Click it. In the "Template" dropdown menu, you should now see your newly created template 'Dell-iDRAC-Fan-Controller'. Select it. Review the settings and make any adjustments if needed. Click on "Apply" to create the Docker container. Edited March 10, 20242 yr by Tolete
April 23, 20251 yr is there a way to make the fan speed go up in increments of 10 until the cpu temp drops back down again? say cpu temp hits 50, it goes up to 30 from 20, it doesn't go back below 50 in that minute to it goes up another 10, it drops below 50 so it drops down 10, it stays below 50 for another minute so it drops down another 10?
October 15, 2025Oct 15 Author On 4/23/2025 at 6:48 AM, IllMethods said:is there a way to make the fan speed go up in increments of 10 until the cpu temp drops back down again?say cpu temp hits 50, it goes up to 30 from 20, it doesn't go back below 50 in that minute to it goes up another 10, it drops below 50 so it drops down 10, it stays below 50 for another minute so it drops down another 10?Short answer is no whith that image as-is.tigerblue77/dell_idrac_fan_controller accepts a single FAN_SPEED value and only flips back to the Dell/BIOS fan profile when the CPU passes CPU_TEMPERATURE_THRESHOLD. It doesn’t have a “ramp by +10%/-10% each interval” algorithm built in.you could test running a small script (container or host cron) that:-Reads temperature every CHECK_INTERVAL (e.g., 60s)-If temp ≥ threshold for the current interval, raise fan speed by +10 (capped)-If temp < threshold for N consecutive intervals (e.g., 2), lower by −10 (floored)-Uses ipmitool raw commands to keep iDRAC in manual and set duty cycleHere’s a drop-in bash script you can run in an Alpine container (or on the Unraid host) that steps fans up/down. It talks to iDRAC over LAN adjust as needed:#!/bin/sh set -eu # ---- CONFIG ---- IDRAC_HOST="${IDRAC_HOST:-192.0.2.10}" # or "local" IDRAC_USER="${IDRAC_USERNAME:-root}" IDRAC_PASS="${IDRAC_PASSWORD:-calvin}" THRESHOLD="${CPU_TEMPERATURE_THRESHOLD:-50}" # °C INTERVAL="${CHECK_INTERVAL:-60}" # seconds STEP="${STEP:-10}" # % per step MIN_SPEED="${MIN_SPEED:-20}" # % MAX_SPEED="${MAX_SPEED:-80}" # % START_SPEED="${START_SPEED:-20}" # % DOWN_STABLE_CYCLES="${DOWN_STABLE_CYCLES:-2}" # stay below threshold this many intervals before stepping down # ---- helpers ---- ipmi() { if [ "$IDRAC_HOST" = "local" ]; then ipmitool -I open "$@" else ipmitool -I lanplus -H "$IDRAC_HOST" -U "$IDRAC_USER" -P "$IDRAC_PASS" "$@" fi } set_manual() { ipmi raw 0x30 0x30 0x01 0x00 >/dev/null 2>&1 || true; } set_auto() { ipmi raw 0x30 0x30 0x01 0x01 >/dev/null 2>&1 || true; } pct_to_hex() { # 0-100 -> 0x00-0x64 v="$1"; [ "$v" -lt 0 ] && v=0; [ "$v" -gt 100 ] && v=100 printf "0x%02x" "$v" } set_speed_pct() { p="$1" hex=$(pct_to_hex "$p") ipmi raw 0x30 0x30 0x02 0xff "$hex" >/dev/null } read_temp() { # Try CPU core avg via 'sensors' (if container/host has it), # else fall back to iDRAC SDR (Inlet Temp). if command -v sensors >/dev/null 2>&1; then t=$(sensors 2>/dev/null | awk '/Core [0-9]+:|Tdie|Package id/ {gsub("[+°C]","",$3); sum+=$3; n++} END{if(n>0) printf "%.0f", sum/n}') [ -n "$t" ] && { echo "$t"; return; } fi ipmi sdr type Temperature | awk '/Inlet.*degrees/ {print int($10); found=1; exit} END{if(!found) print ""}' } # ---- main loop ---- current="$START_SPEED" stable_below=0 echo "Starting stepper: cur=${current}% threshold=${THRESHOLD}°C interval=${INTERVAL}s" set_manual set_speed_pct "$current" trap 'set_auto; echo "Exiting, returned to AUTO."' INT TERM while :; do t=$(read_temp || true) [ -z "$t" ] && { echo "WARN: could not read temp; keeping ${current}%"; sleep "$INTERVAL"; continue; } if [ "$t" -ge "$THRESHOLD" ]; then stable_below=0 next=$(( current + STEP )) [ "$next" -gt "$MAX_SPEED" ] && next="$MAX_SPEED" if [ "$next" -ne "$current" ]; then current="$next" set_manual; set_speed_pct "$current" echo "Temp ${t}°C ≥ ${THRESHOLD}°C -> step UP to ${current}%" else echo "Temp ${t}°C ≥ ${THRESHOLD}°C -> at MAX ${current}%" fi else stable_below=$(( stable_below + 1 )) if [ "$stable_below" -ge "$DOWN_STABLE_CYCLES" ]; then next=$(( current - STEP )) [ "$next" -lt "$MIN_SPEED" ] && next="$MIN_SPEED" if [ "$next" -ne "$current" ]; then current="$next" set_manual; set_speed_pct "$current" echo "Temp ${t}°C < ${THRESHOLD}°C for ${stable_below} cycles -> step DOWN to ${current}%" fi stable_below=0 else echo "Temp ${t}°C < ${THRESHOLD}°C (stability ${stable_below}/${DOWN_STABLE_CYCLES})" fi fi sleep "$INTERVAL" doneRun it on Unraid (LAN iDRAC example):docker run -d --name idrac-stepper --restart=unless-stopped \ -e IDRAC_HOST=40.40.10.3 \ -e IDRAC_USERNAME=root -e IDRAC_PASSWORD=calvin \ -e CPU_TEMPERATURE_THRESHOLD=50 \ -e CHECK_INTERVAL=60 \ -e START_SPEED=20 -e STEP=10 -e MIN_SPEED=20 -e MAX_SPEED=80 \ alpine:3.20 sh -c \ "apk add --no-cache ipmitool lm-sensors bash; \ wget -qO /usr/local/bin/stepper.sh https://pastebin.example/idrac-stepper.sh; \ chmod +x /usr/local/bin/stepper.sh; /usr/local/bin/stepper.sh"
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.