Supermicro IPMI Fan control

Mattias Jonsson

New Member
Oct 31, 2017
sorry for the late reply
You need to know that this script is still unfinished, and I don't plan to really work on it since the loudness of the fan problem is fixed (server in another room). However I will answer your questions. This script cannot be used for a simple user, but can be improved by a developper.
Python script to edit the X8DTL-iF Registry to control fan speed. · GitHub

I am soo impressed with my previous post explaining everything. I was kind of down having to write all of this in today post but hehe it's already done.
First,you have to unload the module used by sensors so that you don't conflict with it
#modprobe -r w83795
after, load i2c-dev, provided by libi2c-dev on debian. this one allow this python script to interract with th i2c interface of the thermal control chip.
#modprobe i2c-dev

then as written above, you will need the "Nuvoton_W83795G_W83795ADG_Datasheet_V1.43" to understand the register and their definitions. I have written more register at the top of the file with the array and names, but to understand the definition, you need the guide (and then again, it's not that clear).
One of the issue that was confusing me a lot is that it's clearly written that there is only support for 8 fan and 6 temp. However sometimes when looking at the register, it will show 8 temp. those are wrong, and you need to remember what's written at page 8.
I have converted most of patric hexedecimal to binary as I handle those better (not good yet to memoryze my hexa).
To do the development of this software, I used i2c-dump to dump one table of the ranked i2c table and also i2cset to set individual value. i2cset to set the page index at pos 0 0 (but you can use i2cdump for that - just keep in mind that you will erase the interternal data (bit 7 to 3).
here are some example :
how to dump (it will ask the i2c device number - these can change from pc to pc. the address 0x2f will probable not change).

#i2cdump 0 0x2f

my chip show at position 00x00 "02". this means that it's 0000 0010 - so accortind to the doc, bank 2 is selected. to change the bank, I can.

#i2cset 0 0x2f 0x00 00
I switched to bank 0. If I do a i2cdump, I will see totally different data. only the register 0x00 will always be present.
Note that, as said above, because you are playing with the i2c bank register, this is single application, other program cannot know that you have changed it and it will cause error. ipmitools sensors will report the fans in a different order and there might be more, and the linux driver might not work correctly. that's why I ask to unload it first. Also note that the linux driver seems to clean on load the reserved field of byte 0x00 by default - while this program preserve it.

hey... reading the code I am thinking that w83795_set_bank will not work because it does a binary or on the bank field, but and this will allow only to switch from bank 0 to x, but not x back to 0. up to you to verify that.

I don't know about you, but I had lot of fun to play with this chip in binary in an unknown language. Hope it will be the same for you.
have fun.
Thanks for a very helpful post. Sorry for the late reply. I took your script and managed to figure out pecurial things myself and got it decently working right now. Using this machine as a cheap rendering/workstation so quietness is quite cruicial.


New Member
Mar 26, 2017
I just found this script and it works great! Thanks for the hard work guys.

In order to get it working on an X8DAH+-F on Ubuntu 16.04 LTS, I had to load the i2c-i801 module instead of i2c-dev. I also created the device nodes in /dev - /sbin/MAKDEV i2c

I'm running in a 3u case with very noisy fans. Server is in a utility closet, but is on the other side of a wall from my theater room. Being able to drop the fans way down cut the noise enormously!


Active Member
Sep 29, 2014
Does anyone have a script to share that works in X9 motherboards? specifically X9SRH-7TF?

The CPU fan is still too loud for the missus
Last edited: