Temperature based fan speed control?


xamindar

Recommended Posts

I think I came up with a plan... since the motherboard has plenty of 4-pin connectors, I ordered replacement 4-pin fans. I wont be able to use the backplane plugs, but thats OK.  I also had to order new "hot-plug cables" since they were only 3-wire.  I was afraid I wasn't going to be able to find those and I was going to lose the hot-plug capabilities of the fans.

 

Hopefully the BIOS will control these 4-pin fans without needing a script.

Link to comment

The T-Balancer bigNG will go inside and there wouldn't be any mess with your beautiful case. You connect the fans to the T-Balancer and the T-Balancer to an internal USB port. Then use the linux driver to control the fans depending on the HDD sensors. I am already ordering mine.

 

Of course you should obligatory first try the scripts as they are for free anyway. However, they are not really easy to configure (and extend) and you will definitely need *some* Linux knowledge.

Link to comment

OK,

 

pwmconfig shows no sensors loaded.

 

sensor-detect shows:

 

Trying family `ITE'...                                      Yes

Found unknown chip with ID 0x8721

    (logical device 4 has address 0x290, could be sensors)

AMD K10 thermal sensors...                                  Success!

    (driver `to-be-written')

Just press ENTER to continue:

 

Driver `to-be-written' (should be inserted):

  Detects correctly:

  * Chip `AMD K10 thermal sensors' (confidence: 9)

 

Do you want to generate /etc/sysconfig/lm_sensors? (yes/NO): yes

Copy prog/init/lm_sensors.init to /etc/init.d/lm_sensors

for initialization at boot time.

You should now start the lm_sensors service to load the required

kernel modules.

 

I'm assuming I don't have the drivers for the sensor (running unRAID 4.5.6)

Is this correct?

If this means having to get a full version of slackware on here I'm going to give up as that is beyond my skills.

 

Thanks Josh

 

Link to comment

Well, I bought two 4-pin fans and got the script working.  So, now at least I know I can control them. Since my motherboard only has 4-pin connectors, it is my understanding that I really can't use anything but 4-pin fans.  I ordered the remaining 4 fans and they should be here on Tuesday.  Then Ill run a parity check and cross my fingers.

 

Thanks everyone for your help and suggestions.

Link to comment

Ok, so the script worked just fine when I left it at the default of monitoring 3 drives.  I have 5 drives in the server currently, so I modified the script and now its only reading (what appears to be) /dev/sdf.

 

My current config:

parity				/dev/sdb	Hitachi_HDS72202_JK1131YAHLJ8WV
/dev/md1	/mnt/disk1	/dev/sdc	Hitachi_HDS72202_JK1170YAHT9UXP
/dev/md2	/mnt/disk2	/dev/sdd	ST31500341AS_9VS0NE49
/dev/md3	/mnt/disk3	/dev/sde	ST31500341AS_9VS1FSMN
/dev/md4	/mnt/disk4	/dev/sdf	ST31500341AS_9VS0MDQZ

 

Here is what is in the unraid-fan-speed.sh file:

### VARIABLES FOR USER TO SET ###
# Amount of drives in the array. Make sure it matches the amount you filled out below.
NUM_OF_DRIVES=5

# unRAID drives that are in the array/backplane of the fan we need to control
HD[1]=/dev/sdb
HD[2]=/dev/sdc
HD[3]=/dev/sbd
HD[4]=/dev/sbe
HD[5]=/dev/sbf

 

Here is what I get:

root@NAS:/boot/custom/bin# unraid-fan-speed.sh
/dev/sbd: No such file or directory
./unraid-fan-speed.sh: line 58: [: : integer expression expected
/dev/sbe: No such file or directory
./unraid-fan-speed.sh: line 58: [: : integer expression expected
/dev/sbf: No such file or directory
./unraid-fan-speed.sh: line 58: [: : integer expression expected
Highest temp is: 37
Setting pwm to: 255

 

 

What am I doing wrong?

 

 

Link to comment

It's not getting the temperature for your two Hitachi drives. Maybe no one has used the script with Hitachi drives yet and they report a different name for the temperature value. Could you post the output of:

smartctl -d ata -A /dev/sdb

sdb or sdc, doesn't matter which you post.

We will likely have to modify the script to look for something different. Right now it takes the value of Temperature_Celsius which both my Western Digital and Seagate drives label such as.

 

I think I remember bubbaQ or someone making an actual program to report the temperature. It was a while ago. Anyone remember that? It might be a better way of doing things. Just have the script call that program and get the highest temp that way.

Link to comment

It looks like "Temperature_Celsius" is there.

 

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
 1 Raw_Read_Error_Rate     0x000b   100   100   016    Pre-fail  Always       -       0
 2 Throughput_Performance  0x0005   132   132   054    Pre-fail  Offline      -       106
 3 Spin_Up_Time            0x0007   119   119   024    Pre-fail  Always       -       605 (Average 606)
 4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always       -       598
 5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
 7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
 8 Seek_Time_Performance   0x0005   114   114   020    Pre-fail  Offline      -       38
 9 Power_On_Hours          0x0012   100   100   000    Old_age   Always       -       5890
10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       21
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       598
193 Load_Cycle_Count        0x0012   100   100   000    Old_age   Always       -       598
194 Temperature_Celsius     0x0002   214   214   000    Old_age   Always       -       28 (Lifetime Min/Max 19/51)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       0

Link to comment

Bah! I need to look more closely before I reply. Sorry, My previous post is not the issue.

Here is your issue:

# unRAID drives that are in the array/backplane of the fan we need to control

HD[1]=/dev/sdb

HD[2]=/dev/sdc

HD[3]=/dev/sbd

HD[4]=/dev/sbe

HD[5]=/dev/sbf

Take a real close look at that...

It wasn't able to read sbd, sbe, and sbf because they do not exist. It actually read your Hitachi drives just fine. Try changing all those b's to d's. ;)

Link to comment

Bah! I need to look more closely before I reply. Sorry, My previous post is not the issue.

Here is your issue:

# unRAID drives that are in the array/backplane of the fan we need to control

HD[1]=/dev/sdb

HD[2]=/dev/sdc

HD[3]=/dev/sbd

HD[4]=/dev/sbe

HD[5]=/dev/sbf

Take a real close look at that...

It wasn't able to read sbd, sbe, and sbf because they do not exist. It actually read your Hitachi drives just fine. Try changing all those b's to d's. ;)

 

Doh!  Works fine now.  Thanks!

Link to comment

Not necessarily, it may just mean there is no driver in the Linux kernel for your chip (or you have none, unlikely with recent hardware). If sensors-detect didn't say "yes" to anything as you went through it then there probably isn't any driver for your hardware. You could possibly try a full slackware or any more recent linux and see if there is a driver (module) for it in more recent kernels.

Link to comment

Thanks,

 

Trying family `ITE'...                                      Yes

Found unknown chip with ID 0x8721

    (logical device 4 has address 0x290, could be sensors)

AMD K10 thermal sensors...                                  Success!

    (driver `to-be-written')

Just press ENTER to continue:

 

That was the only response I got from sensors detect.

 

I assume the AMD thermal sensor is for the CPU and ITE one might be it. To me it looks like no driver in my kernel.

 

Thanks Josh

Link to comment

Yeah, it doesn't look like there is a driver for your sensor chip yet. The closest I can see in the 2.6.36 kernel is this driver. But it doesn't mention 8721 which I assume you have based on the ID.

  ???????????????????????? ITE IT87xx and compatibles ????????????????????????   
 ? CONFIG_SENSORS_IT87:                                                                                                                       ?   
 ?                                                                                                                                            ?   
 ? If you say yes here you get support for ITE IT8705F, IT8712F,                                                                              ?   
 ? IT8716F, IT8718F, IT8720F and IT8726F sensor chips, and the                                                                                ?   
 ? SiS960 clone.                                                                                                                              ?   
 ?                                                                                                                                            ?   
 ? This driver can also be built as a module.  If so, the module                                                                              ?   
 ? will be called it87.                                                                                                                       ?   
 ?                                                                                                                                            ?   

 

Is this your chip? If so, it definitely isn't supported yet. From this it seems like a strange, rare chip only ASUS uses.

Link to comment

Trying to determine whether my chip supports pwm. The chip in question is ITE IT8712F and my motherboard has 5 fan inputs. Here is some output:

 

sensors-detect

Trying family `National Semiconductor'...                   No
Trying family `SMSC'...                                     No
Trying family `VIA/Winbond/Fintek'...                       No
Trying family `ITE'...                                      Yes
Found `ITE IT8712F Super IO Sensors'                        Success!
   (address 0x290, driver `it87')
Probing for Super-I/O at 0x4e/0x4f
...
#----cut here----
# Chip drivers
# Warning: the required module it87 is not currently installed
# on your system. For status of 2.6 kernel ports check
# http://www.lm-sensors.org/wiki/Devices. If driver is built
# into the kernel, or unavailable, comment out the following line.
modprobe it87

 

dmesg | grep it87

it87: Found IT8712F chip at 0x290, revision 7
it87: in3 is VCC (+5V)
it87: in7 is VCCH (+5V Stand-By)
ACPI: I/O resource it87 [0x295-0x296] conflicts with ACPI region IP__ [0x295-0x296]

 

modprobe it87

FATAL: Module it87 not found.

 

So the module isn't built, perhaps directly in the kernel.

 

pwmconfig

/usr/sbin/pwmconfig: There are no pwm-capable sensor modules installed

 

edit: found this post, modules are not present in 4.5.6

http://lime-technology.com/forum/index.php?topic=7746.0

Link to comment

unRAID version 4.5.8 seems to have support for my mobo's chip it87.

 

issuing modprobe it87, now gives:

 

FATAL: Error inserting it87 (/lib/modules/2.6.32.9-unRAID/kernel/drivers/hwmon/it87.ko): Device or resource busy

 

I did some searching and apparently the fix is by passing a kernel parameter like so:

 

- insert GRUB_CMDLINE_LINUX="acpi_enforce_resources=lax"

 

As unRAID does not use grub, I guess I can pass this kernel parameter in the syslinux.cfg but is it safe to add?

default menu.c32
menu title Lime Technology LLC
prompt 0
timeout 50
label unRAID OS
 menu default
 kernel bzimage
 append initrd=bzroot acpi_enforce_resources=lax
label Memtest86+
 kernel memtest

 

 

Edit: seems like that worked

it8712-isa-0290
Adapter: ISA adapter
VCore 1:     +1.31 V  (min =  +0.00 V, max =  +4.08 V)   
VCore 2:     +1.20 V  (min =  +1.28 V, max =  +1.68 V)   ALARM
+3.3V:       +3.34 V  (min =  +2.78 V, max =  +3.78 V)   
+5V:         +4.84 V  (min =  +4.49 V, max =  +5.48 V)   
+12V:       +12.10 V  (min =  +9.98 V, max = +13.95 V)   
-12V:       -15.95 V  (min = -22.94 V, max = -17.05 V)   ALARM
-5V:         -2.28 V  (min =  -9.14 V, max =  -7.75 V)   ALARM
Stdby:       +4.87 V  (min =  +4.49 V, max =  +5.48 V)   
VBat:        +3.10 V
fan1:       1318 RPM  (min =  811 RPM, div = 
fan2:       1095 RPM  (min =  811 RPM, div = 
fan3:       3924 RPM  (min =  811 RPM, div = 
M/B Temp:    +39.0 C  (low  = +127.0 C, high = +73.0 C)  sensor = thermal diode
CPU Temp:    +47.0 C  (low  = +127.0 C, high = +73.0 C)  sensor = thermistor
Temp3:       +48.0 C  (low  = +127.0 C, high = +73.0 C)  sensor = thermistor
cpu0_vid:   +1.350 V

 

 

Link to comment

unRAID version 4.5.8 seems to have support for my mobo's chip it87.

 

issuing modprobe it87, now gives:

 

FATAL: Error inserting it87 (/lib/modules/2.6.32.9-unRAID/kernel/drivers/hwmon/it87.ko): Device or resource busy

 

I did some searching and apparently the fix is by passing a kernel parameter like so:

 

- insert GRUB_CMDLINE_LINUX="acpi_enforce_resources=lax"

 

As unRAID does not use grub, I guess I can pass this kernel parameter in the syslinux.cfg but is it safe to add?

default menu.c32
menu title Lime Technology LLC
prompt 0
timeout 50
label unRAID OS
 menu default
 kernel bzimage
 append initrd=bzroot acpi_enforce_resources=lax
label Memtest86+
 kernel memtest

 

 

Edit: seems like that worked

it8712-isa-0290
Adapter: ISA adapter
VCore 1:     +1.31 V  (min =  +0.00 V, max =  +4.08 V)   
VCore 2:     +1.20 V  (min =  +1.28 V, max =  +1.68 V)   ALARM
+3.3V:       +3.34 V  (min =  +2.78 V, max =  +3.78 V)   
+5V:         +4.84 V  (min =  +4.49 V, max =  +5.48 V)   
+12V:       +12.10 V  (min =  +9.98 V, max = +13.95 V)   
-12V:       -15.95 V  (min = -22.94 V, max = -17.05 V)   ALARM
-5V:         -2.28 V  (min =  -9.14 V, max =  -7.75 V)   ALARM
Stdby:       +4.87 V  (min =  +4.49 V, max =  +5.48 V)   
VBat:        +3.10 V
fan1:       1318 RPM  (min =  811 RPM, div = 
fan2:       1095 RPM  (min =  811 RPM, div = 
fan3:       3924 RPM  (min =  811 RPM, div = 
M/B Temp:    +39.0 C  (low  = +127.0 C, high = +73.0 C)  sensor = thermal diode
CPU Temp:    +47.0 C  (low  = +127.0 C, high = +73.0 C)  sensor = thermistor
Temp3:       +48.0 C  (low  = +127.0 C, high = +73.0 C)  sensor = thermistor
cpu0_vid:   +1.350 V

 

 

As you discovered, the "append" line in syslinux.cfg is the equivalent to what you posted for GRUB.
Link to comment
  • 2 months later...

So I'm trying to make this work, as this is a really important feature to me.  I'm linux-saavy, but I want to understand how people have done this:

 

I booted with RiP linux, ftp'd over the lm_sensors package that I had pre-built (it builds statically automatically.  I love those guys).  Did a sensors-detect:

 

    Found `Fintek F71889FG Super IO Sensors'                    Success!

        (address 0xa00, driver `f71882fg')

 

So I do:

    dmesg | grep f7188

 

And the driver isn't there.  So how do I most easily / efficiently build it?  Is it practical for us to rebuild the kernel or its driver?  Not having it is really not a great option, and I've heard of people turning unraid into a full distro with gcc and everything..

 

 

Link to comment

Yes, just build the f71882fg module and add it. I personally run unraid on a full arch linux distro and had to build my own kernel for it anyway. Just make sure you build from the same kernel source version that is used in unraid.

 

I don't know why limetech doesn't just include all these modules in unraid, they don't take up very much space and make no difference on how it runs unless they are loaded. Some of the choices in the unraid kernel build seem pretty daft. :/

Link to comment
  • 1 month later...

Ok I am not linux savy so I need some help (aka hand holding).  I have a C2SEE motherboard and 4-pin pwm fan connected.  I ran pwmconfig and it was able to control my case fan. I had it perform a detailed correlation and it worked just fine.  I can also control the speed by using the echo command...

 

echo 0 > /sys/class/hwmon/hwmon2/device/pwm2 --> fan does not stop but slows to its lowest speed (680rpm)

echo 255 > /sys/class/hwmon/hwmon2/device/pwm2 --> fan runs at max speed (1900 rpm)

 

So at this point I'm assuming that means that all the drivers I need are already installed in the unRAID 4.7 kernel, correct?

 

Thinking I was good to go I downloaded the unraid-fan-speed script and changed the user variables. I've attached my copy of the file.

 

I then modified my go file to load the script into chrontab automatically.  See attached.

 

Rebooted my server and I got an error that says that sensors3.conf does not exist.  I checked and it does not exist.  I tried running sensors-detect and I basically get no response.  I'm not really sure what that means.  Perhaps I'm doing somethig wrong there.

 

So I am not sure what to do at this point.  Do I need a sensors.conf file for this to work properly?  Any help would be appreciated.

unraid_fan_speed.txt

go.txt

Link to comment
  • 5 months later...

I'm running beta12 and have a Gigabyte K8N Ultra-SLI motherboard with 3x 3-pin fans attached. In the past I've been able to control the fan speeds on windows by using the program speedfan. Can the script provided here be used to control my fan speeds? I read about PWM but that's 4-pin fans. Or should I start a new topic?

 

I already did sensors-detect which in the end gave me below results. I don't know if I have to do the copy and service start what is displays. Do I? Newbie here :)

Driver `it87':
* ISA bus, address 0x290
    Chip `ITE IT8712F Super IO Sensors' (confidence: 9)

Driver `k8temp' (autoloaded):
* Chip `AMD K8 thermal sensors' (confidence: 9)

Do you want to generate /etc/sysconfig/lm_sensors? (yes/NO): yes
Copy prog/init/lm_sensors.init to /etc/init.d/lm_sensors
for initialization at boot time.
You should now start the lm_sensors service to load the required
kernel modules.

Unloading i2c-dev... OK

 

running sensors now returns:

k8temp-pci-00c3
Adapter: PCI adapter
Core0 Temp:  +37.0 C

it8712-isa-0290
Adapter: ISA adapter
in0:         +1.39 V  (min =  +0.00 V, max =  +4.08 V)
in1:         +2.61 V  (min =  +0.00 V, max =  +4.08 V)
in2:         +3.33 V  (min =  +0.00 V, max =  +4.08 V)
in3:         +2.46 V  (min =  +0.00 V, max =  +4.08 V)
in4:         +3.12 V  (min =  +0.00 V, max =  +4.08 V)
in5:         +2.35 V  (min =  +0.00 V, max =  +4.08 V)
in6:         +1.74 V  (min =  +0.00 V, max =  +4.08 V)
in7:         +2.21 V  (min =  +0.00 V, max =  +4.08 V)
Vbat:        +2.77 V
fan1:        912 RPM  (min =    0 RPM, div = 
fan2:       1222 RPM  (min =    0 RPM, div = 
fan3:       1562 RPM  (min =    0 RPM, div = 
temp1:       +25.0 C  (low  = +127.0 C, high = +127.0 C)  sensor = thermistor
temp2:       +31.0 C  (low  = +127.0 C, high = +127.0 C)  sensor = thermistor
temp3:       +69.0 C  (low  = +127.0 C, high = +127.0 C)  sensor = thermistor
cpu0_vid:   +1.400 V

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.