I finally got tired of dealing with IPMI fan control behavior, not having a way to easily control fan speeds based on drive temperatures, etc., so I made my own fan controller. Note: This is not an ad, I'm not selling these, I just made it for myself.
It has 4 independent fan outputs (can use splitters to drive multiple fans off of one port) and 4 independent temperature sensor inputs. Each fan can be run off of its own PID controller based on one of the temperature sensor inputs, or it can run off of its own PID controller based on a user-provided temperature (from sensors, smartctl, etc), or it can be slaved to one of the other fans (always run at 60% of fan 2's speed, etc), or it can run at a fixed duty cycle.
Settings are saved in flash and restored on boot, and they can be overridden (either volatile or non-volatile) by the user over an FTDI USB-UART. It also has a built-in watchdog, so for example the user could set it to PID control using user-provided temperatures from smartctl, and if the OS or the user software locks up and stops providing temperatures and resetting the WDT for whatever reason, the fan controller will reboot and reload the config from flash, which can be set to something like a fixed 80% duty cycle.
I've had it installed in my server for a couple months now and it's been working great. It's maintaining the temperature of my U.3 SSD on a PCIe adapter (two Noctua fans mounted to a PCI bracket below it blowing directly onto the SSD, plus a case fan at the front of the chassis bringing fresh air in and slaved to 50% of the Noctua duty cycle). It's all self-contained using a thermistor mounted to the SSD, so it doesn't need any comm input or commands, I only have the USB attached to gather telemetry for integration into Prometheus/Grafana and to change settings if desired.
Let me know what you think!
https://imgur.com/a/rJVvOYs
submitted by
/u/suicidaleggroll [link] [comments]