blob: 16d7d98bef93073e7a8ec561b6efc5e410a4bd4d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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
|