Setting fan thresholds on SuperMicro X10 IPMI using Windows+ipmiutil

Notice: Page may contain affiliate links for which we may earn a small commission through services like Amazon Affiliates or Skimlinks.

Spart

New Member
Feb 7, 2023
1
0
1
So to introduce the problem, I have a SuperMicro X10DRI-T4+ installed in a Fractal Define 7 XL case with Noctua fans.

The Noctua fans spin slow enough that they can repeatedly trigger the "lower critical" and "lower non-recoverable" alerts in the SuperMicro IPMI, especially on a cold boot.

This can get pretty annoying if you have email alerts setup or SNMP traps or whatever.

There are instructions out there to change this via Linux that may work, but I wanted to do it from Windows. Didn't find any useful instructions for Windows, so here goes!

First, install ipmiutil from ipmiutil.sourceforge.net/. I grabbed the latest "ipmiutil-3.1.8.msi (win64)" option.

That presented me with an error regarding libeay32.dll not being found. This is an OpenSSH dependency. I installed OpenSSH from slproweb.com/products/Win32OpenSSL.html and then found libeay32.dll in C:\Windows\SysWOW64, and copied it to C:\Program Files (x86)\ipmiutil\ (adjust as needed depending on where you needed to install it.)

Once that was done, I could run ipmiutil.exe from the command line from the folder it was installed to.

So the first thing to do is find the sensor number(s) for the fan(s) you want to modify.

I used this command:

Code:
ipmiutil sensor -qw -g fan -N xyz.xyz.xyz.xyz -U uname -P password
Where you replace xyz.xyz.xyz.xyz with the IP address of the IPMI, uname with the username for IPMI (default is ADMIN) and password with the password you set for the IPMI (you did change it from the default of ADMIN, didn't you?)

That will yield something like this:

Code:
ipmiutil sensor version 3.18
Connecting to node  xyz.xyz.xyz
-- BMC version 3.93, IPMI version 2.0
_ID_ SDR_Type_xx ET Own Typ S_Num   Sens_Description   Hex & Interp Reading
09b3 SDR Full 01 01 20 a 04 snum 41 FAN1             = 00 Absent 0.00 na        Thresh 25500.00:25400.00:25300.00:300.00:500.00:700.00 at Tue Feb 07 17:08:39 2023
09f6 SDR Full 01 01 20 a 04 snum 42 FAN2             = 10 OK 1600.00 RPM        Thresh 700.00:500.00:300.00:25300.00:25400.00:25500.00 at Tue Feb 07 17:08:39 2023
0a39 SDR Full 01 01 20 a 04 snum 43 FAN3             = 00 Absent 0.00 na        Thresh 25500.00:25400.00:25300.00:300.00:500.00:700.00 at Tue Feb 07 17:08:39 2023
0a7c SDR Full 01 01 20 a 04 snum 44 FAN4             = 00 Absent 0.00 na        Thresh 25500.00:25400.00:25300.00:300.00:500.00:700.00 at Tue Feb 07 17:08:39 2023
0abf SDR Full 01 01 20 a 04 snum 45 FAN5             = 0e OK 1400.00 RPM        Thresh 700.00:500.00:300.00:25300.00:25400.00:25500.00 at Tue Feb 07 17:08:39 2023
0b02 SDR Full 01 01 20 a 04 snum 46 FAN6             = 00 Absent 0.00 na        Thresh 25500.00:25400.00:25300.00:300.00:500.00:700.00 at Tue Feb 07 17:08:39 2023
0b45 SDR Full 01 01 20 a 04 snum 47 FANA             = 0d OK 1300.00 RPM        Thresh 700.00:500.00:300.00:25300.00:25400.00:25500.00 at Tue Feb 07 17:08:39 2023
0b88 SDR Full 01 01 20 a 04 snum 48 FANB             = 12 OK 1800.00 RPM        Thresh 700.00:500.00:300.00:25300.00:25400.00:25500.00 at Tue Feb 07 17:08:39 2023
0bcb SDR Full 01 01 20 a 04 snum 49 FANC             = 2a OK 4200.00 RPM        Thresh 700.00:500.00:300.00:25300.00:25400.00:25500.00 at Tue Feb 07 17:08:39 2023
ipmiutil sensor, completed successfully
Your connected fans will vary depending on what fan headers you're using. I'm using FAN2, FAN5, FANA, FANB, and FANC and you can see that those show "OK" with a current RPM readout, whereas the ones I'm not using show "00 Absent 0.00 na".

Now let's narrow that down and look at one fan:

Code:
09f6 SDR Full 01 01 20 a 04 snum 42 FAN2             = 10 OK 1600.00 RPM        Thresh 700.00:500.00:300.00:25300.00:25400.00:25500.00 at Tue Feb 07 17:08:39 2023
What we're worried about here is the number after "snum" (42 in this case) and the string of colon-separated values after "Thresh" - which in this case is 700.00:500.00:300.00:25300.00:25400.00:25500.00

These values respectively correspond to:
  • 700 - "low non-critical"
  • 500 - "low critical"
  • 300 - "low unrecoverable"
  • 25300.00 - "high non-critical"
  • 25400.00 - "high critical"
  • 25500.00 - "high unrecoverable"
So we need to come up with a string to set these however we want. I used 100, 150, and 200 to replace the low values, giving me this string:

Code:
200.00:150.00:100.00:25300.00:25400.00:25500.00
Now that we have that string figured out and the sensor number (that value after "snum") we can run a command like this:

Code:
ipmiutil sensor -n AB -u 200.00:150.00:100.00:25300.00:25400.00:25500.00 -N xyz.xyz.xyz.xyz -U uname -P password
Where we replace "AB" with the sensor number you found earlier, and xyz.xyz.xyz.xyz, uname, and password with the same values we used for the last command.

Now your fan thresholds should be set. You can confirm this by running that first command again, or looking at the thresholds in the IPMI web interface.