Re: fan control based on hard-drive temperatures

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jul 05, 2010 at 02:45:10AM -0400, Jelle de Jong wrote:
> Hi Guenter,
> 
> On 04-07-10 23:26, Guenter Roeck wrote:
> >> This looks like it might be quite useful for others as well. Wonder
> >> if it would make sense to integrate it info fancontrol and/or
> >> pwmconfig. Couple of minor comments inline.
> 
> Thanks for the feedback. I would love to see fancontrol be enhanced with
> the feature to use the hddtemp average or maximum.
> 
> I attached a new version making hddtemp use all harddisk instead of a
> specified list. (can still be specified) I also moved the calculation of
> the avarage temperuture outside the main loop when not running in debug
> mode. This should make the shell scrip slightly faster.
> 
> > That isn't really a documentation, but an installation shell script. 
> > Not that I care much, it is just odd to have such a script with an
> > ending of .txt. Is that common nowadays or just your personal touch?
> 
> The installation document was .txt the script inside was bash both had
> different licenses and styles, it is more personal touch. I share a lot
> of this stuff, so it is my standard format.
> 
> > "average=$(($summation / $count))" would probably be sufficient
> > here. For a "final" code version, it would be sufficient to
> > calculate the average after the loop. But then you would have to
> > check for $count == 0, so I am not sure if it would be worth it.
> 
> We need support for a floating number not a integer. The average
> temperature can become 39.9 degrees. And with your suggestion this would
> be rounded in 39, this is not the fan control I need, the shell command
> I choice makes the average of 39.9 possible.
> 
Ok, understood.

> > "echo $(($average * 1000))" seems to work as well and would be a bit
> > simpler. What is the "/1" for, anyway ? bc doesn't seem to need it.
> 
> The scale of a multiplication is min(a+b,max(scale,a,b)), where a and b
> are the scales of the factors. (and 46.5 has a scale of 1, so the above
> expression becomes min(0+1,max(0,1,0))=min(1,1)=1. So witouth the /1
> part bc returns 46500.0 instead of the needed 46500 for fancontrol.
> Adding the /1 over the results makes bc return 46500 and this can be
> used by fancontrol (notice the support for the extra precision because
> of the earlier use of bc)

Ok, thanks for the clarification.

> 
> > Also, you are loosing precision because average is calculated (and
> > rounded down) first. You could avoid that with "echo $(($average *
> > 1000 / $count))" if you check for the $count==0 case. But then that
> > doesn't really make much of a difference, so I am not sure if it
> > would be worth it either.
> 
> I don't see any precession loss. There would be precession loss with the
> previous suggestions, maybe I am seeing it wrong :D
> 
You are right ...

Thanks,
Guenter

> > Might be better to add a startup script in /etc/init.d and/or
> > /etc/rc*.d and make sure it runs before fancontrol is started.
> 
> True, but I am not going to maintain a starup script, when there is a
> useful excising starup script for fan control.
> 
> If somebody want they can pick it up and integrate it with fancontrol,
> as long I don’t lose temperature precession or the possibility to use
> the maximum or average.
> 
> With kind regards,
> 
> Jelle de Jong

