From: Guenter Roeck <guenter.roeck@ericsson.com>
To: lm-sensors@vger.kernel.org
Subject: Re: [lm-sensors] fan control based on hard-drive temperatures
Date: Mon, 05 Jul 2010 15:06:23 +0000 [thread overview]
Message-ID: <20100705150623.GB25711@ericsson.com> (raw)
In-Reply-To: <4C3099F1.5030703@powercraft.nl>
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@powercraft.nl>
> # 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@powercraft.nl>
> # 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\x10
> DEVPATH=hwmon0Þvices/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/pwm2A hwmon0/device/pwm15
> MAXTEMP=hwmon0/device/pwm2Q hwmon0/device/pwm1U
> MINSTART=hwmon0/device/pwm2X hwmon0/device/pwm1p
> MINSTOP=hwmon0/device/pwm2X hwmon0/device/pwm1f
>
> /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@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors
prev parent reply other threads:[~2010-07-05 15:06 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-04 14:25 [lm-sensors] fan control based on hard-drive temperatures Jelle de Jong
2010-07-04 15:51 ` Guenter Roeck
2010-07-04 20:47 ` Jelle de Jong
2010-07-04 21:26 ` Guenter Roeck
2010-07-05 6:45 ` Jelle de Jong
2010-07-05 15:06 ` Guenter Roeck [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100705150623.GB25711@ericsson.com \
--to=guenter.roeck@ericsson.com \
--cc=lm-sensors@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.