dell_r720_ipmi_fanspeed_ctrl

r720_fanspeed_ctrl.sh
#!/bin/bash

now="0x08"

setFanSpeed(){
  if [ "$1"x != "$now"x ]
  then
    now=$1
    #echo $now
    ipmitool raw 0x30 0x30 0x02 0xff $now;
  fi
}

getCpuTemp(){
  vals=`sensors| grep Package|awk '{print $4}'| awk '{print gensub("°C","","g",$0)}'| awk '{print gensub("+","","g",$0)}'`;
  tmp="0"
  count=0
  for val in $vals; do
    tmp="${tmp}+(${val})"
    count=`echo "${count}+1"|bc`
  done
  result=`echo "($tmp)/${count}" | bc`
  echo $result
}


ipmitool raw 0x30 0x30 0x01 0x00;
ipmitool raw 0x30 0x30 0x02 0xff $now;


while true;
  do
  #temp_val=`ipmitool sensor reading "Temp" | cut -d "|" -f 2 | cut -d " " -f 2`;
  temp_val=`getCpuTemp`
  if [[ $temp_val < 40 ]]
  then
    setFanSpeed "0x08";
  else
    if [[ $temp_val > 65 ]]
    then
    setFanSpeed "0x64";
    else
      case $temp_val in
        40)
          setFanSpeed "0x09";
          ;;
        41)
          setFanSpeed "0x0a";
          ;;
        42)
          setFanSpeed "0x0d";
          ;;
        43)
          setFanSpeed "0x0e";
          ;;
        44)
          setFanSpeed "0x0f";
          ;;
        45)
          setFanSpeed "0x10";
          ;;
        46)
          setFanSpeed "0x11";
          ;;
        47)
          setFanSpeed "0x12";
          ;;
        48)
          setFanSpeed "0x13";
          ;;
        49)
          setFanSpeed "0x14";
          ;;
        50)
          setFanSpeed "0x15";
          ;;
        51)
          setFanSpeed "0x16";
          ;;
        52)
          setFanSpeed "0x17";
          ;;
        53)
          setFanSpeed "0x18";
          ;;
        54)
          setFanSpeed "0x19";
          ;;
        55)
          setFanSpeed "0x1a";
          ;;
        56)
          setFanSpeed "0x1b";
          ;;
        57)
          setFanSpeed "0x1c";
          ;;
        58)
          setFanSpeed "0x1d";
          ;;
        59)
          setFanSpeed "0x1e";
          ;;
        60)
          setFanSpeed "0x1f";
          ;;
        61)
          setFanSpeed "0x20";
          ;;
        62)
          setFanSpeed "0x21";
          ;;
        63)
          setFanSpeed "0x22";
          ;;
        64)
          setFanSpeed "0x23";
          ;;
        65)
          setFanSpeed "0x24";
          ;;
        *)
          setFanSpeed "0x30";
      esac
    fi
  fi
  #echo $temp_val $now;
  sleep 1;
done

Last updated

Was this helpful?