#!/bin/bash # # A fork of brezlord's fan control script. https://github.com/brezlord/iDRAC7_fan_control # A simple script to control fan speeds on Dell generation 12 PowerEdge servers. # If the inlet temperature is above $TEMP_THRESHOLD C enable iDRAC dynamic control and exit program. # If inlet temp is below $TEMP_THRESHOLD C set fan control to manual and set fan speed to predetermined value. # The tower servers T320, T420 & T620 inlet temperature sensor is after the HDDs so temperature will # be higher than the ambient temperature. # Variables IDRAC_IP="" IDRAC_USER="" IDRAC_PASSWORD="" # Fan speed in % SPEED0="0x00" SPEED5="0x05" SPEED10="0x0a" SPEED15="0x0f" SPEED20="0x14" SPEED25="0x19" SPEED30="0x1e" SPEED35="0x23" TEMP_THRESHOLD="45" # iDRAC dynamic control enable thershold #TEMP_SENSOR="04h" # Inlet Temp TEMP_SENSOR="01h" # Exhaust Temp #TEMP_SENSOR="0Eh" # CPU 1 Temp #TEMP_SENSOR="0Fh" # CPU 2 Temp SENSOR_NAME="Sensor" if [ "$TEMP_SENSOR" == "04h" ] then SENSOR_NAME="Inlet" elif [ "$TEMP_SENSOR" == "01h" ] then SENSOR_NAME="Exhaust" elif [ "$TEMP_SENSOR" == "0Eh" ] then SENSOR_NAME="CPU1" elif [ "$TEMP_SENSOR" == "0Fh" ] then SENSOR_NAME="CPU2" fi # Get system date & time. DATE=$(date +%d-%m-%Y\ %H:%M:%S) echo "Date $DATE" # Get temperature from iDARC. T=$(ipmitool -I lanplus -H $IDRAC_IP -U $IDRAC_USER -P $IDRAC_PASSWORD sdr type temperature | grep $TEMP_SENSOR | cut -d"|" -f5 | cut -d" " -f2) echo "--> iDRAC IP Address: $IDRAC_IP" echo "--> Current $SENSOR_NAME Temp: $T" # If ambient temperature is above $TEMP_THRESHOLD C enable dynamic control and exit, if below set manual control. if [[ $T > $TEMP_THRESHOLD ]] then echo "--> Temperature is above $TEMP_THRESHOLD C" echo "--> Enabled dynamic fan control" ipmitool -I lanplus -H $IDRAC_IP -U $IDRAC_USER -P $IDRAC_PASSWORD raw 0x30 0x30 0x01 0x01 exit 1 else echo "--> Temperature is below $TEMP_THRESHOLD C" echo "--> Disabled dynamic fan control" ipmitool -I lanplus -H $IDRAC_IP -U $IDRAC_USER -P $IDRAC_PASSWORD raw 0x30 0x30 0x01 0x00 fi # Set fan speed dependant on ambient temperature if inlet temperaturte is below $TEMP_THRESHOLD C. # If inlet temperature between 0 and 19deg C then set fans to 15%. if [ "$T" -ge 0 ] && [ "$T" -le 19 ] then echo "--> Setting fan speed to 15%" ipmitool -I lanplus -H $IDRAC_IP -U $IDRAC_USER -P $IDRAC_PASSWORD raw 0x30 0x30 0x02 0xff $SPEED15 # If inlet temperature between 20 and 24deg C then set fans to 20% elif [ "$T" -ge 20 ] && [ "$T" -le 24 ] then echo "--> Setting fan speed to 20%" ipmitool -I lanplus -H $IDRAC_IP -U $IDRAC_USER -P $IDRAC_PASSWORD raw 0x30 0x30 0x02 0xff $SPEED20 # If inlet temperature between 25 and 29deg C then set fans to 25% elif [ "$T" -ge 25 ] && [ "$T" -le 29 ] then echo "--> Setting fan speed to 25%" ipmitool -I lanplus -H $IDRAC_IP -U $IDRAC_USER -P $IDRAC_PASSWORD raw 0x30 0x30 0x02 0xff $SPEED25 # If inlet temperature between 30 and $TEMP_THRESHOLD C then set fans to 30% elif [ "$T" -ge 30 ] && [ "$T" -le $TEMP_THRESHOLD ] then echo "--> Setting fan speed to 25%" ipmitool -I lanplus -H $IDRAC_IP -U $IDRAC_USER -P $IDRAC_PASSWORD raw 0x30 0x30 0x02 0xff $SPEED25 fi