A Docker-based solution for intelligent fan control on Dell PowerEdge servers using iDRAC IPMI commands. This script provides fine-grained temperature-based fan speed control to keep your servers cool while minimizing noise.
- Fine-Grained Control: 14 temperature thresholds with fan speeds from 5% to 60%
- Safety First: Emergency failsafe switches to dynamic control at high temperatures
- Hysteresis Prevention: Prevents fan speed oscillation with intelligent temperature buffering
- Docker Ready: Containerized for easy deployment and management
- Multi-Architecture: Supports both AMD64 and ARM64 platforms
- Comprehensive Logging: Multiple log levels with timestamps for monitoring
- Health Monitoring: Built-in health checks and error handling
| Temperature Range | Fan Speed | Description |
|---|---|---|
| 0-12°C | 5% | Ultra-quiet for cold environments |
| 13-15°C | 10% | Very quiet |
| 16-18°C | 15% | Quiet operation |
| 19-20°C | 18% | Low noise |
| 21-22°C | 20% | Balanced |
| 23-24°C | 22% | Slightly increased |
| 25-26°C | 25% | Moderate |
| 27-28°C | 28% | Increased cooling |
| 29-30°C | 30% | Higher cooling |
| 31-32°C | 35% | Strong cooling |
| 33-34°C | 40% | High cooling |
| 35-36°C | 45% | Very high cooling |
| 37-38°C | 50% | Maximum normal operation |
| 39°C+ | 60% | High-performance cooling |
| 40°C+ | Dynamic | Emergency failsafe mode |
-
Download the docker-compose.yml:
curl -o docker-compose.yml https://raw.githubusercontent.com/NerdsCorp/iDrac-IpmI-control/main/docker-compose.yml
-
Edit your iDRAC credentials:
environment: IDRAC_HOST: "192.168.1.100" # Your iDRAC IP IDRAC_USER: "root" # Your iDRAC username IDRAC_PASS: "your-password" # Your iDRAC password
-
Start the container:
docker-compose up -d
docker run -d \
--name dell-fan-control \
--network host \
--restart unless-stopped \
-e IDRAC_HOST="192.168.1.100" \
-e IDRAC_USER="root" \
-e IDRAC_PASS="your-password" \
ghcr.io/nerdscorp/idrac-ipmi-control:latest| Variable | Required | Default | Description |
|---|---|---|---|
IDRAC_HOST |
✅ | - | iDRAC IP address |
IDRAC_USER |
✅ | - | iDRAC username |
IDRAC_PASS |
✅ | - | iDRAC password |
LOG_LEVEL |
❌ | info |
Logging level: debug, info, warn, error |
CHECK_INTERVAL |
❌ | 30 |
Seconds between temperature checks |
TEMP_SENSOR |
❌ | 04h |
Temperature sensor ID |
MAX_TEMP_THRESHOLD |
❌ | 40 |
Emergency temperature threshold (°C) |
HYSTERESIS |
❌ | 2 |
Temperature change required for speed reduction |
| Sensor ID | Description |
|---|---|
04h |
Inlet Temperature (default) |
01h |
Exhaust Temperature |
0Eh |
CPU 1 Temperature |
0Fh |
CPU 2 Temperature |
docker logs -f dell-fan-controldocker ps
docker stats dell-fan-controldocker exec dell-fan-control ipmitool -I lanplus \
-H $IDRAC_HOST -U $IDRAC_USER -P $IDRAC_PASS \
sensor reading "Ambient Temp"This script is designed for Dell PowerEdge Generation 12+ servers including:
- R320, R420, R520, R620, R720, R820
- R330, R430, R530, R630, R730, R830
- R340, R440, R540, R640, R740, R840
- R350, R450, R550, R650, R750, R850
- And newer generations
- T320, T420, T620
- T330, T430, T630
- T340, T440, T640
- T350, T450, T650
- Tower servers (T-series) may show higher inlet temperatures as the sensor is positioned after the hard drives
- Older generation servers may have different IPMI command structures
- Some servers may enforce hardware minimum fan speeds regardless of software commands
git clone https://github.com/NerdsCorp/iDrac-IpmI-control.git
cd iDrac-IpmI-control
docker build -t dell-fan-control .# Test with debug logging
docker run --rm -it \
--network host \
-e IDRAC_HOST="your-idrac-ip" \
-e IDRAC_USER="root" \
-e IDRAC_PASS="your-password" \
-e LOG_LEVEL="debug" \
dell-fan-control| Issue | Solution |
|---|---|
| Connection refused | Verify iDRAC IP, username, and password |
| Permission denied | Check network connectivity to iDRAC |
| Invalid temperature | Verify temperature sensor ID is correct |
| Fan speed not changing | Some Dell servers have hardware minimum speeds |
| Script stops unexpectedly | Check logs with docker logs dell-fan-control |
Enable detailed logging to diagnose issues:
docker run -d \
--name dell-fan-control-debug \
--network host \
-e IDRAC_HOST="your-idrac-ip" \
-e IDRAC_USER="root" \
-e IDRAC_PASS="your-password" \
-e LOG_LEVEL="debug" \
-e CHECK_INTERVAL="10" \
ghcr.io/nerdscorp/idrac-ipmi-control:latestTest IPMI connectivity manually:
# Check temperature sensors
ipmitool -I lanplus -H <idrac-ip> -U <username> -P <password> sdr type temperature
# Enable manual fan control
ipmitool -I lanplus -H <idrac-ip> -U <username> -P <password> raw 0x30 0x30 0x01 0x00
# Set fan speed to 20%
ipmitool -I lanplus -H <idrac-ip> -U <username> -P <password> raw 0x30 0x30 0x02 0xff 0x14
# Restore automatic control
ipmitool -I lanplus -H <idrac-ip> -U <username> -P <password> raw 0x30 0x30 0x01 0x01- Use at your own risk: Improper fan control can cause hardware damage
- Monitor temperatures: Always ensure adequate cooling for your hardware
- Emergency failsafe: Script automatically enables dynamic control at 40°C+ (configurable)
- Graceful shutdown: Container restores automatic fan control when stopped
- Hardware limits: Some servers enforce minimum fan speeds regardless of commands
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Original script inspiration from brezlord/iDRAC7_fan_control
- Dell community for IPMI command documentation
- Contributors and testers who helped improve this project
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Wiki: Project Wiki
⭐ Star this repository if it helped you keep your servers cool and quiet!