summaryrefslogtreecommitdiff
path: root/packages/temper/files
diff options
context:
space:
mode:
authorTim 'timtim' Ellis <tim.ellis@foonas.org>2009-01-17 20:18:20 +0000
committerTim 'timtim' Ellis <tim.ellis@foonas.org>2009-01-17 20:18:20 +0000
commitcc4b074b50c7b1f223f4c30eed0eb899380bf3f4 (patch)
treecda9e1dedd824b6d1e00d1667c16a997f40fc3f8 /packages/temper/files
parenta0cef440772af65ad03d3273d36afd49c81e481d (diff)
temper: Add temper, a fan control script for the Thecus N1200 and N2100
Diffstat (limited to 'packages/temper/files')
-rwxr-xr-xpackages/temper/files/temper111
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