diff --git a/das_fanctl.sh b/das_fanctl.sh new file mode 100755 index 0000000..5c1182d --- /dev/null +++ b/das_fanctl.sh @@ -0,0 +1,17 @@ +#/bin/bash + +#Zeb H. +#Dell MD1200 Fan Silencing Script. + +#set TTY Flags +stty -F /dev/ttyS1 38400 raw -echoe -echok -echoctl -echoke + +#Run 12 times, sleeping 5 seconds in between (total runtime: 1 min) + +for i in $(seq 1 12) +do + + #Change the value vv here to set fan percentage + echo -e -n '_shutup 15\r' > /dev/ttyS1 + sleep 5 +done diff --git a/fan_control.sh b/fan_control.sh new file mode 100755 index 0000000..b906b02 --- /dev/null +++ b/fan_control.sh @@ -0,0 +1,90 @@ +#!/bin/bash +# +# 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 + +