diff options
author | Tim 'timtim' Ellis <tim.ellis@foonas.org> | 2009-01-17 20:18:20 +0000 |
---|---|---|
committer | Tim 'timtim' Ellis <tim.ellis@foonas.org> | 2009-01-17 20:18:20 +0000 |
commit | cc4b074b50c7b1f223f4c30eed0eb899380bf3f4 (patch) | |
tree | cda9e1dedd824b6d1e00d1667c16a997f40fc3f8 /packages/temper/files | |
parent | a0cef440772af65ad03d3273d36afd49c81e481d (diff) |
temper: Add temper, a fan control script for the Thecus N1200 and N2100
Diffstat (limited to 'packages/temper/files')
-rwxr-xr-x | packages/temper/files/temper | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/packages/temper/files/temper b/packages/temper/files/temper new file mode 100755 index 0000000000..16d7d98bef --- /dev/null +++ b/packages/temper/files/temper @@ -0,0 +1,111 @@ +#!/bin/sh +# /usr/sbin/temper - Thecus F75375 fan control script +# +# v1: From community n2100 fan control script (who is the author?) +# v2: Moved to a separate n1200 version +# v3: Hacked to work on both n1200 and n2100 + +# Fan controller +F75375=`find /sys -name 0-002e | grep i2c-0` +PWM1=$F75375/pwm1 + +# Chip temperature values, maximum allowed temp. and temp. log threshold +CHIPS=$F75375/temp?_input +TC_CRIT=70 +TC_MAX=60 +TC_THRESH=55 + +# Disk devices and maximum allowed temp. and temp. log threshold +DISKS=/dev/sd? +TD_CRIT=70 +TD_MAX=60 +TD_THRESH=55 + +# Fan device, lowest PWM value and control range +FAN=$F75375/pwm1 +FAN_MIN=0 +FAN_RNG=140 + +# Minimum temp +TMP_MIN=32 + +# Logging interval, in minutes. Keep this above the hard disk spin +# down time this will only log when above log thresholds(s) +LOG=1 + +# Enable the fan +echo 1 > $F75375/pwm1_enable + +echo $$ > /var/run/temper.pid + +while true ; do +i=0 +while [ $i -lt $LOG ] ; do + i=$(($i+1)) + # read the disk temperatures every minute + TD=0 + for D in $DISKS ; do + t=$(hddtemp -q -n $D) + if [ $t -gt $TD ] ; then + TD=$t + fi + done + + j=0 + while [ $j -lt 6 ] ; do + j=$(($j+1)) + # read the chip temperatures every 10 seconds + TC=0 + for C in $CHIPS ; do + t=$(($(cat $C)/1000)) + if [ $t -gt $TC ] && [ $t -lt 255 ]; then + TC=$t + fi + done + + FC=$(((($TC-$TMP_MIN)*$FAN_RNG)/($TC_MAX-$TMP_MIN)+$FAN_MIN)) + + if [ $TC -gt $TC_MAX ] ; then + FC=255 + elif [ $FC -gt $(($FAN_MIN+$FAN_RNG)) ] ; then + FC=$FAN_MAX + elif [ $FC -lt $FAN_MIN ] ; then + FC=$FAN_MIN + fi + + FD=$(((($TD-$TMP_MIN)*$FAN_RNG)/($TD_MAX-$TMP_MIN)+$FAN_MIN)) + + if [ $TD -gt $TD_MAX ] ; then + FD=255 + elif [ $FD -gt $(($FAN_MIN+$FAN_RNG)) ] ; then + FD=$FAN_MAX + elif [ $FD -lt $FAN_MIN ] ; then + FD=$FAN_MIN + fi + + if [ $FC -gt $FD ] ; then + F=$FC + else + F=$FD + fi + + if [ "$1" = "-m" ] ; then + echo "chips $TC disks $TD -> fan $F" + exit 0 + fi + echo $F >$FAN + # echo 0 >$PWM1 + + sleep 10 + done + +done + +# If we are over our mid range tempterature thresholds log to syslog +if [ $TC -gt $TC_THRESH ] || [ $TD -gt $TD_THRESH ] ; then + logger -p daemon.notice temper "- chips $TC, disks $TD -> fan $F" +fi + +done + +# EOF |