> # Company:  PowerCraft Technology
> # Author:   Copyright Jelle de Jong <jelledejong@xxxxxxxxxxxxx>
> # Note:     Please send me an email if you enhanced the document
> # Date:     2010-07-04 / 2010-07-05
> # License:  CC-BY-SA
> 
> # This document is free documentation; you can redistribute it and/or
> # modify it under the terms of the Creative Commons Attribution Share
> # Alike as published by the Creative Commons Foundation; either version
> # 3.0 of the License, or (at your option) any later version.
> #
> # This document is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> # Creative Commons BY-SA License for more details.
> #
> # http://creativecommons.org/licenses/by-sa/
> 
> #-----------------------------------------------------------------------
> 
> apt-get install bc hddtemp file fancontrol
> 
> #-----------------------------------------------------------------------
> 
> echo '#!/bin/bash -e
> 
> # Company:  PowerCraft Technology
> # Author:   Copyright Jelle de Jong <jelledejong@xxxxxxxxxxxxx>
> # Note:     Please send me an email if you enhanced the script
> # Version:  0.0.4
> # Date:     2010-07-04 / 2010-07-05
> 
> # This program is free software; you can redistribute it and/or modify
> # it under the terms of the GNU General Public License as published by
> # the Free Software Foundation; either version 3 of the License, or
> # (at your option) any later version.
> #
> # This program is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> # GNU General Public License for more details.
> #
> # You should have received a copy of the GNU General Public License
> # along with this program; if not, write to the Free Software
> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> # MA 02110-1301, USA.
> 
> PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin/
> 
> LC_ALL=C
> 
> # set -x
> # exec 2>>/var/log/pct-fancontrol-hddtemp.log
> # date=$(date)
> 
> DISKS="/dev/sd[a-z]"
> 
> # located in /var/lib/ so it will be there for fancontrol during boot
> LOCATION=/var/lib/pct-fancontrol-hddtemp
> FILE_MAX="$LOCATION"/pct-fancontrol-hddtemp-maximum
> FILE_AVG="$LOCATION"/pct-fancontrol-hddtemp-average
> 
> DEGUG=0
> 
> [[ -e $LOCATION ]] || mkdir "$LOCATION"
> 
> while true
>     do
>     temperature=0
>     summation=0
>     maximum=0
>     average=0
>     count=0
>     for value in $(hddtemp -n $DISKS 2>/dev/null)
>     do
>         temperature="${value//[!0-9]}"
>         ((summation+=$temperature))
>         ((count+=1))
>         if [ $temperature -gt $maximum ]; then
>             maximum=$temperature
>         fi
>         if [ $DEGUG = 1 ]; then
>             average=$(echo "scale=1; $summation / $count" | bc)
>             echo $summation
>             echo $maximum
>             echo $average
>             echo $count
>             echo "-----"
>         fi
>     done
>     average=$(echo "scale=1; $summation / $count" | bc)
>     # fancontrol output format
>     echo "($maximum * 1000)/1" | bc > "$FILE_MAX"
>     echo "($average * 1000)/1" | bc > "$FILE_AVG"
>     sleep 45
> done
> 
> exit' | tee /usr/local/bin/pct-fancontrol-hddtemp
> 
> chown root:root /usr/local/bin/pct-fancontrol-hddtemp
> chmod 755 /usr/local/bin/pct-fancontrol-hddtemp
> ls -hal /usr/local/bin/pct-fancontrol-hddtemp
> cat /usr/local/bin/pct-fancontrol-hddtemp
> 
> #-----------------------------------------------------------------------
> 
> bash -x /usr/local/bin/pct-fancontrol-hddtemp
> /usr/local/bin/pct-fancontrol-hddtemp &
> cat /var/lib/pct-fancontrol-hddtemp/pct-fancontrol-hddtemp-maximum
> cat /var/lib/pct-fancontrol-hddtemp/pct-fancontrol-hddtemp-average
> cat /var/lib/pct-fancontrol-hddtemp/*
> 
> watch cat /var/lib/pct-fancontrol-hddtemp/*
> 
> #-----------------------------------------------------------------------
> 
> vim /etc/fancontrol
>     INTERVAL=10
>     DEVPATH=hwmon0=devices/platform/it87.552
>     DEVNAME=hwmon0=it8720
>     FCTEMPS=hwmon0/device/pwm2=/var/lib/pct-fancontrol-hddtemp/pct-fancontrol-hddtemp-maximum hwmon0/device/pwm1=hwmon0/device/temp2_input
>     FCFANS=hwmon0/device/pwm2=hwmon0/device/fan2_input hwmon0/device/pwm1=hwmon0/device/fan1_input
>     MINTEMP=hwmon0/device/pwm2=41 hwmon0/device/pwm1=35
>     MAXTEMP=hwmon0/device/pwm2=51 hwmon0/device/pwm1=55
>     MINSTART=hwmon0/device/pwm2=58 hwmon0/device/pwm1=70
>     MINSTOP=hwmon0/device/pwm2=58 hwmon0/device/pwm1=66
> 
> /etc/init.d/fancontrol restart
> 
> #-----------------------------------------------------------------------
> 
> /etc/init.d/fancontrol stop
> 
> whereis fancontrol
> file /usr/sbin/fancontrol
> 
> bash -x /usr/sbin/fancontrol
> 
> #-----------------------------------------------------------------------
> 
> vim /etc/rc.local
>     /usr/local/bin/pct-fancontrol-hddtemp
> 
> cat /etc/rc.local
> 
> #-----------------------------------------------------------------------
> 
> ps aux | grep fancontrol
> 
> #-----------------------------------------------------------------------


_______________________________________________
lm-sensors mailing list
lm-sensors@xxxxxxxxxxxxxx
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors



[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux