Supermicro Fan Control
This Project features two separate Components:
- Fan Speed Control (AKA "Variable Fan Speed")
- Device Overtemperature Protection (in case Cooling failed or airflow/static Pressure is not Sufficient to properly cool down Components)
For a Protection-Only (Overtemperature Protection) see my Separate Cooling Failure Protection Project.
IMPORTANT: it is HIGHLY RECCOMENDED to setup the Separate Cooling Failure Protection Service as well, in order to ensure some Level of Redundancy !!!
- Temperature Controller for Supermicro IPMI Devices ("Variable Fan Speed")
- Temperature Warning (BEEP) when System Cooling cannot keep up with Devices Temperatures
- Temperature Protection (SHUTDOWN) when System Cooling cannot keep up with Devices Temperatures
At the moment this was developed for use with GNU/Linux.
Nevertheless, since the Packages are very similar for both GNU/Linux and other UNIX-Like OS (TrueNAS, FreeBSD, etc), there shouldn't be a huge effort required in order to make the Tool Multi-Platform.
Feel free to Describe the required Changes in an Issue and/or submit a PR 👍.
In order to run a (mostly) Automated Setup (using setup.sh) the Following is Required:
bash
In order to be able to Run Correctly, the Tool needs the following Components/Systems:
pythonVersion 3 (Tested withpythonVersion 3.11 and 3.12)systemd(in the future other Init Systems might be supported)ipmitool(to be able to change Fan Speed)smartctl(to read Disks Temperatures)beep(for generating an Audible WARNING generation in case Temperature is getting dangerously High)
Clone the Repository:
git clone https://github.com/luckylinux/supermicro-fan-control.gitChange Folder to the Project that was just cloned:
cd supermicro-fan-controlRun the Setup:
./setup.shAfter that, check the logs:
journalctl -f -xeu supermicro-fan-controlYou can grab a onefile Package built using nuitka from the Releases Section.
You however need to Manually setup everything else, including:
systemdService- Configuration Files in
/etc/supermicro-fan-control
From inside the checked out Repository Folder:
cd supermicro-fan-controllerRun:
./build.shThe following Environment Configuration Variables can be set:
SUPERMICRO_FAN_CONTROL_CONFIG_PATH: where all the YML Configuration Files are located (defaults to/etc/supermicro-fan-control)
UPDATE: this is now performed automatically by setup.sh.
Load the Kernel Module:
sudo modprobe pcspkrThen perform a Test with:
beep -f 2500 -l 2000 -r 5 -D 1000Set the Kernel Module to be automatically loaded at Startup:
echo "pcspkr" > /etc/modules-load.d/beep.confFor Ubuntu at least. you also need to REMOVE the blacklisting in /etc/modprobe.d/blacklist.conf:
# ugly and loud noise, getting on everyone's nerves; this should be done by a
# nice pulseaudio bing (Ubuntu: #77010)
#blacklist pcspkrUPDATE: this is currently performed automatically if update-initramfs or dracut are Detected.
Debian/Ubuntu uses update-initramfs, while Fedora/RHEL/Archlinux use dracut.
You can also do it manually.
For example on Debian/Ubuntu:
update-initramfs -k all -u ; update-grubCurrently, the default Profile has been Tested on Supermicro X10SLM-F/X10SLL-F Motherboards.
You ABSOLUTELY NEED to check that the Registers are set correctly for your Motherboard.
Take a Look at the References Section for some Examples of different Registers Values (RAW Values to be used with ipmitool).
After you found what works for you, please submit a PR with your Particular Motherboard Profile.
This will be included in etc/supermicro-fan-control/ipmi.d/<motherboard>.yml.
No Timeline is currently defined.
IMPLEMENTED in commit 4b9f3c39250d2bc7d39f1af5a22c4336e4f87530.
ipmitool -c sensor | grep -Ei "^FAN|^MB-FAN|^BPN-FAN"Use echo to directly Control PWM Fans on non-IPMI System.
Target is at the Moment an ASUS x570 AMD Ryzen System.
Notes: https://bbs.archlinux.org/viewtopic.php?id=225349
In theory, it should be possible to run this as a Docker Container.
This will however require ROOT Privileges or Setuid Bit set and/or CAP_SYS_RAWIO, since smartctl requires those.
In the Future better Notifications than just a beep might be supported.
The current Plan would be to leverage the existing Frameworks/Bridges, including:
mailrise(smtp->apprise), requires an MTA to be Configured on the System running this Tool (e.g.postfix)- Notifiers Providers
Project based on the work of Benjamin Bryan.
See his Blog Post for the Original Code.
Initial Code:
Register Settings and Explanation:
- https://forums.servethehome.com/index.php?threads/supermicro-x9-x10-x11-fan-speed-control.10059/page-10
- https://forums.servethehome.com/index.php?resources/supermicro-x9-x10-x11-fan-speed-control.20/
- https://serverfault.com/questions/662526/fan-speeds-on-supermicro-system-via-ipmi
Other: